Jump to content

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

Фактор
Парадигма мультипарадигмальность : конкатенативная ( на основе стека ), функциональная , объектно-ориентированная.
Разработчик Слава Пестов
Впервые появился 2003
Стабильная версия
0,99 / 24 августа 2023 г. ( 24.08.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]

  1. ^ Пестов, Слава. "Уголок Славы Пестова" .
  2. ^ «Вики-сайт Concatenative.org: История факторов/реализации» .
  3. ^ Jump up to: а б с д и ж г Пестов, Святослав; Эренберг, Дэниел (2010). «Фактор: динамический язык программирования на основе стека». Уведомления ACM SIGPLAN . 45 (12). АКМ: 43–58. дои : 10.1145/1899661.1869637 .
  4. ^ Пестов, Слава. «Документация по факторам: инфраструктура пользовательского интерфейса» .
  5. ^ Коулман, Дуг. «Документация по факторам: Библиотека базы данных» .
  6. ^ Пестов, Слава. «Документация фактора: HTTP-сервер» .
  7. ^ Пестов, Слава. «Факторная документация: Специализированные массивы» .
  8. ^ Коулман, Дуг; Эренберг, Дэниел. «Документация по факторам: регулярные выражения» .
  9. ^ Пестов, Слава (28 июля 2010 г.). «Интерфейс библиотеки C Overhauling Factor» .
  10. ^ Пестов, Слава (10 января 2010 г.). «Описание процесса начальной загрузки Factor» .
  11. ^ Пестов, Слава (5 июля 2008 г.). «На трясущихся деревьях» .
  12. ^ Эренберг, Дэниел (2010). «Устранение замыканий как постоянное распространение» (PDF) . Архивировано из оригинала (PDF) 26 июля 2011 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 73b6ba0e7c548198ae69ca11e647d431__1692895680
URL1:https://arc.ask3.ru/arc/aa/73/31/73b6ba0e7c548198ae69ca11e647d431.html
Заголовок, (Title) документа по адресу, URL1:
Factor (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)