Як мені почати писати специфікацію мови програмування?


16

Мені дуже подобається дизайн мови програмування. Іноді я думаю, що мої мовні проекти та їх потенційні користувачі отримають користь від документа про всебічні стандарти. Я переглянув багато мовних стандартів, починаючи від дуже формальних (C ++) до досить неформальних (ECMAScript), але я не можу реально зрозуміти, як мені слід розбити речі та організувати такий документ, хоча я думаю, що я досить добре в технічному написанні взагалі.

Чи слід писати це як довгий підручник або більше як формальний папір з математики? Як я можу його оновлювати, якщо я розробляю його разом із еталонною реалізацією? Чи варто просто відмовитись і розглядати реалізацію та документацію як фактичний стандарт? Крім того, чи є справді якась користь від того, щоб мати стандарт? Чи означає, що вимога стандарту означає, що мова непотрібна?


1
Ви ще читали мови для домену від Мартіна Фаулера? amazon.com/…
Gary Rowe

@Gary Rowe: У мене немає. Здається, це є гідним читанням, хоча, можливо, не зовсім те, що я шукаю.
Джон Перді

Перевага стандарту перед еталонною реалізацією полягає в тому, що ви можете визначити, де інші реалізації можуть відхилятися від того, що робить ваша реалізація.
Барт ван Інген Шенау

Відповіді:


3

Я знайшов специфікацію мови Java як формальною, так і читаною, і я думаю, що вона має розумну структуру. Деякі технічні характеристики W3C також можуть бути хорошими прикладами.

Виконання формальної роботи може допомогти вам зменшити складність мови та побачити кутові випадки.

Заголовки демпфують: кодування джерел, лексика, основні типи, літерали, оператори, вирази, прості висловлювання, умовні умови, цикли, функції (визначення та виклики), декларації типів, модулі, одиниці компіляції, змінне масштабування, різні види дозволу імен (наприклад, імпорт, методи), модель пам'яті, побічні ефекти, набір тексту, одночасність…


Ваш список пропозицій дуже корисний. Я думаю, що я збираюся робити мозковий штурм подібного списку, сортувати його у форматі, що нагадує підручник, і написати короткий неофіційний опис з кількома формальними доповненнями, такими як граматика EBNF. Я також неодмінно подивлюсь на характеристики, які ви згадали про ідеї.
Джон Перді

7

Читайте партії та зберігайте це просто

Створити нову мову важко. Дійсно важко. Але в кінцевому підсумку дуже задоволення, якщо воно стає популярним і справді вирішує проблему, яку люди відчувають у вишуканому вигляді.

Як я вже згадував у коментарях, я б радив вам ознайомитись з мовами, що визначають домен Мартіна Фаулера, з наступних причин:

  1. Він заглиблюється у велику практичну глибину щодо того, навіщо вам розробляти мову
  2. Є деталі, як це зробити (аналізатори, лексичні аналізатори, мовні верстати тощо)
  3. Є докладні інструкції щодо впровадження обраного синтаксису для обробки таких понять, як закриття, примітки, буквальні списки, динамічний прийом тощо

Щодо того, як слід писати свою специфікацію, подумайте про свою аудиторію. Очевидно, перед тим, як класти палець на клавіатуру для розробки вашої мови, ви добре подумали, що вона має на меті зробити.

Якщо це нова, інтерпретована мова, яка замінить JavaScript, то вам потрібно дуже підхід, щоб досягти веб-розробників з обмеженим проміжком уваги та бажанням негайних результатів - або швидше, якщо це можливо.

Якщо він буде використаний під час наступної місії на "Титан", то надзвичайно детальні технічні характеристики, що показують точні формальні докази поведінки кожного компонента, будуть мінімальним рівнем вступу.

Отже, це не просто. Щоб підійти до специфікації, вам, ймовірно, буде краще отримати великий досвід у створенні своїх мов, а також працювати з тими, хто фактично ними користується щодня. Якщо у вас є бажаючі жертви ... е ... розробники, на роботі, які можуть зайняти деякий час, щоб вивчити вашу мову, то вони можуть дати вам відгуки про те, що потрібно, щоб змусити їх використовувати.

Коротше кажучи, будьте простою і більше людей використовуватиме її.


Дякую за це У мене є великий досвід розробки мов, і навіть їх документування досить ретельно, але це ідея стандарту, яка постійно мене отримує. Мені, можливо, доведеться трохи підібрати рекомендоване читання та експериментувати.
Джон Перді

@Jon Purdy Чи є у вас приклади мов в Інтернеті, які ви могли б включити у запитання?
Гері Роу

У мене поки немає прикладів мого поточного проекту. Єдиний справді повний публічний приклад мови, яку я створив (якою я фактично користуюся!) - це на vision-language.sourceforge.net/cgi-bin/Home
Джон Перді

@Jon Purdy Vision виглядає цікаво - це свого роду скоромовна швидкість. В сторону ви можете розглянути скріншот YouTube, який показує, як його встановити, і написати приклад невеликого веб-сайту (скажімо, для місцевого сантехніка). Це дозволило б значно полегшити криву навчання, оскільки люди можуть бачити це в дії та негайно отримувати переваги. Ви можете поговорити про переваги порівняно з JSP, Velocity, ASP.Net, Freemarker тощо
Gary Rowe

Це хороша ідея; Останнім часом я роблю відео з YouTube (близько трьох на тиждень), тому, думаю, я міг би точно помістити його.
Джон Перді

3

Вірт розробив і реалізував багато мов програмування: з них специфікації для мов Oberon та Oberon2 відрізняються повнотою, короткочасністю і читабельністю.


2

Звичайні Лісп і Хаскелл мають мовні стандарти. У Ruby та Python є реалізації та документація. Тож я б сказав, що стандарт мови не потрібен, але це може бути корисно, якщо ви очікуєте, що там буде більше, ніж одна реалізація мови, яку ви розробляєте. З іншого боку, стандарт є передчасним, якщо ви очікуєте суттєвих змін у мовному визначенні мови.


Власне, у Рубі є дві речі, які можна вважати "специфікаціями". Існує специфікація ISO Ruby ISO, яка наразі перебуває у стані остаточного проекту та написана деякими людьми, які мають досвід мовних специфікацій (працювали над ANSI Common Lisp та ISO C ++). І є проект RubySpec, який представляє собою набір виконуваних прикладів у стилі RSpec, що утворюють як людино-читаеми специфікації, так і набір машино-виконаних тестів на відповідність для цієї специфікації.
Йорг W Міттаг

1

будь-яка специфікація повинна бути короткою і здатною витримати випробування часом

саме тому ви бачите абстракцію на зразок BNF, яка використовується для багатьох мовних стандартів ... її стислий характер і все ще буде зрозумілий довгий час після того, як багато наших сучасних інструментів залишилися позаду.

звичайно, в цьому є більше, ніж просто граматика. подивіться, що зробили інші ... perl6, схема, C ... вони стосуються питань, які також хвилюють виконавця.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.