Factor (язык программирования)

07-08-2023

Factor
Класс языка:

Конкатенативный язык программирования

Появился в:

2003

Автор(ы):

Слава Пестов

Релиз:

0.95 (16 августа 2012)

Типизация данных:

динамическая, статическая

Испытал влияние:

Joy, Forth, Lisp, Self

Лицензия

BSD license

Сайт:

factorcode.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].

Последний стабильный релиз датируется 16 августа 2012 года и имеет номер 0.95[7]. Также, пока версия 1.0 всё ещё находится в разработке, регулярно публикуются постоянно обновляющиеся сборки (Continuous Builds) для всех поддерживаемых платформ[8].

Между выходом версий 0.91[9] и последовавшей за ней версией 0.92[10] прошло около 2 лет активного развития языка (с выпуском промежуточных сборок). За это время внесены значительные изменения как в само ядро языка, так и в окружающие его библиотеки (в частности вся работа со строками была переведена на Unicode с поддержкой UTF-8 и UTF-16).[10]

Стандартная библиотека

Factor имеет развивающуюся библиотеку с поддержкой словарей, продолжений, HTTP сервера и прилагающегося веб-фреймворка, OpenGL враппер, GUI библиотеки, XML парсера, и т. д..

Примечания

  1. Arrays of unboxed primitive values, and a faster Mersenne Twister
  2. Factor VM ported to C++
  3. Two-tier compilation comes to Factor
  4. Compiler overhaul
  5. Deploying stand-alone applications on Windows
  6. Lisp на concatenative.org
  7. Factor 0.95 now available
  8. Getting Factor
  9. Factor 0.91 now available
  10. ↑ Factor 0.92 now available

Ссылки

  • factorcode.org (англ.) домашняя страница
  • GitHub
  • The birth of Factor (англ.)
  • Factor: an extensible interactive language видеозапись авторской презентации языка на Google Tech Talks
  • Factor: a dynamic stack-based programming language (англ.) — Slava Pestov, Daniel Ehrenberg, Joe Groff. Dynamic Languages Symposium 2010


Factor (язык программирования).

© 2011–2023 stamp-i-k.ru, Россия, Барнаул, ул. Анатолия 32, +7 (3852) 15-49-47