Как создать язык программирования?



@maksimpythonn

Как создать свой язык программирования, но без другого языка программирования? Полностью с нуля. Думаю, это возможно! Ведь как-то создали первый ЯП…


Решения вопроса 1



@VoidVolker

Как создать свой язык программирования?

Точно так же, как и любую другую программу: сначала спроектировать, а потом реализовать.

Без другого языка программирования! Полностью с нуля.

В самом низу находится машинный код. Выглядит примерно вот так:
08 04 83 fa 08 04 83 fb 08 04 83 fd 08 04 84 00
У каждого процессора есть свой набор инструкций, которые кодируются машинным кодом. Открываем справочник и пишем нужный код для нужной ОС/железа. Ничего сложного, правда же? =)

Ведь как-то создали первый ЯП.

Достаточно почитать историю появления первых ЭВМ. Они представляли из себя набор переключателей отдельных битов, которые позже эволюционировали в перфокарты, которые в свою очередь представляли из себя прообраз современных исполняемых файлов. С увеличением количества доступных команд, усложнением техники и появлением накопителей программы так же становились все сложнее и сложнее: поэтому решили упростить запись и придумали первый ассемблер. Дальнейшее развитие привело к появлению первого ЯП высокого уровня и далее более высокие уровни абстракции, используя которые сегодня пишутся все программы.

Так что в вашем случае вам надо пройти весь этот путь самостоятельно. Примерно так:

  1. На машинном коде реализовать минимальный ассемблер
  2. Используя свой минимальный ассемблер реализовать простейший компилятор этого ассемблера
  3. Расширить компилятор ассемблера до стандартного набора инструкций
  4. На ассемблере реализовать транслятор и компилятор ЯП высокого уровня
  5. Реализовать необходимый набор инструкций для написания компилятора этого же ЯП
  6. Написать этот самый компилятор своего ЯП на нём же и далее уже скомпилировать первую самостоятельную версию своего ЯП без использования других ЯП


Ответы на вопрос 5



@firedragon

практически все ЯП написаны на с.
Даже gcc компилируется сначала на старой версии и создается бутстрап, а потом он компилирует новые фичи.

Хотите сложностей? Создайте бутстрап на ассемблере, который соберет компилятор вашего языка или бутстрап для дальнейшей сборки.
Вот кстати пример https://habr.com/ru/post/133780/



@saboteur_kiev

Берешь перфокарту и начинаешь программировать.



@mayton2019

Как создать свой язык программирования, но без другого языка программирования? Полностью с нуля. Думаю, это возможно! Ведь как-то создали первый ЯП

Есть такая техника. Бутстрап называется. Это когда пишется сначала некое минимальное ядро. На базе него пишется первая версия языка (или ОС) и далее поверх этого стека пишется уже вторая версия. И так далее. Так например первая версия С++ была предположительно на С. А дальше уже следующие версии С++ пишутся на С++.

Вообще в наше время нет никакого смысла изучать ассемблер например лишь ТОЛЬКО для создания компиллятора. Например семейства Clang, Rust и другие относительно новые языки использовали LLVM (это такой себе высокоуровневый ассемблер). Он отличается от ассемблера x86 тем что не привязан к конкретному процессору а считает что все процессоры примерно похожи и у них есть регистры и т.п.

Многие языки семейства Java (Clojure, Groovy) тоже не используют ассемблер. Но тем не менее они называют себя языками.

Интереснее всего изучать историю создания Lisp и Forth. Они настолько не похожи на классические языки что в них почти невозможно сказать где собственно язык и где среда и где грамматика.



@cryptohas

Языки просто для удобства создаются, сами по себе это просто набор текста и букв. Самую настоящую работу делает компилятор или интерпритатор, переводя твой новый язык в язык процессора компьютера. Самый первый компилятор или интерпритатор писали на ассемблере. Можешь изучить ассемблер своего процессора (если у тебя Intel то это будет x86) и написать свои простенькие программы. Но уверяю, если ты больше вникнешь тему то поймешь, что язык это инструмент и не более, и что самые удобные языки уже сделаны



@PlugIN

Мне кажется идея очень хороша в качестве развивающей, учебной. Очень многое можно узнать из фундаментального: теория ЯП, формальная грамматика и пр. Это особенно интересно тем, кого интересуют языки в принципе. Недаром же говорят об элегантности языка, неизбыточности и завершённости. В общем, это тоже форма абстрактного искусства.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *