После написания первой статьи о как создать свою собственную операционную систему, кто-то сказал мне, что если бы я мог написать статью о как создать язык программирования. Сначала я не обращал особого внимания, но теперь и другими способами я узнал гораздо больше о создании языков программирования. Так давай сделаем базовый язык программирования, легко встраивается в другие программы и работает с виртуальной машиной, которую мы также создадим. Сегодня нам нужно создать самую простую виртуальную машину.
Вам, наверное, интересно: Виртуальная машина? Но разве это не сложно, и замедляет ли это программы? " Напротив, простая виртуальная машина очень проста и относительно быстра. Я выбрал Ржавчина как язык виртуальной машины. Но что это Ржавчина?
Ржавчина устанавливается в Linux По-простому. Однако официальной посылки нет. Пользователи Ubuntu вы можете добавить эти два PPA: ppa: hansjorg / ржавчина y ppa: cmrx64 / cargo, пользователи Арка можно использовать AUR (Cargo-git это пакет, который устанавливает все). Остальные могут использовать:
curl -s https://static.rust-lang.org/rustup.sh | sudo sh
Как работает виртуальная машина?
Если вы знаете, как работает мир ассемблера, он точно такой же, со стеком или стеком. Если нет, я вам объясню. Представим себе следующий код:
печать 2 + 3
Компьютер не понимает, что означает 2 + 3, и не знает, в каком порядке следовать. Компьютеры работают с батареями или стеками, в которых данные накапливаются и непрерывно извлекаются. Этот код на нашей виртуальной машине должен выглядеть примерно так:
НАЖАТЬ 2 НАЖАТЬ 3 ДОБАВИТЬ ПЕЧАТЬ
По сути, мы кладем 2 в стек сверху, а также 3. ADD извлечет (т.е. удалит его из стека и получит его значение) последние 2 элемента в стеке и добавит результат в верхнюю часть стека. PRINT берет последний элемент в стеке и использует его для отображения нам. Теперь давайте сделаем это в Ржавчина.
Сначала мы должны определить язык для Байт-код, мы могли бы использовать существующий, например, в Java o el CLR .NET / Mono, но мы собираемся создать более простой.
https://gist.github.com/a01de8904fd39a442c20
Мы используем шестнадцатеричную запись для каждой инструкции. На высоте мы поставили # [производное (FromPrimitive)], это особенность Ржавчина и это поможет нам в дальнейшем напрямую сравнивать перечисление с байтами.
Теперь мы должны создать функцию, выполняющую каждую из этих инструкций. Для этого мы должны прочитать байт и сравнить его с инструкциями, которые есть в перечислении. Если вы обнаружите какие-либо существующие, вы должны выполнить свое действие.
https://gist.github.com/8950ce212a2de2f397f9
Мы делаем это, чтобы читать каждый байт отдельно и выполнять их:
https://gist.github.com/12e24a1f0dd65e4cd65d
Как видите, мы различаем, если нам дали команду PUSH (наша команда INTEGER) раньше, следующий байт будет полностью помещен в стек. Здесь мы используем две функции, которым я вас не учил, self.pop () y self.push (), которые, очевидно, отвечают за обработку стека.
https://gist.github.com/54147f853a8a2b8c01d9
Они не очень сложные, но функция pop имеет механизмы обнаружения ошибок. Фактически, в Ржавчина, если мы удалим эти механизмы, это приведет к ошибке компиляции. Теперь нам просто нужно вызвать программу Перин (наша виртуальная машина) и выполните байт-код.
https://gist.github.com/99b1ab461318b3a644d0
Этот байт-код можно прочитать из файла, но здесь для простоты я сохранил его в переменной. Если мы его выполним, это даст нам ожидаемый результат:
Perin v0.1 Perin VM выполняет байт-код FlopFlip Запуск экземпляра PerinVM PerinVM v0.1.0 Целочисленное значение 5
Весь код доступен на GitHub под Лицензия Apache 2.0: https://github.com/AdrianArroyoCalle/perin. Для компиляции они должны иметь Транспортные установил и поставил:
сборка заряда && ./target/main
В следующей главе мы узнаем больше о нашем языке программирования.
Интересное любопытство, хотя на самом деле это не очень полезно, но знать не помешает.
Замечательно, что вы рекламируете Rust, это язык, который много обещает, он не только более безопасен, чем c ++, но (на данный момент) более понятен в своем синтаксисе.
Что касается фото, я бы не стал рассматривать java evolution XD.
И от fortran, я никогда им не пользовался, но ничего хорошего о нем не слышал ...
Я знаю, и это особенно полезно в инженерии, хотя Python набирает обороты.
Фортран, возможно, является еще одним отличным языком наряду с C. Даже сегодня в действительно критических вопросах будет один или другой.
И было бы спорным, что Фортран является «эволюцией» C, хотя, возможно, должно быть наоборот, поскольку C более новый, более современный и с большим количеством возможностей; хотя одно нисколько не отделено от другого.
Хотя все окончательные позиции с той или иной точки зрения спорны.
+1 к Java
Посмотрим, нравится ли мне это, я даю что-то программированию, но базовое, чтобы посмотреть, понимаю ли я больше.
Какова реальная цель создания нового языка программирования? Лично мне кажется, что это уловка, чтобы скрыть исходный код.
Друг, что случилось с продолжением «собственной операционной системы»? Не оставляйте это здесь, пожалуйста, продолжайте.
На самом деле, вы мастер, и только эти две песни полностью захватили мое внимание, но я не хочу, чтобы они остановились на полпути.
Я знаю, что многие из нас думают так же, и мы ждем продолжения и заключения этих очень интересных тем.
Очень интересно, спасибо большое. 🙂
Я не считаю java языком программирования, а скорее интерпретатором команд, так как он не компилируется
[Язык программирования - это формальный язык, предназначенный для выражения процессов, которые могут выполняться машинами, такими как компьютеры.]
По этой причине Java - это язык программирования. Даже язык Bash (язык оболочки Linux) сам по себе является языком программирования.
Есть два типа языков:
- Составлено
- истолковано
- Смешанный (виртуальные машины, нативные библиотеки компилируются и функциональный код интерпретируется)
Интерпретаторы очень полезны, когда дело касается мультиплатформенности, и не имеют для этого катастрофической производительности. Java, VB.NET, C ++ .NET, F #, C # - это смешанные языки. Язык bash, bat, PHP, Javascript и многие другие являются интерпретируемыми языками.
Если вы не рассматриваете Java как язык, потому что он интерпретируемый (а это не так), вам не следует рассматривать многие другие языки, которые используются для создания программ. Более того, по этому правилу трех вы не должны считать, что существует какой-либо язык программирования, кроме самого машинного языка.
И почему бы и нет? Даже машинный язык нельзя считать языком, поскольку на самом деле это просто набор команд, «интерпретируемых» процессором.
Потому что на самом деле ВСЕ языки - это не что иное, как набор команд, интерпретируемых процессором.
Вам может нравиться язык более или менее (в данном случае Java), казаться более или менее полезным и мощным, но сказать, что это не язык программирования, потому что он не компилируется… это противоречит всем определениям языков программирования.
😐 Надеюсь, я не показался слишком грубым
нет тишины, ты только разрушил нашу жизнь
хахахахаха, perdoooon. это не было моим намерением xD
java - это язык программирования. Поскольку вы можете разработать приложение, и когда вы компилируете, вы создаете .jar, который интерпретируется JVM. Затем, согласно вашей логике python, он тоже не интерпретируется, но компилируется в разные исполняемые файлы ...
Очень хорошая информация
хорошая информация, но я сомневаюсь, что можно будет создать новый язык программирования с нуля, не полагаясь на другие аналогии или программное обеспечение. Я говорю так же, как другие языки были созданы, например, java или HTML.
Буду очень признателен за вашу помощь по этому вопросу.