POSTQUEL
POSTQUEL — это язык запросов, который когда-то поддерживала СУБД «Постгрес». Наверняка многие задумывались почему языков программирования так много, а языков в базах данных, кроме SQL и его диалектов, не видать; SQL оказался исключительно удачным, но у него были когда-то и соперники. «Постквел» один из них.
POSTQUEL расшифровывается как «POSTgres QUEry Language», «язык запросов Постгреса», он был разработам в 1985 году в Калифорнийском университете в Беркли под руководством Майкла Стоунбрейкера, POSTQUEL основан на языке запросов QUEL, который использовался на тот момент в БД «Ингрес».
Примеры того на что был похож POSTQUEL есть в польской Википедии:
Получить размер заработной платы сотрудника Ковальски (pracownicy — сотрудники, płace — зарплата):
retrieve (PRACOWNICY.placa) from PRACOWNICY where PRACOWNICY.nazwisko = "Kowalski"
Все сотрудники старше 40 лет (wiek — возраст, nazwisko — имя):
retrieve (P.nazwisko) from P in PRACOWNICY where P.wiek > 40
Найти все департаменты, целиком занимающие один этаж (pietro — этаж, dnazwa — сокращение от «название департамента»):
retrieve (DEPART.dnazwa)
where DEPART.pietro NOT-IN {D.pietro from D in DEPART where D.dnazwa != DEPART.dnazwa}
«Постквел» был более формализованным языком, чем Эскюэль, все команды строились по одному образцу и не допускали вариаций. Других подробностей я не нашёл, к сожалению, детального описания языка мне обнаружить пока не удалось, было бы любопытно посмотреть на него и проанализировать сильные стороны.
Добавлено позднее. Я обнаружил документацию 1992 года на «Постгрес», где довольно подробно упоминается и «Постквел» (ссылка есть в комментариях). Интересный язык-то был!
Например, оперировал он объектами, поддерживал наследование (все примеры из упомянутой документации):
create STUD_EMP (location = point) inherits (EMP)
Поддерживал массивы (индексы начинаются с единицы):
create SAL_EMP (name = char[], pay_by_quarter = int4[4])
append SAL_EMP (name = "bill", pay_by_quarter="{10000, 10000, 10000, 10000}")
retrieve (SAL_EMP.name) where SAL_EMP.pay_by_quarter[1] !=SAL_EMP.pay_by_quarter[2]
Поддерживал историю, вот, например, срез данных с первого января 1970 по наши дни:
retrieve (E.salary)
from E in EMP["Jan 1 00:00:00 1970 GMT", "now"]
where E.name = "Sam"
Была возможность создавать пользовательские типы (тут создаётся новый тип массива):
define type int_array
(element = int4, internallength = variable,
input = array_in, output = array_out)
Так же как и пользовательские функции:
define function eq_area_circle
(language = "c", returntype = bool)
arg is (circle, circle)
as "/usr/postgres/tutorial/circle.o"
define function manager
(language = "postquel", returntype = EMP)
arg is (EMP)
as "retrieve (E.all) from E in EMP
where E.name = DEPT.manager
and DEPT.name = $1.dept"
retrieve (EMP.name)
where name(manager(EMP)) = "Joe"
Была даже перегрузка операторов!
define operator =
(arg1 = circle, arg2 = circle,
procedure = eq_area_circle)
И так далее.
А ты видел MPS? http://www.jetbrains.com/mps/
(Вопрос в сторону, но про языки)
Комментарий для bealex.moikrug.ru:
Неа, посмотрю, спасибо!
О! Нашёл доку по Постгресу, где упоминается Посткюэль, забрать можно следующей командой из терминала:
Появился файл p1992.pdf, который можно прочитать.
Комментарий для Евгения Степанищева:
Посмотри. Это Meta Programming System. Крайне своеобразная штука для создания своих DSL (к которым сразу создается IDE, в процессе разработки языка). Разработка исключительно исследовательская, ковыряют ее уже лет десять. Мне кажется, что тебе должна понравиться возможность создавать свои языки и баловаться с синтаксисом, правилами обработки и так далее.
Комментарий для Евгения Степанищева:
Лишняя «р».
Комментарий для Кирилл Зорин:
Спасибо! В самом деле…
Если SQL по-прежнему называют «сиквел», помня о написании SEQUEL, то POSTQUEL точно должен читаться «постквел».
Комментарий для warmland.ru:
По-моему, «сиквел» — это какая-то ерунда. Вот SEQUEL и надо читать «сиквел», не понимаю причём здесь SQL. Мы же JavaScript не читаем как «лайвскрипт» или «мока»?
Комментарий для Евгения Степанищева:
Ерунда — это предыдущий комментарий. Подавляющее большинство разработчиков говорят ’сиквел’, это оригинальное название. http://en.wikipedia.org/wiki/SQL: ’Many English-speaking database professionals still use the original[29] pronunciation /ˈsiːkwəl/ (like the word «sequel»), including Donald Chamberlin himself.[30]’.
Так что версия ’постквел’ не только красива и благозвучна (’Посткюль’, фу), но и логична.
Комментарий для Евгения Степанищева:
Единого мнения на этот счёт нет. Изначально это был «сиквел», но тогда и название языка было Structured English Query Language. Сейчас Википедия считает, что официальное произношение «эс-кью-эль». Вот неплохая статья на эту тему: http://patorjk.com/blog/2012/01/26/pronouncing-sql-s-q-l-or-sequel/
А png вы тоже читаете p-n-g вместо «пинг»?
Комментарий для Андрей:
Подавляющее большинство разработчиков вокруг меня говорят «эк-кю-эл», так что версия «постквел» — ерунда и ничего благозвучного в ней нет.
Комментарий для http://kaminari.io/blog:
Никогда в жизни не произносил «пээнгэ» как «пинг» и никогда не слышал, чтобы кто-то из русского говорящих так его произносил.
Комментарий для Евгения Степанищева:
Ingres-Postgres; Quel-Sequel(aka SQL)-Postquel. Почитайте ссылки, там все красиво расписано.
Впрочем, Вы и подавляющее большинство разработчиков вокруг Вас, разумеется имеете право на собственное обособленное мнение.
А за информацию спасибо, действительно любопытный язык. Историю хотелось бы иметь стандартно (столько видел реализаций истории, и сам писал), а вот перегрузка операторов это уже перебор, по-моему.
Комментарий для Андрей:
Почему же перегрузка операторов перебор, если этот язык оперирует объектами, в том числе и созданными из пользовательских классов? Как-то сравнивать-то объекты нужно.
Комментарий для Евгения Степанищева:
Кстати, если «посткуэль» = POSTQUEL, прочитанный как слово, но не по английский правилам произношения, то у меня к вам вопрос: а почему, собственно, не по-английски читаем?
Комментарий для warmland.ru:
Убедили.
Оффтоп: а не хотите ли вы в копилку языков программирования добавить قلب ? cybersecurity.ru/development/168752.html
Комментарий для Alexander:
Точнее уж http://qlblang.org
Хехе, попробую, если пойму хоть что-то :)
Многие англоязычные люди действительно говорят «сиквел». В свое время я пытался привыкнуть говорить «сиквел» вместо «эс-ку-эль», чтобы на одном языке разговаривать. Вроде получилось даже.
(«Hello world!» قول)
Так вот откуда корни у LINQ растут...
Комментарий для Александр Симонов:
Сходство только в том, что объекты приходят? :)
Комментарий для Андрей:
Да, многие говорят «сиквел». Но это не оригинальное название.
И не надо вводить людей в заблуждение. В статье http://en.wikipedia.org/wiki/SQL сказано:
The original SQL standard declared that the official pronunciation for SQL is «es queue el».[5] Many English-speaking database professionals still use the original[29] pronunciation /ˈsiːkwəl/ (like the word «sequel»), including Donald Chamberlin himself.[30]
А в этой статье [30] есть письмо от Дональда Чемберлина:
«Hi Pat,
Since the language was originally named SEQUEL, many people continued to pronounce the name that way after it was shortened to SQL. Both pronunciations are widely used and recognized. As to which is more “official”, I guess the authority would be the ISO Standard, which is spelled (and presumably pronounced) S-Q-L.
Thanks for your interest,
Don Chamberlin»