คำถามติดแท็ก language-design

คำถามที่เกี่ยวข้องกับการออกแบบและโครงสร้างของภาษาโปรแกรม

1
ทำไมลำไส้ใหญ่สองเท่าแทนที่จะเป็นจุด
มีข่าวลือว่าการใช้งาน C ++ ในช่วงต้นมีตัวดำเนินการ dot สำหรับการเข้าถึงเนมสเปซ มีความเห็นว่าจุดที่สะดวกกว่าที่ผู้ประกอบการลำไส้ใหญ่สองครั้งที่ทันสมัย อะไรคือเหตุผลที่อยู่เบื้องหลังการแนะนำลำไส้ใหญ่คู่

4
เหตุใด PHP จึงไม่สามารถรองรับ Unicode ได้อย่างสมบูรณ์
ทุกคนรู้ว่า PHP มีปัญหากับ Unicode เวอร์ชัน 6 ถูกยกเลิกอย่างมีประสิทธิภาพเนื่องจากความยุ่งยากในการใช้ Unicode แต่ฉันสงสัยว่าใครรู้เหตุผลที่แน่นอนคืออะไร? ปัญหาด้านสถาปัตยกรรม / การออกแบบความกังวลเรื่องประสิทธิภาพปัญหาชุมชน (ฉันไม่เดิมพัน) มีอะไรอื่นอีกหรือ

4
ปัญหาของการนำ C ++ เหมือน const เป็นภาษามีอะไรบ้าง
ฉันสนใจในความคิดของ C ++ - constไม่ใช่การประหารแบบconstนั้น ยกตัวอย่าง C # - มันไม่มี C ++ - เหมือน const และเหตุผลที่เป็นปกติ - ผู้คนและเวลา ที่นี่นอกจากนี้ดูเหมือนว่าทีม C # ดูการดำเนินการ C ++ ของconstการตลาด CLR และมีเพียงพอที่จุดนี้ (ดูว่าทำไมไม่มีวิธีสมาชิก const ใน c # และพารามิเตอร์ const ; ขอบคุณ Svick) ถ้าเราก้าวไปไกลกว่านั้นมีอะไรอีกไหม? มีอะไรที่ลึกกว่านี้ไหม? ยกตัวอย่างเช่นการสืบทอดหลาย ๆ อย่างซึ่งมักจะยากที่จะเข้าใจ (สำหรับผู้ใช้) และดังนั้นจึงไม่ได้เพิ่มในภาษา (เช่นปัญหาเพชร) เป็นสิ่งที่มีอยู่ในธรรมชาติของconstที่ก่อให้เกิดปัญหาว่ามันจะดีกว่าสำหรับภาษาที่จะหลีกเลี่ยงมันได้หรือไม่ สิ่งที่ต้องการตัดสินใจว่าconstควรจะลึกหรือตื้น (มีconstคอนเทนเนอร์หมายความว่าฉันไม่สามารถเพิ่มองค์ประกอบใหม่หรือแก้ไของค์ประกอบที่มีอยู่เช่นกันถ้าองค์ประกอบเป็นประเภทอ้างอิง) ปรับปรุง : …

5
Python ทำไมช้ากว่า Java แต่เร็วกว่า PHP [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบ เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงอภิปรายโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันได้เห็นการวัดเปรียบเทียบหลายครั้งหลายครั้งที่แสดงให้เห็นว่าภาษาหลายภาษาทำงานในหน้าที่ที่ได้รับมอบหมาย การเปรียบเทียบเหล่านี้มักจะเปิดเผยว่า Python ช้ากว่า Java และเร็วกว่า PHP และฉันสงสัยว่าทำไมถึงเป็นเช่นนั้น Java, Python และ PHP ทำงานในเครื่องเสมือน ทั้งสามภาษาแปลงโปรแกรมเป็นรหัสไบต์แบบกำหนดเองที่ทำงานอยู่ด้านบนของระบบปฏิบัติการดังนั้นจึงไม่มีใครทำงานได้ตามปกติ ทั้ง Java และ Python สามารถ "รวบรวม" ( .pycสำหรับ Python) แต่__main__โมดูลสำหรับ Python ไม่ได้รวบรวม Python และ PHP ถูกพิมพ์แบบไดนามิกและ Java เป็นแบบคงที่ - นี่คือเหตุผลที่ Java เร็วขึ้นและถ้าเป็นเช่นนั้นโปรดอธิบายว่ามันมีผลต่อความเร็วอย่างไร และถึงแม้ว่าอาร์กิวเมนต์ dynamic-vs-static นั้นถูกต้อง แต่ก็ไม่ได้อธิบายว่าทำไม PHP ถึงช้ากว่า …

3
เหตุผลในการตั้งชื่อ. NETs Select (Map) และ Aggregate (ลด) คืออะไร?
ในภาษาการเขียนโปรแกรมอื่น ๆ ฉันได้เห็น Map and Reduce และสิ่งเหล่านี้เป็นสิ่งสำคัญสำหรับการเขียนโปรแกรมการทำงาน ฉันไม่พบเหตุผลหรือประวัติว่าทำไม LINQ จึงมีAggregate(เหมือนReduce) และSelect(เหมือนกัน)Map )? ทำไมฉันถึงถามว่ามันใช้เวลาพอสมควรที่จะเข้าใจว่ามันเป็นสิ่งเดียวกันและฉันอยากรู้ว่าอะไรคือเหตุผลสำหรับเรื่องนี้

3
ในความเข้าใจย้อนหลังการอ้างอิง XAML บน XML เป็นความผิดพลาดหรือแนวทางที่ดีหรือไม่?
XAML เป็นส่วนหนึ่งของ XML หนึ่งในประโยชน์หลักของการอ้างอิง XAML บน XML คือว่าสามารถแยกวิเคราะห์ด้วยเครื่องมือที่มีอยู่ และในระดับมากถึงแม้ว่าค่าแอตทริบิวต์ (syntactically non-trivial) จะยังคงอยู่ในรูปแบบข้อความและต้องการการแยกวิเคราะห์เพิ่มเติม มีสองทางเลือกหลักในการอธิบาย GUI ในภาษาที่ได้จาก XML หนึ่งคือการทำสิ่งที่ WinForms ทำและอธิบายด้วยรหัสจริง มีปัญหามากมายเกี่ยวกับสิ่งนี้แม้ว่าจะไม่ได้ประโยชน์อย่างสมบูรณ์ ( คำถามเพื่อเปรียบเทียบ XAML กับแนวทางนี้ ) ทางเลือกที่สำคัญอื่น ๆ คือการออกแบบไวยากรณ์ใหม่ทั้งหมดที่ปรับแต่งเป็นพิเศษสำหรับงานในมือ นี้เป็นที่รู้จักกันโดยทั่วไปเป็นโดเมนภาษาเฉพาะ ดังนั้นในความเข้าใจย้อนหลังและเป็นบทเรียนสำหรับคนรุ่นต่อไปในอนาคตมันเป็นความคิดที่ดีที่จะยึด XAML บน XML หรือจะดีกว่าในฐานะภาษาเฉพาะโดเมนที่ออกแบบเองหรือไม่? หากเราออกแบบกรอบ UI ที่ดียิ่งขึ้นเราควรเลือก XML หรือ DSL ที่กำหนดเองหรือไม่ เนื่องจากเป็นการง่ายกว่าที่จะคิดในแง่บวกเกี่ยวกับสภาพที่เป็นอยู่โดยเฉพาะอย่างยิ่งสิ่งที่ชุมชนชื่นชอบมากฉันจะให้เหตุผลบางอย่างเกี่ยวกับสาเหตุที่การสร้างส่วนบนของ XML อาจถือเป็นข้อผิดพลาด การแยกภาษาออกจาก XML มีสิ่งหนึ่งเกิดขึ้น: แยกวิเคราะห์ได้ง่ายกว่า (ตัวแยกวิเคราะห์หลักมีอยู่แล้ว) ต้องการงานออกแบบที่น้อยกว่ามาก …

8
เหตุใด C ++ ยังคงเป็น“ ลูกผสม”
สำหรับคำถามที่เกี่ยวข้องจะได้รับการชี้แจงว่าทำไม C ++ เข้ากันไม่ได้กับ C ในหลาย ๆ ด้าน อย่างไรก็ตาม C ++ ยังคงเป็นภาษา "ไฮบริด" * และน่าเสียดายที่โปรแกรมเมอร์หลายคนยังถือว่า C ++ เป็น "C ที่มีสตรีมและสตริงในตัว" ผลลัพธ์นั้นเป็นโค้ดที่เขียนไม่ดีจริง ๆ ซึ่งไม่ใช่ทั้ง C ++ หรือ C. IMHO มันจะดีกว่าถ้าภาษา / คอมไพเลอร์บังคับให้โปรแกรมเมอร์ในระดับหนึ่งต้องเขียนโค้ดที่หรูหรากว่านี้ ดังนั้นมีเหตุผลในการรักษาไฮบริด C ++ (เช่น C ++ 0x และเวอร์ชันในอนาคต) ไฮบริด? * โดยไฮบริดฉันหมายถึงมันขึ้นอยู่กับโปรแกรมเมอร์ที่จะตัดสินใจว่าเขา / เธอจะใช้หรือไม่: สตริงมาตรฐานและสตรีม, คลาส, เนมสเปซอื่นที่ไม่ใช่ค่าเริ่มต้นเป็นต้น

9
คำแนะนำอาชีพ: ปริญญาเอกในทฤษฎีภาษาโปรแกรม [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน6 ปีที่ผ่านมา ฉันสนใจทฤษฎีของภาษาโปรแกรมและจะสมัครปริญญาเอกในหัวข้อนี้ แต่ฉันต้องการทราบเพิ่มเติมเกี่ยวกับอาชีพหลังจบการศึกษาระดับบัณฑิตศึกษา นอกเหนือจากการเป็นอาจารย์ แต่ฉันสามารถรับอาชีพใดได้บ้าง

10
ฟังก์ชั่นการบรรทุกเกินพิกัด? ใช่หรือไม่ [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการถกเถียงโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันกำลังพัฒนาภาษาที่คอมไพล์และพิมพ์อย่างยิ่งและฉันขอทบทวนแนวคิดว่าจะรวมฟังก์ชั่นการโอเวอร์โหลดเป็นคุณลักษณะภาษาหรือไม่ ฉันรู้ว่าฉันลำเอียงเล็กน้อยมาจากC[++|#]ภูมิหลังเป็นส่วนใหญ่ อะไรคือข้อโต้แย้งที่น่าเชื่อถือที่สุดสำหรับและต่อต้านรวมถึงฟังก์ชั่นการโอเวอร์โหลดในภาษา? แก้ไข:ไม่มีใครที่มีความเห็นตรงข้ามหรือไม่? เบอร์ทรานด์เมเยอร์ (ผู้สร้างหอไอเฟลย้อนกลับไปในปี 1985/1986) เรียกวิธีการดังกล่าวว่า: (ที่มา) กลไกโต๊ะเครื่องแป้งที่ไม่นำอะไรมาสู่พลังความหมายของภาษา OO แต่การอ่านง่ายขึ้นและทำให้งานของทุกคนยุ่งยาก ตอนนี้สิ่งเหล่านี้เป็นภาพรวมที่กว้างใหญ่ไพศาล แต่เขาเป็นคนฉลาดดังนั้นฉันคิดว่ามันปลอดภัยที่จะบอกว่าเขาสามารถสำรองได้หากเขาต้องการ ในความเป็นจริงเขาเกือบจะมีแบรดเอบรัมส์ (หนึ่งในผู้พัฒนา CLSv1) เชื่อว่า. NET ไม่ควรสนับสนุนวิธีการโอเวอร์โหลด (แหล่งที่มา)นั่นคือบางสิ่งที่ทรงพลัง ทุกคนสามารถเข้าใจความคิดของเขาและมุมมองของเขายังคงเป็นธรรมเมื่อ 25 ปีต่อมาได้หรือไม่?

2
Microsoft ท้อใจใช้ 'var' ใน C # หรือไม่ (VS2017)
ฉันกำลังมองหาที่จะเกิดขึ้นในVisual Studio 2017 ภายใต้ส่วนชื่อเพิ่มประสิทธิภาพการผลิตจะมีภาพของ Visual Studio ที่ใช้ในการแทนที่var ที่เกิดขึ้นทั้งหมดด้วยประเภทที่ชัดเจน เห็นได้ชัดว่ารหัสมีปัญหาหลายอย่างที่ Visual Studio ระบุว่า 'ต้องการแก้ไข' ฉันต้องการที่จะตรวจสอบความเข้าใจของฉันใช้varใน C # ดังนั้นผมอ่านบทความจากปี 2011 โดยเอริค Lippert เรียกว่าการใช้ประโยชน์และ misuses ของการพิมพ์โดยปริยาย Eric พูดว่า: ใช้ var เมื่อคุณต้อง; เมื่อคุณใช้ประเภทที่ไม่ระบุชื่อ ใช้ var เมื่อชนิดของการประกาศชัดเจนจาก initializer โดยเฉพาะอย่างยิ่งถ้าเป็นการสร้างวัตถุ สิ่งนี้ช่วยลดความซ้ำซ้อน พิจารณาใช้ var หากรหัสเน้นความหมายของ "จุดประสงค์ทางธุรกิจ" ของตัวแปรและอธิบายรายละเอียด "กลไก" ของที่เก็บข้อมูล ใช้ประเภทที่ชัดเจนหากจำเป็นเพื่อให้เข้าใจและบำรุงรักษารหัสได้อย่างถูกต้อง ใช้ชื่อตัวแปรอธิบายโดยไม่คำนึงว่าคุณใช้“ var” ชื่อตัวแปรควรแสดงถึงความหมายของตัวแปรไม่ใช่รายละเอียดของที่เก็บ “ เลขฐานสิบ” ไม่ดี; “ …

3
ทำไมผู้สร้าง Ruby จึงเลือกใช้แนวคิดของ Symbols
tl; dr: จะมีคำจำกัดความเกี่ยวกับสัญลักษณ์ของผู้ไม่เชื่อเรื่องภาษาและมีเหตุผลที่จะใช้มันในภาษาอื่น ๆ หรือไม่? ดังนั้นทำไมผู้สร้าง Ruby จึงใช้แนวคิดsymbolsในภาษา ฉันถามสิ่งนี้จากมุมมองของโปรแกรมเมอร์ที่ไม่ใช่ทับทิม ฉันได้เรียนรู้จำนวนมากภาษาอื่น ๆ symbolsและพบว่าในไม่มีของพวกเขาจำเป็นที่จะต้องระบุถ้าผมจัดการหรือไม่กับสิ่งที่โทรทับทิม คำถามหลักคือแนวคิดของsymbolsRuby มีอยู่ในการแสดงหรือไม่หรือเป็นเพียงบางสิ่งที่จำเป็นเนื่องจากวิธีการเขียนภาษา? โปรแกรมใน Ruby จะเบาลงและ / หรือเร็วกว่าสมมติว่า Python หรือ Javascript เป็นคู่กันหรือไม่ ถ้าเป็นเช่นนั้นมันจะเป็นเพราะsymbolsอะไร? เนื่องจากหนึ่งในความตั้งใจของรูบี้คือการอ่านและเขียนสำหรับมนุษย์ได้ง่ายผู้สร้างมันไม่สามารถปลดเปลื้องกระบวนการเข้ารหัสโดยใช้การปรับปรุงเหล่านั้นในล่ามเอง (เพราะอาจเป็นภาษาอื่น) ดูเหมือนว่าทุกคนต้องการที่จะรู้ว่าอะไรsymbolsคืออะไรและใช้งานอย่างไรและทำไมพวกเขาถึงอยู่ที่นั่นในตอนแรก

5
เหตุใดจึงมี * การประกาศ * ของข้อมูลและฟังก์ชั่นที่จำเป็นในภาษา C เมื่อคำจำกัดความถูกเขียนในตอนท้ายของซอร์สโค้ด?
พิจารณารหัส "C" ต่อไปนี้: #include<stdio.h> main() { printf("func:%d",Func_i()); } Func_i() { int i=3; return i; } Func_i()ถูกกำหนดในตอนท้ายของซอร์สโค้ดและไม่มีการประกาศให้ก่อนที่จะใช้main()มัน ในเวลามากเมื่อคอมไพเลอร์เห็นFunc_i()ในmain()มันออกมาของและพบว่าออกmain() Func_i()คอมไพเลอร์อย่างใดพบว่าค่าส่งกลับโดยและให้มันไปFunc_i() printf()ผมยังไม่ทราบว่าคอมไพเลอร์ไม่สามารถหาประเภทผลตอบแทนFunc_i()ของ มันโดยปกติจะใช้เวลา (คาดเดา?) ประเภทผลตอบแทนของการที่จะเป็นFunc_i() intนั่นคือถ้ารหัสfloat Func_i()นั้นคอมไพเลอร์จะให้ข้อผิดพลาด: ประเภทที่ขัดแย้งFunc_i()กัน จากการสนทนาข้างต้นเราจะเห็นว่า: Func_i()คอมไพเลอร์สามารถหาค่าที่ส่งกลับโดย หากคอมไพเลอร์สามารถค้นหาค่าที่ส่งคืนโดยFunc_i()ออกมาmain()และค้นหาซอร์สโค้ดเหตุใดจึงไม่พบประเภทของ Func_i () ซึ่งกล่าวถึง อย่างชัดเจน คอมไพเลอร์ต้องรู้ว่าFunc_i()เป็นประเภทลอย - นั่นเป็นสาเหตุที่ทำให้เกิดข้อผิดพลาดของประเภทที่ขัดแย้งกัน หากคอมไพเลอร์รู้ว่าFunc_iเป็นประเภทลอยตัวแล้วทำไมมันยังถือว่าFunc_i()เป็นประเภท int และให้ข้อผิดพลาดของประเภทที่ขัดแย้งกัน? ทำไมมันไม่ได้ทำให้มันกลายFunc_i()เป็นประเภทลอย ผมมีข้อสงสัยเช่นเดียวกันกับการประกาศตัวแปร พิจารณารหัส "C" ต่อไปนี้: #include<stdio.h> main() { /* [extern int Data_i;]--omitted …

1
Groovy ปฏิบัติตามหลักการความสอดคล้องของ Tennent หรือไม่?
นี่คือการสนทนาที่น่าสนใจของหลักการการโต้ตอบของ Tennentและคำอธิบายสั้น ๆ จากNeal Gafter : หลักการกำหนดว่าการแสดงออกหรือคำพูดเมื่อห่อในการปิดและเรียกใช้ทันทีควรมีความหมายเช่นเดียวกับก่อนที่จะถูกห่อในการปิด การเปลี่ยนแปลงความหมายใด ๆ เมื่อการปิดโค้ดในการปิดอาจเป็นข้อบกพร่องในภาษา ภาษา Groovy ปฏิบัติตามหลักการนี้หรือไม่

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

7
ใน Java ทำไมสมาชิกที่ได้รับความคุ้มครองทำให้เข้าถึงคลาสของแพ็คเกจเดียวกันได้
จากเอกสารอย่างเป็นทางการ... แพ็คเกจ Class Class ย่อย YYYY สาธารณะ ป้องกัน YYYN ไม่มีตัวแก้ไข YYNN YNNN ส่วนตัว สิ่งนี้คือฉันจำไม่ได้ว่ามีกรณีการใช้งานที่ฉันต้องการเข้าถึงสมาชิกที่ได้รับความคุ้มครองจากชั้นเรียนภายในแพ็คเกจเดียวกัน อะไรคือสาเหตุของการนำไปใช้นี้? แก้ไข:เพื่อชี้แจงฉันกำลังมองหากรณีการใช้งานเฉพาะที่ทั้งคลาสย่อยและคลาสภายในแพ็คเกจเดียวกันจำเป็นต้องเข้าถึงเขตข้อมูลหรือวิธีการป้องกัน package some.package; public class A { protected void protectedMethod(){ // do something } } package another.package; public class B extends A{ public void someMethod(){ // accessible because B is a subclass of A protectedMethod(); …

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