Ini adalah bagian dari serangkaian pertanyaan yang berfokus pada proyek yang disebut Proyek Abstraksi, yang bertujuan untuk abstrak konsep-konsep yang digunakan dalam desain bahasa dalam bentuk kerangka kerja.
Halaman lain yang terkait dengan itu terkait dengan pengetikan struktural dapat dilihat di sini . Meta-topik yang terkait dengan penyelidikan tentang kerangka kerja dan tempat yang tepat untuk memposting dapat ditemukan di sini .
Seberapa mudah seharusnya menggunakan Kerangka Pengembangan Bahasa?
Saya telah menulis kerangka kerja pembuatan kode skala besar yang juga mencakup kemampuan untuk mengirim hasilnya ke kompiler khusus bahasa. Topik kemudahan penggunaan muncul dari satu contoh kerangka kerja seperti: CodeDOM, atau Model Obyek Dokumen Kode.
Ini adalah kerangka kerja yang ditulis oleh Microsoft yang menggambarkan struktur kode umum, tetapi umumnya meninggalkan banyak (pemaksaan ekspresi) dan cenderung agak abstrak dalam representasi konstruk tertentu, untuk benar-benar memancarkan kode buruk berdasarkan pada apa yang Anda lakukan: sebelumnya CodeDOM buruk ditangani memancarkan PrivateImplementationType
pada CodeMemberMethod
, ketika jenis yang digunakan adalah antarmuka generik. CodeDOM adalah alasan asli saya untuk menulis generator kode pertama saya.
Satu hal yang saya coba lakukan, untuk menyederhanakan kerangka kerja, adalah mengurangi jumlah pekerjaan yang perlu Anda lakukan sesuatu, dan fokus pada tindakan versus jenis spesifik yang membentuk tindakan itu.
Inilah perbandingan berdampingan tentang cara kerja kerangka yang saya tulis:
//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));
Versus 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));
Fokus kerangka kerja ini adalah penggemar bahasa, serta mereka yang tertarik untuk menghasilkan kode atau aplikasi. Mengingat fokusnya pada kompilasi, pembuatan kode, dan pengembangan bahasa, haruskah kerangka kerja fokus pada kemudahan penggunaan atau daya mentah?
Tujuan utama saya adalah untuk meningkatkan ketersediaan alat-alat seperti itu, sehingga mereka yang tertarik pada domain tidak memerlukan banyak pengalaman dalam domain teori bahasa sebelum mereka dapat mulai bekerja pada proyek-proyek yang berfokus pada bahasa mereka sendiri.
Mengingat bahwa saya penulis kerangka kerja, pandangan saya tentang "kegunaan" bias. Jadi, saya harus bertanya kepada yang lain apakah fokus dan tujuan masuk akal bagi orang lain yang tidak terkait dengan proyek.