Фактор (язык программирования)
![]() | |
Парадигма | мультипарадигмальность : конкатенативная ( на основе стека ), функциональная , объектно-ориентированная. |
---|---|
Разработчик | Слава Пестов |
Впервые появился | 2003 |
Стабильная версия | 0,99
/ 24 августа 2023 г. |
Дисциплина набора текста | сильный , динамичный |
ТЫ | Windows , MacOS , Linux |
Лицензия | Лицензия BSD |
Веб-сайт | factorcode.org |
Под влиянием | |
Джой , Форт , Лисп , Я |
Factor — это стек-ориентированный язык программирования, созданный Славой Пестовым. Factor динамически типизирован и имеет автоматическое управление памятью , а также мощные функции метапрограммирования. Язык имеет единую реализацию, включающую автономный оптимизирующий компилятор и интерактивную среду разработки . Дистрибутив Factor включает в себя большую стандартную библиотеку .
История
[ редактировать ]Слава Пестов создал Factor в 2003 году как язык сценариев для видеоигр . [1] Первоначальная реализация, теперь называемая JFactor, была реализована на Java и запускалась на виртуальной машине Java . Хотя ранний язык внешне напоминал современный Factor с точки зрения синтаксиса , современный язык сильно отличается с практической точки зрения, и текущая реализация намного быстрее.
Язык со временем существенно изменился. Java Первоначально программы Factor были сосредоточены на манипулировании объектами Java с помощью возможностей отражения . С самого начала философия дизайна заключалась в модификации языка для соответствия программам, написанным на нем. По мере того, как реализация Factor и стандартные библиотеки становились более детализированными, необходимость в определенных функциях языка становилась очевидной, и они были добавлены. В JFactor не было объектной системы , в которой программист мог бы определять свои собственные классы , и ранние версии нативного Factor были такими же; язык был похож на Scheme в этом смысле . Сегодня объектная система является центральной частью Factor. Другие важные функции языка, такие как классы кортежей , встраивание комбинаторов, макросы , определяемые пользователем слова синтаксического анализа и современная словарная система, добавлялись лишь постепенно, по мере того, как их полезность становилась очевидной.
Интерфейс внешних функций присутствовал в самых ранних версиях Factor, аналогичная система существовала в JFactor. Это было выбрано вместо создания плагина для C - части реализации для каждой внешней библиотеки, с которой Factor должен взаимодействовать, и имеет то преимущество, что оно более декларативно , быстрее компилируется и проще в написании.
Реализация Java изначально состояла только из интерпретатора , но позже был добавлен компилятор байт-кода Java . Этот компилятор работал только с определенными процедурами. Версия Factor для Java была заменена версией, написанной на C и Factor. Первоначально это состоял только из интерпретатора, но интерпретатор был заменен двумя компиляторами, используемыми в разных ситуациях. Со временем внедрение Фактора стало значительно быстрее. [2]
Описание
[ редактировать ]Factor — это динамически типизированный , функциональный и объектно-ориентированный язык программирования . Код структурирован вокруг небольших процедур, называемых словами. В типичном коде это 1–3 строки, а процедуры длиной более 7 строк встречаются очень редко. То, что идиоматически было бы выражено с помощью одной процедуры на другом языке программирования, было бы записано в виде нескольких слов в Factor. [3]
Каждое слово принимает фиксированное количество аргументов и имеет фиксированное количество возвращаемых значений. Аргументы слов передаются в стек данных с использованием обратной польской нотации . Стек используется просто для организации вызовов слов, а не как структура данных. Стек в Factor используется аналогично стеку в Forth ; поэтому они оба считаются стековыми языками . Например, ниже приведен фрагмент кода, который выводит «привет, мир» в текущий выходной поток:
"hello world" print
print
это слово в io
словарь, который берет строку из стека и ничего не возвращает. Он печатает строку в текущий выходной поток (по умолчанию терминал или графический прослушиватель). [3]
Функция факториала может быть реализовано в Factor следующим образом:
: factorial ( n -- n! ) dup 1 > [ [1,b] product ] [ drop 1 ] if ;
Не все данные должны передаваться только со стеком. Локальные переменные с лексической областью позволяют хранить временные переменные, используемые внутри процедуры, и получать к ним доступ. Переменные с динамической областью используются для передачи данных между вызовами процедур без использования стека. Например, текущие потоки ввода и вывода хранятся в переменных с динамической областью действия. [3]
Фактор подчеркивает гибкость и возможность расширить язык. [3] Имеется система макросов, а также произвольного расширения синтаксиса Factor. Синтаксис фактора часто расширяется, чтобы обеспечить возможность использования новых типов определений слов и новых типов литералов для структур данных. Он также используется в библиотеке XML для обеспечения буквального синтаксиса для генерации XML. Например, следующее слово принимает строку и создает объект XML-документа, который представляет собой HTML-документ, подчеркивающий строку:
: make-html ( string -- xml )
dup
<XML
<html>
<head><title><-></title></head>
<body><h1><-></h1></body>
</html>
XML> ;
Слово dup
дублирует верхний элемент стека. <->
означает заполнение этой части XML-документа элементом из стека.
Реализация и библиотеки
[ редактировать ]Factor включает в себя большую стандартную библиотеку, полностью написанную на этом языке. К ним относятся
- Кроссплатформенный набор инструментов графического пользовательского интерфейса, построенный на основе OpenGL и различных оконных систем, используемый для среды разработки. [4]
- Привязки к нескольким библиотекам баз данных, включая PostgreSQL и SQLite . [5]
- сервер HTTP- и клиент с веб-инфраструктурой Furnace. [6]
- Эффективные однородные массивы целых чисел, чисел с плавающей запятой и структур C. [7]
- Библиотека, реализующая регулярные выражения и генерирующая машинный код для сопоставления. [8]
программами C В Factor встроен интерфейс внешних функций, позволяющий взаимодействовать с , Objective -C и Fortran . Также имеется поддержка выполнения и взаимодействия с шейдерами, написанными на GLSL . [3] [9]
Factor реализован в Factor и C++ . Первоначально он был заимствован из более ранней реализации Java. Сегодня на языке написаны парсер и оптимизирующий компилятор. Некоторые базовые части языка реализованы на C++, например сборщик мусора и некоторые примитивы.
Factor использует модель на основе изображений , аналогичную многим реализациям Smalltalk , где скомпилированный код и данные хранятся в изображении. [10] Для компиляции программы программа загружается в образ и образ сохраняется. Специальный инструмент помогает в процессе создания минимального образа для запуска конкретной программы, упаковывая результат во что-то, что можно развернуть как отдельное приложение. [3] [11]
Компилятор Factor реализует множество продвинутых оптимизаций и использовался в качестве объекта исследования новых методов оптимизации. [3] [12]
Ссылки
[ редактировать ]- ^ Пестов, Слава. "Уголок Славы Пестова" .
- ^ «Вики-сайт Concatenative.org: История факторов/реализации» .
- ^ Jump up to: а б с д и ж г Пестов, Святослав; Эренберг, Дэниел (2010). «Фактор: динамический язык программирования на основе стека». Уведомления ACM SIGPLAN . 45 (12). АКМ: 43–58. дои : 10.1145/1899661.1869637 .
- ^ Пестов, Слава. «Документация по факторам: инфраструктура пользовательского интерфейса» .
- ^ Коулман, Дуг. «Документация по факторам: Библиотека базы данных» .
- ^ Пестов, Слава. «Документация фактора: HTTP-сервер» .
- ^ Пестов, Слава. «Факторная документация: Специализированные массивы» .
- ^ Коулман, Дуг; Эренберг, Дэниел. «Документация по факторам: регулярные выражения» .
- ^ Пестов, Слава (28 июля 2010 г.). «Интерфейс библиотеки C Overhauling Factor» .
- ^ Пестов, Слава (10 января 2010 г.). «Описание процесса начальной загрузки Factor» .
- ^ Пестов, Слава (5 июля 2008 г.). «На трясущихся деревьях» .
- ^ Эренберг, Дэниел (2010). «Устранение замыканий как постоянное распространение» (PDF) . Архивировано из оригинала (PDF) 26 июля 2011 г.
Внешние ссылки
[ редактировать ]- Официальный сайт
- Слава Пестов (27 октября 2008 г.). Фактор: расширяемый интерактивный язык (flv) (техническое обсуждение). Google . Архивировано из оригинала 22 декабря 2021 г.
- Зед Шоу (2008). ACL мертв (flv) (CUSEC 2008). КУСЕК. - презентация, написанная на Факторе, в которой упоминается и восхваляется Фактор.
- Языки программирования
- Конкатенативные языки программирования
- Языки функционального уровня
- Стекоориентированные языки программирования
- Языки программирования, созданные в 2003 году.
- Языки программирования с расширяемым синтаксисом
- программное обеспечение 2003 года
- Языки программирования высокого уровня
- Программное обеспечение, использующее лицензию BSD