Создайте свой собственный язык программирования (I)

Эволюция языков программирования

После написания первой статьи о как создать свою собственную операционную систему, кто-то сказал мне, что если бы я мог написать статью о как создать язык программирования. Сначала я не обращал особого внимания, но теперь и другими способами я узнал гораздо больше о создании языков программирования. Так давай сделаем базовый язык программирования, легко встраивается в другие программы и работает с виртуальной машиной, которую мы также создадим. Сегодня нам нужно создать самую простую виртуальную машину.

Вам, наверное, интересно: Виртуальная машина? Но разве это не сложно, и замедляет ли это программы? " Напротив, простая виртуальная машина очень проста и относительно быстра. Я выбрал Ржавчина как язык виртуальной машины. Но что это Ржавчина?

Ржавчина Это язык программирования, ориентированный на безопасность выполнения, поэтому с его помощью кто-то практически не сможет закрыть виртуальную машину. Это компилируемый язык в разработке, созданный Mozilla. Сервопривод, заменитель Геккон, развивается в нем. Вы все еще можете изменить свой синтаксис, но код, который я собираюсь использовать, будет храниться до первой стабильной версии.

Ржавчина устанавливается в 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

В следующей главе мы узнаем больше о нашем языке программирования.


Оставьте свой комментарий

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

*

*

  1. Ответственный за данные: Мигель Анхель Гатон
  2. Назначение данных: контроль спама, управление комментариями.
  3. Легитимация: ваше согласие
  4. Передача данных: данные не будут переданы третьим лицам, кроме как по закону.
  5. Хранение данных: база данных, размещенная в Occentus Networks (ЕС)
  6. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.

  1.   путешественник сказал

    Интересное любопытство, хотя на самом деле это не очень полезно, но знать не помешает.

    Замечательно, что вы рекламируете Rust, это язык, который много обещает, он не только более безопасен, чем c ++, но (на данный момент) более понятен в своем синтаксисе.

    Что касается фото, я бы не стал рассматривать java evolution XD.

    1.    путешественник сказал

      И от fortran, я никогда им не пользовался, но ничего хорошего о нем не слышал ...

      1.    Отвратительный сказал

        Я знаю, и это особенно полезно в инженерии, хотя Python набирает обороты.

      2.    Джон сказал

        Фортран, возможно, является еще одним отличным языком наряду с C. Даже сегодня в действительно критических вопросах будет один или другой.

        И было бы спорным, что Фортран является «эволюцией» C, хотя, возможно, должно быть наоборот, поскольку C более новый, более современный и с большим количеством возможностей; хотя одно нисколько не отделено от другого.

        Хотя все окончательные позиции с той или иной точки зрения спорны.

    2.    Франциско сказал

      +1 к Java

  2.   Portaro сказал

    Посмотрим, нравится ли мне это, я даю что-то программированию, но базовое, чтобы посмотреть, понимаю ли я больше.

  3.   пользователь сказал

    Какова реальная цель создания нового языка программирования? Лично мне кажется, что это уловка, чтобы скрыть исходный код.

  4.   Йейли сказал

    Друг, что случилось с продолжением «собственной операционной системы»? Не оставляйте это здесь, пожалуйста, продолжайте.

    На самом деле, вы мастер, и только эти две песни полностью захватили мое внимание, но я не хочу, чтобы они остановились на полпути.

    Я знаю, что многие из нас думают так же, и мы ждем продолжения и заключения этих очень интересных тем.

  5.   Кристиан Дэвид сказал

    Очень интересно, спасибо большое. 🙂

  6.   Франко сказал

    Я не считаю java языком программирования, а скорее интерпретатором команд, так как он не компилируется

    1.    Марио сказал

      [Язык программирования - это формальный язык, предназначенный для выражения процессов, которые могут выполняться машинами, такими как компьютеры.]

      По этой причине Java - это язык программирования. Даже язык Bash (язык оболочки Linux) сам по себе является языком программирования.

      Есть два типа языков:
      - Составлено
      - истолковано
      - Смешанный (виртуальные машины, нативные библиотеки компилируются и функциональный код интерпретируется)

      Интерпретаторы очень полезны, когда дело касается мультиплатформенности, и не имеют для этого катастрофической производительности. Java, VB.NET, C ++ .NET, F #, C # - это смешанные языки. Язык bash, bat, PHP, Javascript и многие другие являются интерпретируемыми языками.

      Если вы не рассматриваете Java как язык, потому что он интерпретируемый (а это не так), вам не следует рассматривать многие другие языки, которые используются для создания программ. Более того, по этому правилу трех вы не должны считать, что существует какой-либо язык программирования, кроме самого машинного языка.

      И почему бы и нет? Даже машинный язык нельзя считать языком, поскольку на самом деле это просто набор команд, «интерпретируемых» процессором.

      Потому что на самом деле ВСЕ языки - это не что иное, как набор команд, интерпретируемых процессором.

      Вам может нравиться язык более или менее (в данном случае Java), казаться более или менее полезным и мощным, но сказать, что это не язык программирования, потому что он не компилируется… это противоречит всем определениям языков программирования.

    2.    Марио сказал

      😐 Надеюсь, я не показался слишком грубым

      1.    мария антониета де мануэла карденас сказал

        нет тишины, ты только разрушил нашу жизнь

      2.    Марио сказал

        хахахахаха, perdoooon. это не было моим намерением xD

    3.    Карлос сказал

      java - это язык программирования. Поскольку вы можете разработать приложение, и когда вы компилируете, вы создаете .jar, который интерпретируется JVM. Затем, согласно вашей логике python, он тоже не интерпретируется, но компилируется в разные исполняемые файлы ...

  7.   Элиас Монгелос сказал

    Очень хорошая информация

  8.   Карлос Артуро сказал

    хорошая информация, но я сомневаюсь, что можно будет создать новый язык программирования с нуля, не полагаясь на другие аналогии или программное обеспечение. Я говорю так же, как другие языки были созданы, например, java или HTML.
    Буду очень признателен за вашу помощь по этому вопросу.