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

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

13
เหตุใดฐานข้อมูลจึงไม่รวมเป็นคุณสมบัติภาษา
มีภาษาการเขียนโปรแกรมที่มีฐานข้อมูลในตัวเป็นคุณสมบัติภาษาชั้นหนึ่งมากกว่าการเชื่อมต่อกับฐานข้อมูล SQL (หรืออื่น ๆ ) ภายนอกหรือไม่? อะไรคือข้อเสียและประโยชน์ของฟีเจอร์ดังกล่าว? คุณลักษณะเช่นนี้จะมีลักษณะเป็นอย่างไรและจะเปลี่ยนวิธีการตั้งโปรแกรมของเราอย่างไร


2
ทำไมสกาล่าถึงกลับมา แต่ไม่หยุดพักและทำต่อไป
สกาล่าไม่มีbreakหรือcontinueดังนั้นพฤติกรรมวนรอบบางอย่างจึงใช้ความคิดอีกเล็กน้อย การสิ้นสุดลูปก่อนกำหนดต้องใช้การเรียกซ้ำแบบหางข้อยกเว้นหรือscala.util.control.Breaks(ซึ่งใช้ข้อยกเว้น) เหตุผลสำหรับเรื่องนี้ก็คือว่าgotoพวกเขาเป็นโครงสร้างการไหลที่ไม่ชัดเจนการไหลและสามารถทำได้ในวิธีที่ดีกว่าและน่าแปลกใจน้อยกว่า returnแต่ดูเหมือนขัดแย้งกันเหล่านั้นสามารถนำมาใช้สำหรับ เหตุใดสกาล่าจึงละเว้นbreakและcontinueไม่ทำเช่นนั้นreturn?

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

1
Go ปรับปรุงประสิทธิภาพการทำงานด้วยอินเทอร์เฟซ“ นัย” อย่างไรและเปรียบเทียบกับแนวคิดของ C # ของวิธีการขยายอย่างไร
ในการสอนภาษาไปพวกเขาอธิบายว่าอินเตอร์เฟสทำงานอย่างไร: Go ไม่มีคลาส อย่างไรก็ตามคุณสามารถกำหนดวิธีการกับประเภทโครงสร้าง รับวิธีการที่ปรากฏในรายการอาร์กิวเมนต์ของตัวเองระหว่างคำหลัก func และชื่อวิธีการ type Vertex struct { X, Y float64 } func (v *Vertex) Abs() float64 { return math.Sqrt(v.X*v.X + v.Y*v.Y) } ประเภทอินเตอร์เฟสถูกกำหนดโดยชุดวิธีการ ค่าประเภทอินเตอร์เฟสสามารถเก็บค่าใดก็ได้ที่ใช้วิธีการเหล่านั้น นี่เป็นวิธีเดียวในการสร้างส่วนต่อประสานใน Go Google อธิบายเพิ่มเติมว่า: ชนิดที่ใช้อินเทอร์เฟซโดยใช้วิธีการ ไม่มีการประกาศเจตนาอย่างชัดเจน [ interfaceการประกาศเช่น] อินเทอร์เฟซโดยนัย decouple ใช้งานแพคเกจจากแพคเกจที่กำหนดอินเทอร์เฟซ: ไม่ขึ้นอยู่กับอีก นอกจากนี้ยังสนับสนุนการกำหนดอินเทอร์เฟซที่แม่นยำเนื่องจากคุณไม่จำเป็นต้องค้นหาทุกการติดตั้งและติดแท็กด้วยชื่ออินเตอร์เฟสใหม่ ทั้งหมดนี้ฟังดูน่าสงสัยเช่นวิธีการขยายใน C #ยกเว้นวิธีการใน Go ที่เป็น polymorphic โหดเหี้ยม พวกเขาจะทำงานในประเภทใด ๆที่ใช้พวกเขา …
21 c#  language-design  go 

13
โครงสร้างข้อมูลควรรวมเข้ากับภาษา (เช่นเดียวกับ Python) หรือมีอยู่ในไลบรารีมาตรฐาน (เช่นเดียวกับใน Java)?
ใน Python และภาษาโปรแกรมอื่น ๆ อีกมากมายโครงสร้างข้อมูลทั่วไปสามารถพบได้ในส่วนที่รวมเข้าด้วยกันของภาษาหลักที่มีไวยากรณ์เฉพาะของตนเอง ถ้าเราใส่ลิสต์ของลิสต์แบบรวมของ LISP ไว้ฉันก็ไม่สามารถนึกถึงภาษาอื่นที่ฉันรู้ซึ่งมีโครงสร้างข้อมูลบางส่วนที่อยู่เหนืออาเรย์เป็นส่วนหนึ่งของไวยากรณ์ของพวกเขา ดูเหมือนจะให้พวกเขาอยู่ในห้องสมุดมาตรฐาน จากมุมมองการออกแบบภาษาคุณมีความคิดเห็นอย่างไรกับการมีไวยากรณ์เฉพาะสำหรับโครงสร้างข้อมูลในภาษาหลัก มันเป็นความคิดที่ดีและจุดประสงค์ของภาษา (ฯลฯ ) เปลี่ยนความดีของตัวเลือกนี้หรือไม่? แก้ไข:ฉันขอโทษ (เห็นได้ชัด) ทำให้เกิดความสับสนเกี่ยวกับโครงสร้างข้อมูลที่ฉันหมายถึง ฉันพูดเกี่ยวกับสิ่งที่พื้นฐานและที่ใช้กันทั่วไป แต่ก็ไม่ใช่คนที่พื้นฐานที่สุด สิ่งนี้ไม่รวมต้นไม้ (ซับซ้อนเกินไปผิดปกติ), สแต็ก (ใช้บ่อยเกินไป), อาร์เรย์ (ง่ายเกินไป) แต่รวมถึงชุดรายการและแฮชแมป

2
เหตุใดแพ็คเกจและโมดูลจึงเป็นแนวคิดแยกต่างหากใน Java 9
Java 9 จะมีโมดูลเพิ่มเติมจากแพ็คเกจ ภาษามักจะมีอย่างใดอย่างหนึ่ง และโปรแกรมเมอร์ส่วนใหญ่รับรู้ศัพท์สองคำว่าเป็นคำพ้องความหมาย โมดูลถูกสร้างขึ้นบนบรรจุภัณฑ์โดยถือเป็นโมดูลดั้งเดิม รูปแบบคอมโพสิตแนะนำให้รักษาแบบดั้งเดิมและคอมโพสิตอย่างสม่ำเสมอ สิ่งที่ไม่ดีจะเกิดขึ้น ตัวอย่างเช่นดูโครงการ Valhalla ที่พวกเขาพยายามติดตั้ง supertype ทั่วไปสำหรับประเภทดั้งเดิม (ค่า) และประเภทการอ้างอิง โมดูลและแพคเกจเป็นตัวแทนของความคิดแยกความหมายหรือไม่ หมายความว่ามีเหตุผลที่จะต้องมีทั้งภาษาใด ๆ (แยกความกังวล) หรือ Java จะต้องมีทั้งคู่เป็นส่วยให้เข้ากันได้ย้อนหลัง? ทำไมแนะนำแนวคิดใหม่แทนที่จะเพิ่มแนวคิดที่มีอยู่ JSR 376 : "Java ระบบโมดูลแพลตฟอร์ม" ดำเนินการภายในโครงการจิ๊กซอว์ ตามSOTMS โมดูลคือชุดของโค้ดและข้อมูลที่อธิบายตนเอง รหัสของมันถูกจัดระเบียบเป็นชุดของแพคเกจที่ประกอบด้วยชนิดเช่นคลาส Java และอินเตอร์เฟส ข้อมูลรวมถึงทรัพยากรและข้อมูลคงที่ประเภทอื่น ๆ JLS ระมัดระวังหลีกเลี่ยงการกำหนดสิ่งที่เป็นแพคเกจ จากวิกิพีเดีย : แพคเกจ Java เป็นเทคนิคสำหรับการจัดคลาส Java เป็นเนมสเปซที่คล้ายกับโมดูลของ Modula โดยให้การเขียนโปรแกรมแบบแยกส่วนใน Java ฉันรู้ว่าการอ้างถึงวิกิพีเดียเป็นการปฏิบัติที่ไม่ดี แต่สะท้อนถึงความเข้าใจร่วมกัน …

6
มีภาษาระดับสูงพิเศษออกไปไหม [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน5 ปีที่ผ่านมา ในอดีต HLL มีลักษณะคล้าย C, Fortran หรือ Pascal และ VHLL เป็นอะไรที่เหมือน Ruby หรือ Python ฉันคุ้นเคยกับคำศัพท์ 4GL, 5GL, DSL และ LOP และผู้ที่ไม่ควรอ่าน Wikipedia สำหรับคำจำกัดความ ฉันกำลังมองหา UHLL คำถามของฉันคือ: มีภาษาคอมพิวเตอร์ใดบ้างที่มีลำดับความสำคัญเพิ่มมากขึ้นและมีใครทำงานกับพวกเขาหรือไม่ ประสิทธิผลมากขึ้นหมายถึงโค้ดที่ถูกเขียนน้อยลงและเวลาโปรแกรมเมอร์น้อยลงเพื่อให้ได้ผลลัพธ์ผลลัพธ์ข้อผิดพลาดน้อยลงและการดีบักน้อยลงการเชื่อมโยงแนวคิดที่ใกล้ชิดระหว่างโค้ดและข้อกำหนดมากขึ้น โดเมนหลักที่ฉันสนใจคือแอพพลิเคชั่นทางธุรกิจและผู้บริโภคทั่วไปพร้อมหน้า GUI หรือเบราว์เซอร์การคงอยู่ของข้อมูลและการเชื่อมต่อกับระบบอื่นเช่นการพิมพ์และอีเมล คนอื่นอาจโฟกัสที่อื่นดี ฉันรู้ว่าภาษาเหล่านั้นบางอย่างอาจเฉพาะโดเมนและพวกเขาอาจจะน้อยกว่าความสามารถในการกำหนดค่าของแอปพลิเคชันขนาดใหญ่และมีความสามารถ สเปรดชีต Excel จัดอยู่ในหมวดหมู่นี้ ฉันรับรู้ว่าบางภาษาเหล่านั้นอาจปรากฏทั่วไป แต่อาจยังแคบในขอบเขตและไม่เหมาะสมกับปัญหามากมาย ตัวอย่างเช่น Matlab …

3
ทำไมไม่มีตัวดำเนินการกำหนดผสมสำหรับตัวดำเนินการเชิงตรรกะ (เช่น ||, && ฯลฯ )
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Software Engineering Stack Exchange อพยพ 6 ปีที่แล้ว ตาม ECMA-262 ซึ่งเป็นส่วนหนึ่ง 11.13 *= /= %= += -= <<= >>= >>>= &= ^= |=ต่อไปนี้เป็นรายการครบถ้วนสมบูรณ์ของผู้ประกอบการที่ได้รับมอบหมายสารประกอบ: ตามส่วนที่ 11.11 var c = a || bจะใส่aค่าลงในcถ้าToBoolean(a)เป็นจริงและจะใส่bค่าลงไปเป็นcอย่างอื่น เช่นนั้นเหตุผลหรือมักจะถูกใช้เป็นตัวดำเนินการรวมกันเช่น function (options) { options = options || {}; } a = a || bบ่อยพอรวมกันถูกใช้เพื่อระบุค่าเริ่มต้นสำหรับตัวแปรตามที่ได้แสดงไว้ด้านบน: ดูเหมือนว่าผู้ประกอบการที่ได้รับมอบหมายสารประกอบจะเป็นประโยชน์จริงๆที่ช่วยให้การเขียนโค้ดข้างต้นในแฟชั่นสั้นและทำความสะอาด:||= …

7
เหตุใด Java จึงมีพื้นฐานสำหรับตัวเลขขนาดแตกต่างกัน
ใน Java มีชนิดดั้งเดิมสำหรับbyte, short, intและlongและสิ่งเดียวกันและfloat doubleเหตุใดจึงจำเป็นต้องให้บุคคลตั้งค่าจำนวนไบต์ที่ควรใช้สำหรับค่าดั้งเดิม ไม่สามารถกำหนดขนาดแบบไดนามิกได้ขึ้นอยู่กับว่าจำนวนที่ส่งผ่านนั้นใหญ่แค่ไหน มี 2 ​​เหตุผลที่ฉันนึกถึง: การตั้งค่าขนาดของข้อมูลแบบไดนามิกหมายความว่ามันจะต้องสามารถเปลี่ยนแบบไดนามิกได้เช่นกัน สิ่งนี้อาจทำให้เกิดปัญหาประสิทธิภาพหรือไม่ บางทีโปรแกรมเมอร์อาจไม่ต้องการให้ใครบางคนสามารถใช้ตัวเลขที่ใหญ่กว่าขนาดที่กำหนดและช่วยให้พวกเขา จำกัด มันได้ ฉันยังคงคิดว่าจะได้รับประโยชน์มากมายจากการใช้งานแบบเดี่ยวintและfloatแบบเรียบง่ายมีเหตุผลบางประการที่ Java ตัดสินใจไม่ให้ไปเส้นทางนี้หรือไม่?

2
เหตุใดจึงมีข้อ จำกัด () ใหม่ใน C # แต่ไม่มีข้อ จำกัด อื่นที่คล้ายคลึงกัน
ใน C # generics เราสามารถประกาศข้อ จำกัด สำหรับพารามิเตอร์ชนิดจะมีคอนสตรัคเริ่มต้นด้วยการพูดว่าT where T : new()อย่างไรก็ตามไม่มีข้อ จำกัด อื่น ๆ เช่นนี้ที่ถูกต้อง - new(string)ตัวอย่างเช่น ฯลฯ จากมุมมองของการออกแบบภาษาและ / หรือการนำไปใช้งานอะไรคือสาเหตุของสิ่งนี้? มีบางอย่างในการทำงานของคอนสตรัคเตอร์หรือวิธีการใช้งานระบบพิมพ์ที่ห้ามสิ่งนี้ (หรืออย่างน้อยก็ทำให้ยากขึ้น)? ถ้าเป็นเช่นนั้นมันคืออะไร? ผมจำได้อ่านบางที่default(T)จริงคอมไพล์สำหรับnew T() T : structมันเกี่ยวข้องกับสิ่งนี้หรือเปล่า? หรือเป็นเพียงการตัดสินใจออกแบบเพื่อหลีกเลี่ยงการทำให้ภาษาซับซ้อนเกินไป?

8
ทำไม x = x ++ ไม่ได้กำหนด?
มันไม่ได้กำหนดเพราะมันจะแก้ไขxสองครั้งระหว่างจุดลำดับ มาตรฐานบอกว่ามันไม่ได้กำหนดดังนั้นมันจึงไม่ได้กำหนด เท่าที่ฉันรู้ แต่ทำไม ความเข้าใจของฉันคือการห้ามการทำเช่นนี้จะช่วยให้คอมไพเลอร์เพิ่มประสิทธิภาพได้ดีขึ้น นี่อาจสมเหตุสมผลเมื่อ C ถูกประดิษฐ์ขึ้น แต่ตอนนี้ดูเหมือนจะเป็นข้อโต้แย้งที่อ่อนแอ ถ้าเราต้องสร้าง C ใหม่วันนี้เราจะทำแบบนี้หรือจะทำได้ดีกว่านี้ได้ไหม หรืออาจมีปัญหาที่ลึกกว่านั้นทำให้ยากที่จะกำหนดกฎที่สอดคล้องกันสำหรับนิพจน์ดังกล่าวดังนั้นจึงเป็นการดีที่สุดที่จะห้ามพวกเขา สมมติว่าเราต้องสร้าง C ใหม่ในวันนี้ ฉันอยากจะแนะนำกฎง่ายๆสำหรับการแสดงออกเช่นx=x++ซึ่งดูเหมือนว่าฉันจะทำงานได้ดีกว่ากฎที่มีอยู่ ฉันต้องการรับความคิดเห็นของคุณเกี่ยวกับกฎที่แนะนำเมื่อเปรียบเทียบกับกฎที่มีอยู่หรือคำแนะนำอื่น ๆ กฎที่แนะนำ: ระหว่างจุดลำดับลำดับของการประเมินผลจะไม่ได้รับการกำหนด ผลข้างเคียงเกิดขึ้นทันที ไม่มีพฤติกรรมที่ไม่ได้กำหนดที่เกี่ยวข้อง นิพจน์ประเมินค่านี้หรือว่า แต่จะไม่ฟอร์แมตฮาร์ดดิสก์ของคุณอย่างแน่นอน (ฉันไม่เคยเห็นการใช้งานที่x=x++ฟอร์แมตฮาร์ดดิสก์มาก่อน) ตัวอย่างนิพจน์ x=x++- xดีที่กำหนดไว้ไม่เปลี่ยนแปลง ครั้งแรกที่xจะเพิ่มขึ้น (ทันทีเมื่อx++ได้รับการประเมิน) xแล้วก็ค่าเดิมจะถูกเก็บไว้ใน x++ + ++x- ที่เพิ่มสองครั้งเพื่อประเมินx แม้ว่าอาจประเมินทั้งสองด้านก่อนผลลัพธ์ก็คือ(ด้านซ้ายก่อน) หรือ(ด้านขวาก่อน)2*x+2x + (x+2)(x+1) + (x+1) x = x + (x=3)- ไม่ได้, xการตั้งค่าเป็นอย่างใดอย่างหนึ่งหรือx+3 ถ้าด้านขวาได้รับการประเมินครั้งแรกก็ …

3
Java และ. NET: เหตุใดอัลกอริธึมการเรียงลำดับแบบอื่นจึงถูกใช้โดยค่าเริ่มต้น
เพียงแค่สงสัยว่าทำไมJavaและ.NET Frameworkใช้อัลกอริทึมการเรียงลำดับที่แตกต่างกันตามค่าเริ่มต้น ใน Java Array.Sort()ใช้อัลกอริทึมMerge Sortตามค่าเริ่มต้นและตามที่Wikipedia.comพูดว่า: ใน Java เมธอด Arrays.sort () ใช้การเรียงแบบผสานหรือการปรับแบบเร็วขึ้นอยู่กับประเภทข้อมูลและสำหรับการสลับประสิทธิภาพการปรับใช้เพื่อเรียงลำดับการแทรกเมื่อเรียงลำดับองค์ประกอบอาร์เรย์น้อยกว่าเจ็ดรายการ ใน. NET Framework Array.Sort/List.Sort()ใช้Quick Sortเป็นอัลกอริทึมการเรียงลำดับเริ่มต้น ( MSDN ): List.Sort () ใช้ Array.Sort ซึ่งใช้อัลกอริทึม QuickSort การใช้งานนี้จัดเรียงไม่เสถียร นั่นคือถ้าสององค์ประกอบมีค่าเท่ากันลำดับของพวกเขาอาจไม่ถูกสงวนไว้ ในทางตรงกันข้ามการจัดเรียงที่มีเสถียรภาพจะรักษาลำดับขององค์ประกอบที่เท่ากัน จากการดูตาราง"การเปรียบเทียบอัลกอริธึม"ที่ยอดเยี่ยมเราจะเห็นได้ว่าอัลกอริธึมทั้งสองนั้นมีพฤติกรรมที่แตกต่างจากมุมมองการใช้งานหน่วยความจำและกรณีแย่ที่สุด: ทั้งสองJavaและ.NETเป็นกรอบการทำงานที่ยอดเยี่ยมสำหรับการพัฒนาโซลูชันองค์กรทั้งสองมีแพลตฟอร์มสำหรับการพัฒนาแบบฝัง เหตุใดพวกเขาจึงใช้อัลกอริธึมการเรียงลำดับที่แตกต่างกันตามค่าเริ่มต้นความคิดใด ๆ

6
ฟังก์ชันแบบอินไลน์ใน C ++ ประเด็นคืออะไร?
ตามสิ่งที่ฉันอ่านคอมไพเลอร์ไม่จำเป็นต้องแทนที่การเรียกใช้ฟังก์ชันของฟังก์ชันอินไลน์ด้วยร่างกาย แต่จะทำเช่นนั้นหากทำได้ นี่ทำให้ฉันคิด - ทำไมเราถึงมีคำอินไลน์ถ้าเป็นเช่นนั้น? ทำไมไม่ทำฟังก์ชั่นอินไลน์ฟังก์ชั่นทั้งหมดโดยค่าเริ่มต้นและให้คอมไพเลอร์คิดว่ามันสามารถทดแทนการโทรด้วยร่างกายฟังก์ชั่นหรือไม่?

10
นักพัฒนา Java คิดอย่างไรกับ Scala [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันได้ตั้งข้อสังเกตว่าการสนับสนุน IDE นั้นใกล้เคียงกับที่ดี แต่ภาษานั้นรองรับสำนวนการเขียนโปรแกรมที่ใช้งานได้ดีกว่าหมดจด

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