Фактор (язык программирования) - Factor (programming language)
Эта статья слишком полагается на Рекомендации к основные источники.Июль 2019) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
Парадигма | мультипарадигма: функциональный, конкатенативный, ориентированный на стек |
---|---|
Разработчик | Слава Пестов |
Впервые появился | 2003 |
Стабильный выпуск | 0.98 / 31 июля 2018 г. |
Печатная дисциплина | сильный, динамичный |
Операционные системы | Windows, macOS, Linux |
Лицензия | Лицензия BSD |
Интернет сайт | factorcode.org |
Под влиянием | |
Радость, Четвертый, Лисп, Себя |
Фактор это стек-ориентированный язык программирования Автор Слава Пестов. Фактор динамически типизированный и имеет автоматическое управление памятью, а также мощные функции метапрограммирования. В языке есть единственная реализация с самостоятельным размещением оптимизирующий компилятор и интерактивная среда разработки. Факторное распределение включает большой стандартная библиотека.
История
Слава Пестов создал «Фактор» в 2003 году как язык сценариев для видео игра.[1] Первоначальная реализация, теперь называемая JFactor, была реализована в Ява и побежал по Виртуальная машина Java. Хотя ранний язык внешне напоминал современный Фактор с точки зрения синтаксис, современный язык сильно отличается в практическом плане, и текущая реализация намного быстрее.
Язык значительно изменился со временем. Первоначально программы Factor были сосредоточены на манипулировании объектами Java с помощью Java отражение возможности. С самого начала философия дизайна заключалась в модификации языка для соответствия программам, написанным на нем. По мере того, как реализация Factor и стандартные библиотеки становились более детализированными, необходимость в определенных языковых функциях стала очевидной, и они были добавлены. JFactor не имел объектная система где вы могли бы определить свой собственный классы, и ранние версии собственного Factor были такими же; язык был похож на Схема таким образом. Сегодня объектная система является центральной частью «Фактора». Другие важные языковые функции, такие как кортеж классы, встраивание комбинаторов, макросы, определяемые пользователем разбор слова и современная словарная система добавлялись лишь частично, когда их полезность становилась очевидной.
В интерфейс внешней функции присутствовал с самых ранних версий Factor, и аналогичная система существовала в JFactor. Это было выбрано вместо создания плагина к C часть реализации для каждого внешнего библиотека этот Фактор должен общаться, и имеет преимущество декларативный, быстрее компилируется и проще писать.
Первоначально реализация Java состояла только из устный переводчик, но компилятор Байт-код Java был добавлен позже. Этот компилятор работал только над определенными процедурами. Версия Factor для Java была заменена версией, написанной на C и Factor. Изначально он состоял только из интерпретатора, но на смену интерпретатору пришли два компилятора, используемые в разных ситуациях. Со временем реализация Фактора выросла значительно быстрее.[2]
Описание
Фактор динамически типизированный, функциональный и объектно-ориентированный язык программирования. Код построен вокруг небольших процедур, называемых словами. В типичном коде это 1–3 строки, а процедура длиной более 7 строк встречается очень редко. То, что идиоматически выражается одной процедурой на другом языке программирования, в Factor записывается в несколько слов.[3]
Каждое слово принимает фиксированное количество аргументов и имеет фиксированное количество возвращаемых значений. Аргументы к словам передаются стек данных, с помощью обратная польская запись. Стек используется только для организации вызовов слов, а не как структура данных. Стек в Factor используется аналогично стеку в Четвертый; для этого они оба считаются стековые языки. Например, ниже приведен фрагмент кода, который выводит «hello world» в текущий выходной поток:
печать "привет мир"
Распечатать
это слово в io
словарь, который берет строку из стека и ничего не возвращает. Он выводит строку в текущий выходной поток (по умолчанию терминал или графический приемник).[3]
Не все данные нужно передавать только со стеком. Лексически ограниченный локальные переменные позволяют хранить и получать доступ временные используется в рамках процедуры. С динамической областью видимости переменные используются для передачи данных между вызовами процедур без использования стека. Например, текущие потоки ввода и вывода хранятся в переменных с динамической областью действия.[3]
Фактор подчеркивает гибкость и способность расширять язык.[3] Есть система для макросов, а также для произвольного расширения синтаксиса Factor. Синтаксис Factor часто расширяется, чтобы учесть новые типы определений слов и новые типы литералы для структур данных. Он также используется в XML библиотека для предоставления буквального синтаксиса для генерации XML. Например, следующее слово принимает строку и создает объект документа XML, который представляет собой документ HTML, подчеркивающий строку:
: make-html ( нить -- xml ) обман <XML <html> <head><title><-></title></head> <body><h1><-></h1></body> </html> XML> ;
Слово обман
дублирует верхний элемент в стеке. В <->
означает заполнение этой части XML-документа элементом из стека.
Реализация и библиотеки
Фактор включает в себя большую стандартную библиотеку, полностью написанную на этом языке. К ним относятся
- Кросс-платформенный набор инструментов с графическим интерфейсом, созданный на основе OpenGL и различные оконные системы, используемые для среды разработки.[4]
- Привязки к нескольким библиотекам баз данных, включая PostgreSQL и SQLite.[5]
- An HTTP сервер и клиент с веб-фреймворком Furnace.[6]
- Эффективные однородные массивы целых чисел, чисел с плавающей запятой и структур C.[7]
- Библиотека, реализующая регулярные выражения, генерирующая машинный код для сопоставления.[8]
А интерфейс внешней функции встроен в Factor, что позволяет общаться с C, Цель-C и Фортран программы. Также имеется поддержка выполнения и взаимодействия с шейдерами, написанными на GLSL.[3][9]
Фактор реализован в Факторе и C ++. Первоначально он был загружен из более ранней реализации Java. Сегодня парсер и оптимизирующий компилятор написаны на этом языке. Некоторые базовые части языка реализованы в C ++, например, сборщик мусора и некоторые примитивы.
Фактор использует изображение -базовая модель, аналогичная многим Болтовня реализации, где скомпилированный код и данные хранятся в изображении.[10] Чтобы скомпилировать программу, программа загружается в изображение, и изображение сохраняется. Специальный инструмент помогает в процессе создания минимального образа для запуска определенной программы, упаковывая результат во что-то, что можно развернуть как отдельное приложение.[3][11]
Компилятор Factor реализует множество расширенных оптимизаций и использовался как цель для исследования новых методов оптимизации.[3][12]
Рекомендации
- ^ Пестов, Слава. "Интернет-уголок Славы Пестова".
- ^ "Concatenative.org wiki: Факторы / История внедрения".
- ^ а б c d е ж грамм Пестов, Святослав; Эренберг, Даниэль (2010). «Фактор: динамический стековый язык программирования». Уведомления ACM SIGPLAN. ACM. 45 (12): 43–58. Дои:10.1145/1899661.1869637.
- ^ Пестов, Слава. «Факторная документация: UI framework».
- ^ Коулман, Дуг. «Факторная документация: библиотека базы данных».
- ^ Пестов, Слава. «Факторная документация: HTTP-сервер».
- ^ Пестов, Слава. «Факторная документация: специализированные массивы».
- ^ Коулман, Дуг; Эренберг, Даниэль. «Факторная документация: регулярные выражения».
- ^ Пестов, Слава. "Интерфейс библиотеки C Overhauling Factor".
- ^ Пестов, Слава. "Объяснение процесса начальной загрузки Factor".
- ^ Пестов, Слава. «На дрожащих деревьях».
- ^ Эренберг, Даниэль (2010). «Устранение замыкания как постоянное распространение» (PDF). Архивировано из оригинал (PDF) на 2011-07-26.
внешняя ссылка
- Официальный веб-сайт
- Слава Пестов (27 октября 2008 г.). Фактор: расширяемый интерактивный язык (flv) (Технический разговор). Google.
- Зед Шоу (2008). ACL мертв (flv) (CUSEC 2008). CUSEC. - презентация, написанная на языке Factor, в которой упоминается и хвалится Factor