Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

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)

И так далее.

23 комментария
Александр Бабаев (bealex.moikrug.ru) 2013

А ты видел MPS? http://www.jetbrains.com/mps/

(Вопрос в сторону, но про языки)

Евгений Степанищев (bolknote.ru) 2013

Комментарий для bealex.moikrug.ru:

Неа, посмотрю, спасибо!

Евгений Степанищев (bolknote.ru) 2013

О! Нашёл доку по Постгресу, где упоминается Посткюэль, забрать можно следующей командой из терминала:

wget -O- http://i.piccy.info/i7/b7529b4c42b250f66c10cff9279bfa0b/4-55-1175/1231011/post.jpg |
dd if=/dev/stdin of=p1992.pdf skip=285 bs=1

Появился файл p1992.pdf, который можно прочитать.

Александр Бабаев (bealex.moikrug.ru) 2013

Комментарий для Евгения Степанищева:

Посмотри. Это Meta Programming System. Крайне своеобразная штука для создания своих DSL (к которым сразу создается IDE, в процессе разработки языка). Разработка исключительно исследовательская, ковыряют ее уже лет десять. Мне кажется, что тебе должна понравиться возможность создавать свои языки и баловаться с синтаксисом, правилами обработки и так далее.

Кирилл Зорин 2013

Комментарий для Евгения Степанищева:

СУБД «Постргрес»

Лишняя «р».

Евгений Степанищев (bolknote.ru) 2013

Комментарий для Кирилл Зорин:

Спасибо! В самом деле…

warmland.ru 2013

Если SQL по-прежнему называют «сиквел», помня о написании SEQUEL, то POSTQUEL точно должен читаться «постквел».

Евгений Степанищев (bolknote.ru) 2013

Комментарий для warmland.ru:

По-моему, «сиквел» — это какая-то ерунда. Вот SEQUEL и надо читать «сиквел», не понимаю причём здесь SQL. Мы же JavaScript не читаем как «лайвскрипт» или «мока»?

Андрей 2013

Комментарий для Евгения Степанищева:

Ерунда — это предыдущий комментарий. Подавляющее большинство разработчиков говорят ’сиквел’, это оригинальное название. 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]’.
Так что версия ’постквел’ не только красива и благозвучна (’Посткюль’, фу), но и логична.

kaminari.io/blog 2013

Комментарий для Евгения Степанищева:

Единого мнения на этот счёт нет. Изначально это был «сиквел», но тогда и название языка было Structured English Query Language. Сейчас Википедия считает, что официальное произношение «эс-кью-эль». Вот неплохая статья на эту тему: http://patorjk.com/blog/2012/01/26/pronouncing-sql-s-q-l-or-sequel/

А png вы тоже читаете p-n-g вместо «пинг»?

Евгений Степанищев (bolknote.ru) 2013

Комментарий для Андрей:

Подавляющее большинство разработчиков вокруг меня говорят «эк-кю-эл», так что версия «постквел» — ерунда и ничего благозвучного в ней нет.

Евгений Степанищев (bolknote.ru) 2013

Комментарий для http://kaminari.io/blog:

А png вы тоже читаете p-n-g вместо «пинг»?

Никогда в жизни не произносил «пээнгэ» как «пинг» и никогда не слышал, чтобы кто-то из русского говорящих так его произносил.

Андрей 2013

Комментарий для Евгения Степанищева:

Ingres-Postgres; Quel-Sequel(aka SQL)-Postquel. Почитайте ссылки, там все красиво расписано.
Впрочем, Вы и подавляющее большинство разработчиков вокруг Вас, разумеется имеете право на собственное обособленное мнение.
А за информацию спасибо, действительно любопытный язык. Историю хотелось бы иметь стандартно (столько видел реализаций истории, и сам писал), а вот перегрузка операторов это уже перебор, по-моему.

Евгений Степанищев (bolknote.ru) 2013

Комментарий для Андрей:

Почему же перегрузка операторов перебор, если этот язык оперирует объектами, в том числе и созданными из пользовательских классов? Как-то сравнивать-то объекты нужно.

warmland.ru 2013

Комментарий для Евгения Степанищева:

  1. SEQUEL читается «сиквел», я не представляю, как его можно прочитать как-то еще («сэкуэль»?). Это сокращение, которое можно прочитать как слово.
  1. SQL читается «эс-кью-эл» или «эс-ку-эль» (по буквам) или опять-таки «сиквел». Последнее — не по норме, а по узусу: так много кто произносит, нравится это вам или нет. Вообще неочевидное чтение сокращений как слов типично для английского: вспомните упомянутый выше «пинг» (PNG) или «скази» (SCSI).
  1. POSTQUEL должен подчиняться правилу «если сокращение читается как слово, так его и читаем» — тогда получается «постквел».
  1. «Посткуэль» воспринимается как «прочитали „пост“ как слово, а дальше в уме заменили QUEL на QL и прочитали последнее по буквам». Думаю, против этого комментаторы и восстают.

Кстати, если «посткуэль» = POSTQUEL, прочитанный как слово, но не по английский правилам произношения, то у меня к вам вопрос: а почему, собственно, не по-английски читаем?

Евгений Степанищев (bolknote.ru) 2013

Комментарий для warmland.ru:

Убедили.

Alexander 2013

Оффтоп: а не хотите ли вы в копилку языков программирования добавить قلب ? cybersecurity.ru/development/168752.html

Евгений Степанищев (bolknote.ru) 2013

Комментарий для Alexander:

Точнее уж http://qlblang.org

Хехе, попробую, если пойму хоть что-то :)

Роман Янковский (roman.yankovsky.me) 2013

Многие англоязычные люди действительно говорят «сиквел». В свое время я пытался привыкнуть говорить «сиквел» вместо «эс-ку-эль», чтобы на одном языке разговаривать. Вроде получилось даже.

Евгений Степанищев (bolknote.ru) 2013

(«Hello world!» قول)

Александр Симонов 2013

retrieve (P.nazwisko) from P in PRACOWNICY where P.wiek > 40

Так вот откуда корни у LINQ растут...

from P in PRACOWNICY
where P.wiek > 40
select P.nazwisko

Евгений Степанищев (bolknote.ru) 2013

Комментарий для Александр Симонов:

Сходство только в том, что объекты приходят? :)

Кирилл Зорин 2013

Комментарий для Андрей:

Ерунда — это предыдущий комментарий. Подавляющее большинство разработчиков говорят ’сиквел’, это оригинальное название. 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]’.

Да, многие говорят «сиквел». Но это не оригинальное название.
И не надо вводить людей в заблуждение. В статье 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»