Bagaimana cara saya menulis spesifikasi bahasa pemrograman?

16

Saya sangat menikmati desain bahasa pemrograman. Terkadang saya pikir proyek bahasa saya dan pengguna potensial mereka akan mendapat manfaat dari dokumen standar yang komprehensif. Saya telah melihat banyak standar bahasa, mulai dari yang sangat formal (C ++) hingga yang agak informal (ECMAScript), tetapi saya tidak dapat benar-benar memahami bagaimana saya harus memecah hal-hal dan mengatur dokumen seperti itu, meskipun saya pikir saya cukup pandai menulis teknis secara umum.

Haruskah saya menulisnya seperti tutorial panjang, atau lebih seperti kertas matematika formal? Bagaimana saya memperbaruinya jika saya mengembangkannya bersamaan dengan implementasi referensi? Haruskah saya menyerah dan memperlakukan implementasi dan dokumentasi sebagai standar de facto? Lebih lanjut, apakah benar-benar ada manfaat signifikan untuk memiliki standar? Apakah memerlukan standar berarti bahasanya tidak perlu rumit?

Jon Purdy
sumber
1
Sudahkah Anda membaca Bahasa Tertentu Domain oleh Martin Fowler? amazon.com/...
Gary Rowe
@Gary Rowe: Saya belum. Tampaknya itu bacaan yang layak, meskipun mungkin tidak persis apa yang saya cari.
Jon Purdy
Keuntungan dari standar dibandingkan implementasi referensi adalah bahwa Anda dapat menentukan di mana implementasi lain dapat menyimpang dari apa yang implementasi Anda lakukan.
Bart van Ingen Schenau

Jawaban:

3

Saya menemukan spesifikasi bahasa Jawa baik formal dan mudah dibaca, dan saya pikir itu memiliki struktur yang masuk akal. Beberapa spesifikasi W3C bisa menjadi contoh yang baik juga.

Melakukan pekerjaan formal dapat membantu Anda menekan kompleksitas bahasa dan melihat kasus sudut.

Judul dump otak: pengkodean sumber, lexing, tipe fundamental, literal, operator, ekspresi, pernyataan sederhana, kondisional, loop, fungsi (definisi dan panggilan), deklarasi tipe, modul, unit kompilasi, pelingkupan variabel, berbagai jenis resolusi nama (mis. impor, metode), model memori, efek samping, pengetikan, konkurensi ...

Tobu
sumber
Daftar saran Anda sangat membantu. Saya pikir apa yang akan saya lakukan adalah melakukan brainstorming daftar yang sama, mengurutkannya dalam format seperti tutorial, dan menulis spesifikasi informal singkat dengan beberapa tambahan resmi seperti tata bahasa EBNF. Saya juga pasti akan melihat lagi spesifikasi yang Anda sebutkan untuk ide.
Jon Purdy
7

Baca banyak dan tetap sederhana

Merancang bahasa baru itu sulit. Sangat sulit. Tetapi pada akhirnya sangat memuaskan jika itu menjadi populer dan benar-benar menyelesaikan masalah yang orang alami dengan cara yang elegan.

Seperti yang saya sebutkan di komentar, saya sarankan Anda membaca Domain Specific Languages ​​oleh Martin Fowler karena alasan berikut:

  1. Dia membahas banyak hal praktis tentang mengapa Anda harus mendesain bahasa
  2. Ada detail tentang cara melakukannya (pengurai, penganalisa leksikal, meja kerja bahasa, dll.)
  3. Ada petunjuk implementasi terperinci tentang bagaimana sintaks pilihan Anda dapat dibuat untuk menangani konsep seperti penutupan, anotasi, daftar literal, penerimaan dinamis, dll.

Mengenai cara menulis spesifikasi Anda, pikirkan tentang audiens Anda. Jelas, sebelum meletakkan jari ke keyboard untuk merancang bahasa Anda, Anda akan berpikir dengan hati-hati tentang apa yang dimaksudkan untuk dilakukan.

Jika ini adalah bahasa baru yang ditafsirkan untuk menggantikan JavaScript maka Anda akan menginginkan pendekatan yang sangat laissez faire untuk menjangkau pengembang web dengan rentang perhatian terbatas dan keinginan untuk hasil segera - atau lebih cepat jika memungkinkan.

Jika itu akan digunakan pada misi berikutnya ke Titan, maka spesifikasi yang sangat rinci menunjukkan bukti formal yang tepat dari perilaku masing-masing komponen akan menjadi level entri minimal.

Jadi, ini bukan hal yang mudah. Untuk mendekati spesifikasi, Anda mungkin akan lebih baik mendapatkan banyak pengalaman dalam menciptakan bahasa Anda dan juga bekerja dengan mereka yang benar-benar menggunakannya setiap hari. Jika Anda memiliki korban yang bersedia ... eh ... pengembang, di tempat kerja yang dapat meluangkan waktu untuk mempelajari bahasa Anda, maka mereka dapat memberi Anda umpan balik tentang apa yang diperlukan untuk membuat mereka menggunakannya.

Singkatnya, sederhanakan dan lebih banyak orang akan menggunakannya.

Gary Rowe
sumber
Terima kasih untuk ini. Saya memiliki banyak pengalaman dalam mengembangkan bahasa, dan bahkan mendokumentasikannya dengan seksama, tetapi gagasan tentang standar itulah yang membuat saya konsisten. Saya mungkin harus mengambil bacaan yang disarankan dan sedikit bereksperimen.
Jon Purdy
@ Jon Purdy Apakah Anda memiliki contoh bahasa daring yang dapat Anda sertakan dalam pertanyaan?
Gary Rowe
Saya belum memiliki contoh proyek saya saat ini. Satu-satunya contoh publik lengkap dari bahasa yang saya buat (yang sebenarnya saya gunakan!) Adalah di vision-language.sourceforge.net/cgi-bin/Home
Jon Purdy
@ Jon Purdy Vision terlihat menarik - semacam Velocity yang diolah. Sebagai tambahan, Anda mungkin ingin mempertimbangkan screencast YouTube yang menunjukkan cara menginstalnya dan menulis contoh situs web kecil (misalnya untuk tukang ledeng lokal). Ini akan membuat kurva belajar lebih mudah karena orang dapat melihatnya dalam aksi dan segera mengambil manfaatnya. Anda dapat berbicara tentang manfaat dibandingkan dengan JSP, Velocity, ASP.Net, Freemarker dll
Gary Rowe
Itu ide yang bagus; Saya telah membuat banyak video YouTube akhir-akhir ini (sekitar tiga minggu), jadi saya pikir saya pasti bisa memasukkan satu.
Jon Purdy
3

Wirth merancang dan mengimplementasikan banyak bahasa pemrograman: di antaranya, spesifikasi untuk bahasa Oberon dan Oberon2 terkenal untuk kelengkapan, kesederhanaan, dan keterbacaan di sana.

grrussel
sumber
2

Common Lisp dan Haskell memiliki standar bahasa. Ruby dan Python memiliki implementasi dan dokumentasi. Jadi saya akan mengatakan bahwa standar bahasa tidak diperlukan, tetapi mungkin akan membantu jika Anda mengharapkan ada lebih dari satu implementasi bahasa yang Anda rancang. Di sisi lain, standar terlalu dini jika Anda mengharapkan perubahan signifikan dalam definisi bahasa Anda.

Larry Coleman
sumber
Sebenarnya, Ruby memiliki dua hal yang bisa dianggap "spesifikasi". Ada Spesifikasi ISO Ruby, yang saat ini dalam keadaan Final Draft dan sedang ditulis oleh beberapa orang yang memiliki pengalaman dengan spesifikasi bahasa (setelah bekerja pada ANSI Common Lisp dan ISO C ++). Dan ada proyek RubySpec, yang merupakan sekumpulan contoh yang dapat dieksekusi gaya RSpec yang membentuk spesifikasi yang dapat dibaca manusia dan suite pengujian kesesuaian yang dapat dieksekusi mesin untuk spesifikasi tersebut.
Jörg W Mittag
1

spesifikasi apa pun harus singkat dan dapat bertahan dalam ujian waktu

inilah mengapa Anda melihat abstraksi seperti BNF digunakan untuk banyak standar bahasa ... singkat dan masih akan dipahami lama setelah banyak alat kami saat ini telah ditinggalkan.

tentu saja ada lebih dari sekadar tata bahasa. lihat apa yang telah dilakukan orang lain ... perl6, skema, C ... mereka membahas masalah yang juga diperhatikan oleh implementor.

Brad Clawsie
sumber