Factor (язык программирования)
Класс языка: | |
---|---|
Появился в: |
2003 |
Автор: | |
Выпуск: | |
Система типов: | |
Испытал влияние: | |
Лицензия: | |
Сайт: |
[factorcode.org/ ode.org] |
Factor — это динамически типизированный конкатенативный язык программирования, чья разработка и реализация ведётся Славой Пестовым. Основное влияние на язык Factor оказали языки программирования Joy, Forth, Lisp и Self.
Автор определяет Factor как «практический стековый язык программирования», важными факторами, определяющими направление его развития, являются производительность, богатство выразительных средств (при сохранении ясности и согласованности) и создание достаточно всеобъемлющей стандартной библиотеки.
Подобно другим конкатенативным языкам, Factor имеет постфиксный синтаксис, что означает, что аргументы функции пишут перед её именем. Например, Hello world в языке Factor это:
"Hello world" print
Фактор — язык с динамической типизацией, и уникальной объектной системой, близкой к CLOS. В Факторе есть небольшой набор базовых типов, а пользователи и стандартная библиотека могут создавать собственные классы используя кортежи и другие механизмы. Фактор поддерживает наследование. Помимо классов, являющихся кортежами имеются и другие механизмы создания классов; Factor поддерживает предикатные классы (подмножества некоего класса, для которых соблюдается условие-предикат) и классы объединения. Встроенные составные типы данных Фактора включают векторы фиксированной и переменной длины и хеш-таблицы. Подобно таким языкам, как Common Lisp и Python, Фактор поддерживает богатый набор арифметических типов данных: простые целые, целые неограниченной длины, числа с плавающей запятой. Комплексные числа, дроби (рациональные числа) реализованы в стандартной библиотеке. Также стандартная библиотека реализует связные списки, массивы статически типизированных значений[1] и другие структуры данных.
Одна из главных целей Фактора — применение в итеративной разработке через тестирование, поэтому ядро Фактора можно рассматривать как безопасный диалект Форта. Хотя Фактор — динамически типизируемый язык, компилятор имеет доступ к глубине стека слова (функции).
Реализация
Первая публичная реализация Фактора была написана на Java, однако в целях повышения эффективности позднее она переписана на C (а затем, в мае 2009 — на C++[2]), Java-версия была заброшена. Количество Си-кода в реализации языка постепенно сокращается, а Factor-кода соответственно растёт.
Первоначально Фактор был чисто интерпретируемым языком, но теперь он полностью реализован в виде компилятора (неоптимизирующий компилятор по существу разворачивает (unrolls) цикл интерпретации[3][4]), интерпретатор сохранён только для обеспечения интерактивного режима работы). Оптимизирующий компилятор в машинный код также полностью написан на Факторе. Он не производит автономных запускаемых файлов, но генерирует машинный код, сохраняемый в файл образа. Эти образы запускаются с минимальными накладными расходами с помощью виртуальной машины. Подсистема развёртывания (deploying) позволяет сгенерировать из программы автономный запускаемый файл[5]. На реализацию Фактора большое влияние оказал Steel Bank Common Lisp[6].
Последний стабильный релиз датируется 20 апреля 2013 года и имеет номер 0.96[7]. Также, пока версия 1.0 всё ещё находится в разработке, регулярно публикуются постоянно обновляющиеся сборки (Continuous Builds) для всех поддерживаемых платформ[8].
Между выходом версий 0.91[9] и последовавшей за ней версией 0.92[10] прошло около 2 лет активного развития языка (с выпуском промежуточных сборок). За это время внесены значительные изменения как в само ядро языка, так и в окружающие его библиотеки (в частности вся работа со строками была переведена на Unicode с поддержкой UTF-8 и UTF-16).[10]
Стандартная библиотека
Factor имеет развивающуюся библиотеку с поддержкой словарей, продолжений, HTTP сервера и прилагающегося веб-фреймворка, OpenGL враппер, GUI библиотеки, XML парсера, и т. д..
Примечания
- ↑ [factor-language.blogspot.com/2008/12/arrays-of-unboxed-primitive-values-and.html Arrays of unboxed primitive values, and a faster Mersenne Twister]
- ↑ [factor-language.blogspot.com/2009/05/factor-vm-ported-to-c.html Factor VM ported to C++]
- ↑ [factor-language.blogspot.com/2007/09/two-tier-compilation-comes-to-factor.html Two-tier compilation comes to Factor]
- ↑ [factor-language.blogspot.com/2008/01/compiler-overhaul.html Compiler overhaul]
- ↑ [factor-language.blogspot.com/2007/11/deploying-stand-alone-applications-on.html Deploying stand-alone applications on Windows]
- ↑ [concatenative.org/wiki/view/Lisp Lisp на concatenative.org]
- ↑ [re-factor.blogspot.ru/2013/04/factor-0-96-now-available.html Factor 0.96 now available]
- ↑ [factorcode.org/ Getting Factor]
- ↑ [factor-language.blogspot.com/2007/12/factor-091-now-available.html Factor 0.91 now available]
- ↑ 1 2 [factor-language.blogspot.com/2010/02/factor-092-now-available.html Factor 0.92 now available]
Литература
- Bruce Tate, Fred Daoud, Jack Moffitt, Ian Dees. Factor // Seven More Languages in Seven Weeks. Languages That Are Shaping the Future. — The Pragmatic Bookshelf, 2015. — С. 49-87. — 320 с. — ISBN 978-1941222157.
- [factorcode.org/littledan/dls.pdf Factor: a dynamic stack-based programming language] (англ.) — Slava Pestov, Daniel Ehrenberg, Joe Groff. [www.dynamic-languages-symposium.org/dls-10/ Dynamic Languages Symposium 2010]
- Анатолий Левенчук. [blogs.trust.ua/levenchuk/2010/05/11/505/Novii-Forth----yazik-programmirovaniya-Factor/ «Новый Forth» — язык программирования Factor] (11 мая 2010). Проверено 31 июля 2013. [www.webcitation.org/6J0TaaZs0 Архивировано из первоисточника 20 августа 2013].
- Christopher Diggins. [www.drdobbs.com/architecture-and-design/228701299 What is a Concatenative Language]. Dr. Dobbs (Dec 31, 2008). [www.webcitation.org/67eAGSILD Архивировано из первоисточника 14 мая 2012].
Ссылки
- [factorcode.org/ factorcode.org] (англ.) домашняя страница
- [github.com/slavapestov/factor/ Factor] на GitHub
- [tech.groups.yahoo.com/group/concatenative/message/1756 The birth of Factor] (англ.)
- [www.youtube.com/watch?v=f_0QlhYlS8g Factor: an extensible interactive language] видеозапись авторской презентации языка на Google Tech Talks