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

Материал из Циклопедии
(перенаправлено с «Qi»)
Перейти к навигации Перейти к поиску
Логотип языка программирования Qi

Qi (произносится «чи») — функциональный язык программирования, близкий к Common Lisp, но отличающийся от него возможностью использовать статическую типизацию (как в Haskell или C++), сопоставление с образцом и другие преимущества современных декларативных языков.

Qi написан на Лиспе и поверх него (используя его богатые возможности метапрограммирования)[1] и разрешает использовать функции базового языка[2].

Язык принципиально разрабатывается как экспериментально-образовательный, создатель языка не прилагает никаких особых усилий к его популяризации, в следствие чего уступает, к примеру, такому «новому лиспу» как Clojure[3].

Наименование и логотип[править]

Наменование Qi — это английское написание того, то известно у нас как жизненная сила Ци (气,氣). Логотип Qi в 2007 году разработал Ли Ша (англ. Xah Lee, настоящее имя Ли Шаван, 李杀网). По его собственным словам он основывался на традициях китайской каллиграфии. Лямбда окрашена в цвет тёмной киновари, традиционный цвет даосских храмов. Авторские права на логотип переданы создателю языка Qi Марку Треверу[4].

История[править]

Автор языка — Марк Тарвер, в настоящее время — профессор в отставке. Qi был создан им как часть проекта L21, цель которого — улучшение Лиспа для решения проблем 21 века. В своём докладе[5] Тарвер излагает проблемы Лиспа, которые, как он утверждает, наносят ущерб широкому распространению языка. Конкретно, он обозначает отсутствие в Common Lisp паттерн матчинга, несоответствия с теорией лямбда-исчисления и отсутствие статической типизации. Эти недостатки, по утверждению Тарвера, привели к отказу от Лиспа при обучении в университетах и, как следствие, к отсутствию Лисп-программистов.

Язык был представлен сообществу в Апреле 2005 года. Первая версия распространялась под лицензией GPL. В конце 2008 года была выпущена пересмотренная версия Qi II. Лицензия GPL была заменена двойной лицензией, позволяющей как Open Source, так и закрытое коммерческое использование[6]. Среди нововведений Qi II можно, в частности, отметить ленивое вычисление (по требованию)[7].

В августе 2009 года Марк объявил, что он прощается с программированием и уезжает в Индию заниматься йогой[8]. Однако в декабре того же года он вернулся в Англию и заявил, что «фаза путешествий закончилась».

Shen[править]

Логотип языка программирования Shen

В том же году Тарвер на европейской лисп-конференции (European Conference on Lisp) представил доклад «The Next Lisp»[9]. В качестве основной проблемы языка Qi им была названа зависимость от Коммон Лиспа. Поэтому следующая версия языка, появившаяся в ноябре 2011 года, названная уже Shen (что по-китайски означает «душа») реализована уже поверх минималистиного виртуального лиспа, подобного Lisp 1.5, разработанному Джоном МакКарти. Этот минимальный лисп сначала назывался Kernel Lisp а затем получил название KLambda.

Shen был портирован на CLisp, SBCL, ECL, Scheme, Clojure, JavaScript и Java. Лицензия Shen является копилефтной и позволяет свободно использовать и модифицировать код языка, до тех пор, пока спецификация языка остаётся неизменной, не допускается распространять производные копии, которые не соответствуют стандарту Shen и/или имеют другие названия[10]. Одним из важных нововведений этого языка стало появление собственной макросистемы[11].

Ядро языка[править]

Ядро Qi — это основано на Лиспе. Для функции также используется префиксная запись. Hello World на Qi выглядит так:

(output "Hello, world~%")

Списки создаются при помощи квадратных скобок [ … ] с пробелами, разделяющими элементы.

[76 trombones]	

Функция вычисления факториала с использованием сопоставления с образцом:

(define factorial	
0 -> 1	
N -> (* N (factorial (- N 1))))	

Лямбда функция, умножающая аргумент на 2:

(/. X (* X 2))

В функциях можно использовать сопоставление с образцом для списков (Qi, в основном, следует синтаксису Эдинбургского Пролога при сопоставлении (переменные пишутся в верхнем регистре), но вместо запятых при разделении используются пробелы.):

(define member	
_ [] -> false	
X [X | _] -> true	
X [_ | Y] -> (member X Y))

В состав языка также включена полноценная реализация Пролога Qi Prolog, реализованная как библиотека на Qi.

В языке Shen сопоставление с образцом возможно также для строк и векторов[12].

Функция, использующая охрану при нахождении первого числа, большего чем N, в списке:

(define find_greater	
N [] -> (error "no number greater than ~A.~%" N)	
N [M | _] -> M where (> M N)	
N [_ | Ns] -> (find_greater N Ns))

Статическая типизация[править]

Статическая типизация необязательна и включается командой (tc +), а выключается (tc -). Система типов распознает знаки, переменные, строки, логические значения, числа и символы в качестве примитивных типов. Операторы примитивных типов: списки, *(умножение), --> и массивы.

Источники[править]

  1. ↑ Common Lisp как мета-язык
  2. ↑ Mark Tarver и Qi
  3. ↑ Why Qi Lisp Fails and Clojure Succeeds
  4. ↑ Qi Lisp Language Logo, Xah Lee, 2007-12-30
  5. ↑ All notes taken from Mark Tarver’s lecture 'Lisp for the 21st C.'
  6. ↑ Лицензия
  7. ↑ Вышел Qi II, linux.org.ru, 02.12.2008
  8. ↑ Создатель Qi сворачивает проект, linux.org.ru, 02.08.2009
  9. ↑ Mark Tarver The Next Lisp. Проверено 13 декабря 2012.
  10. ↑ Mark Tarver The Shen License. Проверено 13 декабря 2012.
  11. ↑ Mark Tarver Shen Macros. Проверено 13 декабря 2012.
  12. ↑ Mark Tarver Shen pattern matching. Проверено 13 декабря 2012.

Литература[править]

Ссылки[править]

 
Используемые
в разработке

Ада • A+ • APL • Atlast Forth • AWL • Язык ассемблера • ActionScript • ABAP/4 • AutoIt • AWK • BeanShell • Бейсик • Си • Кобол • C++ • C# • Cω • Clarion • Clojure • ColdFusion • Common Lisp • D • dBase • Delphi • DuAL • Eiffel • Erlang • Euphoria • F# • Форт • Фортран • Gambas • Go • Groovy • HAL/S • Haskell • IBM PL/S • Icon • Iridium • Java • JavaScript • Limbo • Lua • Модула-3 • Object Pascal • Objective-C • OCaml • Oz • Parser • Паскаль • Компонентный Паскаль • Perl • Pixilang • PHP • PowerBASIC • Python • ПЛ/1 • Пролог • Qi • Ruby • Scala • Scheme • Seed7 • Smalltalk • SQL • PL/SQL • Tcl • TouchDesigner • Vala • Visual Basic (.NET) • X-Robot

Академические

Agda • Clean • Curry • Idris • Лого • ML • Оберон • Planning C • РЕФАЛ • Симула •

IEC 61131-3

Instruction List • ST • FBD • Ladder Diagram (LD) • SFC

Прочие

Алгол • Алгол 68 • Модула-2 • Миранда • Hope • НОРМИН • Санда

Эзотерические

HQ9+/HQ9++ • INTERCAL • Brainfuck • Befunge • Malbolge • Piet • Spoon • Unlambda • Whitespace • FALSE • LOLCODE • Глагол

Визуальные

G (LabVIEW) • Microsoft VPL • Sikuli • VisSim • Алиса • ДРАКОН • Скретч

Прочее

Динамические • Для создания компьютерных игр • Компилируемые • С ключевыми словами не на английском языке • С C-style синтаксисом • Синтаксис • Системное программное обеспечение • YoptaScript

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