32 lines
3.2 KiB
Markdown
32 lines
3.2 KiB
Markdown
# Философия языка
|
||
|
||
Язык FZLang преследует две цели при разработке: "быть удобным, как инструмент, но всегда оставаться предсказуемым".
|
||
|
||
Вот, какими путями язык пытается достичь этой философии:
|
||
|
||
## В отношении к памяти и ресурсам
|
||
|
||
В средах с GC программист точно не знает, в какой момент сборщик мусора решит произвести очистку:
|
||
объект может висеть секундами после завершения метода.
|
||
А в момент очистки рантайм может устроить микропаузу, что критично для аудио, игр, сети или встроенных систем.
|
||
|
||
В модели scope-based RAII, которая используется в том числе в FZLang, память детерминирована.
|
||
Любой объект имеет область, которая им владеет, а как только область уничтожается - объект уничтожается вместе с ней.
|
||
Время отклика таком подходе равное и предсказуемое.
|
||
|
||
Ещё один плюс, который предоставляет модель scope-based RAII - это работа с ресурсами (сокеты, файлы).
|
||
Проблема освобождения ресурсов решается чистой семантикой области видимости: умирает скоуп - очищается всё, что к нему привязано.
|
||
|
||
И последним аргументом в сторону scope-based RAII стало отстутствие оверхеда на рантайм.
|
||
Полноценному GC для работы нужны карты памяти, фоновые потоки, барьеры чтения и записи.
|
||
В FZLang виртуальная машина весит очень мало, а вся память освобождается по ходу чтения инструкций.
|
||
|
||
## В отношении синтаксиса
|
||
|
||
Язык FZLang намеренно не упрощается некоторые детали синтаксиса.
|
||
Например, при обращении к экземпляру класса в его методах, использование `this` является обязательным, как и указание типов при декларациях, - это строгая часть.
|
||
Однако, объявление функции без возвращаемого типа позволяет опускать тип, так как писать на месте типа постоянно `void` было бы избыточно.
|
||
|
||
Таким образом, FZLang старается балансировать между синтаксисом, позволяющим оставаться языку детерминированным и упрощениями, которые действительно уместны.
|
||
|