@maksimpythonn
Решения вопроса 1
@VoidVolker
Как создать свой язык программирования?
Точно так же, как и любую другую программу: сначала спроектировать, а потом реализовать.
Без другого языка программирования! Полностью с нуля.
В самом низу находится машинный код. Выглядит примерно вот так:08 04 83 fa 08 04 83 fb 08 04 83 fd 08 04 84 00
У каждого процессора есть свой набор инструкций, которые кодируются машинным кодом. Открываем справочник и пишем нужный код для нужной ОС/железа. Ничего сложного, правда же? =)
Ведь как-то создали первый ЯП.
Достаточно почитать историю появления первых ЭВМ. Они представляли из себя набор переключателей отдельных битов, которые позже эволюционировали в перфокарты, которые в свою очередь представляли из себя прообраз современных исполняемых файлов. С увеличением количества доступных команд, усложнением техники и появлением накопителей программы так же становились все сложнее и сложнее: поэтому решили упростить запись и придумали первый ассемблер. Дальнейшее развитие привело к появлению первого ЯП высокого уровня и далее более высокие уровни абстракции, используя которые сегодня пишутся все программы.
Так что в вашем случае вам надо пройти весь этот путь самостоятельно. Примерно так:
- На машинном коде реализовать минимальный ассемблер
- Используя свой минимальный ассемблер реализовать простейший компилятор этого ассемблера
- Расширить компилятор ассемблера до стандартного набора инструкций
- На ассемблере реализовать транслятор и компилятор ЯП высокого уровня
- Реализовать необходимый набор инструкций для написания компилятора этого же ЯП
- Написать этот самый компилятор своего ЯП на нём же и далее уже скомпилировать первую самостоятельную версию своего ЯП без использования других ЯП
Ответы на вопрос 5
@firedragon
Даже gcc компилируется сначала на старой версии и создается бутстрап, а потом он компилирует новые фичи.
Хотите сложностей? Создайте бутстрап на ассемблере, который соберет компилятор вашего языка или бутстрап для дальнейшей сборки.
Вот кстати пример https://habr.com/ru/post/133780/
@saboteur_kiev
@mayton2019
Как создать свой язык программирования, но без другого языка программирования? Полностью с нуля. Думаю, это возможно! Ведь как-то создали первый ЯП
Есть такая техника. Бутстрап называется. Это когда пишется сначала некое минимальное ядро. На базе него пишется первая версия языка (или ОС) и далее поверх этого стека пишется уже вторая версия. И так далее. Так например первая версия С++ была предположительно на С. А дальше уже следующие версии С++ пишутся на С++.
Вообще в наше время нет никакого смысла изучать ассемблер например лишь ТОЛЬКО для создания компиллятора. Например семейства Clang, Rust и другие относительно новые языки использовали LLVM (это такой себе высокоуровневый ассемблер). Он отличается от ассемблера x86 тем что не привязан к конкретному процессору а считает что все процессоры примерно похожи и у них есть регистры и т.п.
Многие языки семейства Java (Clojure, Groovy) тоже не используют ассемблер. Но тем не менее они называют себя языками.
Интереснее всего изучать историю создания Lisp и Forth. Они настолько не похожи на классические языки что в них почти невозможно сказать где собственно язык и где среда и где грамматика.
@cryptohas
@PlugIN