SQL и полнота по Тьюрингу
От: Tonal- Россия www.promsoft.ru
Дата: 15.07.08 18:47
Оценка: 18 (3)
До меня тут доехало, что с введением CTE (common table expressions) язык SQL стал тьюринг-полным.
Вот несколько примеров:
--Генератор последовательности целых чисел:
with recursive
  gen (n) as (
    select 1 from RDB$DATABASE
    union all
    select gen.n + 1 from gen
  )
select n from gen

--Генератор последовательности Фибоначчи:
with recursive
  gen (n, fib1, fib2) as (
    select 1, 1, 1 from RDB$DATABASE
    union all
    select gen.n + 1, gen.fib1 + gen.fib2, gen.fib1 from gen where n < :p
  )
select n, fib2 as fib from gen

--Факториал:
with recursive
  gen (n, fact) as (
    select 1, 1 from RDB$DATABASE
    union all
    select gen.n + 1, gen.fact * (gen.n + 1) from gen where n < :p
  )
select n, fact from gen
where n = :p


P.S. В примерах используется диалект Firebird 2.1
... << RSDN@Home 1.2.0 alpha 4 rev. 1065>>
Re[3]: SQL и полнота по Тьюрингу
От: MasterZiv СССР  
Дата: 16.07.08 21:03
Оценка: +1 -1
Tonal- пишет:

> И с каких это пор полнота по Тьюрингу мешает декларативности?

> Вон Prolog или Haskell тоже тьюринг полный и от этого они становятся
> менее декларативными?

Думаю, что становятся. Ну да ладно, это теоретический спор.


> Сама конструкция CTE очень похожа на let/in из Haskell только более

> ограничена (например запрещена взаимная рекурсия).

Без WITH ... CONNECT BY в SQL (чистом, без процедурных расширений)
нельзя было писать алгоритмы. Можно было только описывать данные,
которые ты хочешь получить. Теперь, с WITH — можно.

Ладно, предлагаю дискуссию прекратить.
Posted via RSDN NNTP Server 2.1 beta
Re: SQL и полнота по Тьюрингу
От: MasterZiv СССР  
Дата: 16.07.08 09:15
Оценка: -1
Tonal- пишет:

> До меня тут доехало, что с введением CTE (common table expressions) язык

> SQL стал тьюринг-полным.

И чему радуешься ? Теперь SQL стал не декларативным языком.
Ну если конечно твоя любимая СУБД поддерживает это уродство.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: SQL и полнота по Тьюрингу
От: MasterZiv СССР  
Дата: 16.07.08 13:04
Оценка: -1
Plague пишет:

> Уже обсуждали, в Философии программирования SQL и что ему не хватает.


SQL-ю все хватает, его не надо использовать для того, для чего его не надо
использовать.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: SQL и полнота по Тьюрингу
От: Tonal- Россия www.promsoft.ru
Дата: 16.07.08 17:40
Оценка: +1
Здравствуйте, MasterZiv, Вы писали:
>> SQL стал тьюринг-полным.
MZ>И чему радуешься ? Теперь SQL стал не декларативным языком.
MZ>Ну если конечно твоя любимая СУБД поддерживает это уродство.
И с каких это пор полнота по Тьюрингу мешает декларативности?
Вон Prolog или Haskell тоже тьюринг полный и от этого они становятся менее декларативными?

Сама конструкция CTE очень похожа на let/in из Haskell только более ограничена (например запрещена взаимная рекурсия).

Ну и насчёт того, зачем оно надо, вон шаблоны в С++ тоже поначалу использовались в основном для примитивных контейнеров, а сейчас это целое активно развивающееся направление метопрограммирования, серьёзно влияющее на развитие языка.
... << RSDN@Home 1.2.0 alpha 4 rev. 1065>>
Re[5]: SQL и полнота по Тьюрингу
От: MasterZiv СССР  
Дата: 16.07.08 20:59
Оценка: -1
Plague пишет:

> WITH с рекурсией входит в стандарт SQL-2003.


Да я в общем в курсе. Да только кто этот стандарт поддерживает
в полном объеме ? (я знаю, что во многих СУБД сейчас есть WITH)

> Думаю, если что-то развивается, то значит это кому-то нужно.


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

Мне,
> конечно, не известно какого рода запросы Вы используете, но для
> некоторых разрабатываемых нами отчетов запрос составляет несколько сотен
> строк, из-за особенностей системы отчетов, т.е. по-сути собирает,
> обрабатывает данные для отчета. CTE в разы упрощает ясность запроса,
> позволяет стандартным и достаточно удобным способом использовать
> древовидные структуры, в моем случае он упростил его в 3 раза. Т.е. за
> счет повторного использования кода.

Я в общем за вас рад. А вот за SQL-2003 — не очень. Ну да ладно.

> На счет Представлений (VIEW) хочу сказать — удобства мало.


А при чём здесь это ? Разве была о них речь ?
Или вы так, к слову ?

> но сильно ухудшается его читабельность и возможности модификации, из-за

> отсутствия повторного использования кода.

SQL и повторное использование кода — две вещи несовместные.
Как гений и злодейство. Кто тут гений, кто — злодейство, оставляю гадать вам.

> Мне интересно, для чего его вам хватает?


Мне его хватает для получения данных из базы данных, разумеется.
А также для реализации сложной бизнес-логики.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: SQL и полнота по Тьюрингу
От: Plague Россия  
Дата: 16.07.08 10:28
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>Tonal- пишет:


>> До меня тут доехало, что с введением CTE (common table expressions) язык

>> SQL стал тьюринг-полным.

MZ>И чему радуешься ? Теперь SQL стал не декларативным языком.

MZ>Ну если конечно твоя любимая СУБД поддерживает это уродство.

А еще поддерживает MS SQL Server, он и так не очень стройный! А это всего лишь подпорка, чтоб хоть как-то упростить работу с древовидными структурами, имхо.
Уже обсуждали, в Философии программирования SQL и что ему не хватает.
... << RSDN@Home 1.2.0 alpha rev. 787>>
Re[4]: SQL и полнота по Тьюрингу
От: Andir Россия
Дата: 16.07.08 13:17
Оценка:
Здравствуйте, MasterZiv, Вы писали:

>> Уже обсуждали, в Философии программирования SQL и что ему не хватает.

MZ>SQL-ю все хватает, его не надо использовать для того, для чего его не надо
MZ>использовать.

Дополню: А использовать его надо для того, для чего его и надо использовать. И точка!

P.S. Интересно, а декларативность и полнота по Тьюрингу — это взаимоисключающие понятия?

С Уважением, Andir!
using( RSDN@Home 1.2.0 alpha 4 rev. 987 ) { /* Работаем */ }
Re[5]: SQL и полнота по Тьюрингу
От: Курилка Россия http://kirya.narod.ru/
Дата: 16.07.08 13:25
Оценка:
Здравствуйте, Andir, Вы писали:

A>P.S. Интересно, а декларативность и полнота по Тьюрингу — это взаимоисключающие понятия?


Если так, то непонятно, что есть декларативный язык, к примеру лямбда-исчисление (как база всех функциональных) языков эквивалентно машине Тьюринга
Re[4]: SQL и полнота по Тьюрингу
От: Plague Россия  
Дата: 16.07.08 17:42
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>SQL-ю все хватает, его не надо использовать для того, для чего его не надо

MZ>использовать.

WITH с рекурсией входит в стандарт SQL-2003.

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

Я так понимаю, что SQL не надо использовать для достаточно сложных вещей, т.к. его читабельность и возможность легкой модификации запросов сильно снижается.
На счет Представлений (VIEW) хочу сказать — удобства мало. Варианта три:
1. Исползовать представления — упрощается запрос, но его скорость работы оставляет желать лучшего.
2. Использовать множество представлений разной сложности — слишком большое количество представлений сильно запутывает чтение запросов, ну и подбор требуемых представлений.
3. Не использовать представления — запрос начинает адекватно работать, но сильно ухудшается его читабельность и возможности модификации, из-за отсутствия повторного использования кода.

Мне интересно, для чего его вам хватает? Есть примеры, в которых люди придумывают язык более высокого уровня, который потом транслируется в SQL. Думаю не от множества свободного времени.
Re: SQL и полнота по Тьюрингу
От: md03t4  
Дата: 16.10.08 11:34
Оценка:
Здравствуйте, Tonal-, Вы писали:

T>До меня тут доехало, что с введением CTE (common table expressions) язык SQL стал тьюринг-полным.

T>P.S. В примерах используется диалект Firebird 2.1

Портясающе! Очень интересно!
Коллега, а можно на SQL решить задачу размещения 8 ферзей?
Если можно, то не означает ли это, что технически возможно часть логики приложения реализовать на SQL? Понятно, что это врятли разумно, но возможно?
Простите за глупые вопросы, но я никогда ранее не сталкивался с SQL. Так ужсложилось
Re[2]: SQL и полнота по Тьюрингу
От: Tonal- Россия www.promsoft.ru
Дата: 16.10.08 14:12
Оценка:
Здравствуйте, md03t4, Вы писали:
T>>До меня тут доехало, что с введением CTE (common table expressions) язык SQL стал тьюринг-полным.
M>Коллега, а можно на SQL решить задачу размещения 8 ферзей?
Да, как и любую другую вычислимую задачу.

M>Если можно, то не означает ли это, что технически возможно часть логики приложения реализовать на SQL? Понятно, что это врятли разумно, но возможно?

Как бы и сейчас выносят.
Во всех нормальых серверах есть языки для создания "триггеров" и "сохранёных процедур".
Обычно это императивные языки с уровнем примерно как у классического паскаля или бейсика.
Правда, в последнее время вместе с ними начяли использовать и классические языки: java в Oracle, семейство .Net в MSSQL, Java, Python, Lua, Ruby, Scheme и ещё несколько в PostgreSQL.

Другое дело, что это всё расширение конкретных серверов, не совместимые между собой.

M>Простите за глупые вопросы, но я никогда ранее не сталкивался с SQL. Так ужсложилось

Полюбопытствуй.
... << RSDN@Home 1.2.0 alpha 4 rev. 0>>
Re[3]: SQL и полнота по Тьюрингу
От: md03t4  
Дата: 16.10.08 20:42
Оценка:
Здравствуйте, Tonal-, Вы писали:

T>Обычно это императивные языки с уровнем примерно как у классического паскаля или бейсика.

T>Правда, в последнее время вместе с ними начяли использовать и классические языки: java в Oracle, семейство .Net в MSSQL, Java, Python, Lua, Ruby, Scheme и ещё несколько в PostgreSQL.
Да, про такие я читал. Но насколько я понимаю Ваши примеры — это не триггеры. Это обычные запросы которые не надо хранить на сервере, но можно там исполнять.
Re[4]: SQL и полнота по Тьюрингу
От: Tonal- Россия www.promsoft.ru
Дата: 17.10.08 13:29
Оценка:
Здравствуйте, md03t4, Вы писали:
M>Но насколько я понимаю Ваши примеры — это не триггеры. Это обычные запросы которые не надо хранить на сервере, но можно там исполнять.
Об том и речь.
Т.е. DML-ная часть SQL с введением CTE стала тьюринг-полной.
... << RSDN@Home 1.2.0 alpha 4 rev. 0>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.