Мне очень нравится дизайн языка программирования. Иногда я думаю, что мои языковые проекты и их потенциальные пользователи выиграют от всеобъемлющего документа по стандартам. Я смотрел на многие языковые стандарты, начиная от очень формального (C ++) до довольно неформального (ECMAScript), но я не могу понять, как мне разобраться и организовать такой документ, хотя я Я думаю, что я довольно хорошо разбираюсь в технических вопросах.
Должен ли я написать это как длинный учебник, или больше как формальный математический документ? Как мне поддерживать его в актуальном состоянии, если я разрабатываю его вместе с эталонной реализацией? Должен ли я просто отказаться и рассматривать реализацию и документацию как стандарт де-факто? Кроме того, действительно ли есть существенная выгода от наличия стандарта? Означает ли требование стандарта, что язык излишне сложен?
Ответы:
Я нашел спецификацию языка Java формальной и читабельной, и я думаю, что она имеет разумную структуру. Некоторые спецификации W3C также могут быть хорошими примерами.
Выполнение формальной работы может помочь вам снизить сложность языка и увидеть основные случаи.
Заголовок мозгового дампа: кодирование источника, лексирование, фундаментальные типы, литералы, операторы, выражения, простые операторы, условные выражения, циклы, функции (определения и вызовы), объявления типов, модули, модули компиляции, область видимости переменных, различные виды разрешения имен (например, импорт, методы), модель памяти, побочные эффекты, типизация, параллелизм…
источник
Читайте лоты и будьте проще
Создать новый язык сложно. Действительно трудно. Но в конечном итоге очень приятно, если он становится популярным и действительно решает проблему, с которой люди элегантно сталкиваются.
Как я уже упоминал в комментариях, я бы посоветовал вам прочитать доменные языки Мартина Фаулера по следующим причинам:
Что касается того, как написать свою спецификацию, подумайте о своей аудитории. Очевидно, что перед тем, как приложить палец к клавиатуре, чтобы разработать свой язык, вы должны тщательно продумать, для чего он предназначен.
Если это новый интерпретируемый язык, который заменит JavaScript, то вам понадобится очень лаконичный подход, чтобы привлечь веб-разработчиков с ограниченным объемом внимания и стремлением к немедленным результатам - или быстрее, если это возможно.
Если он будет использоваться в следующей миссии на Титане, то минимальные начальные уровни будут иметь чрезвычайно подробные спецификации, показывающие точные формальные доказательства поведения каждого компонента.
Так что это не простая вещь. Чтобы приблизиться к спецификации, вам, вероятно, будет лучше приобрести большой опыт в создании ваших языков, а также работать с теми, кто фактически использует их на повседневной основе. Если у вас есть готовые жертвы ... э ... разработчики, которые могут потратить некоторое время на изучение вашего языка, они могут дать вам обратную связь о том, что необходимо для того, чтобы заставить их использовать его.
Короче говоря, будьте проще, и больше людей будут его использовать.
источник
Вирт спроектировал и реализовал множество языков программирования: из них спецификации для языков Oberon и Oberon2 отличаются полнотой, краткостью и удобочитаемостью.
источник
Common Lisp и Haskell имеют языковые стандарты. Ruby и Python имеют реализации и документацию. Поэтому я бы сказал, что языковой стандарт не нужен, но он может быть полезен, если вы ожидаете, что будет несколько реализаций языка, который вы разрабатываете. С другой стороны, стандарт преждевременен, если вы ожидаете значительных изменений в определении языка.
источник
любая спецификация должна быть краткой и способной выдержать испытание временем
Вот почему вы видите абстракцию, подобную BNF, используемую для многих языковых стандартов ... она лаконична и будет понятна еще долго после того, как многие из наших нынешних инструментов останутся позади.
Конечно, это больше, чем просто грамматика. посмотрите, что сделали другие ... perl6, схема, C ... они решают проблемы, о которых также заботится разработчик.
источник