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

Поделись знанием:
(перенаправлено с «Factor»)
Перейти к: навигация, поиск
Factor
Класс языка:

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

Появился в:

2003

Автор:

Слава Пестов

Выпуск:

0.97 (2 ноября 2014)

Система типов:

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

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

Joy, Forth, Lisp, Self

Лицензия:

BSD license

Сайт:

[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 (язык программирования)"

Примечания

  1. [factor-language.blogspot.com/2008/12/arrays-of-unboxed-primitive-values-and.html Arrays of unboxed primitive values, and a faster Mersenne Twister]
  2. [factor-language.blogspot.com/2009/05/factor-vm-ported-to-c.html Factor VM ported to C++]
  3. [factor-language.blogspot.com/2007/09/two-tier-compilation-comes-to-factor.html Two-tier compilation comes to Factor]
  4. [factor-language.blogspot.com/2008/01/compiler-overhaul.html Compiler overhaul]
  5. [factor-language.blogspot.com/2007/11/deploying-stand-alone-applications-on.html Deploying stand-alone applications on Windows]
  6. [concatenative.org/wiki/view/Lisp Lisp на concatenative.org]
  7. [re-factor.blogspot.ru/2013/04/factor-0-96-now-available.html Factor 0.96 now available]
  8. [factorcode.org/ Getting Factor]
  9. [factor-language.blogspot.com/2007/12/factor-091-now-available.html Factor 0.91 now available]
  10. 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

Отрывок, характеризующий Factor (язык программирования)

– Bosse! Vincent! – прокричал Петя, остановясь у двери.
– Вам кого, сударь, надо? – сказал голос из темноты. Петя отвечал, что того мальчика француза, которого взяли нынче.
– А! Весеннего? – сказал казак.
Имя его Vincent уже переделали: казаки – в Весеннего, а мужики и солдаты – в Висеню. В обеих переделках это напоминание о весне сходилось с представлением о молоденьком мальчике.
– Он там у костра грелся. Эй, Висеня! Висеня! Весенний! – послышались в темноте передающиеся голоса и смех.
– А мальчонок шустрый, – сказал гусар, стоявший подле Пети. – Мы его покормили давеча. Страсть голодный был!
В темноте послышались шаги и, шлепая босыми ногами по грязи, барабанщик подошел к двери.
– Ah, c'est vous! – сказал Петя. – Voulez vous manger? N'ayez pas peur, on ne vous fera pas de mal, – прибавил он, робко и ласково дотрогиваясь до его руки. – Entrez, entrez. [Ах, это вы! Хотите есть? Не бойтесь, вам ничего не сделают. Войдите, войдите.]
– Merci, monsieur, [Благодарю, господин.] – отвечал барабанщик дрожащим, почти детским голосом и стал обтирать о порог свои грязные ноги. Пете многое хотелось сказать барабанщику, но он не смел. Он, переминаясь, стоял подле него в сенях. Потом в темноте взял его за руку и пожал ее.
– Entrez, entrez, – повторил он только нежным шепотом.
«Ах, что бы мне ему сделать!» – проговорил сам с собою Петя и, отворив дверь, пропустил мимо себя мальчика.
Когда барабанщик вошел в избушку, Петя сел подальше от него, считая для себя унизительным обращать на него внимание. Он только ощупывал в кармане деньги и был в сомненье, не стыдно ли будет дать их барабанщику.


От барабанщика, которому по приказанию Денисова дали водки, баранины и которого Денисов велел одеть в русский кафтан, с тем, чтобы, не отсылая с пленными, оставить его при партии, внимание Пети было отвлечено приездом Долохова. Петя в армии слышал много рассказов про необычайные храбрость и жестокость Долохова с французами, и потому с тех пор, как Долохов вошел в избу, Петя, не спуская глаз, смотрел на него и все больше подбадривался, подергивая поднятой головой, с тем чтобы не быть недостойным даже и такого общества, как Долохов.
Наружность Долохова странно поразила Петю своей простотой.
Денисов одевался в чекмень, носил бороду и на груди образ Николая чудотворца и в манере говорить, во всех приемах выказывал особенность своего положения. Долохов же, напротив, прежде, в Москве, носивший персидский костюм, теперь имел вид самого чопорного гвардейского офицера. Лицо его было чисто выбрито, одет он был в гвардейский ваточный сюртук с Георгием в петлице и в прямо надетой простой фуражке. Он снял в углу мокрую бурку и, подойдя к Денисову, не здороваясь ни с кем, тотчас же стал расспрашивать о деле. Денисов рассказывал ему про замыслы, которые имели на их транспорт большие отряды, и про присылку Пети, и про то, как он отвечал обоим генералам. Потом Денисов рассказал все, что он знал про положение французского отряда.
– Это так, но надо знать, какие и сколько войск, – сказал Долохов, – надо будет съездить. Не зная верно, сколько их, пускаться в дело нельзя. Я люблю аккуратно дело делать. Вот, не хочет ли кто из господ съездить со мной в их лагерь. У меня мундиры с собою.
– Я, я… я поеду с вами! – вскрикнул Петя.
– Совсем и тебе не нужно ездить, – сказал Денисов, обращаясь к Долохову, – а уж его я ни за что не пущу.
– Вот прекрасно! – вскрикнул Петя, – отчего же мне не ехать?..
– Да оттого, что незачем.
– Ну, уж вы меня извините, потому что… потому что… я поеду, вот и все. Вы возьмете меня? – обратился он к Долохову.
– Отчего ж… – рассеянно отвечал Долохов, вглядываясь в лицо французского барабанщика.
– Давно у тебя молодчик этот? – спросил он у Денисова.
– Нынче взяли, да ничего не знает. Я оставил его пг'и себе.
– Ну, а остальных ты куда деваешь? – сказал Долохов.
– Как куда? Отсылаю под г'асписки! – вдруг покраснев, вскрикнул Денисов. – И смело скажу, что на моей совести нет ни одного человека. Разве тебе тг'удно отослать тг'идцать ли, тг'иста ли человек под конвоем в гог'од, чем маг'ать, я пг'ямо скажу, честь солдата.
– Вот молоденькому графчику в шестнадцать лет говорить эти любезности прилично, – с холодной усмешкой сказал Долохов, – а тебе то уж это оставить пора.
– Что ж, я ничего не говорю, я только говорю, что я непременно поеду с вами, – робко сказал Петя.
– А нам с тобой пора, брат, бросить эти любезности, – продолжал Долохов, как будто он находил особенное удовольствие говорить об этом предмете, раздражавшем Денисова. – Ну этого ты зачем взял к себе? – сказал он, покачивая головой. – Затем, что тебе его жалко? Ведь мы знаем эти твои расписки. Ты пошлешь их сто человек, а придут тридцать. Помрут с голоду или побьют. Так не все ли равно их и не брать?
Эсаул, щуря светлые глаза, одобрительно кивал головой.
– Это все г'авно, тут Рассуждать нечего. Я на свою душу взять не хочу. Ты говог'ишь – помг'ут. Ну, хог'ошо. Только бы не от меня.
Долохов засмеялся.
– Кто же им не велел меня двадцать раз поймать? А ведь поймают – меня и тебя, с твоим рыцарством, все равно на осинку. – Он помолчал. – Однако надо дело делать. Послать моего казака с вьюком! У меня два французских мундира. Что ж, едем со мной? – спросил он у Пети.
– Я? Да, да, непременно, – покраснев почти до слез, вскрикнул Петя, взглядывая на Денисова.
Опять в то время, как Долохов заспорил с Денисовым о том, что надо делать с пленными, Петя почувствовал неловкость и торопливость; но опять не успел понять хорошенько того, о чем они говорили. «Ежели так думают большие, известные, стало быть, так надо, стало быть, это хорошо, – думал он. – А главное, надо, чтобы Денисов не смел думать, что я послушаюсь его, что он может мной командовать. Непременно поеду с Долоховым во французский лагерь. Он может, и я могу».
На все убеждения Денисова не ездить Петя отвечал, что он тоже привык все делать аккуратно, а не наобум Лазаря, и что он об опасности себе никогда не думает.
– Потому что, – согласитесь сами, – если не знать верно, сколько там, от этого зависит жизнь, может быть, сотен, а тут мы одни, и потом мне очень этого хочется, и непременно, непременно поеду, вы уж меня не удержите, – говорил он, – только хуже будет…