อัลกอริทึมในการแก้ปัญหา“ การหยุดชะงัก” ของทัวริง


23

"Alan Turing พิสูจน์แล้วในปี 1936 ว่าอัลกอริทึมทั่วไปเพื่อแก้ปัญหาการหยุดชะงักสำหรับคู่อินพุตโปรแกรมที่เป็นไปได้ทั้งหมดไม่มีอยู่"

ฉันสามารถหาอัลกอริทึมทั่วไปเพื่อแก้ปัญหาการหยุดพักสำหรับบางคู่ที่เป็นไปได้ของโปรแกรมหรือไม่

ฉันสามารถหาภาษาโปรแกรม (หรือภาษา) ที่ฉันใช้กับโปรแกรมทุกประเภทในภาษานี้ได้หรือไม่มันสามารถตัดสินใจได้ว่าโปรแกรมจะหยุดทำงานหรือรันตลอดไปหรือไม่?


คำถามที่คล้ายกัน: stackoverflow.com/questions/8412741/…

3
CACMมีบทความที่น่าสนใจมากในเดือนพฤษภาคม: การยกเลิกโปรแกรม
Christoph Walesch

3
"อัลกอริทึมทั่วไป [... ] สำหรับคู่อินพุตโปรแกรมที่เป็นไปได้" - ใกล้เคียงกับการขัดแย้งกันเอง ฉันเดาว่าคุณต้องการ จำกัด ตัวเองให้เป็นคลาสย่อยที่ไม่สิ้นสุดของโปรแกรมทั้งหมดหรือไม่
กราฟิลส์

คำตอบ:


25

ฉันสามารถหาอัลกอริทึมทั่วไปเพื่อแก้ปัญหาการหยุดพักสำหรับบางคู่ที่เป็นไปได้ของโปรแกรมหรือไม่

แน่นอน. ตัวอย่างเช่นคุณสามารถเขียนอัลกอริทึมที่ส่งกลับ "ใช่มันจะยุติ" สำหรับโปรแกรมใด ๆ ที่ไม่มีการวนซ้ำหรือการเรียกซ้ำและ "ไม่มันไม่สิ้นสุด" สำหรับโปรแกรมใด ๆ ที่มีการwhile(true)วนซ้ำที่จะเข้าถึงได้แน่นอนและไม่มี คำสั่ง break และ "Dunno" สำหรับทุกอย่างอื่น

ฉันสามารถหาภาษาโปรแกรม (หรือภาษา) ที่ฉันใช้กับโปรแกรมทุกประเภทในภาษานี้ได้หรือไม่มันสามารถตัดสินใจได้ว่าโปรแกรมจะหยุดทำงานหรือรันตลอดไปหรือไม่?

ไม่ใช่ถ้าภาษานั้นทัวริงสมบูรณ์ไม่มี

อย่างไรก็ตามมีภาษาที่ไม่ใช่ทัวริงอย่างเช่นCoq , AgdaหรือMicrosoft Dafnyซึ่งปัญหา Halting นั้นสามารถตัดสินใจได้ (และในความเป็นจริงจะถูกตัดสินโดยระบบประเภทของพวกเขาทำให้ภาษาทั้งหมด (เช่นโปรแกรมที่อาจไม่ยุติจะไม่ รวบรวม)).


1
คลาสของฟังก์ชั่นพื้นฐานแบบเรียกซ้ำเป็น "ภาษาการเขียนโปรแกรม" ที่เป็นที่รู้จักกันดีซึ่งปัญหาการหยุดชะงักจะถูกนำกลับมาใช้ใหม่ได้เล็กน้อย
กราฟิลส์

มีภาษา " การเขียนโปรแกรมการทำงานทั้งหมด " หลายภาษาซึ่งโปรแกรมทั้งหมดจะถูกยกเลิกอย่างแน่นอน
Anderson Green

3

ฉันคิดว่าคำตอบทั้งหมดที่นี่อย่างสมบูรณ์และพลาดจุดที่สุด คำตอบสำหรับคำถามคือสมมติว่าโปรแกรมตั้งใจหยุดแล้วใช่คุณสามารถแสดงให้ดีขึ้นได้ หากคุณไม่สามารถแสดงให้เห็นว่าหยุดได้อย่างง่ายดายโปรแกรมควรได้รับการพิจารณาว่าเขียนและปฏิเสธโดยฝ่ายควบคุมคุณภาพเป็นอย่างมาก

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

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

บรรทัดล่างคือไม่มีใครดูเหมือนจะเข้าใจว่าการพิสูจน์ว่าโปรแกรมหยุดชะงักเป็นไปได้จริง ๆ เพราะโปรแกรมเมอร์ (ดี) ที่ตั้งใจจะเขียนโปรแกรมหยุดทำงานดังกล่าวมักจะทำอย่างจงใจและมีภาพจิตว่าทำไมพวกเขายุติและกระทำอย่างถูกต้อง เขียนดังนั้นจึงเป็นที่ชัดเจนว่าพวกเขาหยุดและถูกต้องและหากอัลกอริทึมที่สมเหตุสมผลไม่สามารถพิสูจน์สิ่งนี้ได้อาจมีคำแนะนำบางอย่างดังนั้นโปรแกรมควรถูกปฏิเสธ

ประเด็น: โปรแกรมเมอร์ไม่ได้เขียนโปรแกรมโดยพลการดังนั้นวิทยานิพนธ์ของทฤษฎีการหยุดชะงักไม่เป็นที่พอใจและข้อสรุปไม่ได้นำไปใช้


4
ฉันคิดว่าคุณเป็นคนที่พลาดประเด็นไปอย่างสิ้นเชิงและอย่างเต็มที่ ย่อหน้าแรกของคำตอบของคุณใช้ไม่ได้กับคำถามเพราะมันถามเกี่ยวกับอัลกอริทึมไม่ใช่สิ่งที่มนุษย์สามารถพิสูจน์ได้หรือไม่สามารถพิสูจน์ได้ ส่วนที่เหลือของคำตอบจะตอบคำถามในย่อหน้าแรกเช่นว่าอัลกอริทึมสามารถพิสูจน์การเลิกจ้างสำหรับบางโปรแกรมได้หรือไม่ คำตอบก่อนหน้าทุกคนพูดว่า "ใช่" กับคำตอบนั้น
sepp2k

3
การยืนยันของคุณที่เป็นไปได้ในการเขียนอัลกอริทึมที่สามารถพิสูจน์การสิ้นสุดของทุกโปรแกรมที่เขียนดีในภาษาทัวริงที่เรียบง่ายพอเพียงเป็นเท็จอย่างสมบูรณ์ สำหรับอัลกอริทึมที่เป็นไปได้ทั้งหมดที่พยายามพิสูจน์การยกเลิกมีปัญหาที่ทุกโปรแกรมที่แก้ปัญหานั้นไม่สามารถพิสูจน์ได้ว่าหยุดโดยอัลกอริทึมนั้น ดังนั้นถ้าคุณกำลังบอกว่าทุก ๆ โปรแกรมที่แก้ปัญหานั้นเขียนขึ้นโดยคำจำกัดความไม่ดี (ซึ่งน่าหัวเราะ) ซึ่งมันหักล้างประเด็นของคุณ
sepp2k

1
@Sam หากมีคนถามฉันว่ามีรหัสหยุดหรือไม่ฉันจะดูรหัสแล้วลองคิดดู แต่ฉันไม่ใช่อัลกอริทึม และใช่เป็นไปได้ที่จะเขียนอัลกอริทึมที่สามารถตรวจสอบว่าโปรแกรมหยุดทำงานสำหรับโปรแกรมมากมายหรือไม่ แต่นั่นไม่ใช่สิ่งที่ Yttrill พูด Yttrill กล่าวว่าเป็นไปได้สำหรับทุกโปรแกรมที่เขียนดี และอย่างที่ฉันพูดในความคิดเห็นก่อนหน้าของฉันนั่นเป็นเรื่องผิดเว้นแต่คุณอ้างว่าปัญหาบางอย่างสามารถแก้ไขได้โดยโปรแกรมที่เขียนไม่ดีเท่านั้น (ซึ่งอีกครั้งจะน่าหัวเราะ)
sepp2k

1
@ Sam "ดูเหมือนว่าตรงไปตรงมาสำหรับฉันว่าโปรแกรมที่เขียนโดยเจตนาเพื่อหยุดสามารถวิเคราะห์ได้ง่ายสำหรับการหยุดเงื่อนไข" - ถ้าเป็นอย่างนั้นทำไมเราไม่มีเครื่องมือเช่นนั้น? ไม่ใช่ว่าคนไม่ได้ลอง (หนึ่งผู้ร้ายคือวิธีการเอาชนะ: ณ เวลารวบรวมคุณไม่ทราบรหัสทั้งหมดที่จะถูกเรียกใช้)
กราฟิลส์

1
@ แซม "มีวงวนไม่สิ้นสุด" เป็นเรื่องยากที่จะเข้าหาแม้กระทั่งในโลกแห่งความเป็นจริง แน่นอนฉันได้รับการสอนวิธีค้นหาลูป - ค่าคงที่ แต่ไม่ได้หมายความว่าฉันสามารถหาหนึ่ง (ง่าย) ในหลาย ๆ กรณี เท่าที่ฉันรู้เดาและพิสูจน์เป็นมาตรฐานทองคำวันนี้ อีกครั้งถ้ามีเป็นขั้นตอนวิธีการทั่วไปพอสมควรผมจะคาดหวังให้พวกเขาจะรวมอยู่ในคอมไพล์รายใหญ่หรือ IDEs (ซึ่งจะดำเนินการเล็กน้อยตรวจสอบการสร้างประโยคบางส่วน) คุณสามารถอ้างอิงถึงอัลกอริทึมที่แข็งแกร่งพอสมควรได้หรือไม่?
กราฟิลส์

3

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

อย่างไรก็ตามวิทยาการคอมพิวเตอร์ไม่ปรากฏว่ามีคำที่แน่นอนสำหรับ "โปรแกรม" ที่ "บางครั้ง" สำเร็จ คำว่า "อัลกอริทึม" มักจะถูกสงวนไว้สำหรับโปรแกรมที่มักจะหยุด

แนวคิดนี้ดูเหมือนจะแตกต่างจากอัลกอริธึมที่น่าจะเป็นไปได้อย่างชัดเจนซึ่งนักทฤษฎี CS ยืนยันว่ามีความน่าจะเป็นที่รู้จักหรือคำนวณได้จากการประสบความสำเร็จ

มีsemialgorithmsคำที่บางครั้งใช้ แต่เห็นได้ชัดว่ามันเป็นคำพ้องความหมายสำหรับการนับซ้ำหรือไม่สามารถคำนวณได้

ดังนั้นเพื่อจุดประสงค์ที่นี่เรียกพวกเขาว่าขั้นตอนวิธี แนวคิดนั้นแตกต่างจาก decidable และ undecidable

AXBYXYXYBA

ใน CS นี้ "ลำดับชั้นขั้นตอนวิธีเสมือน" ดูเหมือนว่าจะมีการศึกษาส่วนใหญ่เท่านั้นอย่างไม่เป็นทางการจนถึง

มันแสดงให้เห็นในการวิจัยช่องคลอดไม่ว่าง [1] และปัญหา PCP [2] ในความเป็นจริงการโจมตีด้วยคอมพิวเตอร์บนดีเอ็นเอ PCP จะถูกมองว่าเป็น quasialgorithm [3] และเห็นในพื้นที่อื่นแล้วสังเกตเห็นเช่นทฤษฎีบทพิสูจน์ [4]

[1] การโจมตีสหัสวรรษใหม่ในปัญหาช่องคลอดที่ยุ่ง

[2] การแก้ปัญหาการติดต่อกับ Zhao (v2?)

[3] การใช้ DNA เพื่อแก้ปัญหาการติดต่อทางไปรษณีย์โดย Kari และคณะ

[4] การพิสูจน์การยกเลิกโปรแกรมโดย Cook et al, Comm ของ ACM

(ดังนั้นนี่เป็นคำถามที่ลึกมากที่สมควรได้รับที่จะอยู่ใน TCS.SE imho ... บางทีอาจมีคนถามคำถามอีกครั้งในแบบที่มันเหมาะกับการอยู่)


ps เป็นตัวอย่างที่น่าประทับใจของประสิทธิภาพของอัลกอริธึมที่เป็นไปได้อย่างไร ACM อ้างว่าฟังก์ชั่น ackermann นั้นสามารถพิสูจน์ได้ว่าจะหยุดโดย quasial algorithm แต่มันมีขนาดใหญ่กว่า
vzn

1
"อัลกอริธึมคำว่า" "มักจะสงวนไว้สำหรับโปรแกรมที่จะหยุด" - ฉันไม่แน่ใจว่าเป็นเรื่องจริง มีอัลกอริทึมการยุติบางส่วนจำนวนมากรอบ (โดยเฉพาะอย่างยิ่งในการตรวจสอบ) และฉันไม่เคยได้ยินใครไม่พูดว่า "อัลกอริทึม"
กราฟิลส์

มีการใช้ "อัลกอริทึม" แบบไม่เป็นทางการ "การยกเลิกบางส่วน" ก็โอเค แต่ปัญหาไม่ใช่ไม่ใช่ ตามที่ระบุไว้ดูเหมือนจะยังไม่ได้เป็นระยะ stdized วิกิพีเดียกำหนดอัลกอริทึมเป็นวิธีที่มีประสิทธิภาพเช่นdecidable ที่มีลักษณะดังต่อไปนี้ (1) มักจะให้คำตอบมากกว่าที่จะไม่ตอบ (2) ให้คำตอบที่ถูกต้องเสมอและไม่เคยให้คำตอบที่ผิด (3) จะต้องดำเนินการให้เสร็จในจำนวนขั้นตอนที่ จำกัด เสมอแทนที่จะเป็นจำนวนอนันต์ (4) ทำงานกับปัญหาทั้งหมดในชั้นเรียน
vzn

และต่อมาในบทความเดียวกันมันบอกว่า "การอธิบายเพิ่มเติมของคำว่า" วิธีการที่มีประสิทธิภาพ "อาจรวมถึงข้อกำหนดว่าเมื่อได้รับปัญหาจากนอกชั้นเรียนซึ่งวิธีการที่มีประสิทธิภาพวิธีการอาจหยุดหรือห่วงตลอดไปโดยไม่หยุด แต่ต้องไม่ส่งคืนผลลัพธ์ราวกับว่าเป็นคำตอบของปัญหา " นั่นคือมันเกือบจะขัดแย้งกับตัวเอง!?! ชัดเจนดังนั้นอย่างน่าสังเกตว่ามีความสับสนจริงในประเด็นสำคัญและคำศัพท์ที่มีอยู่ไม่เข้มงวด โปรดสังเกตคำว่า "อัลกอริทึม" นั้นใกล้เคียงกับอายุมากกว่าพันปี & ได้เปลี่ยนไปอย่างมาก ...
vzn

มันเป็นความจริง: ความหมายดั้งเดิมน่าจะเป็น "วิธีการที่มีประสิทธิภาพ" ในวิธีที่ Wikipedia พูด (ไม่มีความขัดแย้งในประโยคที่คุณอ้างถึง แต่มันไม่ชัดเจนเลยสักนิด) - ผู้คนไม่เข้าใจหน้าที่ / อัลกอริธึมที่ไม่ยุติ อินพุตบางตัว) ฉันคิดว่าสิ่งนี้เปลี่ยนไปตั้งแต่ทศวรรษ 1950 อย่างที่ผมพูดไปทุกวันนี้ผู้คนเรียกวิธี "อัลกอริทึม" ที่ยุติอย่างชัดเจน
กราฟิลส์

2

ตราบใดที่ภาษาการเขียนโปรแกรมมีความซับซ้อนเพียงพอ (เช่นถ้าเป็นทัวริงที่สมบูรณ์) จากนั้นจะมีโปรแกรมในภาษาเสมอซึ่งไม่มีโปรแกรมที่สามารถพิสูจน์ได้ว่าจะยุติ

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

แก้ไข:เนื่องจากความคิดเห็นให้ชัดเจนยิ่งขึ้น: ภาษาใด ๆ ที่คุณอาจออกแบบซึ่งคุณสามารถแก้ปัญหาการหยุดชะงักได้นั้นจำเป็นต้องทำให้ทัวริงไม่สมบูรณ์ กฎนี้ใช้ภาษาใด ๆ ที่มีชุดส่วนผสมพื้นฐานที่เหมาะสม (เช่น "ตัวแปรเงื่อนไขและการข้าม" หรือ @ @ sepp2k พูดทั่วไป "ขณะที่" - ลูป)

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


3
"เนื่องจากทั้งหมด แต่ภาษาดั้งเดิมที่สุดคือทัวริงสมบูรณ์ (ใช้เพียงบางอย่างเช่นตัวแปรและเงื่อนไข)" นั่นไม่เป็นความจริง ก่อนอื่นคุณต้องอย่างน้อยที่สุดจะต้องมีการเรียกซ้ำหรือรูปแบบการวนลูปบางรูปแบบ (ซึ่งควรมีประสิทธิภาพเท่ากับ while-loop - การนับลูปแบบง่ายไม่เพียงพอ) ประการที่สองฉันไม่คิดว่าจะมีคนจำนวนมากที่จะเรียกภาษาเช่น Coq หรือ Agda (ซึ่งมีทั้งหมดและทำให้ไม่สมบูรณ์) ภาษาดั้งเดิมหรือของเล่น
sepp2k

@ sepp2k: ใช่แล้ว เลขคณิตของ Peano นั้นค่อนข้างมีประโยชน์และไม่สมบูรณ์ ข้อความที่เรียบง่ายฉันคิดว่า หาก OP คุ้นเคยกับปัญหาอย่างเพียงพอเธอหวังว่าจะสามารถกรอกรายละเอียดทางเทคนิคได้

3
มีช่องว่างขนาดใหญ่ระหว่างการ "ซับซ้อนเพียงพอ" และการทัวริงที่สมบูรณ์ Coq มีความซับซ้อนแน่นอนและเหมาะสำหรับการใช้งานที่หลากหลาย

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

@ArtB: แน่นอนว่ามีบางโปรแกรมที่สามารถพิสูจน์ได้ว่าจะยุติ คำถามแรกของ OP อาจเป็นคำใบ้ที่ถึงแม้ว่าฉันไม่แน่ใจว่าฉันทำตามอย่างเต็มที่ ตัวอย่างเช่นคุณไม่สามารถมี "อัลกอริทึมทั่วไป" ที่กำหนดว่าครอบครัวใด ๆ ของโปรแกรมที่ถูกยกเลิกในขณะที่ในทางกลับกันคุณอาจจะสร้างตระกูลที่ จำกัด ของฟังก์ชั่นที่สมมติว่าฟังก์ชั่นเป็นของครอบครัวนั้น สิ้นสุด (ฉันไม่แน่ใจว่าครอบครัวนั้นจะไม่ไร้สาระหรือไม่ฉันคิดว่ามันเป็นไปได้ แต่ฉันไม่สามารถทำตัวอย่างได้)

2

TT

นี่เป็นเรื่องเล็กน้อย ถ้าเราใช้ยูเนี่ยนของส่วนย่อย ce ใด ๆ ของการหยุด TM และเซตย่อยใด ๆ ของ non-halting TMs ผลลัพธ์จะถูกตั้งค่าเป็น TM ซึ่งปัญหาการหยุดชะงักนั้นสามารถตัดสินใจได้ (เรียกใช้ทั้งสองเครื่องขนานกันถ้าคนแรกยอมรับ TM หยุดถ้าคนที่สองยอมรับแล้วเครื่องก็จะไม่หยุด) อย่างไรก็ตามสิ่งนี้จะไม่นำไปสู่ภาษาที่น่าสนใจมาก

ALโอก.Tผมม.อีM


1

ใช่คุณทำได้ แต่ฉันสงสัยว่ามันจะมีประโยชน์ คุณอาจต้องทำมันเพื่อวิเคราะห์กรณีและจากนั้นคุณจะสามารถมองหากรณีที่ชัดเจนที่สุดเท่านั้น ตัวอย่างเช่นคุณสามารถ grep while(true){}ไฟล์โค้ด หากไฟล์มีรหัสนั้นมันจะไม่มีวันยุติ ^ โดยทั่วไปคุณสามารถพูดได้ว่าโปรแกรมที่ไม่มีการวนซ้ำหรือการเรียกซ้ำจะสิ้นสุดลงเสมอและมีหลายกรณีที่คุณสามารถทำได้ซึ่งรับประกันได้ว่าโปรแกรมจะหรือจะไม่ยุติการทำงาน แต่สำหรับโปรแกรมขนาดกลางมันจะยากมากและ ในหลายกรณีจะไม่สามารถให้คำตอบคุณได้

tl; dr:ใช่ แต่คุณจะไม่สามารถมีประโยชน์กับโปรแกรมที่มีประโยชน์มากที่สุด


^ ใช่ในทางเทคนิคหากรหัสนั้นไม่ได้อยู่ในเส้นทางของรหัสหรือมีเธรดอื่น ๆ ที่มันยังคงสามารถยุติได้ แต่ฉันทำประเด็นทั่วไปที่นี่


4
ทำไมคุณคิดว่า Coq และ Agda ไม่มีประโยชน์ คุณประเมินคุณค่าของทัวริงสมบูรณ์มากเกินไป

ฉันใช้ Coq แต่การอ้างสิทธิ์ของฉันยังคงอยู่เนื่องจากซอฟต์แวร์เชิงพาณิชย์ส่วนใหญ่เขียนด้วย Java / C ++ / Ruby / C # ซึ่งการอ้างสิทธิ์ของฉันเป็นจริง ประเภทของโปรแกรม 90% ของผู้ที่สนใจในการเขียนจะไม่ได้รับประโยชน์ โดยทั่วไปหากคุณไม่รู้จัก Coq / Agda ฯลฯ คุณไม่ได้เป็นตลาดเป้าหมาย

5
ฉันพูดได้ว่า 99% ของโปรแกรมในโลกแห่งความเป็นจริงจะได้รับประโยชน์จากการใช้งานในส่วนย่อยของภาษาที่ไม่สมบูรณ์ คุณจะไม่นำไปใช้พูดฟังก์ชั่น Ackermann ทุกวัน CRUD 100% ไม่ต้องการภาษา "ของจริง" การประมวลผลข้อมูลเป็นเรื่องเล็กน้อย ดูโครงการ Terminator - พวกเขายังให้บริการชุดย่อยของ C ++ programms ที่เป็นไปได้ซึ่งเกินพอสำหรับโลกแห่งความเป็นจริง (รวมถึงไดรเวอร์และรหัสระดับต่ำอื่น ๆ )

โครงการในโลกแห่งความเป็นจริงส่วนใหญ่ต้องการนำไลบรารี่ที่เขียนด้วยภาษาทัวริงมาใช้ใหม่และใช้ IDE และดีบั๊กและบทแนะนำ ใช่คุณสามารถทำสิ่งต่าง ๆ ในภาษาที่ไม่ใช่ทัวริง แต่ฉันไม่สามารถจินตนาการได้ว่าบางคนกำลังพูดว่า "ฉันต้องการทำ X" และคำตอบของฉันคือ "Use Coq" ขอบคุณสำหรับการแนะนำ PS- ฉันไปฮือโครงการ

4
มีการใช้งานตรรกะทางธุรกิจในสัดส่วนที่สูงอย่างไม่น่าเชื่อใน SQL ที่ไม่ใช่ทัวริงที่สมบูรณ์ ขณะนี้ DSL และ eDSL กำลังเพิ่มสูงขึ้น ดังนั้นในไม่ช้าโปรแกรมเมอร์ธุรกิจแอพส่วนใหญ่จะลืมภาษา "วัตถุประสงค์ทั่วไป" ทั้งหมด
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.