นี่เป็นส่วนหนึ่งของชุดคำถามที่มุ่งเน้นโครงการที่เรียกว่า 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));
จุดสนใจของกรอบการทำงานคือผู้ที่ชื่นชอบภาษารวมถึงผู้ที่สนใจในการสร้างรหัสหรือแอปพลิเคชัน ให้ความสำคัญกับการรวบรวมการสร้างรหัสและการพัฒนาภาษากรอบควรมุ่งเน้นไปที่ความสะดวกในการใช้งานหรือพลังงานดิบ?
เป้าหมายหลักของฉันคือการเพิ่มความพร้อมใช้งานของเครื่องมือดังกล่าวดังนั้นผู้ที่สนใจโดเมนไม่จำเป็นต้องมีประสบการณ์มากมายในโดเมนทฤษฎีภาษาก่อนที่พวกเขาจะสามารถเริ่มทำงานในโครงการที่ใช้ภาษาเป็นศูนย์กลางได้
เนื่องจากฉันเป็นผู้เขียนกรอบความคิดของฉันเกี่ยวกับ "การใช้งาน" นั้นมีอคติ ดังนั้นฉันต้องถามอีกว่าจุดเน้นและเป้าหมายเหมาะสมกับผู้อื่นที่ไม่เกี่ยวข้องกับโครงการหรือไม่