คำถามติดแท็ก pl.programming-languages

ภาษาการเขียนโปรแกรมโดยเฉพาะการเพ่งความสนใจไปที่ความหมายของพวกเขา

10
เพื่อให้ภาษาสามารถตั้งโปรแกรมได้มันจำเป็นหรือไม่ที่จะต้องอิงตามบริบทของไวยากรณ์อิสระ
ในทางปฏิบัติแล้วสำหรับภาษาที่สามารถรวบรวม / แปลงเป็นคำสั่งในระดับระบบได้ในที่สุดจำเป็นหรือไม่ที่จะต้องเป็นไวยากรณ์ที่ไม่มีบริบท? ตัวอย่าง: ไวยากรณ์ภาษาการเขียนโปรแกรม / สคริปต์ทั้งหมดไม่มีบริบทหรือไม่ Java ใช้ CFG แต่จริงๆแล้วมันเป็นกรณีที่ภาษาการเขียนโปรแกรมทั้งหมดใช้ CFG หรือไม่? ดูเหมือนจะไม่ได้รับคำสั่ง แต่มีช่องว่างในความเข้าใจของฉัน บางบริบทสำหรับคำถามที่ว่าฉันถูกมองที่สเปคภาษา Java ซึ่งนอกจากนี้ยังมีไวยากรณ์กฎ นี่ทำให้ฉันคิดถึงคำถามนี้

2
ตรรกะเชิงเส้นแบบพื้นบ้านคืออะไร?
อาจเป็นแอพพลิเคชั่นที่ใช้กันทั่วไปของประเภทเชิงเส้นใน PL คือการใช้ภาษาเหล่านั้นเพื่อให้นามแฝงควบคุม (กล่าวคือค่าเชิงเส้นมีตัวชี้เดียวให้มากหรือน้อย) แต่มีความไม่ตรงกันเล็กน้อยระหว่างการใช้งานนี้กับโมเดลเชิงเส้นตรงทั่วไปของลอจิกเชิงเส้น IIRC, เบนตันแสดงให้เห็นว่าหากหมวดหมู่ปิดคาร์ทีเซียนมีโมดัลสับเปลี่ยนที่แข็งแกร่งแล้วหมวดหมู่ของพีชคณิตของมันจะถูกปิดแบบสมมาตร (เช่นรูปแบบของตรรกะเชิงเส้น) แต่ทฤษฎีนี้ไม่ได้ใช้กับการใช้นามแฝงในการควบคุมเนื่องจากรัฐ monad ไม่ใช่การสับเปลี่ยน ในช่วงไม่กี่ปีที่ผ่านมาซิมป์สันและเพื่อนร่วมงานของเขาได้ให้แคลคูลัสสำหรับพระที่แข็งแกร่งทั่วไปซึ่งไม่ใช่แคลคูลัสเชิงตรรกะสำหรับเชิงเส้น ดังนั้นคำถามของฉันคืออะไรความหมายเชิง Denotational ของภาษาเชิงเส้นกับรัฐ? มี non-degenerate (เช่นเมตริกซ์ไม่ใช่ผลิตภัณฑ์คาร์ทีเซียน) ประเภท monoidal ปิดสมมาตรซึ่งการจัดสรรการอ่านและการปรับปรุงเชิงเส้นสามารถเป็นแบบจำลอง?

1
ฟิวเจอร์สอธิบายไว้อย่างไรในแง่ของทฤษฎีหมวดหมู่?
มีคำอธิบายที่เป็นประโยชน์ของฟิวเจอร์สหรือสัญญาในแง่ของทฤษฎีหมวดหมู่หรือไม่? โดยเฉพาะอย่างยิ่งสิ่งที่คู่แท้ของอนาคตจะเป็นอย่างไร

1
คลาสของฟังก์ชันที่คำนวณได้โดย Coq
เนื่องจากไม่อนุญาตให้มีการคำนวณแบบไม่ จำกัด Coq จึงไม่จำเป็นต้องใช้ทัวริงแบบสมบูรณ์ คลาสของฟังก์ชันที่ Coq สามารถคำนวณคืออะไร (มีลักษณะที่น่าสนใจหรือไม่)

2
ค่าใช้จ่ายของ GC จะถูกเพิกเฉยเมื่อวิเคราะห์เวลาทำงานของโครงสร้างข้อมูลกรณีที่เลวร้ายที่สุดที่ระบุในภาษาการเขียนโปรแกรมที่เก็บขยะหรือไม่?
ฉันเพิ่งรู้ว่าฉันได้สมมติว่าคำตอบสำหรับคำถามของฉันคือ "ใช่" แต่ฉันไม่มีเหตุผลที่ดี ฉันคิดว่าอาจมีตัวเก็บขยะที่แนะนำการชะลอตัวของกรณีเลวร้ายที่สุดเท่านั้น มีการอ้างอิงที่ชัดเจนที่ฉันสามารถอ้างอิงได้หรือไม่? ในกรณีของฉันฉันกำลังทำงานกับโครงสร้างข้อมูลที่ใช้งานได้จริงและฉันใช้ Standard ML หากรายละเอียดเหล่านี้มีความสำคัญO(1)O(1)O(1) และบางทีคำถามนี้อาจมีความเกี่ยวข้องมากขึ้นเมื่อนำไปใช้กับโครงสร้างข้อมูลที่ระบุใน, พูด, Java? อาจมีการอภิปรายที่เกี่ยวข้องในตำราเรียนอัลกอริทึม / โครงสร้างข้อมูลที่ใช้ Java? (ฉันรู้ว่า Sedgewick มีรุ่น Java แต่ฉันสามารถเข้าถึงรุ่น C เท่านั้น)

2
ADT, GADTs และอุปนัยประเภทต่างกันอย่างไร
ใคร ๆ ก็สามารถอธิบายความแตกต่างระหว่าง: ประเภทข้อมูลพีชคณิต (ซึ่งฉันคุ้นเคยกับ) ประเภทข้อมูลพีชคณิตทั่วไป (สิ่งที่ทำให้พวกเขา generalized?) ประเภทอุปนัย (เช่น Coq) (โดยเฉพาะอย่างยิ่งอุปนัยประเภท) ขอบคุณ

2
ความหมายของ TeX (เป็นภาษาการเขียนโปรแกรม) เคยเป็นทางการหรือไม่?
สำหรับฉันแล้วดูเหมือนว่าภาษามาโครที่ใช้โดยอาจถูกมองว่าเป็นระบบการเขียนคำซ้ำบางชนิดหรือภาษาโปรแกรมบางประเภทที่มีการกำหนดขอบเขตการโทรตามชื่อTEXTEX\TeX แม้การใช้งานที่ทันสมัยของ engine (เช่น X e TTEXTEX\TeX ) ตีความรหัสในวิธีที่ค่อนข้างตรงและฉันไม่ได้ตระหนักถึงความพยายามใด ๆ ในการเพิ่มประสิทธิภาพการดำเนินการ (เช่นล่ามการเพิ่มประสิทธิภาพที่ทันสมัยสามารถทำได้) อย่างไรก็ตามการสร้างการเพิ่มประสิทธิภาพที่ถูกต้องจะผ่านสำหรับภาษาเช่น TX e TEXXeTEX\mathit{Xe}\TeXจะเป็นเรื่องยากมากเพราะ "การกระทำในระยะไกล" ที่การกำหนดแมโครซ้ำสามารถมีได้และความสามารถในการกำหนดแมโครใหม่ด้วยการเรียกพวกเขาด้วยชื่อTEXTEX\TeX ดังนั้นการใช้ล่ามการปรับให้เหมาะสมตามสมมุติฐานสำหรับดูเหมือนจะเป็นปัญหาที่ยากมากในทางปฏิบัติ แต่ก็เป็นประโยชน์อย่างมากเนื่องจาก TTEXTEX\TeXถูกใช้ทั่วทั้งคณิตศาสตร์และวิทยาศาสตร์และเวลาในการรวบรวมที่ช้านั้นเป็นข้อเสียเปรียบของระบบ โปรดทราบว่าส่วนใหญ่ใช้เวลาในการแปลรหัสไม่ใช่ประมวลผลการเรียงพิมพ์จริงโดยเฉพาะอย่างยิ่งเมื่อมีการใช้แพคเกจที่ใช้งานหนักเช่น ()TEXTEX\TeXtikz บางทีความหมายอย่างเป็นทางการสำหรับภาษาอาจเป็นจุดเริ่มต้นในการแก้ไขปัญหา ดังนั้นความหมายของภาษาการเขียนโปรแกรม Xเคยเป็นทางการหรือไม่?TEXTEX\TeX

5
คอมไพเลอร์พิสูจน์ความถูกต้อง
ฉันกำลังมองหาวัสดุการสอนที่ครอบคลุมการพิสูจน์ความถูกต้องของคอมไพเลอร์โดยเฉพาะอย่างยิ่งการใช้วิธีการ denotational ในระดับเริ่มต้นของนักเรียนที่จบการศึกษา อีกวิธีหนึ่งคุณรู้ตัวอย่างคอมไพเลอร์ง่ายๆที่ฉันสามารถใช้เพื่ออธิบายปัญหาหรือไม่ (ตัวอย่างแรกที่เกิดขึ้นกับฉันคือนักแปลจากการแสดงออกไปยัง postfix แต่ไม่สามารถแสดงสิ่งที่น่าสนใจอื่น ๆ นอกเหนือจากวิธีการเหนี่ยวนำในไวยากรณ์)

7
เราจะรู้ได้อย่างไรว่าวิธีการทางการทำงาน
เป้าหมายสำคัญของวิธีการที่เป็นทางการคือการพิสูจน์ความถูกต้องของระบบไม่ว่าจะด้วยวิธีอัตโนมัติหรือโดยมนุษย์ อย่างไรก็ตามดูเหมือนว่าแม้ว่าคุณจะสามารถให้การพิสูจน์ความถูกต้องคุณอาจไม่สามารถรับประกันได้ว่าระบบจะไม่ล้มเหลว ตัวอย่างเช่น: ข้อมูลจำเพาะอาจไม่เป็นแบบอย่างของระบบอย่างถูกต้องหรือระบบการผลิตอาจซับซ้อนเกินกว่าที่จะเป็นแบบจำลองหรือระบบอาจมีข้อบกพร่องโดยเนื้อแท้เนื่องจากข้อกำหนดที่ขัดแย้งกัน เทคนิคใดที่เป็นที่รู้จักในการทดสอบว่าข้อกำหนดนั้นเหมาะสมหรือไม่? กระบวนการพิสูจน์อาจมีข้อบกพร่องเช่นกัน! ใครจะรู้ว่ากฎการอนุมานเหล่านั้นถูกต้องและถูกต้องตามกฎหมาย นอกจากนี้การพิสูจน์อาจมีขนาดใหญ่มากและเราจะรู้ได้อย่างไรว่าพวกเขาไม่มีข้อผิดพลาด? นี่คือหัวใจของการวิจารณ์ในเดอมิลโลลิปตันและ "กระบวนการทางสังคมและบทพิสูจน์ทฤษฎีบทและโปรแกรมของ Perlis" นักวิจัยวิธีการอย่างเป็นทางการที่ทันสมัยตอบสนองต่อการวิจารณ์นี้ได้อย่างไร ณ รันไทม์มีเหตุการณ์และปัจจัยหลายอย่างที่อาจส่งผลกระทบต่อระบบอย่างจริงจัง ยกตัวอย่างเช่นรังสีคอสมิกสามารถเปลี่ยนแปลงแรมในรูปแบบที่ไม่สามารถคาดเดาได้และโดยทั่วไปเราไม่รับประกันว่าฮาร์ดแวร์จะไม่ประสบกับข้อผิดพลาดของไบเซนไทน์ซึ่ง Lamport ได้พิสูจน์แล้วว่าเป็นเรื่องยากที่จะทนทาน ดังนั้นความถูกต้องของระบบคงไม่รับประกันว่าระบบจะไม่ล้มเหลว! มีเทคนิคใดที่ทราบกันดีว่ามีความผิดพลาดของฮาร์ดแวร์จริงหรือไม่? ในปัจจุบันการทดสอบเป็นเครื่องมือที่สำคัญที่สุดที่เรามีในการสร้างซอฟต์แวร์นั้น ดูเหมือนว่ามันควรจะเป็นเครื่องมือเสริมที่มีวิธีการอย่างเป็นทางการ อย่างไรก็ตามฉันส่วนใหญ่เห็นการวิจัยซึ่งเน้นทั้งวิธีการหรือการทดสอบอย่างเป็นทางการ สิ่งที่เป็นที่รู้จักกันเกี่ยวกับการรวมทั้งสองเข้าด้วยกัน?

1
แลมบ์ดาสุ่มของสกอตต์
เมื่อเร็ว ๆ นี้ Dana Scott ได้เสนอแคลคูลัสแลมบ์ดาซึ่งเป็นความพยายามที่จะแนะนำองค์ประกอบที่น่าจะเป็นลงในแคลคูลัสแลมบ์ดา (ไม่ได้พิมพ์) ขึ้นอยู่กับความหมายที่เรียกว่าแบบจำลองกราฟ คุณสามารถหาสไลด์ของเขาในบรรทัดได้ที่นี่และบทความของเขาในJournal of Applied Logic , vol. 12 (2014) แต่ด้วยการค้นหาอย่างรวดเร็วบนเว็บที่ผมพบว่างานวิจัยก่อนหน้าคล้ายกันเช่นว่าสำหรับระบบการพิมพ์ Hindley-มิลเนอร์ วิธีที่พวกเขาแนะนำความหมายที่น่าจะเป็นคล้ายกับของสก็อตต์ (ในอดีตพวกเขาใช้พระในขณะที่สก็อตต์หลังใช้สไตล์การส่งต่อเนื่อง) งานของสก็อตต์แตกต่างจากงานก่อนหน้านี้ในแง่ของทฤษฎีหรือแอปพลิเคชันที่เป็นไปได้ในแง่ใด

2
ขีด จำกัด ของการเขียนโปรแกรมฟังก์ชั่นรวมคืออะไร?
อะไรคือข้อ จำกัด ของการตั้งโปรแกรมการทำงานทั้งหมด? ไม่สมบูรณ์ทัวริง แต่ยังคงสนับสนุนชุดย่อยที่มีขนาดใหญ่ของโปรแกรมที่เป็นไปได้ มีโครงสร้างที่สำคัญที่คุณสามารถเขียนในภาษาทัวริงที่สมบูรณ์ แต่ไม่ใช่ในภาษาที่ใช้งานได้ทั้งหมดหรือไม่? และถูกต้องหรือไม่ที่จะบอกว่าโปรแกรมที่เขียนในภาษาที่ใช้งานได้ทั้งหมดสามารถวิเคราะห์แบบคงที่ได้อย่างสมบูรณ์ในขณะที่การวิเคราะห์แบบคงที่ในภาษาทัวริงที่สมบูรณ์นั้นถูก จำกัด ด้วยสิ่งต่าง ๆ เช่นปัญหาการหยุดชะงัก ด้วยที่ฉันไม่ได้หมายความว่าในภาษาการทำงานทั้งหมดทุกอย่างสามารถกำหนด staticaly เพราะบางสิ่งเป็นที่รู้จักกันเท่านั้นที่รันไทม์ แต่ฉันหมายความว่าในทางทฤษฎีโปรแกรมที่เขียนในภาษาการเขียนโปรแกรมฟังก์ชั่นการทำงานในอุดมคติทั้งหมดสามารถวิเคราะห์เพื่อให้ทุกอย่างที่ ในทางทฤษฎีจะถูกกำหนดแบบคงที่สามารถกำหนดแบบคงที่ หรือยังมีปัญหา undecidable ที่สืบทอดในภาษาหน้าที่ทั้งหมดที่ทำให้การวิเคราะห์แบบสแตติกไม่สมบูรณ์? ปัญหาบางอย่างจะไม่สามารถตัดสินใจได้เสมอไม่ว่าจะเขียนด้วยภาษาใดก็ตาม แต่ฉันสนใจในปัญหาดังกล่าวที่สืบทอดมาจากภาษา

3
วางเฟรมกฎไว้เป็นการเปลี่ยนเซิร์ฟเวอร์หรือไม่
กฎกรอบเช่นหนึ่งที่ระบุด้านล่างจับความคิดที่ว่าได้รับโปรแกรมcที่มีเงื่อนไขpที่ถือก่อนที่จะเรียกและ postcondition qที่ถือหลังจากนั้นบางสภาพเคล็ดrควรถือทั้งก่อนและหลังcวิ่ง (ความ*เกี่ยวพันจำเป็นต้องมีการขัดแย้งกัน) บ่อยครั้งที่ก่อนและหลังมีสถานะของกองและcเป็นโปรแกรมที่มีประสิทธิภาพที่ปรับเปลี่ยนกองในทางใดทางหนึ่ง {p} c {q} ----------------- (where no free variable in r is modified by c) {p * r} c {q * r} การสนทนาเกี่ยวกับกฎของเฟรมที่ฉันได้เห็นดูเหมือนจะเน้นไปที่วิธีการแยกส่วนของกองrไว้ให้คงอยู่ สิ่งนี้ทำให้ "การใช้เหตุผลในท้องถิ่น": เมื่อให้เหตุผลเกี่ยวกับผลกระทบที่cมีเราสามารถเพิกเฉยต่อrส่วนของฮีปและเกี่ยวข้องกับตัวเราเองกับส่วนที่เปลี่ยนแปลงจริงเท่านั้น แต่วิธีการที่จะมองมันอีกอย่างก็คือว่าการเปลี่ยนแปลงจากpการqถูกเก็บรักษาไว้แม้ว่าrตอนนี้นั่งอยู่ที่นั่น ในคำอื่น ๆ มันเป็นสิ่งสำคัญที่เราจบลงด้วย postcondition {q * r}มากกว่าสำหรับบางคนอื่น ๆ{q' * r}q' ดังนั้นคำถามของฉันคือว่ามีการรักษากฎกรอบใด ๆ ที่กล่าวถึงหรือทำให้การใช้การเก็บรักษาของการเปลี่ยนแปลง from- p-to- qสิ่ง

6
รูปแบบการคำนวณแบบใดที่สามารถแสดงผ่านไวยากรณ์ได้
นี่คือการปรับรูปแบบของโปรแกรมไวยากรณ์หรือไม่ หน้าที่แล้วถามโดยVagและคำแนะนำมากมายจากผู้แสดงความคิดเห็น ไวยากรณ์สามารถมองว่าเป็นการระบุรูปแบบการคำนวณได้อย่างไร ตัวอย่างเช่นถ้าเราใช้ไวยากรณ์ที่ไม่มีบริบทอย่างเช่น G ::= '1' -> '0' '+' '1' '1' -> '1' '+' '0' '2' -> '2' '+' '0' '2' -> '1' '+' '1' '2' -> '0' '+' '2' '3' -> '3' '+' '0' '3' -> '2' '+' '1' '3' -> '1' '+' '2' '3' -> '1' '+' …

2
โดยนัยกับการพิมพ์ย่อยที่ชัดเจน
หน้านี้อ้างว่า หลายภาษาไม่ได้ใช้การพิมพ์ย่อยโดยนัย (ความเท่าเทียมกันเชิงโครงสร้าง), การเลือกพิมพ์ย่อยที่ชัดเจน / ประกาศ (การประกาศความเท่าเทียมกัน) ผมเคยใช้ส่วนใหญ่เป็นภาษาโปรแกรมที่ใช้อย่างชัดเจนsubtyping อะไรคือข้อดีของการพิมพ์ย่อยโดยนัยตามที่อธิบายไว้ในหมายเหตุข้างต้น

1
รายการปัญหาความซับซ้อน (ยังไม่ได้แก้ไข) ที่เกิดจาก PL
ปัญหาความซับซ้อนของการคำนวณแบบเปิดที่เกิดขึ้นจากภาษาการเขียนโปรแกรมโดยเฉพาะการวิเคราะห์และการคอมไพล์คืออะไร ฉันกำลังมองหาปัญหาในบรรทัดของ "ความซับซ้อนของเวลาของการอนุมานแบบ Hindley-Milner" หรือ "ความซับซ้อนของเวลาของ 0CFA" (แม้ว่าทั้งคู่จะได้รับการแก้ไขปัญหา)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.