ฉันจะเขียนข้อกำหนดภาษาการเขียนโปรแกรมได้อย่างไร


16

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

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


1
คุณอ่านภาษาเฉพาะของโดเมนโดย Martin Fowler หรือยัง amazon.com/…
Gary Rowe

@ Gary Rowe: ฉันยังไม่ได้ ดูเหมือนว่าจะเป็นการอ่านที่ดี แต่อาจไม่ใช่สิ่งที่ฉันกำลังมองหา
Jon Purdy

ข้อได้เปรียบของมาตรฐานเหนือการปรับใช้การอ้างอิงคือคุณสามารถกำหนดได้ว่าการใช้งานอื่น ๆ สามารถเบี่ยงเบนจากสิ่งที่การใช้งานของคุณทำ
Bart van Ingen Schenau

คำตอบ:


3

ฉันพบข้อมูลจำเพาะภาษา Java ทั้งเป็นทางการและอ่านได้และฉันคิดว่ามันมีโครงสร้างที่สมเหตุสมผล รายละเอียด W3C บางอย่างอาจเป็นตัวอย่างที่ดีเช่นกัน

การทำงานอย่างเป็นทางการสามารถช่วยคุณลดความซับซ้อนของภาษาลงและดูกรณีศึกษาต่างๆ

ส่วนหัวการถ่ายโอนข้อมูลสมอง: การเข้ารหัสต้นฉบับ, lexing, ชนิดพื้นฐาน, ตัวอักษร, โอเปอเรเตอร์, การแสดงออก, คำสั่งง่าย ๆ , เงื่อนไข, ลูป, ฟังก์ชั่น (คำจำกัดความและการโทร) การประกาศประเภทโมดูลหน่วยการรวบรวม การนำเข้าวิธีการ) โมเดลหน่วยความจำผลข้างเคียงการพิมพ์การทำงานพร้อมกัน ...


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

7

อ่านล็อตและทำให้มันง่าย

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

ดังที่ฉันได้กล่าวถึงในความคิดเห็นฉันแนะนำให้คุณอ่านDomain Specific Languages ​​โดย Martin Fowlerด้วยเหตุผลดังต่อไปนี้:

  1. เขาเข้าสู่การฝึกฝนอย่างลึกซึ้งเกี่ยวกับสาเหตุที่คุณควรออกแบบภาษา
  2. มีรายละเอียดเกี่ยวกับวิธีการทำ (parsers, ตัววิเคราะห์คำ, workbenches ภาษา ฯลฯ )
  3. มีคำแนะนำการใช้งานโดยละเอียดเกี่ยวกับวิธีที่ไวยากรณ์ที่คุณเลือกสามารถจัดการกับแนวคิดเช่นการปิด, คำอธิบายประกอบ, รายการตัวอักษร, การรับแบบไดนามิก ฯลฯ

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

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

ถ้ามันจะถูกใช้ในภารกิจต่อไปที่ Titan ข้อมูลจำเพาะที่มีรายละเอียดมากซึ่งแสดงการพิสูจน์อย่างเป็นทางการที่แน่นอนของพฤติกรรมของแต่ละองค์ประกอบจะเป็นระดับขั้นต่ำสุด

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

ในระยะสั้นให้มันง่ายและผู้คนจำนวนมากจะใช้มัน


ขอบคุณสำหรับสิ่งนี้. ฉันมีประสบการณ์มากมายในการพัฒนาภาษาและแม้แต่บันทึกพวกเขาค่อนข้างละเอียด แต่เป็นแนวคิดของมาตรฐานที่ทำให้ฉันได้รับอย่างสม่ำเสมอ ฉันอาจต้องอ่านคำแนะนำและทดลองสักเล็กน้อย
Jon Purdy

@Jon Purdy คุณมีตัวอย่างของภาษาออนไลน์ที่คุณสามารถรวมไว้ในคำถาม?
Gary Rowe

ฉันยังไม่มีตัวอย่างโครงการปัจจุบันของฉัน ตัวอย่างสาธารณะที่สมบูรณ์แบบจริงๆของภาษาที่ฉันทำ (ซึ่งฉันใช้จริง ๆ !) อยู่ที่vision-language.sourceforge.net/cgi-bin/Home
Jon Purdy

@ จอนเพอร์ซี่วิชั่นดูน่าสนใจ - การเรียงลำดับของความเร็วเพิ่มขึ้น นอกจากนี้คุณอาจต้องการพิจารณาหน้าจอ YouTube ที่แสดงวิธีการติดตั้งและเขียนตัวอย่างเว็บไซต์ขนาดเล็ก (พูดสำหรับช่างประปาท้องถิ่น) สิ่งนี้จะทำให้ช่วงการเรียนรู้ง่ายขึ้นมากเนื่องจากผู้คนสามารถมองเห็นมันในทางปฏิบัติและรับประโยชน์ทันที คุณสามารถพูดคุยเกี่ยวกับประโยชน์เมื่อเทียบกับ JSP, Velocity, ASP.Net, Freemarker และอื่น ๆ
Gary Rowe

นั่นเป็นความคิดที่ดี; ฉันทำวิดีโอ YouTube บ่อยครั้งมาก (ประมาณสามครั้งต่อสัปดาห์) ดังนั้นฉันคิดว่าฉันน่าจะเหมาะกับตัวเองอย่างแน่นอน
Jon Purdy

3

Wirth ได้ออกแบบและดำเนินการภาษาการเขียนโปรแกรมจำนวนมาก: ในส่วนนี้ข้อกำหนดสำหรับภาษาOberonและOberon2นั้นมีความโดดเด่นเนื่องจากมีความครบถ้วนสมบูรณ์มีความอดทนและอ่านง่าย


2

Common Lisp และ Haskell มีมาตรฐานภาษา Ruby และ Python มีการนำไปใช้และเอกสารประกอบ ดังนั้นฉันจะบอกว่ามาตรฐานภาษาไม่จำเป็น แต่อาจเป็นประโยชน์หากคุณคาดว่าจะมีการใช้งานมากกว่าหนึ่งภาษาที่คุณกำลังออกแบบ ในทางกลับกันมาตรฐานจะเร็วก่อนกำหนดหากคุณคาดหวังว่าการเปลี่ยนแปลงที่สำคัญในการกำหนดภาษาของคุณ


จริงๆแล้วทับทิมมีสองสิ่งที่อาจพิจารณาได้ว่า "คุณสมบัติ" มี ISO Ruby Specification ซึ่งขณะนี้อยู่ในสถานะ Final Draft และกำลังถูกเขียนโดยบางคนที่มีประสบการณ์เกี่ยวกับข้อกำหนดภาษา (ทำงานกับ ANSI Common Lisp และ ISO C ++) และมีโครงการ RubySpec ซึ่งเป็นชุดของตัวอย่างปฏิบัติการแบบ RSpec ซึ่งสร้างทั้งข้อมูลจำเพาะที่มนุษย์สามารถอ่านได้และชุดทดสอบความสอดคล้องของเครื่องที่ปฏิบัติการได้สำหรับข้อมูลจำเพาะนั้น
Jörg W Mittag

1

ข้อมูลจำเพาะใด ๆ ควรสั้นและสามารถยืนการทดสอบเวลาได้

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

แน่นอนว่ามันมีอะไรมากกว่าแค่ไวยากรณ์ ดูสิ่งที่คนอื่นทำ ... perl6, scheme, C ... พวกเขาจัดการกับปัญหาที่ implementor ยังใส่ใจ

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