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

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

3
เหตุใด Swift initialise subclass จะต้องมีฟิลด์ที่เหมาะสมเป็นอันดับแรก
ในภาษา Swift เพื่อเริ่มต้นอินสแตนซ์หนึ่งต้องกรอกข้อมูลในฟิลด์ทั้งหมดของคลาสนั้นและจากนั้นเรียก superconstructor เท่านั้น: class Base { var name: String init(name: String) { self.name = name } } class Derived: Base { var number: Int init(name: String, number: Int) { // won't compile if interchange lines self.number = number super.init(name) } } สำหรับฉันดูเหมือนว่าย้อนหลังเนื่องจากต้องselfสร้างอินสแตนซ์ก่อนที่จะกำหนดค่าให้กับเขตข้อมูลและรหัสนั้นให้ความประทับใจราวกับว่าการผูกมัดเกิดขึ้นหลังจากการมอบหมายเท่านั้น นอกจากนั้นซูเปอร์คลาสยังไม่มีวิธีทางกฎหมายในการอ่านคุณสมบัติที่แนะนำของคลาสย่อยดังนั้นความปลอดภัยจะไม่นับในกรณีนี้ นอกจากนี้ภาษาอื่น ๆ อีกมากมายเช่น JavaScript และแม้แต่ …

3
การปรับขนาดของตัวแปร“ จริง” มีประโยชน์อย่างไร?
สิ่งหนึ่งที่ทำให้ฉันรู้สึกว่าคุณสมบัติเชิงบวกของ C (จริง ๆ แล้วการใช้งานเช่น gcc, clang, ... ) คือความจริงที่ว่ามันไม่ได้เก็บข้อมูลที่ซ่อนอยู่ถัดจากตัวแปรของคุณที่รันไทม์ โดยสิ่งนี้ฉันหมายความว่าหากคุณต้องการตัวแปร "x" ของประเภท "uint16_t" คุณสามารถมั่นใจได้ว่า "x" จะใช้พื้นที่ 2 ไบต์เท่านั้น (และจะไม่นำข้อมูลที่ซ่อนอยู่เช่นประเภท ฯลฯ มาใช้) .) ในทำนองเดียวกันถ้าคุณต้องการอาเรย์ของจำนวนเต็ม 100 จำนวนเต็มคุณอาจมั่นใจได้ว่ามันมีขนาดใหญ่เท่ากับจำนวนเต็ม 100 ตัว แต่ยิ่งฉันพยายามที่จะเกิดขึ้นกับกรณีการใช้งานที่เป็นรูปธรรมสำหรับคุณลักษณะนี้มากขึ้นผมกำลังสงสัยว่าถ้าเป็นจริงมีใด ๆข้อได้เปรียบในทางปฏิบัติที่ทุกคน สิ่งเดียวที่ฉันสามารถขึ้นมาเพื่อให้ห่างไกลก็คือว่ามันเห็นได้ชัดว่าต้องการ RAM น้อย สำหรับสภาพแวดล้อมที่ จำกัด เช่นชิป AVR เป็นต้นนี่เป็นข้อดีอย่างมาก แต่สำหรับกรณีการใช้งานเดสก์ท็อป / เซิร์ฟเวอร์ทุกวันดูเหมือนว่าจะไม่เกี่ยวข้องเลย ความเป็นไปได้อีกอย่างหนึ่งที่ฉันคิดคืออาจเป็นประโยชน์ / สำคัญสำหรับการเข้าถึงฮาร์ดแวร์หรืออาจทำแผนที่ภูมิภาคของหน่วยความจำ (เช่นสำหรับเอาต์พุต VGA และอื่น ๆ ) ... …

3
ไวยากรณ์ซ้ำกันสำหรับการกำหนดฟังก์ชั่นที่มีชื่อเป็นการตัดสินใจออกแบบภาษาที่ไม่ดีหรือไม่?
ฉันกำลังจำลองภาษาการเขียนโปรแกรมเพื่อความสนุกสนานและไวยากรณ์ได้รับอิทธิพลอย่างมากจาก Scala - คำจำกัดความของฟังก์ชันเฉพาะ ฉันได้พบปัญหาการออกแบบเพราะภาษาของฉันไม่ได้แยกความแตกต่างระหว่างการทำงานที่กำหนดไว้ผ่านทางdefไวยากรณ์ (วิธีการเรียน) และฟังก์ชั่นที่ไม่ระบุชื่อที่ได้รับมอบหมายให้เป็นค่า (สร้างขึ้นโดยใช้=>) - มันเอาความแตกต่างทั้งในการดำเนินงานและพฤติกรรม ผลลัพธ์คือนิยามสองคำต่อไปนี้หมายถึงสิ่งเดียวกัน: def square(x: Int) = x*x val square = (x: Int) => x*x ไม่มีเหตุผลสำหรับแบบฟอร์มหลัง (การกำหนดฟังก์ชันที่ไม่ระบุชื่อแบบทันที) ที่จะใช้ในสถานการณ์ปกติใด ๆ - เป็นไปได้ที่จะใช้แทนdefแบบฟอร์ม จะมีไวยากรณ์ที่ซ้ำกันดังกล่าวสำหรับการกำหนดฟังก์ชั่นที่มีชื่อทำร้ายความ orthogonality ของภาษาหรือด้านการออกแบบอื่น ๆ ? ฉันชอบโซลูชันนี้เพราะช่วยให้คำจำกัดความสั้น ๆ และใช้งานง่ายของวิธีการและฟังก์ชั่นที่มีชื่อ (ผ่านdef) และคำจำกัดความสั้น ๆ ของฟังก์ชั่นที่ไม่ระบุชื่อ (ใช้=>) แก้ไข: Scala จะแยกความแตกต่างระหว่างสอง - ฟังก์ชั่นที่ไม่ระบุชื่อไม่เหมือนกับวิธีที่กำหนดด้วยdefใน Scala ความแตกต่างนั้นค่อนข้างบอบบาง - …

3
เหตุผลใดที่ใช้เมื่อผู้ออกแบบโปรแกรมภาษาตัดสินใจว่าสัญญาณของการดำเนินการแบบโมดูโลนั้นทำอะไร
ต้องผ่านการทำงานของโมดูโล่ (ถนนที่ฉันเข้ามาขณะสำรวจความแตกต่างระหว่างremและmod ) ฉันเจอ: ในวิชาคณิตศาสตร์ผลของการดำเนินการโมดูโลคือส่วนที่เหลือของการหารแบบยุคลิด อย่างไรก็ตามการประชุมอื่น ๆ เป็นไปได้ คอมพิวเตอร์และเครื่องคิดเลขมีวิธีจัดเก็บและแสดงตัวเลขต่าง ๆ ดังนั้นคำจำกัดความของการดำเนินการโมดูโลจึงขึ้นอยู่กับภาษาการเขียนโปรแกรมและ / หรือฮาร์ดแวร์พื้นฐาน คำถาม: การผ่านส่วนยูคลิดฉันพบว่าส่วนที่เหลือของการดำเนินการนี้เป็นบวกเสมอ (หรือ 0) ข้อ จำกัด ของฮาร์ดแวร์คอมพิวเตอร์พื้นฐานบังคับให้นักออกแบบการเขียนโปรแกรมภาษาแตกต่างจากคณิตศาสตร์อย่างไร ภาษาการเขียนโปรแกรมทุกภาษามีกฎที่กำหนดไว้ล่วงหน้าหรือไม่ได้กำหนดซึ่งเป็นผลมาจากการดำเนินการ modulo ที่ได้รับมันเป็นสัญญาณ เหตุผลอะไรที่ถูกนำไปใช้ในขณะที่ทำกฎเหล่านี้ และหากฮาร์ดแวร์พื้นฐานเป็นสิ่งที่น่ากังวลกฎก็ไม่ควรเปลี่ยนแปลงตามนั้นความเป็นอิสระของภาษาโปรแกรม?

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

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

3
กรณีการใช้งานจริงของการใช้ไวยากรณ์ Chomsky Type-I (ไวต่อบริบท) คืออะไร
ฉันมีความสนุกสนานเมื่อเร็ว ๆ นี้สำรวจการพัฒนาของ parsers ภาษาในบริบทของวิธีที่พวกเขาเหมาะสมกับลำดับชั้น Chomsky ตัวอย่างของไวยากรณ์ที่ไวต่อบริบทคืออะไรในโลกแห่งความจริง (เช่นไม่ใช่ทางทฤษฎี)

3
เหตุใดโมดูล. NET จึงแยกชื่อไฟล์โมดูลออกจากเนมสเปซ
ในการปรับใช้ภาษาการเขียนโปรแกรม Scheme (มาตรฐาน R6RS) ฉันสามารถนำเข้าโมดูลดังต่อไปนี้: (import (abc def xyz)) ระบบจะพยายามค้นหาไฟล์$DIR/abc/def/xyz.slsที่$DIRมีไดเรกทอรีซึ่งคุณเก็บโมดูล Scheme ของคุณไว้ xyz.slsเป็นซอร์สโค้ดสำหรับโมดูลและถูกคอมไพล์อย่างรวดเร็วหากจำเป็น ระบบโมดูล Ruby, Python และ Perl นั้นคล้ายกันในส่วนนี้ ในทางกลับกัน C # นั้นเกี่ยวข้องกับอีกเล็กน้อย ก่อนอื่นคุณมีไฟล์ dll ที่คุณต้องอ้างอิงตามโปรเจ็กต์ คุณต้องอ้างอิงแต่ละอย่างชัดเจน สิ่งนี้เกี่ยวข้องมากกว่าการพูดวางไฟล์ dll ในไดเรกทอรีและให้ C # เลือกพวกเขาตามชื่อ ประการที่สองไม่มีการตั้งชื่อการติดต่อแบบหนึ่งต่อหนึ่งระหว่างชื่อไฟล์ dll และเนมสเปซที่นำเสนอโดย dll ฉันสามารถชื่นชมความยืดหยุ่นนี้ แต่ก็สามารถออกไปจากมือ (และมี) เพื่อให้เป็นรูปธรรมมันจะดีถ้าเมื่อฉันพูดแบบนี้using abc.def.xyz;C # จะพยายามค้นหาไฟล์abc/def/xyz.dllในบางไดเรกทอรีที่ C # รู้ที่จะดู (กำหนดค่าได้ตามโครงการ) ฉันพบว่า Ruby, …

7
คุณสมบัติที่จำเป็นสำหรับการวางแนววัตถุคืออะไร?
ฉันแค่สงสัยว่าคุณสมบัติหรือภาษาใดที่ห้องสมุดต้องมีเพื่อให้มันถูกกำหนดให้เป็น 'Object Oriented' คือการจัดวางวัตถุบางสิ่งบางอย่างที่สามารถมากขึ้นหรือน้อยกว่าจะประสบความสำเร็จในการใด ๆวัตถุประสงค์ทั่วไปการเขียนโปรแกรมภาษาที่มีคุณสมบัติที่ดี? หรือเป็นสิ่งที่สามารถทำได้ในภาษาที่โฆษณาเฉพาะที่สนับสนุนการเขียนโปรแกรมเชิงวัตถุ? ตัวอย่างเช่นดูที่รหัส C ต่อไปนี้: SDL_Surface* screen = SDL_SetVideoMode( 640, 480, 16, SDL_HWSURFACE); SDL_FreeSurface( screen ); หรือรหัสที่กล่าวถึงที่นี่ ตอนนี้โค้ดด้านบนไม่ได้ใช้การสืบทอด, ความแปรปรวนแบบรันไทม์ (?), ฟังก์ชั่นเสมือนจริง ฯลฯ แต่ดูเหมือนว่า OOP จะค่อนข้างดีสำหรับฉัน Object-Orientation เป็นเพียงการเขียนโค้ดซึ่งขึ้นอยู่กับโครงสร้างข้อมูลที่สร้างขึ้นได้และสามารถทำลายได้เช่นอ็อบเจกต์คลาสคลาส structs เป็นต้นซึ่งไม่ต้องการรูปแบบหรือคุณสมบัติพิเศษใด ๆ ที่จัดทำโดยภาษาโปรแกรมหรือไลบรารี ?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.