Files
fz-lang/docs/ru/book/00_introduction.md
T

4.3 KiB

Вступление

Добро пожаловать в небольшую книжку по основам языка FZLang и спасибо, что решились попробовать этот язык программирования.

Для начала, стоит рассказать, что это за язык и как будет идти обучение в этой "книжке".

Что такое FZLang

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

Изначально, этот проект задумывался как самоучитель по компиляторостроению. Мне (Samsonium) было интересно разобрать:

  • Почему между компилятором и интерпретатором есть значимая разница?
  • Как программа, под названием "компилятор" понимает, что я хочу сделать?
  • Как устроено исполнение скомпилированной программы? Да и как, вообще, происходит процесс "перевода" с человеческого на машинный?

Я занимаюсь программированием уже более 10 лет, но за всё время так и не удосужился об этом разузнать!

Поэтому, этот проект был рождён как поле для экспериментов, разрабатывая который я стану лучше понимать устройство того, на чём строится весь мир программистов. Однако, по ходу разработки у языка стала появлятся своя форма, а также философия.

Сейчас, я бы описал философию языка так: "быть удобным, как инструмент, но всегда стараться оставаться предсказуемым". Полагаю, любое комьюнити желает своему языку того же, но мне это помогло сделать определённый выбор в ключевых точках развития.

Как в FZLang устроена работа с памятью

Изначально вопрос появился после внедрения стеков виртуальной машины, и звучал он так: "сборщик мусора или что-то другое?". Изучить работу сборщика было, конечно, интересно. Однако мне, человеку, выбравшему Java как первый язык, была знакома его "тяжесть" и "скорость" работы. Конечно же, отдельное "спасибо" за это можно сказать его сборщику мусора.

Поэтому, вместо GC я решил посмотреть в сторону RAII и, в итоге, получил хорошую формулу гуляния объекта в программе: если объект подан как аргумент, то происходит "заимствование" его во вложенное окружение, и если объект возвращается, то происходит перемещение объекта в родительское окружение. Такой подход позволяет не делать GC, а ещё, что самое важное, получить детерминированное время жизни объекта, а значит, детерминированную память (настолько, насколько это возможно).

Короче говоря, FZLang обзавёлся scope-based RAII.


Далее: Начало работы