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)
И так далее.
25 января 2013 20:50

Александр Бабаев (bealex.moikrug.ru)
27 января 2013, 15:10

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

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

bolk (bolknote.ru)
27 января 2013, 15:20, ответ предназначен Александр Бабаев (bealex.moikrug.ru):

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

bolk (bolknote.ru)
27 января 2013, 15:51

О! Нашёл доку по Постгресу, где упоминается Посткюэль, забрать можно следующей командой из терминала:
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)
27 января 2013, 18:21, ответ предназначен bolk (bolknote.ru):

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

Кирилл Зорин (инкогнито)
27 января 2013, 19:15, ответ предназначен bolk (bolknote.ru):

СУБД «Постргрес»
Лишняя «р».

bolk (bolknote.ru)
27 января 2013, 19:29, ответ предназначен Кириллу Зорину

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

warmland.ru (warmland.ru)
27 января 2013, 21:07

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

bolk (bolknote.ru)
27 января 2013, 21:16, ответ предназначен warmland.ru:

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

Андрей (инкогнито)
27 января 2013, 21:53, ответ предназначен bolk (bolknote.ru):

Ерунда - это предыдущий комментарий. Подавляющее большинство разработчиков говорят 'сиквел', это оригинальное название. 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://kaminari.io/blog (инкогнито)
27 января 2013, 21:58, ответ предназначен bolk (bolknote.ru):

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

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

bolk (bolknote.ru)
27 января 2013, 22:11, ответ предназначен Андрею

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

bolk (bolknote.ru)
27 января 2013, 22:12, ответ предназначен http://kaminari.io/blog

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

Андрей (инкогнито)
27 января 2013, 22:32, ответ предназначен bolk (bolknote.ru):

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

bolk (bolknote.ru)
27 января 2013, 22:42, ответ предназначен Андрею

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

warmland.ru (warmland.ru)
28 января 2013, 03:18, ответ предназначен bolk (bolknote.ru):

1. SEQUEL читается «сиквел», я не представляю, как его можно прочитать как-то еще («сэкуэль»?). Это сокращение, которое можно прочитать как слово.

2. SQL читается «эс-кью-эл» или «эс-ку-эль» (по буквам) или опять-таки «сиквел». Последнее — не по норме, а по узусу: так много кто произносит, нравится это вам или нет. Вообще неочевидное чтение сокращений как слов типично для английского: вспомните упомянутый выше «пинг» (PNG) или «скази» (SCSI).

3. POSTQUEL должен подчиняться правилу «если сокращение читается как слово, так его и читаем» — тогда получается «постквел».

4. «Посткуэль» воспринимается как «прочитали „пост“ как слово, а дальше в уме заменили QUEL на QL и прочитали последнее по буквам». Думаю, против этого комментаторы и восстают.

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

bolk (bolknote.ru)
28 января 2013, 06:06, ответ предназначен warmland.ru:

Убедили.

Alexander (инкогнито)
28 января 2013, 16:19

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

bolk (bolknote.ru)
28 января 2013, 16:40, ответ предназначен Alexander

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

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

Роман Янковский (roman.yankovsky.me)
28 января 2013, 16:41

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

bolk (bolknote.ru)
28 января 2013, 16:44

("Hello world!" قول)

Александр Симонов (инкогнито)
29 января 2013, 10:26

retrieve (P.nazwisko) from P in PRACOWNICY where P.wiek > 40
Так вот откуда корни у LINQ растут...
from P in PRACOWNICY
where P.wiek > 40
select P.nazwisko

bolk (bolknote.ru)
29 января 2013, 10:43, ответ предназначен Александру Симонову

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

Кирилл Зорин (инкогнито)
29 января 2013, 12:46, ответ предназначен Андрею

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

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)