Фикус
Язык программирования Фикус – фукнциональный язык программирования с первоклассной поддержкой работы с массивами.
Фикус позволяет писать программы с использованием фукнциональной, императивной и объектно-ориентированных парадигм.
Язык совмещает простоту и удобство написания кода на Python с производительностью C.
Репозиторий проекта
Настоящая версия языка и компилятора поддерживается в репозитории Ficus.
Ключевые особенности языка Фикус
- простой синтаксис
- производительность (генерируется код на C)
- статическая проверка типов
- вывод типов
- параметрический полиморфизм
- функции первого класса
- алгебраические типы данных и сопоставление с образцом
- первоклассная поддержка списков, массивов, кортежей, структур
- генерация списков, массивов, структур (comprehension)
- неизменяемые структуры данных и значения
- поддержка параллельных вычислений (через директивы
@parallelи@sync) - поддержка Unicode в строках и синтаксисе
- полноценная поддержка типов-сумм и вариантов
- поддержка большого количества примитивных типов
- простая интеграция с C и C++ (с помощью директивы
@ccode)
Компилятор Фикус генерирует переносимый код на C и C++.
Установка из исходников
Исходные тексты Фикус содержат сгенерированный код компилятора, поэтому первоначальная сборка из исходников делается просто:
Linux, macOS, BSD, WSL
$ make
$ make test # запуск тестов
$ ./bin/ficus -run examples/hello.fx
Windows
Раздел требует уточнения
> nmake -f Makefile.win32
> bin/ficus -run examples/hello.fx
Использование
Далее по тексту
$ficus– путь до папки, где собран компиилятор языка Фикус.
Стоит добавить путь до $ficus/bin/ в переменную $PATH.
Запуск приложения
$ ficus -run <file>.fx
Компилятор генерирует файлы на C/C++, компилирует их и запускает полученный исполняемый файл.
Сборка приложения
$ ficus -app <file>.fx
# или
$ ficus <file>.fx
Компилятор генерирует файлы на C/C++, компилирует их создает исполняемый файл.
Это поведение будет переопределено.
Собранный файл приложения находится в папке __fxbuild__.
Список возможностей компилятора
Полный перечень параметров компилятора можно посмотреть с помощью команды ficus --help.
Информация о версии компилятора ficus -version
Переменные окружения
Компилятор использует дополнительные переменные окружения для работы:
-
FICUS_PATHуказывает на стандартную библиотеку (если не задано, то используется$ficus/lib). Может содержать список папок, разделенных:на Unix и;на Windows. Папки, откуда импортируются модули также можно указать в командной строке ключом-I <import_path>. -
FICUS_CFLAGSиспользуется для передачи компилятору C/C++ флагов для построения сгенерированных .c/.cpp файлов. Другой способ указать их – с помощью ключа-cflags "<cflags>", например,-cflags "-ffast-math -mavx2". -
FICUS_LINK_LIBRARIESсодержит флаги линковщика и дополнительные линкуемые библиотеки. Другой способ указать их – с помощью ключа-clibs "<clibs>".
Фактические значения, используемые компилятором, можно посмотреть с помощью команды ficus -print-env
Лицензия
Код распространяется под лицензией Apache 2, см. файл LICENSE
Признательность за проделанную работу
- Эта версия компилятора является развитием предыдущей разработки Вадима Писаревского.
- Компилятор сделан по мотивам min-caml авторов Eijiro Sumii и др.
- Компилятор, стандартная библиотека и документация испольуют кусочки кода напрямую или навеяны различными открытыми проектами:
- rpmalloc
- Иммутабельные векторы, сделанные на основе ‘Relaxed-Radix B-tree’
- Алгоритм xoshiro для генерации случайных числе
- Хеш-таблицы в стиле Python
- Регулярные выражения RE1 и RE2
- Библиотека OpenCV
- Красно-черные деревья в OCaml
- Генератор таблиц поиска Unicode и ucd-generate от BurntSushi
- Шрифты Literata, iA Writer и Recursive.