กรอบการพัฒนาภาษาควรจะใช้ง่ายแค่ไหน?


11

นี่เป็นส่วนหนึ่งของชุดคำถามที่มุ่งเน้นโครงการที่เรียกว่า Abstraction Project ซึ่งมีจุดประสงค์เพื่อสรุปแนวคิดที่ใช้ในการออกแบบภาษาในรูปแบบของกรอบ

หน้าอื่นที่เกี่ยวข้องกับมันที่เกี่ยวข้องกับการพิมพ์ที่มีโครงสร้างที่สามารถดูได้ที่นี่ เมตาหัวข้อที่เกี่ยวข้องกับสอบถามรายละเอียดเพิ่มเติมเกี่ยวกับกรอบและสถานที่ที่เหมาะสมในการโพสต์สามารถพบได้ที่นี่

มันง่ายแค่ไหนที่จะใช้ Framework การพัฒนาภาษา?

ฉันได้เขียนกรอบการสร้างรหัสขนาดใหญ่ซึ่งรวมถึงความสามารถในการส่งผลลัพธ์ไปยังคอมไพเลอร์เฉพาะภาษา หัวข้อที่ใช้งานง่ายขึ้นมาจากตัวอย่างหนึ่งของกรอบงาน: CodeDOM หรือโมเดลเอกสารวัตถุรหัส

มันเป็นกรอบงานที่เขียนโดย Microsoft ที่อธิบายโครงสร้างรหัสทั่วไป แต่โดยทั่วไปแล้วมักจะออกมาก (การแสดงออกทางสีหน้า) และมีแนวโน้มที่จะเป็นนามธรรมเล็กน้อยในการเป็นตัวแทนของการสร้างบางอย่างเพื่อการปล่อยรหัสไม่ดีอย่างจริงจัง CodeDOM ไม่ดีจัดการเปล่งPrivateImplementationTypeบนCodeMemberMethodเมื่อชนิดที่ใช้เป็นอินเตอร์เฟซทั่วไป CodeDOM เป็นเหตุผลดั้งเดิมของฉันในการเขียนโปรแกรมสร้างรหัสเครื่องแรก

สิ่งหนึ่งที่ฉันพยายามทำเพื่อลดความซับซ้อนของเฟรมเวิร์กคือลดจำนวนงานที่คุณต้องทำบางอย่างและมุ่งเน้นไปที่การทำงานกับประเภทที่เฉพาะเจาะจงซึ่งประกอบไปด้วยการกระทำเหล่านั้น

นี่คือการเปรียบเทียบแบบเคียงข้างกันว่าเฟรมเวิร์กที่ฉันเขียนนั้นทำงานอย่างไร:

//Truncated...
/* *
 * From a project that generates a lexer, this is the 
 * state->state transition character range selection logic.
 * */
var nextChar = nextMethod.Parameters.Add(new TypedName("currentChar", typeof(char).GetTypeReference()));
//...
char start = rangeElement.B.Value.Start;
char end = rangeElement.B.Value.End;
/* *
 * 'start' <= nextChar && nextChar <= 'end'
 * */
currentExpression = start.LessThanOrEqualTo(nextChar).LogicalAnd(nextChar.LessThanOrEqualTo(end));

กับ CodeDOM:

//Truncated...
var nextChar = new CodeVariableReferenceExpression("nextChar");
//...
var start = new CodePrimitiveExpression(rangeElement.B.Value.Start);
var end = new CodePrimitiveExpression(rangeElement.B.Value.End);
currentExpression = new CodeBinaryOperatorExpression(new CodeBinaryOperatorExpression(start, CodeBinaryOperatorType.LessThanOrEqual, nextChar), CodeBinaryOperatorType.BooleanAnd, new CodeBinaryOperatorExpression(nextChar, CodeBinaryOperatorType.LessThanOrEqual, end));

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

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

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


1
คุณควรจะถามคำถามนี้ในcodereview.stackexchange.com
Robert Harvey

6
คำถามที่ว่ากรอบควรจะใช้งานง่ายด้วยค่าใช้จ่ายของพลังงานดิบหรือไม่นั้นไม่เหมาะที่จะใช้ในการทบทวน Code ซึ่งในกรณีที่ "สถาปัตยกรรมระดับสูงและการออกแบบระบบซอฟต์แวร์" ไม่ได้อยู่ใน- หัวข้อมีและอยู่ในหัวข้อที่นี่ การตรวจสอบรหัสใช้สำหรับเมื่อคุณมีรหัสการทำงานและคุณต้องการคำวิจารณ์

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

@kevincline กรณีการใช้งานทั่วไปสำหรับตัวสร้างรหัสเป็นภาษาเฉพาะโดเมนซึ่งใช้เฟรมเวิร์กการสร้างรหัสเอนกประสงค์ นี่ไม่ใช่ทางเลือกมากนักทางเลือกคือการรวบรวมภาษากลางภายในของคุณเองและตีความมันผ่าน VM หรือแปลมันเองในโครงสร้างระดับล่าง แต่ในที่สุดคุณก็ทำสิ่งเดียวกัน . นั่นคือสิ่งที่เฟรมเวิร์กนี้มีเป้าหมายที่จะทำเมื่อคุณต้องการทำงานเพื่อสร้างโค้ดแบบไดนามิกคุณจะต้องใช้สิ่งนี้กับที่จะทำให้การใช้งานของคุณเป็นแบบเดียวกัน
Allen Clark Copeland Jr

มันไม่มากว่าภาษาต้นฉบับไม่เพียงพอมันคือไวยากรณ์ภาษาเป็นเพียงข้อความจนกว่าจะมีการเขียนซอฟต์แวร์ตัวกลางเพื่อแปลจากข้อความต้นฉบับไปยังแพลตฟอร์มเป้าหมาย ในกรณีนี้คือโครงสร้างพื้นฐานภาษาทั่วไป (CLI) หรือรหัสในภาษาที่ใช้งานทั่วไปที่กำหนดเป้าหมายเป็น CLI กรอบการทำงานมีวัตถุประสงค์เพื่อจัดการงานเสี้ยงฮึดฮัดแสดงความไม่พอใจระดับสูงและแปลพวกเขาไปสู่การสร้างระดับต่ำพอสำหรับรุ่น IL ie คอมไพเลอร์เพียงเพราะคุณต้องการคอมไพเลอร์ไม่ได้แปลว่าภาษาของคุณมีพลังไม่เพียงพอ มันจำเป็นต้องใช้
Allen Clark Copeland Jr

คำตอบ:


2

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

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

นี่คือเอกสารทางเทคนิคเกี่ยวกับ DMSเหมือนเมื่อหลายปีก่อน (เราปรับปรุงให้ดีขึ้นเรื่อย ๆ )

ในขณะที่ DMS นั้นยากที่จะสร้างขึ้นเราพบว่ามันต้องใช้วิศวกรรมขนาดใหญ่ที่สอดคล้องกันเพื่อกำหนดค่าภาษาจริงให้กับ DMS รวมถึง IBM COBOL, C # 4.0, Java 1.7, C ++ 11 (และอื่น ๆ อีกมากมาย)

สิ่งที่เราคิดว่ามันทำได้ดีพอสมควร: ลดค่าใช้จ่ายของเครื่องมือสร้างลงได้ 1-2 ขนาด สิ่งนี้หมายความว่างานที่อาจใช้เวลา 1-10 ปีสามารถครุ่นคิดโดยมนุษย์ปุถุชนเป็นโครงการ 1 เดือน - 1 ปี สิ่งที่ยังไม่ง่าย:

  • การกำหนด langauges ใหม่
  • การจัดการสำนวนภาษาทั้งหมดในปัจจุบัน
  • ทำให้ง่ายต่อการเขียนรหัสที่กำหนดเองเฉพาะสำหรับงานของคุณ
  • การกำหนดการวิเคราะห์ใหม่ที่ซับซ้อน
  • การจัดการบางส่วนของโปรแกรมหรือโปรแกรมที่มีข้อผิดพลาด
  • (จนถึงจุดเริ่มต้นของคุณ) ทำให้ง่ายสำหรับ nonexperts ที่จะใช้เครื่องมือเหล่านี้

ดังนั้นจึงมีพื้นที่มากมายสำหรับการปรับปรุง ให้ดอกไม้หลายบาน


0

คำถามนี้อาจได้รับคำตอบใน The Mythical Man Month ส่วน "Conceptual Integrity" หากไม่ตรงกับคำถามของคุณอย่างน้อยที่สุด ถึงแม้ว่าบรูคส์จะอธิบายถึงการออกแบบระบบคอมพิวเตอร์ทั้งหมด แต่บทความนี้สามารถนำไปใช้กับกรอบงานและภาษาใหม่ได้อย่างสมบูรณ์แบบ

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


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