Сентябрь был посвящен тестированию языка программирования Qubic Abra и созданию его начальной вспомогательной библиотеки, которая, конечно же, написана на Abra. При создании библиотеки поддержки возникла необходимость иметь возможность проверять всевозможные идеи. Это привело к параллельной траектории, по которой на Java был создан простой синтаксический анализатор языка Abra. Синтаксический анализатор позволил нам выполнять синтаксические проверки кода библиотеки еще до того, как у нас был запущен компилятор Abra. Чтобы облегчить построение парсера, мы создали синтаксическую диаграмму EBNF для языка Abra.

Процесс создания этого синтаксического анализатора напрямую привел к нескольким изменениям синтаксиса языка Abra, которые упрощают синтаксический анализ и анализ языка. Кроме того, при создании вспомогательной библиотеки стало ясно, что происходит много повторяющегося программирования из-за природы фиксированного размера векторного типа данных Abra trit. Это привело к добавлению функции, подобной шаблону, которая позволяет нам создавать общие функции, а затем создавать их экземпляры для требуемых размеров вектора трит.

Между тем, одному из членов нашего сообщества Discord, ben75, удалось использовать диаграмму синтаксиса EBNF для реализации потрясающей подсветки синтаксиса для Abra на платформе IntelliJ IDEA. Это оказалось для нас большим подспорьем при создании кода библиотеки поддержки. Это сообщество не перестает меня удивлять.

Как только парсер / анализатор заработал правильно, было решено дать ему возможность быстро запускать код Abra в качестве интерпретатора. Это позволяет нам запускать код Abra и уже тестировать его, даже не имея возможности скомпилировать его для конкретной платформы. Это также позволило нам отлаживать код библиотеки поддержки, проходя через код интерпретатора Java в отладчике, пока он выполняет код Abra.

Мы рады сообщить, что большинство основных функций библиотеки работали точно так, как было задумано, и лишь несколько незначительных деталей нуждались в исправлении. Самым удивительным, что произошло на этом этапе, было то, что * безусловно * самая сложная из написанных функций, функция целочисленного умножения, работала безупречно сразу же! Удивительно, потому что, когда мы писали этот код, не было другого способа запустить его, кроме как в уме.

Хотя мы еще не создали соответствующую функцию целочисленного деления, функции, реализующие арифметические, логические и условные операции, уже доказали свою правильность на практике, когда мы использовали их для реализации нескольких тестовых функций. Самая впечатляющая часть библиотеки поддержки - это, вероятно, способ адаптации этих функций к любому требуемому размеру вектора трита, что позволяет нам выполнять целочисленную арифметику изначально для огромного выбора целочисленных диапазонов, что не имеет себе равных в большинстве других языков программирования. Например, мы определили целочисленный тип данных, который мы назвали Huge, который является вектором trit длиной 81 трит и может представлять значения в диапазоне от минуса до плюс 221,713,244,121,518,884,974,124,815,309,574,946,401! Мы даже протестировали тип данных trit 6561, который должен содержать подпись IOTA, и обнаружили, что он может представлять целые числа, длина которых составляет 3131 цифру. И целочисленные арифметические функции будут корректно работать со всеми ними!

Дальнейшие дополнения к синтаксическому анализатору позволяют ему генерировать троичное представление кода Abra, готового для включения в сообщение Qubic, отправляемое через Tangle, и преобразовывать этот троичный код обратно в исходное представление, которое может быть запущено интерпретатором. Это может оказаться очень полезным для ускорения процесса получения рабочего доказательства концепции Qubic до тех пор, пока не будет завершена более надежная версия сквозной функциональности.

Документ о вычислительной модели Qubic хорошо продвигается. Он стал настолько большим, что мы решили разделить его на несколько частей. Первые две части в настоящее время рассматриваются, а третья часть, как ожидается, будет готова в первую неделю октября. На данный момент запланированы следующие части:

  1. Концептуальный обзор модели обработки Abra.
  2. Обзор основных сущностей в Abra.
  3. Обзор программных конструкций Abra.
  4. Некоторые примеры функций Abra с подробностями о том, как они работают.
  5. Qubic Dispatcher и его взаимодействие с Abra.

Для нас было очень интересно увидеть в этом месяце, наконец, первые работающие программы Abra в действии! Мы надеемся, что сможем как можно скорее поделиться документацией и интерпретатором с сообществом, чтобы вы могли начать играть с ними и вносить свой вклад в наши усилия по Abra.

Бонус: Синтаксическая диаграмма Abra

Щелкните ссылку выше, чтобы увидеть красивую диаграмму синтаксиса железной дороги языка Abra.