Потому что вы знаете, в конце концов, каждый хочет создать свой собственный язык программирования.
Я давно интересовался парсерами и языками. Я работал с Xtext, Jetbrains MPS, создал несколько DSL и т. Д. И т. Д. Я также написал свою кандидатскую диссертацию на эту тему, но до сих пор я не начал создавать полный язык программирования с нуля.
Зачем создавать новый язык?
Ну, есть много неправильных ответов на этот вопрос. Мой разделен на две части: во-первых, я думаю, что это может быть большим опытом, чтобы выучить еще несколько вещей, и, во-вторых, язык программирования для меня — это инструмент, позволяющий смотреть на реальность, описывать ее и рассуждать о ней, чтобы лучше ее понять , Смейся, если хочешь, но для меня это в основном инструмент мышления. Часто это неуклюжий инструмент, потому что меня отвлекают технические обходные пути или детали, которые вряд ли подходят или важны для того, что я пытаюсь сделать. Например, мне надоело щелкать здесь и там, чтобы генерировать методы equals и hashCode (да, я знаю о Lombok и некоторых других приемах).
Хорошо, малыш … но чтобы сделать язык пригодным для использования, нужно много вещей
Я думаю, что сейчас барьеры для создания языка программирования и использования его разумными людьми значительно ниже, чем раньше. Я думаю, что язык нуждается в отличном синтаксисе и семантике, конечно, но также в большом количестве библиотек и приличной поддержке инструментов.
Чтобы получить библиотеки, просто запустите его на JVM. В самом деле. Если он работает на JVM, вы можете повторно использовать gazzillion библиотек. Ваш язык программирования включает батареи. Рассмотрим также развертывание: я увлечен многими языками, но каждый раз, когда я пытаюсь развернуть что-то за пределами JVM, я в конечном итоге сожалею об этом. Спросите моего со-сопровождающего WorldEngine (программа на Python), насколько интересно поддерживать библиотеки в Linux, Mac, Windows, в разных версиях Python. Много веселья.
Конечно, вам также нужна поддержка инструментов: для меня это в основном хороший редактор и хорошая интеграция с эталонной платформой. У меня есть преимущество, потому что у меня есть опыт разработки плагинов IDE, и я только что закончил писать решатель типов для Java . В дополнение к этому я участвую в JavaParser . Итак, я знаю кое-что об инструментах, которые я мог бы использовать в будущем для интеграции с Java.
На практике я планирую:
- Создайте плагин для IntelliJ, который знает ссылки на файл на моем языке и на файлы Java. Приятно то, что в основном я написал библиотеки для этого.
- Создайте плагин Maven, потому что Maven ужасен, но жизнь без Maven еще более ужасна
- Напишите парсер с ANTLR (это самая простая часть)
- Написать генератор байт-кода с ASM (какая замечательная библиотека!)
Хорошо, расскажи мне больше об этом языке
Я только начал работать над этим, но … у меня есть основной компилятор, работающий и поддерживающий несколько конструкций.
- Язык называется Турин, как и мой родной город, и он доступен на GitHub: https://github.com/ftomassetti/turin-programming-language
Это статический язык с выводом типа, и это пример фрагмента корректного кода, который можно уже скомпилировать и запустить:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
namespace manga // now print is an alias for call to all the overload variants of println on System.out import java.lang.System.out.println as print // we define this property in generale: a name is a String property String : name // this is our new datatype type MangaCharacter { // we refer to the property defined above has name // we define a new property, UInt is an unsigned int has UInt : age // we overload toString. For short methods it can make sense to use // this shorthand. And we have string interpolation String toString() = "#{name}, #{age}" } // this define a class with a main method program MangaExample(String[] args) { // type inference at work: we are instantiating the class defined above // note that the constructor is generated for us val ranma = MangaCharacter( "Ranma" , 16 ) // let's call a java method ( System.out.println(String) ) and use more // string interpolation print( "The protagonist is #{ranma}" ) } |
Итак, у меня есть план, у меня уже кое-что работает, и мне очень весело.
Может быть, идиотизм, возможно, писать еще на одном языке, но, черт возьми … это так весело!
Ссылка: | Создайте язык программирования для JVM от нашего партнера по JCG |