POSTQUEL
POSTQUEL — это язык запросов, который
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)И так далее.
Комментарии 23
(Вопрос в сторону, но про языки)
О! Нашёл доку по Постгресу, где упоминается Посткюэль, забрать можно следующей командой из терминала:
Появился файл p1992.pdf, который можно прочитать.
Посмотри. Это Meta Programming System. Крайне своеобразная штука для создания своих DSL (к которым сразу создается IDE, в процессе разработки языка). Разработка исключительно исследовательская, ковыряют ее уже лет десять. Мне кажется, что тебе должна понравиться возможность создавать свои языки и баловаться с синтаксисом, правилами обработки и так далее.
Комментарий для Евгения Степанищева:
Лишняя «р».
Ерунда — это предыдущий комментарий. Подавляющее большинство разработчиков говорят 'сиквел', это оригинальное название. http://en.wikipedia.org/wiki/SQL: 'Many
Так что версия 'постквел' не только красива и благозвучна ('Посткюль', фу), но и логична.
Единого мнения на этот счёт нет. Изначально это был «сиквел», но тогда и название языка было Structured English Query Language. Сейчас Википедия считает, что официальное произношение
А png вы тоже читаете
Никогда в жизни не произносил «пээнгэ» как «пинг» и никогда не слышал, чтобыкто-то из русского говорящих так его произносил.
Впрочем, Вы и подавляющее большинство разработчиков вокруг Вас, разумеется имеете право на собственное обособленное мнение.
А за информацию спасибо, действительно любопытный язык. Историю хотелось бы иметь стандартно (столько видел реализаций истории, и сам писал), а вот перегрузка операторов это уже перебор,
Почему же перегрузка операторов перебор, если этот язык оперирует объектами, в том числе и созданными из пользовательских классов?
1. SEQUEL читается «сиквел», я не представляю, как его можно прочитать
2. SQL читается
3. POSTQUEL должен подчиняться правилу «если сокращение читается как слово, так его и читаем» — тогда получается «постквел».
4. «Посткуэль» воспринимается как «прочитали „пост“ как слово, а дальше в уме заменили QUEL на QL и прочитали последнее по буквам». Думаю, против этого комментаторы и восстают.
Кстати, если «посткуэль» = POSTQUEL, прочитанный как слово, но не по английский правилам произношения, то у меня к вам вопрос: а почему, собственно, не
Убедили.
Хехе, попробую, если пойму хоть
Так вот откуда корни у LINQ растут…
Комментарий для Андрей:
Да, многие говорят «сиквел». Но это не оригинальное название.English-speaking database professionals still use the original[29] pronunciation /ˈsiːkwəl/ (like the word «sequel»), including Donald Chamberlin himself.[30]
S-Q-L.
И не надо вводить людей в заблуждение. В статье http://en.wikipedia.org/wiki/SQL сказано:
The original SQL standard declared that the official pronunciation for SQL is «es queue el».[5] Many
А в этой статье [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)
Thanks for your interest,
Don Chamberlin»