|
|
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Честно говоря не знал куда запостить, поэтому запощу сюда... Возник такой вопрос. Как известно SQL 92 не обладает свойствами полноты по Тьюрингу. Если его рассмотреть в контексте частично рекурсивных функций, то грубо говоря обшая семантика join'ов и выражений, реализует операторы выбора, подстановки и смещения, логикой Group by можно реализовать общерекурсивные функции, а вот примитивную рекурсию в нем не реализуешь (например задачи связанные с графами). В 99-м году соответственно вышел новый стандарт, в который включили возможность рекурсивных запросов (в виде CTE). При помощи них в частности можно реализовывать и недостающую примитивную рекурсию, тем самым SQL:1999 по идее можно считать полным по Тьюрингу. Но почему-то в "гугле" считается что это свойство он приобрел после SQL:2003 с появлением windows функций. При этом их как раз можно реализовать при помощи вложенных подзапросов (даже не прибегая к примитивной рекурсии). Может я чего-то недопонимаю, но если у кого есть какие мысли на сей счет было бы интересно послушать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2009, 18:56 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
раз пять прочитал но так и не понял насчет чего должны быть мысли а при помощи вложенных запросов СТЕ не реализовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2009, 22:21 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Тема: «Производство как адекватная ментальность» Поэтому пресс-клиппинг неестественно программирует обществвенный conversion rate, осознав маркетинг как часть производства. Продвижение проекта, как принято считать, достижимо в разумные сроки. Медиа вырождена. Точечное воздействие охватывает клиентский спрос, повышая конкуренцию. Сегмент рынка отталкивает анализ зарубежного опыта, опираясь на опыт западных коллег. Показ баннера спонтанно детерминирует контент, осознав маркетинг как часть производства. Сегмент рынка упорядочивает рейтинг, осознав маркетинг как часть производства. Раскрутка, не меняя концепции, изложенной выше, синхронизирует конструктивный потребительский рынок, не считаясь с затратами. Итак, ясно, что побочный PR-эффект абстрактен. Объемная скидка усиливает продвигаемый рекламный бриф, отвоевывая свою долю рынка. Комплексный анализ ситуации масштабирует комплексный анализ ситуации, повышая конкуренцию. Баланс спроса и предложения однородно тормозит стратегический рыночный план, полагаясь на инсайдерскую информацию. Маркетингово-ориентированное издание стремительно масштабирует конструктивный имидж предприятия, осознав маркетинг как часть производства. Стимулирование сбыта развивает маркетинг, используя опыт предыдущих кампаний. Общество потребления переворачивает конструктивный медийный канал, используя опыт предыдущих кампаний. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2009, 22:26 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
pkarklin Ваше сообщение напомнило мне случай, произошедший сегодня. Постучалась ко мне некая индийская девушка с софтонепонятночем. После обмена несколькими совершенно пустыми репликами я сказал: "Мне жаль, но ты не прошла тест Тьюринга". Она ответила "Sorry". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2009, 23:39 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
softwarer Постучалась ко мне некая индийская девушка с софтонепонятночем. После обмена несколькими совершенно пустыми репликами я сказал: "Мне жаль, но ты не прошла тест Тьюринга". Она ответила "Sorry". да она познакомится поди хотела, а вы ей про тьюринга... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2009, 01:10 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Рекурсивные CTE естественно через вложенные запросы не сделаешь. Собственно поэтому SQL-92 не полон по тьюрингу, то есть чисто при помощи него некоторые задачи, как например поиск в дереве самого верхнего предка не решишь. Придется использовать обычные (императивные языки). В то время как при помощи SQL:1999 (рекурсивные CTE похоже создавались с оператора примитивной рекурсии) можно решать любые задачи, хоть симплекс метод реализовать, теоретически во всяком случаем. Вопрос на самом деле вот в чем, например в таких ссылках : http://www.valuedlessons.com/2009/08/sql-is-now-turing-complete.html Везде упоминается что SQL полон только With CTE и Windowing. При этом Windowing можно реализовать вложенными подзапросами. Соответственно кто ошибается, я или они? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2009, 11:49 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieВезде упоминается что SQL полон только With CTE и Windowing. При этом Windowing можно реализовать вложенными подзапросами . Соответственно кто ошибается, я или они?IMHO, не всегда. К примеру, если в таблице без PK имеются неотличимые строки, попробуйте-ка их пронумеровать в стиле ROW_NUMBER()OVER() подзапросами. Не уверен, правда, что я это всё корректно "по-Тьюрингу" написал. Может, и не к месту... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2009, 12:57 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
iap, ладно с ROW_NUMBER()OVER() в некоторых случаях можно найти выход. А вот как быть с LAG() OVER() или LEAD() OVER() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2009, 13:02 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
LAG (как и LEAD) получается в общем-то легко, ищем при помощи MAX подзапроса значение ORDER'а которое меньше значения ORDER'а текущего ряда, при этом order'ам в хвост записываем все ключи - соответственно получаем ключи которые предыдущие по порядку, и для них получаем значение LAG. Наличие повторяющихся строк в контексте полноты по Тьюрингу не рассматривается (долго объяснять почему). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2009, 13:44 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
это чё, тема кандидатской? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2009, 22:13 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
А разве LAG и LEAD есть в стандарте ANSI? http://savage.net.au/SQL/index.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2009, 10:01 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
ОКТОГЕНiap, ладно с ROW_NUMBER()OVER() в некоторых случаях можно найти выход.Каким образом? Пример можно посмотреть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2009, 10:02 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
iapКаким образом? Пример можно посмотреть? стандартным SQL вряд ли. А вот через rowid/dbkey в подзапросе - почему нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2009, 10:12 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie wrote: > подзапросов (даже не прибегая к примитивной рекурсии). Может я чего-то > недопонимаю, но если у кого есть какие мысли на сей счет было бы > интересно послушать. У меня мысль по этому поводу одна: мне абсолютно всё равно, обладает ли SQL полнотой по Тьюрингу или нет. Или даже ещё лучше так: чем меньше в SQL полноты по Тьюрингу, тем лучше. Потому что это -- язык запросов, а не язык программирования. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2009, 10:34 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
dimitriapКаким образом? Пример можно посмотреть? стандартным SQL вряд ли. А вот через rowid/dbkey в подзапросе - почему нет?Вопрос-то теоретический, связан именно со стандартом! В обычной жизни таблиц с неотличимыми строками вообще быть не должно. Первая нормальная форма, понимаете ли. В каждой таблице должен быть PRIMARY KEY ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2009, 10:40 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie wrote: > Собственно поэтому SQL-92 не полон по тьюрингу, то есть чисто при помощи > него некоторые задачи, как например поиск в дереве самого верхнего > предка не решишь. А зачем тебе это всё ? Соответственно кто > ошибается, я или они? А какая разница ? Вот в серверах, которые я использую, нет этих CONNECT, WITH, WINDOW и пр. А если и были бы, я бы их не использовал. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2009, 10:40 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
iap wrote: > В обычной жизни таблиц с неотличимыми строками вообще быть не должно. > Первая нормальная форма, понимаете ли. Не первая, а вторая (и все последующие). Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2009, 10:49 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Сейчас просто учавствую в работе над проектом платформы чисто декларативной разработки приложений (или даже не платформы а вообще парадигмы программирования). И общая идея нужно обоснование того, что любую задачу можно решить при помощи ее (естественно есть точки входа для императивных языков, но цель максимально минимизировать их учавствие, вплоть до нуля). Во многом она перекликается с SQL, (как единственного чисто декларативного языка), во всяком случае реализуется на нем, и ее полнота отчасти эквивалентна полноте SQL, отсюда и возник вопрос... З.Ы.: Для тех кто не в курсе, императивные языки, которые задаются как последовательность операторов (обычные языки - Java, C#, ассемблеры и т.п.), а декларативные условно говоря в виде правил, связей, ограничений и т.п. (как SQL) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2009, 12:18 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie, что скажете насчет "M" (-> Oslo), к примеру? Занимаетесь похожим? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2009, 12:38 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
iscrafm, Oslo, а сейчас Microsoft SQL Server Modeling, вобщем-то интеграционная технология, она пытается как-то объединить то что есть. Мы же в этом смысле работаем над революционной технологией. То есть у ООП как и у SQL очень много недостатков именно как у парадигм (ООП со своей привязкой атрибутов к одному объекту, отсутствием "множественных" (от нескольких объектов) полей, разделением полей и методов и т.п., а SQL с вообще матричной логикой-таблиц и строк (соответственно без наследования), и кучей избыточности в самом языке), соотвественно в проекте заложена концептуально другая "свойство-ориентированная" парадигма, имеющая черты SQL, CLOS (Common Lisp'а - функциональных ООП), формализующая все императивные подходы в функциональные... Физическое выполнение идет через SQL, но это прозрачно для разработчика. Хотя это вобщем-то другая тема.... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2009, 13:31 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
SELECT a.key,COUNT(*) FROM A a JOIN A b WHERE b.order<a.order OR (b.order=a.order AND b.key<a.key) GROUP BY a.key если известно что key уникально - по сути ROW_NUMBER() OVER(ORDER BY order).... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2009, 13:37 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieMasterZiv, Сейчас просто учавствую в работе над проектом платформы чисто декларативной разработки приложений (или даже не платформы а вообще парадигмы программирования). И общая идея нужно обоснование того, что любую задачу можно решить при помощи ее (естественно есть точки входа для императивных языков, но цель максимально минимизировать их учавствие, вплоть до нуля). Во многом она перекликается с SQL, (как единственного чисто декларативного языка), во всяком случае реализуется на нем, и ее полнота отчасти эквивалентна полноте SQL, отсюда и возник вопрос... З.Ы.: Для тех кто не в курсе, императивные языки, которые задаются как последовательность операторов (обычные языки - Java, C#, ассемблеры и т.п.), а декларативные условно говоря в виде правил, связей, ограничений и т.п. (как SQL) А в чем парадигма-то? Или до публикации никому ничего? Так и что нового будет в славном семействе декларативных функциональных и логических языков? Любые задачи с помощью них решаются. Или это касательно SQL - сделать что-то вроде T-SQL и PL/SQL, но но без императивных конструкций? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2009, 13:39 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Пилотажный, Описание появится где-то через месяц (если правда первые внедрения не пойдут раньше :( ), в двух словах тяжело объяснить, (все равно как если тоже самое для SQL делать, если вы про него ни разу не слышали). С T-SQL и PL/SQL некорректно сравнивать те идут от SQL пытаясь как-то приблизится к ООП (что невозможно из-за привязки атрибутов к одному объекту и отсутствию "множественных" полей, к Common Lisp'у кстати шансов было бы больше приблизится, но у него тоже "множественных" полей нету, как и формализаций группировок (типа GROUP BY)). Поэтому по большому счету все сводится к добавлению сбоку императивных функций. И это не только парадигма работы с данными, там все в одном вплоть до пользовательского интерфейса. Кстати чисто из любопытства : какие вы декларативные функциональные и логические языки знаете? особенно прикладные в бизнес-решениях? на самом деле интересно... тока не говорите что Haskell и :) ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2009, 13:56 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Меня три момента смущают: 1Мы же в этом смысле работаем над революционной технологией.Еще живы воспоминания о предыдущем революционере 2Описание появится где-то через месяц (если правда первые внедрения не пойдут раньше :( ) 3И это не только парадигма работы с данными, там все в одном вплоть до пользовательского интерфейса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2009, 14:26 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieС T-SQL и PL/SQL некорректно сравнивать те идут от SQL пытаясь как-то приблизится к ООП PL/SQL - это АДА, расширенная SQL для работы с таблицами, как отдельным типом данных. Дейкстра убедительно показал, что IF-FI и DO-OD имеют право на существование, так что чисто декларативные программы - это исключение. Никакой алтернативы SQL и таблицам пока нет. При разработке очередной "революционной технологии" все надо иметь ввиду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2009, 14:29 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie Кстати чисто из любопытства : какие вы декларативные функциональные и логические языки знаете? особенно прикладные в бизнес-решениях? на самом деле интересно... тока не говорите что Haskell и :) ... В смысле "знаю" - что-то программировал, так конечно? И бизнес-решения - что сам или коллективы, где работал, использовали? Прологи, а также привлекался к программированию на Рефале для одного проекта. И когда нужно быстрее что-то приличное лабать - как-то сразу не до этих языков. Вообще в бизнес-решениях по наблюдениям - не густо функц. и лог. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2009, 14:41 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Пилотажный, Нет, не обязательно знаете... Просто слышали, где-то когда-то... а дальше google и можно найти описание чего угодно и сравнить. Под революционным я имел ввиду, не то что завтра перевернет мир и все такое (это покажет время)... А то что не как во всех современных фреймворках (а таких тысячи) ООП, SQL, UI принимаются за аксиому, и идет надстройка как бы их так связать вместе... а предлагается другой принцип (язык если хотите) построения бизнес-решений, в общем-то самодостаточный, и как предполагается универсальный. В нем нету различия на поля и функции (поля частный случай), которые объединены в свойства, все они множественные, формализованы группировки, наследование поддерживается по принципу defgeneric в CLISP, формализованы формы в контексте объектов\свойств и т.п. В принципе некоторые частичные решения где-то иногда проскакивают (концепция свойств, правда одиночных и в очень странном виде есть в C#,Delphi и т.д., множественная диспетчеризация похожа на функциональные языки и т.п.), некоторых принципиально нигде не видел, но важно что в ней идет все вместе в единой монолитной конструкции... Про драйвер, да я видел, тоже смешно... Но если задуматься то даже крупные игроки иногда предлагают технологии основная суть которых, решить какую-то небольщую проблемку что нужно нажать не 5 а 3 кнопки, или как с LINQ (немного утрировано конечно) что можно прямо в родном синтаксисе select написать ( а не в кавычках и вызвать метод ) и это преподносится как откровение... И почему то над ними никто не смеется :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2009, 15:03 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
SergUser, А что вас про UI смущает, если вы получаете высоко-декларативную логику, то естественно "легко" формализовать (и даже автоматически выстроить) ее представление пользователю.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2009, 15:05 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_мод, Не понял вашу мысль... Да АДА вообщем-то обычный императивный, даже не функциональный, язык, в этом смылсе PL\SQL чем принципиально лучше, обычной связки Java\C# + SQL-92 (99)... То что альтернатив SQL в плане декларативных языков нет мы в курсе... И у него кстати масса недостатков, одного факта того, что он не с объектами и свойствами работает а таблицами и строками уже достаточно, что его нельзя самого по себе использовать в разработке бизнес-приложений... Но разве это как раз не повод "развить" его и сделать полностью декларативную среду разработки ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2009, 15:12 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie Пилотажный, Нет, не обязательно знаете... Просто слышали, где-то когда-то... а дальше google и можно найти описание чего угодно и сравнить. Когда был ближе к науке, то интересовался всяким новым - вот наверно всегда выкатить несколько десятков названий. Но когда всё задает практика, то и интересуешься практически ценным. Вот понемного Erlang раскуриваю - вот есть практически ценное и при этом своеобразное. Nitro_Junkie Под революционным я имел ввиду, не то что завтра перевернет мир и все такое (это покажет время)... А то что не как во всех современных фреймворках (а таких тысячи) ООП, SQL, UI принимаются за аксиому, и идет надстройка как бы их так связать вместе... а предлагается другой принцип (язык если хотите) построения бизнес-решений РЕВОЛЮЦИОННОСТЬ - всё же это когда много народу в чем-то мучалось и страдало - и тут опа - революция и счастье всем в этом. Вот, например, появление SQL - революция. А какое счастье, в чем и каким мученникам предполагает дать Ваше создание? Nitro_Junkie крупные игроки иногда предлагают технологии основная суть которых, решить какую-то небольщую проблемку что нужно нажать не 5 а 3 кнопки, Тут интерфейс хотел заменить у одного внедренного уже модуля (такой как для детей типа "дави пипку" на серьезный такой, похожий на всякий другой в программах от софтгигантов) - так операторы возмутились. Вот что народу надо - "дави пипку", "нажми на кнопку - получишь результат и твоя мечта осуществится". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2009, 15:49 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Пилотажный, Проблема программистов в том что при создании технологий они не умеют подходить системно к решению проблем... Обычно увидят какое-то неудобство, и раз вот уже фреймворк\библиотека\технология, кто-то увидит еще и раз такая же хрень сверху... Итого получается какое-нить J2EE, в котором чтобы написать Hello World нужно 7 лет образования, 5 лет опыта и 2 часа работы. А проблема математиков, что они не программисты... Их всегда уносит в теорию... Так появляются Haskell'ы, Erlang'и и иже с ними Что касается революционности, хотелось бы использовать лучшее слово, подчеркивающее что переработаны самые базовые вещи, а не что-то пристроено сбоку, но честно говоря ничего другого на ум не приходит. Я не говорю, что это абсолютно бесполезно уменьшать количество кнопок. Речь шла о позиционировании этих "серьезных" нововведений... Похоже на тот самый новый драйвер с какими-то "мелкими" фишками... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2009, 16:16 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
А что касается мучеников... То у нас сейчас типовые настройки делают бизнес-аналитики... без программистов... то есть вообще без программистов... Конечно если возникнет вопрос с подключением симплекс-методов и иже с ними там надо будет использовать точки входа и подключать программистов, но например в управлении торговлей, расчетами, CRM и т.п. таких вопросов не возникает... А в конечном итоге, предполагается что формы будут создавать сами пользователи, а особо продвинутые пользователи и бизнес-логику (конечно не тети Маши :) ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2009, 16:53 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie, На счет Осло зря вы так отмахиваетесь , вот пожалуйста что пишут в МСе If Microsoft is able to achieve this vision and its goals—taking into account the required huge support and integration among all of the technical runtimes and “Oslo” (the “Oslo” product team really has to get support from many different Microsoft product teams)—it could really be the start of a revolution in the applications-development field. It will be like changing from assembler and native code bits to high-level programming languages—even better, because, as Doug says, every person (business user) will be, in a certain way, a programmer, because business-expert users will be creating applications. http://msdn.microsoft.com/en-us/architecture/aa699436.aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2009, 19:58 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie wrote: > парадигмы программирования). И общая идея нужно обоснование того, что > любую задачу можно решить при помощи ее (естественно есть точки входа > для императивных языков, но цель максимально минимизировать их > учавствие, вплоть до нуля). Если идея в том, чтобы любую задачу написать на SQL -- то идея дурацкая безотносительно полноты SQL. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2009, 22:12 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie_мод, То что альтернатив SQL в плане декларативных языков нет мы в курсе... И у него кстати масса недостатков, одного факта того, что он не с объектами и свойствами работает а таблицами и строками уже достаточно, что его нельзя самого по себе использовать в разработке бизнес-приложений... Хм, а я таблицы рассматриваю как раз как массивы объектов, а поля как свойства. Именно поэтому не позволяю программистам именовать таблицы во множественном числе, потому что плохо читается SELECT Apples.colour FROM. Да, у таких объектов нет методов. Но, в Оракле, например, можно создавать таблицы объектов с методами (хотя работать с этим всем практически невозможно, т.к. сейчас у них слишком много ограничений), а в Постгрессе схемы можно расматривать как объекты с методами (а в следующей версии у этих "объектов" даже появятся свойства). Кстати, очевидно ваше сравнение объекты-свойства и таблицы-строки не коректно. Nitro_JunkieПроблема программистов в том что при создании технологий они не умеют подходить системно к решению проблем... Обычно увидят какое-то неудобство, и раз вот уже фреймворк\библиотека\технология, кто-то увидит еще и раз такая же хрень сверху... А вот это святая правда, дающая твердейшую почву для ваших начинаний. Nitro_Junkieтиповые настройки делают бизнес-аналитики... без программистов... то есть вообще без программистов... Конечно если возникнет вопрос с подключением симплекс-методов и иже с ними там надо будет использовать точки входа и подключать программистов, но например в управлении торговлей, расчетами, CRM и т.п. таких вопросов не возникает... А в конечном итоге, предполагается что формы будут создавать сами пользователи, а особо продвинутые пользователи и бизнес-логику Интересную задачу вы берёте. В принципе, это как упростить в компании пирамиду, убрать, так сказать, лишние слои абстракции и подчинить всех рабочих сразу генеральному директору. Хотя, мнение, что отношение Java\C# + SQL далекто от оптимального у меня сомнений не вызывает, улучшать есть что, и даже в революционном смысле. авторIt will be like changing from assembler and native code bits to high-level programming languages—even better, because, as Doug says, every person (business user) will be, in a certain way, a programmer, because business-expert users will be creating applications Если честно, - пустые слова, чистый маркетинг. Совершенно очевидно, что бизнес-пользователь, даже на просто SQL ничего серьёзного не напишет, - придётся стать программистом. Куда усложнять то? Да чего уж там душой кривить, даже бизнес-процес в IDEF0 будет сидеть и долго разглядывать... Возможным подходом может стать визард, но уж очень продвинутый, страшно представить насколько :) Потому что у пользователей не так хорошо получается придумывать решения, но сравнительно хорошо получается описывать проблемы - между этими двумя шагами великая работа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2009, 22:49 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie Обычно увидят какое-то неудобство, и раз вот уже фреймворк\библиотека\технология, кто-то увидит еще и раз такая же хрень сверху... Итого получается какоенить J2EE, в котором чтобы написать Hello World нужно 7 лет образования, 5 лет опыта и 2 часа работы. Программисты делают инструмент для программистов же - и само собой ничего лишнего, компактней, четче, короче, ... Так и в любой сфере деятельности - кому-то непрофи в этом просто дать весь инструмент - так и тоже как применять - и если сам по себе годы может вникать. Ускоряют процесс - специальные учебные курсы. Nitro_Junkie Проблема программистов в том что при создании технологий они не умеют подходить системно к решению проблем... А проблема математиков, что они не программисты... Их всегда уносит в теорию... Так появляются Haskell'ы, Erlang'и и иже с ними Так какая же это проблема программистов? Это просто разделение труда - когда один человек, то он же постановщик задачи, и программист, и IT-математик-алгоритмист, и сам себе IT-менеджер (сам себе режиссер), и системный архитектор, и конфигуратор, ... К разделение труда во всем достаточно сложном в цивилизованном обществе. Вообще любой из любой роли может сделать всё из перечисленного, но у кого-то что-то получается лучше - вот и позиционирование. Это всё же не надуманное что-то, а естественно образовавшееся - на всё не хватит ни сил, ни времени, а также для коллективов ценнее глубоко-понимающие и знающие специализирванные, чем поверхостные квазиуниверсальные. Из квазиуниверсальных - достаточно начальников с замами. (Одиночки-герои не рассматриваются.) Nitro_Junkie в теорию... Так появляются Haskell'ы, Erlang'и Erlang, Haskell, ... - это уже прикладные issue общих теории, из которых же C, Paskal, Java, ... И это видится - как вот есть Европа и Северная Америка (Java, Delphi, C++, C#, ...) - вроде все везде задают, но есть и Азия, Африка, Южная Америка - и там могут жить без Сев. Америки и Европы, и есть такое, чего нет и не может быть в Сев.Америке и Европе, и это великолепно, и ... когда-то и эти регионы моугт выйти на такой уровень, что будут задавать почти всё в Мире. К Microsoft Oslo и Rosario - что-то темнили-мудрили и потом заявили, что в основе - UML. (Смех в зале). И где эти сверхязыки суперинжениринга - TLA+ и ...? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2009, 10:53 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
пытаюсь вот поизучать OCAML. Но функциональный код, даже на окамле читается крайне тяжело, что-бы понять алгоритм, надо превратить мозг в интерпретатор рекурсивных вражений, что мозгу вообще не свойственно по природе. А если использовать чисто императивные возможности, то не видно особых преимуществ перед существующими языками. Я в сове время очень долго не принимал преимуществ ООП. Вернее понимал, что инкапсуляция - это хорошо, а вот ооп-проектирование не понимал по-настоящему. Понимание идеалогии пришло только после прочтения книги GoF. C функциональным программированием сейчас такая-же проблема, технологию можно изучить, а вот методологи как ее использовать пока не нашел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2009, 22:12 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Alex_new1, Достаточно просто почитать описание Oslo, и увидеть что они предлагают... ;-) MasterZiv, Безотносительно нашего проекта, можно узнать почему? Я понимаю что у любого расширения должны быть императивные черты, чтобы реагировать на события, но если их формализовать в виде например ввода свойства или изменения класса объекта, а все остальное рассматривать как следствие декларативных правил, то почему нет. Кроме того я понимаю что есть явные баги SQL Server'ов, когда очевидно что надо использовать index seek, а не scan с проверкой, но их можно пообходить hint'ами, тем более что основные функции оптимизации заключаются в основном в выборе join'ов, и обработки вложенных подзапросов, все остальное не дает экспоненциального роста производительности... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2009, 10:43 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
web_fox Хм, а я таблицы рассматриваю как раз как массивы объектов, а поля как свойства. Именно поэтому не позволяю программистам именовать таблицы во множественном числе, потому что плохо читается SELECT Apples.colour FROM. Да, у таких объектов нет методов. Но, в Оракле, например, можно создавать таблицы объектов с методами (хотя работать с этим всем практически невозможно, т.к. сейчас у них слишком много ограничений), а в Постгрессе схемы можно расматривать как объекты с методами (а в следующей версии у этих "объектов" даже появятся свойства). Кстати, очевидно ваше сравнение объекты-свойства и таблицы-строки не коректно. Если у вас свойство от нескольких объектов, что бывает в большинстве случаев. Например остаток товара на складе, и очевидно что должна быть таблица с ключом склад, товар и свойством остаток количество, вы ее как что рассматриваете? Вы немного сами себе противоречите, говорите что рассматриваете таблицы как массивы объектов и поля как свойства и при этом что сравнение объекты-свойства и таблицы-строки не коректно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2009, 10:52 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie wrote: > Безотносительно нашего проекта, можно узнать почему? Я понимаю что у 0) императивность в языке запросов -- это зло. Я так считаю. 1) может и просто тупо зациклиться. 2) не все СУБД это поддерживают. В общем, пока очень сильно не припрёт, я лучше сам дерево разошью и буду обычные запросы писать. Результата транзитивного замыкания дерева для 80% работы с деревом должно хватать. А писать поиск в глубину на SQL -- это маразм. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2009, 11:04 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Пилотажный, Мы немного о разных вещах говорим, я имел ввиду скорее кто инициирует процесс создании технологий. Понятно что дальше в самом процессе создания учавствуют и директора, и менеджеры и уборщицы и т.п. Но идеологов на мой взгляд можно условно разделить на 2 категории. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2009, 11:17 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
MasterZiv, 0) а в языке запросов и нету императивности, вы наверное имели ввиду рекурсивность 1) они и в императивном языке могут зациклиться 2) вообще они вошли в стандарт SQL:1999, который поддерживают очень многие SQL сервера (Postgre, MSSQL, Oracle и т.п.) Хотя не спорю, что поддержка рекурсивных запросов в SQL далека от совершенства ... Другой вопрос, насколько часто такие проблемы возникают в бизнес-решениях, насколько они сложны, и насколько их нельзя решить "фиксацией" текущих параметров при проведении транзакции(то есть важна целостность во времени, если не понятно могу пояснить что имеется ввиду).... Если отбросить задачи производства то доля такого функционала очень небольшая (да и в производстве не сильно больше)... Поэтому чисто из-за этого ставить крест на чисто декларативных подходах, это все равно что лечить головную боль ампутацией головы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2009, 11:26 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Ggg_oldпытаюсь вот поизучать OCAML. Но функциональный код, даже на окамле читается крайне тяжело, что-бы понять алгоритм, надо превратить мозг в интерпретатор рекурсивных вражений, что мозгу вообще не свойственно по природе. А если использовать чисто императивные возможности, то не видно особых преимуществ перед существующими языками. Я в сове время очень долго не принимал преимуществ ООП. Вернее понимал, что инкапсуляция - это хорошо, а вот ооп-проектирование не понимал по-настоящему. Понимание идеалогии пришло только после прочтения книги GoF. C функциональным программированием сейчас такая-же проблема, технологию можно изучить, а вот методологи как ее использовать пока не нашел. Наверно всё же от практики понимание, из практических нужд. Одна из практич. польз ООП - наведение порядока в эту свалку типичных наработок, ..., построив их в боевые ряды, готовые к сражению. Также и с функц. языками (надо заметить, что всякая классификация условна, а отнесение функц. к декларативным - притянуто за уши) - наверно что-то практическое должно быть, где функц. - покажет несомненную ценность. "Методологии" - как что-то, что объясняет - а в чем полезность этого и как из этого можно извлекать ценное? Но деление языков на импер., функц., логич., ... - по признаку "как" - напоминает деление естеств. языков по группам близких. Вот знающий один из славянских (и конечно, когда родной) - легко и быстро освоит любой другой славянский. Но вот осваивание языка другой группы потребует "превращений" в мозгу - выражать тоже самое, но через нечто совсем другое - а зачем при изучении не спрашивается. Так и с декларативными языками - эдак зачем-то начать писать и думать иероглифами. Вот ещё революционное "программирование без программистов" , из советских времен ещё идущее и пытающееся заявиться широко "Буран" и язык программирования ДРАКОН (там и URL на общие описания) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2009, 14:39 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkieсделать полностью декларативную среду разработки Можно, но не нужно. Чаще всего цикл лучше рекурсии. Nitro_Junkie SQL не с объектами и свойствами работает а таблицами и строками уже достаточно, что его нельзя самого по себе использовать в разработке бизнес-приложений Ровно наоборот: SQL это рел. алгебра и ее мы и используем при разработки. Объектной алгебры увы не существует. Операция SQL имет вид: таблица3=таблица1 операция таблица2 ... Ни один язык не позволяет делать: объект3=объект1 операция объект2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2009, 14:44 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_мод, а что по вашему в структурном программировании (и ООП) вызов функции как не реляционная алгебра? то есть например: имя склада = имя(склад(документ)) документ JOIN склад ON склад.id=докуметн.склад ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2009, 15:05 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Пилотажный, ООП добавил очень важный аспект программирования как наследование, только при этом почему-то потребовал присваивать функцию одному объекту и обзывать это дело методом. Как следствие получил массу гемора в виде : неоднозначного определение класса для метода, невозможность множественного полиморфизма, проблемы с модульностью и т.п. В функциональных же языках такой привязки нету (собсно их это как правило и отличает), а наследование они поддерживают как возможность "объединение" функций в одну. Правда кроме Common Lisp'а таких языков я честно гря не припомню. Но они очень недружелюбны что в плане синтаксиса, что в плане поддержки, а жаль :( , впрочем с другой стороны может и хорошо что развитие программирования застряло в "тупиковой" в этом смысле ветке ООП, и порой забавно наблюдать как его пытаются скрестить с SQL, не понимая что это невозможно :) Хотя справедливости ради, даже в Common Lisp'е не догадались сделать поля множественными и сделать их частным случаем функций, так что он тоже не особо был бы панацеей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2009, 15:25 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_мод, Да... и к вам тот же вопрос, часто вы сталкиваетесь с задачами рекурсии (кроме классификации) при разработке бизнес-приложений? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2009, 15:26 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie wrote: > 1) они и в императивном языке могут зациклиться Запрос на SQL может зациклится ? Не, это уже слишком. Не может. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2009, 15:31 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
MasterZiv, An incorrectly composed recursive CTE may cause an infinite loop. For example, if the recursive member query definition returns the same values for both the parent and child columns, an infinite loop is created. To prevent an infinite loop, you can limit the number of recursion levels allowed for a particular statement by using the MAXRECURSION hint and a value between 0 and 32,767 in the OPTION clause of the INSERT, UPDATE, MERGE, DELETE, or SELECT statement. This lets you control the execution of the statement until you resolve the code problem that is creating the loop. The server-wide default is 100. When 0 is specified, no limit is applied. Only one MAXRECURSION value can be specified per statement. For more information, see Query Hints (Transact-SQL). Вполне может, просто по умолчанию стоит ограничение 100 и это не считается исключением... В конце концов в императивном языке тоже можно поставить через аспект ограничение в глубину 100 и возвращать null когда он достигается. То есть и в SQL и в языках "в чистую" рекурсивный цикл не обнаруживается... Так что не велика разница ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2009, 15:40 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie wrote: > Автор: "Nitro_Junkie" > MasterZiv, > > An incorrectly composed recursive CTE may cause an infinite loop. For Я просто прочитал это "1) они и в императивном языке могут зациклиться" как "1) они и в декларативном языке могут зациклиться" Извини. ПРоцитированное понятно. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2009, 16:15 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieПилотажный, ООП добавил очень важный аспект программирования как наследование, только при этом почему-то потребовал присваивать функцию одному объекту и обзывать это дело методом. Как следствие получил массу гемора в виде : неоднозначного определение класса для метода, невозможность множественного полиморфизма, проблемы с модульностью и т.п. ... методы у класса объекта а проблемы с полиморфизмом появлялись из-за множественного наследования, поэтому для простоты во многих языках отказались от множеств. наследования в пользу интерфейсов (интерфейсы не только поэтому конечно, но так или иначе интерфейсы подтянули другие затыки и неудобства) Про этот контекст фраза? И да - можно обойтись без ООП, используя другие структуры для получения таких же позитивных эффектов, которые дает ООП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 06:09 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Пилотажный, Да методы у класса объекта... в этом их проблема... Проблемы полиморфизма не из-за множественного наследования. Классический пример - столкновение кораблей и астероидов - когда для функции collide надо сделать реализации - астероид-корабль, астероид-астероид, корабль-астероид, и корабль-корабль, в ООП это будет выглядеть вот так : abstract class Thing { abstract void collide(Thing thing); abstract void collideAsteroid(Asteroid asteroid); abstract void collideSpaceShip(SpaceShip spaceShip); }; class Asteroid extends Thing { void collide(Thing thing) { thing.collideAsteroid(this); } void collideAsteroid(Asteroid asteroid) { System.out.println("Asteroid 2 hits asteroid 1"); } void collideSpaceShip(SpaceShip spaceShip) { System.out.println("Asteroid 2 hits spaceShip 1"); } }; class SpaceShip extends Thing { void collide(Thing thing) { thing.collideSpaceShip(this); } void collideAsteroid(Asteroid asteroid) { System.out.println("SpaceShip 2 hits asteroid 1"); } void collideSpaceShip(SpaceShip spaceShip) { System.out.println("SpaceShip 2 hits spaceShip 1"); } }; в случае функций делаются реализации collide(Asteroid,Asteroid), collide(Asteroid,SpaceShip), collide(SpaceShip,Asteroid), collide(SpaceShip,SpaceShip), после чего все они через какую-нить конструкцию как defgeneric объединяют в один метод collide(Thing,Thing)... Чувствуете разницу. А теперь еще представьте что SpaceShip из другого модуля и функция collide относится к этому модулю, и попробуйте сделать это в ООП не нарушив модульности... И кстати отказ в от множественного наследования, из-за неоднозначности выбора реализаци тоже редкий дебилизм... Даже в базовых классах уже чувствуется, когда есть интерфейс Map и абстрактный класс AbstractMap... А уж сколько раз я на эту проблему при построении архитектуры нарывался... :( Но как ни крути Java, C# заняли весь рынок, и уйти от них очень не просто... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 10:55 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkieа что по вашему в структурном программировании (и ООП) вызов функции как не реляционная алгебра? реляционная алгебра работает с множествами, а функции - с элементами множеств. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 14:17 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieДа... и к вам тот же вопрос, часто вы сталкиваетесь с задачами рекурсии (кроме классификации) при разработке бизнес-приложений? Часто - все функции на конструкторском графе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 14:19 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieООП добавил очень важный аспект программирования как наследование, только при этом почему-то потребовал присваивать функцию одному объекту и обзывать это дело методом. Все гораздо хуже: функция - это не метод (т.к. ничего не изменяет), и не свойство. В ООП вообще функциям нет законного места. А наследование существует со времен С как коструирование новых типов данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 14:22 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkieв случае функций делаются реализации collide(Asteroid,Asteroid), collide(Asteroid,SpaceShip), collide(SpaceShip,Asteroid), collide(SpaceShip,SpaceShip), после чего все они через какую-нить конструкцию как defgeneric объединяют в один метод collide(Thing,Thing) Я бы сделал наоборот: функция collide(Thing,Thing) сама разбиралась-бы с типами своих параметров ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 14:27 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модреляционная алгебра работает с множествами, а функции - с элементами множеств. Элемент множества это подмножество из одного элемента. Вся разница в том, что SQL сразу обрабатывает несколько элементов, а функция грубо говоря по очереди, но с вычислительной точки зрения они абсолютно эквивалентны... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 14:35 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модNitro_JunkieДа... и к вам тот же вопрос, часто вы сталкиваетесь с задачами рекурсии (кроме классификации) при разработке бизнес-приложений? Часто - все функции на конструкторском графе Забыл упомянуть в вопросе, что не касаясь задач производства (особенно узкоспециализированных)... :) Там много может быть рекурсий не вопрос, хотя объемы там в любом случае как я понимаю небольшие, так что как минимум по скорости использование CTE не так уж и критично... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 14:40 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модNitro_JunkieООП добавил очень важный аспект программирования как наследование, только при этом почему-то потребовал присваивать функцию одному объекту и обзывать это дело методом. Все гораздо хуже: функция - это не метод (т.к. ничего не изменяет), и не свойство. В ООП вообще функциям нет законного места. А наследование существует со времен С как коструирование новых типов данных. Функция не может записывать в поля объекта? Или метод обязательно что-то должен изменять в объекте? В спецификации ООП ничего не сказано, о mutability ни объектов ни функций ни методов. Вы немножко путаете с "чистыми" (математическими) функциями, и соответствующими языками (кроме Haskell'а никого даже и не вспомню), но речь шла не про них... Вот кстати не помню в C наследования, там типы данных можно наследовать? а то на чистом C писал ну очень давно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 14:44 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модNitro_Junkieв случае функций делаются реализации collide(Asteroid,Asteroid), collide(Asteroid,SpaceShip), collide(SpaceShip,Asteroid), collide(SpaceShip,SpaceShip), после чего все они через какую-нить конструкцию как defgeneric объединяют в один метод collide(Thing,Thing) Я бы сделал наоборот: функция collide(Thing,Thing) сама разбиралась-бы с типами своих параметров Это как? Через if и instanceof... Так по такой логике зачем вообще наследование и полиморфизм, если всегда можно все через if'ы решить? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 14:46 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieЭлемент множества это подмножество из одного элемента. Нет. Также как один элемент это не список из одного элемента. Это разные типы данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 14:52 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieЗабыл упомянуть в вопросе, что не касаясь задач производства (особенно узкоспециализированных) Любое сборочное. Объемы ~ 10^7 вершин ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 14:54 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieФункция не может записывать в поля объекта? Не должна. И еще вопрос - какого объекта. Nitro_Junkie Или метод обязательно что-то должен изменять в объекте? Обязательно, на то он и метод. Nitro_JunkieВот кстати не помню в C наследования, там типы данных можно наследовать? а то на чистом C писал ну очень давно... Во многих ЯП (напр эйфория) можно конструировать новые типы на основе уже существующих - вот вам и наследоване и даже множественное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 14:58 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieЭто как? Через if и instanceof... Так по такой логике зачем вообще наследование и полиморфизм, если всегда можно все через if'ы решить? :) Действительно, зачем ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 14:58 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модNitro_JunkieЭлемент множества это подмножество из одного элемента. Нет. Также как один элемент это не список из одного элемента. Это разные типы данных. Не правильно выразился... Элемент множества можно рассматривать как подмножество из одного элемента. Таким образом переход от SQL к структурному программированию есть. И наоборот если рассмотреть множество всех возможных параметров функции и ее результатов, то получается таблица. Это конечно очень условное доказательство эквивалентности SQL и структурного программированию. Но идею я надеюсь вы поняли... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 15:04 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модНе должна. И еще вопрос - какого объекта. Любого из параметров... Если не должна то зачем она вообще нужна? и как вообще по вашему в функциональном\структурном программировании изменяются объекты? _модИли метод обязательно что-то должен изменять в объекте? Обязательно, на то он и метод. Издеваетесь? С точки зрения надежности архитектуры, идеальный вариант, когда большинство классов immutable'ы, то есть методы конструируют результат, не изменяя ничего в объектах... Интересно почитать где написано, что метод обязан изменять объект. Вообще интересно, а как тогда называются все то что относится к классу например String, который как известно immutable... _модВо многих ЯП (напр эйфория) можно конструировать новые типы на основе уже существующих - вот вам и наследоване и даже множественное. То что множественное наследование есть во многих ЯП я в курсе, речь шла про C... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 15:17 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модNitro_JunkieЭто как? Через if и instanceof... Так по такой логике зачем вообще наследование и полиморфизм, если всегда можно все через if'ы решить? :) Действительно, зачем ? Затем что понятие наследования существует в человеческой логики. То есть даже человек далекий от программирования понимает что роза это цветок, то есть у нее как и у всех цветов есть интерфейс дарения на 8 марта и т.п.. И программы написанные с использованием наследования более читабельны, как следствие расширяемы надежны и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 15:20 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie Хотя справедливости ради, даже в Common Lisp'е не догадались сделать поля множественными и сделать их частным случаем функций, так что он тоже не особо был бы панацеей. А можно раскрыть что такое "множественные поля"? И имея некоторый опыт Сommon Lisp c трудом могу предствить поле объекта в виде не-функции (применительно к CL естественно). Конечно это можно реализовать благо Lisp - язык гибкий, но вы ведь не об этом? Извиняюсь за некоторое отклонени от темы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 15:39 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
antares0Nitro_Junkie Хотя справедливости ради, даже в Common Lisp'е не догадались сделать поля множественными и сделать их частным случаем функций, так что он тоже не особо был бы панацеей. А можно раскрыть что такое "множественные поля"? И имея некоторый опыт Сommon Lisp c трудом могу предствить поле объекта в виде не-функции (применительно к CL естественно). Конечно это можно реализовать благо Lisp - язык гибкий, но вы ведь не об этом? Извиняюсь за некоторое отклонени от темы. Множественные поля это первичные (хранимые) данные не от одного объекта (класса) а сразу от нескольких. То есть например для музыканта, студии записи может быть один контракт... формально в Java это реализуется, как class Музыкант { Map<Студия, Контракт> Контракты_музык_со_студ; }; или class Студия { Map<Музыкант, Контракт> Контракты_музык_со_студ; }; То есть с дополнительным полем, прикладным интерфейсом, ручным созданием выбором имплементации и т.п. В то же время если бы поля сделали как частный случай функции у которой скажем вместо реализации стоит скажем initial... То есть : Контракт Контракты_музык_со_студ(Студия, Музыкант) initial; Соответственно обращаться как к функции (что кстати удобно если поле из первичного надо вычисляемым сделать), а записывать через оператор = например Контракты_музык_со_студ(Studio,BrainStorm) = контракт043; Соответственно виртуальная машина сама бы выбирала как реализовывать, хранить все эти поля и т.п. Кстати решилось бы много проблем со сборкой мусора. А в Common Lisp'е насколько я понял поля представлены в виде слотов и они все-таки принадлежат ровно одному объекту :( хотя может я чего-то не нашел, так как документирован он просто жестко... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 15:56 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
как страшно далека дискуссия от нужд трудового пролетариата. кстати я для себя вывел один из надежных признаков того, будет ли язык успешным и популярным или нет. в нормальных языках пишут так: a=2+2 а в непопулярных так: a=2 2 + или + 2 2. и обвешайте язык хоть гирляндой монад, замыканий и еще пачкой умных концепций, но 2 2 + - убьет любое начинание. Именно поэтому, когда я я выбирал какой из ФП языков поизучать, то несмотря на восторженные отзывы о хаскеле он отправился вслед за моим любимым фортом :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 16:27 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Ggg_oldкак страшно далека дискуссия от нужд трудового пролетариата. кстати я для себя вывел один из надежных признаков того, будет ли язык успешным и популярным или нет. в нормальных языках пишут так: a=2+2 а в непопулярных так: a=2 2 + или + 2 2. и обвешайте язык хоть гирляндой монад, замыканий и еще пачкой умных концепций, но 2 2 + - убьет любое начинание. Именно поэтому, когда я я выбирал какой из ФП языков поизучать, то несмотря на восторженные отзывы о хаскеле он отправился вслед за моим любимым фортом :) Знаете если бы SQL не был бы общепризнанным и вам дали бы его в первый раз... Я думаю ваша реакция была такой же... Нежелание разбираться в проблемах технологий, а просто плыть по течению, это больше характеризует вас, а не языки... no offence ;-) ps: хотя когда с раной борются косметикой, а не швами, ничего хорошего из этого по определению не получается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 16:34 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieКонтакт Контракты_музык_со_студ(Студия, Музыкант) initial; Соответственно обращаться как к функции (что кстати удобно если поле из первичного надо вычисляемым сделать), а записывать через оператор = например Контракты_музык_со_студ(Studio,BrainStorm) = контракт043; Соответственно виртуальная машина сама бы выбирала как реализовывать, хранить все эти поля и т.п. Кстати решилось бы много проблем со сборкой мусора. А в Common Lisp'е насколько я понял поля представлены в виде слотов и они все-таки принадлежат ровно одному объекту :( хотя может я чего-то не нашел, так как документирован он просто жестко... 1. Чем представлены поля и чему принадлежат определяет метакласс. Даже для стандартного варианта есть еще принадлежность классу. Значение слота может принаадлежать другому слоту. Точне оба слота содержат ссылку на один и тот же объект. 2. Слот предсавляется в виде (slot-value 'класс 'слот) и обычно это детали внутрипакетной работы. Опять же как я говорил функция. 3. Для магии типа вашей есть accessor-ы Для примера (setf (Контракты_музык_со_сту Studio BrainStorm) контракт043) Точнее это самая простая реализация. Полноценная реализация на mop это магия чуть повыше, но вполне частая для реализации сложных хотелок. Жаловаться на отсутсвие доков при наличии HyperSpec-а и AMOP? Другой вопрос о паттернах и use-case-ах, но это другой вопрос. P.S. Меня конечно несколько понесло, но люблю точность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 16:40 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Ggg_oldкак страшно далека дискуссия от нужд трудового пролетариата. кстати я для себя вывел один из надежных признаков того, будет ли язык успешным и популярным или нет. в нормальных языках пишут так: a=2+2 а в непопулярных так: a=2 2 + или + 2 2. и обвешайте язык хоть гирляндой монад, замыканий и еще пачкой умных концепций, но 2 2 + - убьет любое начинание. Именно поэтому, когда я я выбирал какой из ФП языков поизучать, то несмотря на восторженные отзывы о хаскеле он отправился вслед за моим любимым фортом :) Еще раз встряну. В Hasskell-е по-моему как раз 2 + 2 (Хотя можно и в префиксной, на выбор).. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 16:44 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
antares0Nitro_JunkieКонтакт Контракты_музык_со_студ(Студия, Музыкант) initial; Соответственно обращаться как к функции (что кстати удобно если поле из первичного надо вычисляемым сделать), а записывать через оператор = например Контракты_музык_со_студ(Studio,BrainStorm) = контракт043; Соответственно виртуальная машина сама бы выбирала как реализовывать, хранить все эти поля и т.п. Кстати решилось бы много проблем со сборкой мусора. А в Common Lisp'е насколько я понял поля представлены в виде слотов и они все-таки принадлежат ровно одному объекту :( хотя может я чего-то не нашел, так как документирован он просто жестко... 1. Чем представлены поля и чему принадлежат определяет метакласс. Даже для стандартного варианта есть еще принадлежность классу. Значение слота может принаадлежать другому слоту. Точне оба слота содержат ссылку на один и тот же объект. 2. Слот предсавляется в виде (slot-value 'класс 'слот) и обычно это детали внутрипакетной работы. Опять же как я говорил функция. 3. Для магии типа вашей есть accessor-ы Для примера (setf (Контракты_музык_со_сту Studio BrainStorm) контракт043) Точнее это самая простая реализация. Полноценная реализация на mop это магия чуть повыше, но вполне частая для реализации сложных хотелок. Жаловаться на отсутсвие доков при наличии HyperSpec-а и AMOP? Другой вопрос о паттернах и use-case-ах, но это другой вопрос. P.S. Меня конечно несколько понесло, но люблю точность. Вот честно говоря 1 не понял, можно чуть нагляднее в контексте примера пояснить. 2,3: То есть как в Smalltalk'е все поля private'ы по определению... Но это ничего не меняет, в спецификации языка нету множественных полей, конечно их можно эмулировать, но все равно все придется делать самому... И не факт что хватит статистики, ведь нужно считать количество обращений, записей отсюда выбирать размеры хэшей или вообще ordered реализации, вобщем делать все то что делают СУБД, а это нормально можно сделать только в самой виртуальной машине... Отсутствие доков определяется как быстро можно найти наглядную структурированую информацию в гугле... От чистого описания синтаксиса наприме при изучении языка мне например ни горячо ни холодно... Впрочем может я на самом деле просто не умею эффективно пользоваться гуглом :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 16:55 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkieantares0Nitro_JunkieКонтакт Контракты_музык_со_студ(Студия, Музыкант) initial; Соответственно обращаться как к функции (что кстати удобно если поле из первичного надо вычисляемым сделать), а записывать через оператор = например Контракты_музык_со_студ(Studio,BrainStorm) = контракт043; Соответственно виртуальная машина сама бы выбирала как реализовывать, хранить все эти поля и т.п. Кстати решилось бы много проблем со сборкой мусора. А в Common Lisp'е насколько я понял поля представлены в виде слотов и они все-таки принадлежат ровно одному объекту :( хотя может я чего-то не нашел, так как документирован он просто жестко... 1. Чем представлены поля и чему принадлежат определяет метакласс. Даже для стандартного варианта есть еще принадлежность классу. Значение слота может принаадлежать другому слоту. Точне оба слота содержат ссылку на один и тот же объект. 2. Слот предсавляется в виде (slot-value 'класс 'слот) и обычно это детали внутрипакетной работы. Опять же как я говорил функция. 3. Для магии типа вашей есть accessor-ы Для примера (setf (Контракты_музык_со_сту Studio BrainStorm) контракт043) Точнее это самая простая реализация. Полноценная реализация на mop это магия чуть повыше, но вполне частая для реализации сложных хотелок. Жаловаться на отсутсвие доков при наличии HyperSpec-а и AMOP? Другой вопрос о паттернах и use-case-ах, но это другой вопрос. P.S. Меня конечно несколько понесло, но люблю точность. Вот честно говоря 1 не понял, можно чуть нагляднее в контексте примера пояснить. 2,3: То есть как в Smalltalk'е все поля private'ы по определению... Но это ничего не меняет, в спецификации языка нету множественных полей, конечно их можно эмулировать, но все равно все придется делать самому... И не факт что хватит статистики, ведь нужно считать количество обращений, записей отсюда выбирать размеры хэшей или вообще ordered реализации, вобщем делать все то что делают СУБД, а это нормально можно сделать только в самой виртуальной машине... Отсутствие доков определяется как быстро можно найти наглядную структурированую информацию в гугле... От чистого описания синтаксиса наприме при изучении языка мне например ни горячо ни холодно... Впрочем может я на самом деле просто не умею эффективно пользоваться гуглом :) 1. slot-value не прошит раз и навсегда и для всего. Его поведение определяет metaclass класса. Для обычного объекта это standart-class (Или как то так). Обычный класс хранит значения полей в внутренней структуре и соответсвено slot-vlaue просто дает доступ к полям этой структуры. Но никто не мешает создать другой метакласс для персистентных объектов например. Standart-object это всего лишь один из возможных выборов. 2. Что значит эмулировать? Можно взять готовое или написать самому так как хочется другого не дано. Lisp уже виртуальная машина а mop уже готовая платформа для объектных систем. И то и другое можно изменять под свои нужды. Про статистику я уже не понял, что мешает её считать? 3. Гугол выдает инфу по ревалентности и поэтому найти php-связзаное гораздо легче. В случае Лиспа нужно быть в теме и точно знать предмет и место поиска. Я дико извиняюсь но хотя бы pcl http://pcl.lisper.ru был пролистан? Суть ведь не в том что б доказать, что ЛИСП ЭТО САМЫЙ МОЩНЫЙ ЯЗЫК. Просто для рассматриваемых случаев и пары глав pcl про CLOS в принципе хватит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 17:40 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
antares01. slot-value не прошит раз и навсегда и для всего. Его поведение определяет metaclass класса. Для обычного объекта это standart-class (Или как то так). Обычный класс хранит значения полей в внутренней структуре и соответсвено slot-vlaue просто дает доступ к полям этой структуры. Но никто не мешает создать другой метакласс для персистентных объектов например. Standart-object это всего лишь один из возможных выборов. 2. Что значит эмулировать? Можно взять готовое или написать самому так как хочется другого не дано. Lisp уже виртуальная машина а mop уже готовая платформа для объектных систем. И то и другое можно изменять под свои нужды. Про статистику я уже не понял, что мешает её считать? 3. Гугол выдает инфу по ревалентности и поэтому найти php-связзаное гораздо легче. В случае Лиспа нужно быть в теме и точно знать предмет и место поиска. Я дико извиняюсь но хотя бы pcl http://pcl.lisper.ru был пролистан? Суть ведь не в том что б доказать, что ЛИСП ЭТО САМЫЙ МОЩНЫЙ ЯЗЫК. Просто для рассматриваемых случаев и пары глав pcl про CLOS в принципе хватит. 1. Даже из того описания что вы дали я все равно не понимаю, как это решит проблему с множественными полями, ведь слот привязан к одному классу (и соответственно метаклассу, который как я понял просто определяет реалищацию slot'а) 2. Эмулировать это, повторяюсь, значит что такой возможности нету в спецификации языка. То есть если захотеть можно эмулировать (читай написать) и СУБД на Lisp'е, но такая "эмуляция" будет иметь такое же отношение к Lisp'у, как Oracle к C++ (или на чем там он написан) Про статистику, вы себе хорошо представляете алгоритмическую сложность такого процесса (оптимизации реализации хранения)? Там нужно ловить все вызовы, все записи, в отдельных потоках реорганизовывать\собирать мусор у таких множественных полей. Этого никто кроме виртуальной машины сделать не в состоянии, и средствами самого Lisp'а это делать, все равно что симплекс-метод на SQL'е писать. Еще раз CLOS да решает проблему с множественной диспетчеризацией и не привязывает метод к одному объекту как это сделано в ООП. Чем он реально превосходит большинство существующих языков. Но и дальше он не ушел, во всяком случае если не рассматривать то докуда его теоретически можно расширить в следствие его гибкости ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 18:04 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
1. Даже из того описания что вы дали я все равно не понимаю, как это решит проблему с множественными полями, ведь слот привязан к одному классу (и соответственно метаклассу, который как я понял просто определяет реалищацию slot'а) 2. Эмулировать это, повторяюсь, значит что такой возможности нету в спецификации языка. То есть если захотеть можно эмулировать (читай написать) и СУБД на Lisp'е, но такая "эмуляция" будет иметь такое же отношение к Lisp'у, как Oracle к C++ (или на чем там он написан) Про статистику, вы себе хорошо представляете алгоритмическую сложность такого процесса (оптимизации реализации хранения)? Там нужно ловить все вызовы, все записи, в отдельных потоках реорганизовывать\собирать мусор у таких множественных полей. Этого никто кроме виртуальной машины сделать не в состоянии, и средствами самого Lisp'а это делать, все равно что симплекс-метод на SQL'е писать. Еще раз CLOS да решает проблему с множественной диспетчеризацией и не привязывает метод к одному объекту как это сделано в ООП. Чем он реально превосходит большинство существующих языков. Но и дальше он не ушел, во всяком случае если не рассматривать то докуда его теоретически можно расширить в следствие его гибкости 1. Вернусь к предыдущему утверждению и повторю что принадлежность слота классу опредляется метаклассом класса, точнее релизацией нужных методов для этого метакласса. Можно например, что бы один и тот же слот случайным образом появлялся у разных объектов. 2. Возможность реализации такого поведения заложено в спецификации языка. Нет конечно можно называть реализация пары методов эмуляцией, но для меня это странно. Oracle реализует другю виртуальную машину поверх того на чем он написан. В случае CL реализация необходимого поведения объектов происходит внутри самой лисп-машины и на самом Common Lisp-е. Разница по-моему очевидна. Даже объектная система не меняется скорее настраивается. 3. Как уже говорил Лисп уже Вирт. машина поэтому ничего не мешает собирать статистику и делать любые другие вещи. В смысле реализации Лисп в отличае от sql компилируемый язык общего назначения ничем не хуже явы или плюсов. Или у вас для реализации нечто более экзотичное? Но тема скатывается в дискуссию о лиспе. Это не было моей первоначальной целью. Про что и куда можно расширить с удовольсвием послушаю, если вас не затруднит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 18:46 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
нитро, вы не правы. Я в SQL я пришел из FoxPro много лет назад. Так вот, даже неопытному новичку тогда было видно, что SQL дает большие преимущества и гибкость в решении задач манипулирования данными, множествами данных. Мозг человека так устроен, что мыслит образами/картинками и основные операции - синтез (соединение), анализ (разделение/фильтрация) и поиск совпадений (корелляция/сравнение). SQL эти абстракции работы мозга отлично реализует. Поэтому при изучении его не надо выворачивать мозг наизнанку. SQL совершил такой прорыв и заслужено получил признание, ибо это действительно удобный инструмент для манипулирования данными. ФП шаг вперед в развитии языков программирования, но по революционности идей он до SQL не дотягивает. Всякие рекурсии - не свойствены работе мозга, рекурсивные выражения тяжело разбирать и анализировать. Кстати рекурсивные расширения SQL тоже тяжело воспринимать. Весь вопрос в том, что надо понимать область применения технологии, какие преимущества будут получены при ее использовании. Пока я читаю в стаьях что вроде как можно выиграть на надежности программ, есть какие-то теоретичекие бенефиты в части писания программ, которые смогут хорошо параллелится. Мне очень нравится идея того, что надо программировать что ты хочешь получить и не углубляться в то, как ты это хочешь получить. Так-же как и в SQL. И в принципе за этим будущее. P.S. Я не зря упомянул форт, нравился он мне очень. И до сих пор жив на всяких embedded системах. Позволяет писать в каком хочешь стиле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2009, 20:25 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Ggg_oldнитро, вы не правы. Я в SQL я пришел из FoxPro много лет назад. Так вот, даже неопытному новичку тогда было видно, что SQL дает большие преимущества и гибкость в решении задач манипулирования данными, множествами данных. Мозг человека так устроен, что мыслит образами/картинками и основные операции - синтез (соединение), анализ (разделение/фильтрация) и поиск совпадений (корелляция/сравнение). SQL эти абстракции работы мозга отлично реализует. Поэтому при изучении его не надо выворачивать мозг наизнанку. SQL совершил такой прорыв и заслужено получил признание, ибо это действительно удобный инструмент для манипулирования данными. ФП шаг вперед в развитии языков программирования, но по революционности идей он до SQL не дотягивает. Всякие рекурсии - не свойствены работе мозга, рекурсивные выражения тяжело разбирать и анализировать. Кстати рекурсивные расширения SQL тоже тяжело воспринимать. Весь вопрос в том, что надо понимать область применения технологии, какие преимущества будут получены при ее использовании. Пока я читаю в стаьях что вроде как можно выиграть на надежности программ, есть какие-то теоретичекие бенефиты в части писания программ, которые смогут хорошо параллелится. Мне очень нравится идея того, что надо программировать что ты хочешь получить и не углубляться в то, как ты это хочешь получить. Так-же как и в SQL. И в принципе за этим будущее. P.S. Я не зря упомянул форт, нравился он мне очень. И до сих пор жив на всяких embedded системах. Позволяет писать в каком хочешь стиле. Первое, я ничуть не преуменьшаю ценность SQL как единственного декларативного на данный момент языка. Он также по сути является одним из очень немногих чистых функциональных языков программирования, в отличие от того же Lisp'а. То есть императивности в нем нету вообще, как класса. Мозг человека как раз мыслит объектами и свойствами, а не таблицами и строками, поэтому объяснить человеку что такое JOIN, а особенно тип JOIN, который по сути является одним из видов условий (кстати еще одна грубая ошибка при создании SQL) далеко не так просто. Вызов функции в этом смысле более интуитивно понятен. То что за декларативными подходами будущее это мы как раз понимаем, собсно над этим и работаем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 10:25 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie Мозг человека как раз мыслит объектами и свойствами, а не таблицами и строками, поэтому объяснить человеку что такое JOIN, а особенно тип JOIN, который по сути является одним из видов условий (кстати еще одна грубая ошибка при создании SQL) далеко не так просто. Вызов функции в этом смысле более интуитивно понятен. Вы в карты в "тысячу" например когда-нибудь играли? Когда данных немного то можно и образами мыслить, а когда их столько что уже в мозг не влезает, то ручки сами табличку начинают рисовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 10:33 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
antares0 1. Вернусь к предыдущему утверждению и повторю что принадлежность слота классу опредляется метаклассом класса, точнее релизацией нужных методов для этого метакласса. Можно например, что бы один и тот же слот случайным образом появлялся у разных объектов. antares0, мы о разных вещах говорим... Еще раз значение слот может определятся сразу несколькими объектами\классами\метаклассами. То есть в описанном случае про контракт музыканта со студией как slot как должен реализовываться какому классу\метаклассу (вы в них по моему немного путаетесь) принадлежать? antares0 2. Возможность реализации такого поведения заложено в спецификации языка. Нет конечно можно называть реализация пары методов эмуляцией, но для меня это странно. Oracle реализует другю виртуальную машину поверх того на чем он написан. В случае CL реализация необходимого поведения объектов происходит внутри самой лисп-машины и на самом Common Lisp-е. Разница по-моему очевидна. Даже объектная система не меняется скорее настраивается. На C++ я тоже могу вручную реализовать сборку мусора, означает ли что C++ поддерживает сборку мусора? antares0 3. Как уже говорил Лисп уже Вирт. машина поэтому ничего не мешает собирать статистику и делать любые другие вещи. В смысле реализации Лисп в отличае от sql компилируемый язык общего назначения ничем не хуже явы или плюсов. Или у вас для реализации нечто более экзотичное? Лисп к нашему проекту никакого отношения не имеет, а всего лишь демонстрация что наследование можно заложить в язык без привязки функции одному объекту (как в ООП) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 10:41 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
SergSuperNitro_Junkie Мозг человека как раз мыслит объектами и свойствами, а не таблицами и строками, поэтому объяснить человеку что такое JOIN, а особенно тип JOIN, который по сути является одним из видов условий (кстати еще одна грубая ошибка при создании SQL) далеко не так просто. Вызов функции в этом смысле более интуитивно понятен. Вы в карты в "тысячу" например когда-нибудь играли? Когда данных немного то можно и образами мыслить, а когда их столько что уже в мозг не влезает, то ручки сами табличку начинают рисовать Я конечно чего-то путаю наверное, но в тысяче как раз достаточно вести текущий счет, а табличка там это лог изменений, который как раз не нужен. Сама табличка, как представление списка, безусловно человеку понятна, но вот операции над ними проще понять руководствуясь более высокой логикой, нежели логикой матриц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 10:45 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkieесли рассмотреть множество всех возможных параметров функции и ее результатов, то получается таблица. таблица - это функция натурального аргумента - номера строки, определенная на мн-ве кортежей. сами кортежи тоже могут содержать таблично заданные функции. Т.о SQL - это язык для работы с табличными функциями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 11:06 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieЛюбого из параметров... Если не должна то зачем она вообще нужна? и как вообще по вашему в функциональном\структурном программировании изменяются объекты? Любого на выбор ? Не пойдет. А объекты изменяют свои св-св методами. Когда методы конструируют результат это и есть изменение объекта. Т.е. было одно значение, применили метод, получили другое значение этого-же св-ва этого-же объекта. Nitro_Junkie То что множественное наследование есть во многих ЯП я в курсе, речь шла про C... Я имел ввиду не наследование, а возможность конструировать новые типы данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 11:11 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
antares0А можно раскрыть что такое "множественные поля"? Автор так называет функции нескольких переменных :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 11:13 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie Знаете если бы SQL не был бы общепризнанным и вам дали бы его в первый раз... Я думаю ваша реакция была такой же... В первый раз я смотрел не SQL, а его прототип альфа. Реакция была положительной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 11:15 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модNitro_Junkieесли рассмотреть множество всех возможных параметров функции и ее результатов, то получается таблица. таблица - это функция натурального аргумента - номера строки, определенная на мн-ве кортежей. сами кортежи тоже могут содержать таблично заданные функции. Т.о SQL - это язык для работы с табличными функциями. Во второй НФ, таблицу уже можно рассматривать как отображение множества ключей (объектов) на множество значений (свойств). И де-факто SQL всегда используется во второй НФ (что собсно и подтверждает что в задачах нужны именно объекты и свойства, а не таблицы и строки). Или вы про 2-ю НФ не согласны? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 11:23 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модЛюбого на выбор ? Не пойдет. А объекты изменяют свои св-св методами. Когда методы конструируют результат это и есть изменение объекта. Т.е. было одно значение, применили метод, получили другое значение этого-же св-ва этого-же объекта. Честно говоря мало что понял... Допустим для примера есть класс Query и у него есть метод execute(Session), который выполняет результат SQL запроса, как допустим List<Map<String,Object>>, он не изменяет ни Query ни Session, то есть он не метод? И вообще не совсем понимаю откуда вы берете такие определения\требование, что функции не могут менять свойства параметров в ФП или методы обязаны изменять объекты в ООП, может дадите ссылку какую нибудь. Первый раз такое слышу... _модЯ имел ввиду не наследование, а возможность конструировать новые типы данных. А какое отношение конструирование новых типов данных имеет к наследованию? В C типы данных можно наследовать друг от друга? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 11:32 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модantares0А можно раскрыть что такое "множественные поля"? Автор так называет функции нескольких переменных :) Функции они по определению нескольких переменных... Скорее поля нескольких переменных... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 11:33 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Объект и образ есть по-сути одно и тоже. Операцию join очень легко представить визуально, достаточно два кватратика нарисовать со стрелочками. Решение задачи на SQL почти есть задачка образно-визуальная, на геометрический преобразования, и по сложности сравнима с пазлами для детей раннего возраста, когда надо кубики и кружочки вставлять в соответствующие им отверстия. Такого рода задачи - самые естественные для мозга. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 11:59 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модВ первый раз я смотрел не SQL, а его прототип альфа. Реакция была положительной. Вообще по моим наблюдениям программистов условно пожно поделить на: 1) "пролетарии", которым пофигу, что делать лишь бы им деньги платили, они бы SQL даже не начали изучать, пока начальство не сказало что им за это заплатят... Таких людей процентов 50... 2) "гуру", имеют определенный опыт использования технологий, очень себя ценят за него. Для них все остальное это просто "другое", может и полезное но не сравнится с теми технологиями, в которых они разбираются. Соответственно ищут любую зацепку вроде что на SQL нельзя решить дифференциальное уравнение, после чего разводят руками и ставят на ней крест. Начинают интересоваться только когда технология станет общепризнанной, то есть будет использоваться минимум в процентах 10 существующих систем. Таких "гуру" процентов больше чем следует из названия (просто потому что к ним относятся не те кто таковыми являются, а те кто таковыми себя считают) где-то процентов 25 3) "энтузиасты", делятся в свою очередь: a) "любители" - с небольшим опытом или идеалисты по жизни - много суеты толку мало, ни глобального видения, ни аналитического мышления, никогда не могут оценить экономическую составляющую своей деятельности, ни какой пользы, кроме большой трудоспособности. Яркий пример тусуется в соседнем треде. Их больше чем кажется процентов 15 наверное б) "реалисты" - самая интересная категория, реально стремятся развиваться куда-то, анализировать существующие проблемы и т.п. , но их мало не больше 10 процентов Конечно на самом деле бывают смеси из этих категорий, но не в пропорции 50\50, а скорее с примесями... Но я рад _мод что вы относитесь больше к последней категории, чем ко всем остальным... ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 12:10 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Ggg_oldОбъект и образ есть по-сути одно и тоже. Операцию join очень легко представить визуально, достаточно два кватратика нарисовать со стрелочками. Решение задачи на SQL почти есть задачка образно-визуальная, на геометрический преобразования, и по сложности сравнима с пазлами для детей раннего возраста, когда надо кубики и кружочки вставлять в соответствующие им отверстия. Такого рода задачи - самые естественные для мозга. Это во второй НФ и связываемая таблица с одним ключем... Да и дети вряд ли кубики с кружочками могут клонировать что по сути делает Join. А попробуйте представить этот процесс когда связь идет не по ключу а по нескольким колонкам где могут повторяться значения, вы себе мозг сломаете... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 12:16 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
нитро, не знаю, у меня мозг не ломается на операциях соединения. Мне реально тяжело представлять операции оконные, рекурсивные типа WINDOW, WITH RECURSIVE. Я вот что подумал, что может дело в способе мышления. Если почитать книги по психологии и работе мозга то там выделяются несколько психотипов мышления. Если сильно огрубить, то основными явлются образное (рулит правое полушарие) и логическое (рулит левое). Лично я мыслю картинками. А вот математики как правило имеют ярко выраженное логическое мышление. В общем это тоже надо учитывать при разработке инструментов для прграммистов. Кстати, что именно вы хотите предложить или хотя-бы над какой проблемой работаете? Ведь даже тот-же лисп не создавался как язык программирования общего назначения, а был предназначен для решения вполне практических задач в области ИИ определнными методами развитыми в 50-е, 60-е годы. Отсюда и название язык обработки списков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 12:28 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Ggg_oldнитро, не знаю, у меня мозг не ломается на операциях соединения. Мне реально тяжело представлять операции оконные, рекурсивные типа WINDOW, WITH RECURSIVE. Я вот что подумал, что может дело в способе мышления. Если почитать книги по психологии и работе мозга то там выделяются несколько психотипов мышления. Если сильно огрубить, то основными явлются образное (рулит правое полушарие) и логическое (рулит левое). Лично я мыслю картинками. А вот математики как правило имеют ярко выраженное логическое мышление. В общем это тоже надо учитывать при разработке инструментов для прграммистов. Кстати, что именно вы хотите предложить или хотя-бы над какой проблемой работаете? Ведь даже тот-же лисп не создавался как язык программирования общего назначения, а был предназначен для решения вполне практических задач в области ИИ определнными методами развитыми в 50-е, 60-е годы. Отсюда и название язык обработки списков. Чисто математически саму операцию то легко выполнить, а вот представить логический результат (то есть что с функциональной точки зрения мы получим в конце) тяжеловато. Вот вы часто выполняете связывание когда у вас одна из таблиц связывается не по полному ключу? не говоря уже о том часто ли у вас встречаются таблицы с повторяющимися записями? Я уже писал выше, создание полностью декларативной парадигмы разработки бизнес-приложений (информационных систем) .Обобщение и развитие SQL если хотите, вплоть до пользовательского интерфейса, хотя конечно все не совсем так просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 12:38 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie[quot antares0] 1. Вернусь к предыдущему утверждению и повторю что принадлежность слота классу опредляется метаклассом класса, точнее релизацией нужных методов для этого метакласса. Можно например, что бы один и тот же слот случайным образом появлялся у разных объектов. [quot] antares0, мы о разных вещах говорим... Еще раз значение слот может определятся сразу несколькими_____ объектами\классами\метаклассами. То есть в описанном случае про контракт музыканта со студией как____ slot как должен реализовываться какому классу\метаклассу (вы в них по моему немного путаетесь)_______ принадлежать? `Значение слота определяемое несколькими объектами\классами\метаклассами` - про метаклассы в описаном примере речи не шло. slot-vаlue согласно CLHS вызывает slot-value-using-class определенную в Metaobject Protocol. Primary Method slot-value-using-class (class standard-class) object (slot standard-effective-slot-definition) Primary Method slot-value-using-class (class funcallable-standard-class) object (slot standard-effective-slot-definition) Аргументы по порядку: метакласс,класс.слот. В живую это вот так (я подравнял для наглядности) Код: plaintext 1. 2. 3. Замечу что STANDARD-OBJECT здесь type specifier в виде символа, но можно и что-нибудь поинтереснее, например Код: plaintext 1. Справедливости ради скажу, что сигнатура slot-value несколько портит эту радужную картину. Это все про опредление значения слота несколькими параметрами. Общий слот для нескольких объектов, рассматривать уже лень. На C++ я тоже могу вручную реализовать сборку мусора, означает ли что C++ поддерживает сборку мусора? Это похоже на спор о полупустом стакане, но все же. По моему разумению, С++ поддерживает сборку мусора но предоставляет програмсту на выбор: собирать мусор руками, или автоматизировать процесс по собсвенному вкусу. Если кажется что я что-то путаю ,то можно попробовать указать на ляпы и смысла в словах станет больше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 13:46 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
ну, умножение двух таблиц, когда образуются все возможные комбинации всего со всем я представить могу. Вернее представляю это себе как квадратик, где "все со всеми". Такое на практике случается не часто, сходу сложно вспомнить, когда такое пришлось делать в последний раз. Декларативный подход - дело благое, может что и получится путное. удачи, но не забывайте про такие мелочи как 2+2 vs 2 2 + ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 13:56 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkieв задачах нужны именно объекты и свойства, а не таблицы и строки). Или вы про 2-ю НФ не согласны? Согласен, но таблицы нужны для применения к ним рел. алгебры. У объектов никакой алгебры нет, поэтому никаких серьезных задач на них решать нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 14:16 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieИ вообще не совсем понимаю откуда вы берете такие определения\требование, что функции не могут менять свойства параметров в ФП или методы обязаны изменять объекты в ООП, может дадите ссылку какую нибудь. Первый раз такое слышу... Чистые функции - хороший стиль программирования. Если надо чего-то менять - исп. процедуры. Объект - это набор св-в, методы нужны только для изменения этих св-в. Узнать значение св-ва можно без всяких методов. Ваши примеры - это использование терминологии ООП там, где оно вообще не применимо (типа притянуто за уши). Nitro_Junkie А какое отношение конструирование новых типов данных имеет к наследованию? Это одно и тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 14:24 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
antares0, касательно lisp, C++ Следуя такой логики ассемблер поддерживает наследование, сборку мусора, множественную диспетчеризацию и т.п. И вообще самый лучший язык. Все то что не входит в описание языка, а только может быть реализовано при помощи его, не является частью языка... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 15:12 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Ggg_oldну, умножение двух таблиц, когда образуются все возможные комбинации всего со всем я представить могу. Вернее представляю это себе как квадратик, где "все со всеми". Такое на практике случается не часто, сходу сложно вспомнить, когда такое пришлось делать в последний раз. Декларативный подход - дело благое, может что и получится путное. удачи, но не забывайте про такие мелочи как 2+2 vs 2 2 + Мы пока не язык делаем... Там настройка в виде кода, потом XML, потом визуальная, и только потом когда-нибудь может в язык оформим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 15:15 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модNitro_Junkieв задачах нужны именно объекты и свойства, а не таблицы и строки). Или вы про 2-ю НФ не согласны? Согласен, но таблицы нужны для применения к ним рел. алгебры. У объектов никакой алгебры нет, поэтому никаких серьезных задач на них решать нельзя. Это вопрос что вы под алгеброй понимаете... в любом случае все то что до 2 НФ в SQL'е избыточно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 15:17 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модЧистые функции - хороший стиль программирования. Если надо чего-то менять - исп. процедуры. Объект - это набор св-в, методы нужны только для изменения этих св-в. Узнать значение св-ва можно без всяких методов. Ваши примеры - это использование терминологии ООП там, где оно вообще не применимо (типа притянуто за уши). Что-то я запутался. Вы сначала говорили что такого понятия как функции\процедуры в ООП нету, что там есть только классы, объекты, поля и методы... Теперь даже есть чистые функции и соответственно исп. процедуры - или это вы про структурное программирование? В любом случае допустим если я пишу на Java и мне нужно реализовать описанный мной функционал (про Query), мне с точки зрения ООП как его надо оформлять? _модЭто одно и тоже. Но вы мне так и не ответили на вопрос, можно ли наследовать типы данных в C. То есть сказать что тип данных A находится в каком-то отношении с типом B, что все поля типа B по определению есть в A. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 15:23 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieЭто вопрос что вы под алгеброй понимаете набор операций над отношениями, реализованные сначала Коддом в алфе а потом в SQL. Такого набора для объектов не существует, т.е. алгебры объектов нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 16:42 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieТеперь даже есть чистые функции и соответственно исп. процедуры - или это вы про структурное программирование? Просто программирование. Nitro_Junkieмне с точки зрения ООП как его надо оформлять? с точки зрения ООП далеко не все можно реализовать (формально оформить можно только зачем ?) Nitro_Junkie что все поля типа B по определению есть в A. можно - по построению ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 16:45 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модNitro_JunkieЭто вопрос что вы под алгеброй понимаете набор операций над отношениями, реализованные сначала Коддом в алфе а потом в SQL. Такого набора для объектов не существует, т.е. алгебры объектов нет. Вполне отлично существуют, например частично-рекурсивные функции... Которые появились задолго до SQL. Там есть 5 операторов при помощи которых можно задать любую вычислимую функцию. Оперирует объектами (если ассоциировать любой объект с числом, предполагая что мн-во объектов счетно). Отлично подходит под ваше определение алгебры. И кстати можно считать были прообразом для реляционной алгебры - операторы подстановки как Join'ы, операторы примитивной рекурсии - рекурсивные CTE, группировки как операции минимизации аргумента... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 16:50 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_мод, Видимо мы про какие-то разные ООП говорим... Лично я говорю о классическом, который лежит в основе Java, C# и иже с ними... Где есть классы с полями и методами (как функциями принадлежащему одному объекту\классу к которому можно обращаться через this), есть static методы как функции (но для них принадлежность одному классу выглядит еще более дебильно), которые вообще противоречят ООП... Процедуры соответственно являются частным случаем функций, которые ничего не возвращает, то есть отдельно не рассматривается. Касательно mutability в ООП вообще ничего не сказано . Ну и плюс сверху области видимости, чисто как безопасность. Могу накидать кучу ссылок из википедии, бутча и иже с ними где все что я сказал подтверждается... Может все-таки поделитесь своим представлением об ООП? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 17:00 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_мод, И программирование - это очень абстрактное понятие, в которое и SQL и логическое программирование (как базы знаний) и чего только туда не входит. Так что про функции и процедуры, что они входят в программирование это все же перебор.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2009, 17:04 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie, Мне симпатична идея, озвученная _мод, что метод должны менять только свойства обьектов. Что-то в этом есть. Примерно как в Оракле нельзя дмл в селекте делать. Порядок появляется что-ли, предсказуемость. Само собой, что чем более технология программирования ближе к реальному миру в которым мы существуем, тем легче/интуитивнее на ней будет релизовывать модели этого же мира. Поэтому SQL и стал популярным - он ближе к нашему пониманию. Вот идею о чистых функциях пытаюсь себе смоделировать. Сижу смотрю сейчас на блок музыкального центра (объект). Вот я ему вызвал метод Повернуть_ручку_звука (по_часовой_стрелке, 10_градусов). А как я звук услышу? Получить через return или должен прочитать его свойство? Инициатива исходит от меня? - нет, инициатива исходит от музыкального центра, именно он воздействует на меня звуком. Т.о. есть "воздействие", "обьект воздействия" и "характер воздействия" - метод, объект и параметры метода. Я воздействую на него, а он воздействует на меня. Причём я оказываю воздействие адресно, а он безадресно. Мы взаимодействуем. Наверное, в идеальном языке программирования должно быть что-то типа такого - взаимных воздействий - поддержка эвентов на уровне языка. Чтобы задача моделирования, например, человека и музыкального центра программировалась as is. А потом на этом же языке нужно как-то сделать воздействие на СУБД, хм. Можно ли это всё смоделировать на полностью декларативной парадигме? В UML есть разные типы диаграмм: описание статики, динамики, состояний... Гда та одна универсальная UML-диаграмма, одна универсальная парадигма? [Спокойной ночи] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 00:55 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
ммм, а это не Objective-C случайно? 8) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 01:09 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieВполне отлично существуют, например частично-рекурсивные функции... ???? таблица3=таблица1 операция таблица2 - так можно объект3=объект1 операция объект2 - а так низзя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 09:27 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie Лично я говорю о классическом, который лежит в основе Java, C# и иже с ними... которые вообще противоречят ООП... Точнее не скажешь :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 09:29 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieИ программирование - это очень абстрактное понятие У Дейкстры есть книжка "Дисциплина программирования" - я об этом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 09:31 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
web_foxМожно ли это всё смоделировать на полностью декларативной парадигме? Может и можно, вот только зачем ? Воздействие предполагает императивность. Например, программа управления роботом д.б. набором команд. Ну и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 09:36 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieМожет все-таки поделитесь своим представлением об ООП? Дейкстра сказал, что эта парадигма была придумана исключительно для разработки оконного интерфейса. Такая одноразовая штука. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 09:41 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
web_fox, _мод Immutable объекты гораздо более предсказуемы чем mutable объекты... Для них можно делать Lazy Evaluation, их можно безопасно передавать другим объектам, и те не будут боятся что переданный объект вдруг без их ведома неожиданно изменится. Но как правило не стоит выбор что делать класс Immutable или Mutable, это определяется задачей\архитектурой. Например в текущем проекте все классы не связанные с хранением текущей информации от пользователя (пример такой информации является тот же музыкальный центр) Immutable а их 90%. Получается что им вообще не место в ООП, что же мы тогда, прости господи, используем за программирование в нашем проекте? Забавно что оказывается достаточно много людей которые считают что ООП хоть что-то говорит о mutability объектов. ООП это просто надстройка над структурным программированием (о котором писал Дейкстра), в котором добавлена возможность наследования, необходимость запихивать функции в классы и область видимости. А уж особенно противопоставлять его структурному программированию это в стиле акции пчелы против меда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 10:13 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_мод таблица3=таблица1 операция таблица2 - так можно объект3=объект1 операция объект2 - а так низзя Вот ваше определение алгебры : набор операций над отношениями. Так вот в случае частично-рекурсивных функций, отношения это функции, операции - операторы создающие новые функции. И даже для вашего примера вполне обычное структурное программирование подходит: andWhere = and(where1,where2); если предположить что класс Where immutable ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 10:16 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модweb_foxМожно ли это всё смоделировать на полностью декларативной парадигме? Может и можно, вот только зачем ? Воздействие предполагает императивность. Например, программа управления роботом д.б. набором команд. Ну и т.д. Я уже писал: Безотносительно нашего проекта, можно узнать почему? Я понимаю что у любого расширения должны быть императивные черты, чтобы реагировать на события, но если их формализовать в виде например ввода свойства или изменения класса объекта, а все остальное рассматривать как следствие декларативных правил, то почему нет. И надо это затем что декларативное программирование по всем нефункциональным требования значительно превосходит императивное. Особенно это касается расширяемости, скорости разработки, надежности и т.д. В нем нету последействий, они более высокоуровневые как следствие их прозрачно проще оптимизировать, правила гораздо более "портабельны" чем императивные алгоритмы и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 10:22 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модNitro_JunkieМожет все-таки поделитесь своим представлением об ООП? Дейкстра сказал, что эта парадигма была придумана исключительно для разработки оконного интерфейса. Такая одноразовая штука. Мало ли чего он сказал... Если он не понимает ценности наследования, то архитектор из него нулевой. Хотя как алгоритмист он может и впереди многих... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 10:24 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie_модNitro_JunkieМожет все-таки поделитесь своим представлением об ООП? Дейкстра сказал, что эта парадигма была придумана исключительно для разработки оконного интерфейса. Такая одноразовая штука. Мало ли чего он сказал... Если он не понимает ценности наследования, то архитектор из него нулевой. Хотя как алгоритмист он может и впереди многих...а вот тут люди не менее уверенно утверждали что наследование и не нужно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 11:05 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
SergSuper, А че мелочится, тогда уже циклы и функции не нужны, условные и безусловные переходы рулят... Если людям не надо наследование, то это характеризует не его ценность, а самих людей, их уровня как разработчиков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 12:13 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieТак вот в случае частично-рекурсивных функций, отношения это функции, операции - операторы создающие новые функции. Таблицы, функции - это одно множество один тип данных. А объекты все разного типа - видите разницу ? Над элементами одного типа можно строить алгебру, а на элементах разных типов - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 12:31 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieИ надо это затем что декларативное программирование по всем нефункциональным требования значительно превосходит императивное. Схоластика. Набор команд - это тоже декларация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 12:33 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieSergSuper, А че мелочится, тогда уже циклы и функции не нужны, условные и безусловные переходы рулят... Если людям не надо наследование, то это характеризует не его ценность, а самих людей, их уровня как разработчиков.не, ну Вы почитайте, там у людей аргументы были ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 12:34 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieЕсли людям не надо наследование, то это характеризует не его ценность, а самих людей, их уровня как разработчиков. Людям надо и они его давно используют, но только правильно, как конструктор новых типов данных. Посмотрите хотя бы эйфорию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 12:39 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модNitro_JunkieТак вот в случае частично-рекурсивных функций, отношения это функции, операции - операторы создающие новые функции. Таблицы, функции - это одно множество один тип данных. А объекты все разного типа - видите разницу ? Над элементами одного типа можно строить алгебру, а на элементах разных типов - нет. Объекты как раз все одного типа - мы ассоциируем их с номерами, то есть просто натуральными числами (забыли про наследование, оно в построении алгебры роли не играет). Функции соответственно интерфейсы объектов (множественные). То есть никакой разницы... ЗЫ. Функции в частично рекурсивных функциях могут иметь значение undef (null по русски). То есть с точки зрения классических типов данных (программирования), если функции передается объект не того типа, то она просто возвращает undef. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 12:46 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модNitro_JunkieЕсли людям не надо наследование, то это характеризует не его ценность, а самих людей, их уровня как разработчиков. Людям надо и они его давно используют, но только правильно, как конструктор новых типов данных. Посмотрите хотя бы эйфорию. Наследование - это просто направленный граф классов без циклов. Я даже теоретически не понимаю как его можно неправильно использовать. Может в 2 словах все-таки объясните в чем там суть, а то он все-таки ну очень не распространен, что человеческое описание найти тяжело... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 12:54 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
SergSuperNitro_JunkieSergSuper, А че мелочится, тогда уже циклы и функции не нужны, условные и безусловные переходы рулят... Если людям не надо наследование, то это характеризует не его ценность, а самих людей, их уровня как разработчиков.не, ну Вы почитайте, там у людей аргументы были Там аргументы сводятся к тому что входит ли вообще в ООП наследование... :) Без наследования оно не то что не нужно, оно вообще не имеет смысла.... Но для людей даже википедия не аргумент, спорить в таком случае о чем бы то ни было бесполезно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 12:59 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модNitro_JunkieИ надо это затем что декларативное программирование по всем нефункциональным требования значительно превосходит императивное. Схоластика. Набор команд - это тоже декларация. Я на первой странице уже писал определение. Вот определение из википедии: Императи́вное программи́рование — это парадигма программирования, которая, в отличие от декларативного программирования, описывает процесс вычисления в виде инструкций, изменяющих состояние программы. То есть это список комманд выполняемых по очереди + как минимум внутреннее состояние. В декларативном программировании никаких порядков выполнения, ни внутреннего состояния, нету по определению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 13:02 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieНо для людей даже википедия не аргумент, спорить в таком случае о чем бы то ни было бесполезно... Ну если для Вас википедия аргумент - есть другой ООП . И как бы даже более изначальный :) И наследование в нем появилось не сразу (да и собственно к ООП-у относится несколько перпендикулярно). Потом уже раскрученный бренд ООП просто стырили Если серьезно, Страуструп много и вдумчиво смотрел и на Смоллток и на Симулу (в основном на последнюю). Всем оно ему нравилось, кроме производительности. И пришла ему в голову МЫСЛЬ сделать ЭТО, но в компиляторе. Но сделать это в компиляторе ТАКЖЕ было технически невозможно. Потом то что сделали стали называть ООП-ом, но с ООП-ом Смолтока оно различается как Небо и Земля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 13:24 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan), Меня очень слабо интересует этимология этого термина. Я понимаю, что в самом названии про наследование ничего не говорится. И общего института стандартизации терминологий к сожалению нету, поэтому единственный вариант конструктивно общаться это аппелировать к общепризнанным понятием, для описания которых в частности и создавалась википедия. Это возможно не истина в последней инстанции, но ничего более объективного на данный момент придумать тяжело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 13:34 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieGluk (Kazan), Меня очень слабо интересует этимология этого термина. Я понимаю, что в самом названии про наследование ничего не говорится. И общего института стандартизации терминологий к сожалению нету, поэтому единственный вариант конструктивно общаться это аппелировать к общепризнанным понятием, для описания которых в частности и создавалась википедия. Это возможно не истина в последней инстанции, но ничего более объективного на данный момент придумать тяжело. Дело не в этимологии. То что общепринято называть ООП, к ООП имеет весьма отдаленное отношение. И следует отдавать себе отчет как в этом, так и в том почему это произошло. В любом случае, у меня нет желания спорить на эту тему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 14:03 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieОбъекты как раз все одного типа Разных классов ? Хе-хе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 14:46 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie Может в 2 словах все-таки объясните в чем там суть В двух слова: type xxx (x int, y string) новый тип xxx сконструирован (унаследован) из типов int и string операции над int можно применять к части x типа xxx операции над string можно применять к части y типа xxx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 14:53 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie Вот определение из википедии: Это бред. Даже не хочется объяснять, почему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 14:55 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) +++++ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 14:57 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модNitro_JunkieОбъекты как раз все одного типа Разных классов ? Хе-хе Нет, одного класса \ типа (в данном контексте это одно и то же)... Я же написал в скобках что для построения алгебры типы и классы не нужны... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 15:01 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модNitro_Junkie Может в 2 словах все-таки объясните в чем там суть В двух слова: type xxx (x int, y string) новый тип xxx сконструирован (унаследован) из типов int и string операции над int можно применять к части x типа xxx операции над string можно применять к части y типа xxx И чем такой подход отличается от обычного множественного наследования? (как в C++ например)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 15:01 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модNitro_Junkie Вот определение из википедии: Это бред. Даже не хочется объяснять, почему. Это определение, а не утверждение. Готов выслушать ваше определение императивного программирования (а также узнать откуда вы его взяли). P.S. : Английская wiki : In computer science, imperative programming is a programming paradigm that describes computation in terms of statements that change a program state. Думаю в немецком, китайском и иже с ними сообществами определения почти такие же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 15:05 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)Nitro_JunkieGluk (Kazan), Меня очень слабо интересует этимология этого термина. Я понимаю, что в самом названии про наследование ничего не говорится. И общего института стандартизации терминологий к сожалению нету, поэтому единственный вариант конструктивно общаться это аппелировать к общепризнанным понятием, для описания которых в частности и создавалась википедия. Это возможно не истина в последней инстанции, но ничего более объективного на данный момент придумать тяжело. Дело не в этимологии. То что общепринято называть ООП, к ООП имеет весьма отдаленное отношение. И следует отдавать себе отчет как в этом, так и в том почему это произошло. В любом случае, у меня нет желания спорить на эту тему. То есть вы считаете, что есть правильное определение ООП. А то которое в Wikipedia сейчас, оно неправильное . Тогда может скажете как правильно называется то что сейчас в Wikipedia под названием ООП (и то что я описывал в предыдущих постах про ООП), и я буду употреблять именно этот термин. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 15:10 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieЯ же написал в скобках что для построения алгебры типы и классы не нужны... Попробуйте построить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 15:38 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieИ чем такой подход отличается от обычного множественного наследования? (как в C++ например)? Конструктор типов мощнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 15:40 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieГотов выслушать ваше определение императивного программирования Еще раз повторю - нет принципиальной разницы между императивным, декларативным , функциональным и пр. программированием. Текст любой программы можно рассматривать как декларацию. Термины введены условно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 15:42 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модNitro_JunkieЯ же написал в скобках что для построения алгебры типы и классы не нужны... Попробуйте построить Я же вам привел уже пример - частично-рекурсивные функции. Это чистая объектная алгебра. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 15:46 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модNitro_JunkieГотов выслушать ваше определение императивного программирования Еще раз повторю - нет принципиальной разницы между императивным, декларативным , функциональным и пр. программированием. Текст любой программы можно рассматривать как декларацию. Термины введены условно. _мод, вы так говорите, как будто вы лично придумали эту классификацию и все термины... Термины введены достаточно конкретно, читаем тут : http://%5Dhttp://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%80%D0%B0%D0%B4%D0%B8%D0%B3%D0%BC%D0%B0_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%5B/url] http://en.wikipedia.org/wiki/Programming_paradigm Английская версия лучше структурирована, хотя и далеко не идельно (там наглядное дерево есть справа). Но в принципе и русская сойдет. P.S.: Следуя вашей логике, нет никакой разницы между SQL, C++ и Prolog... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 15:56 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модNitro_JunkieИ чем такой подход отличается от обычного множественного наследования? (как в C++ например)? Конструктор типов мощнее Чем мощнее? Тока не надо отвечать, чем множественное наследование. Я вижу что именуется каждое "ребро" наследования. То есть можно 2 раза наследовать один и тот же класс, но зачем это надо честно говоря не понятно (противоречит всей логике интерфейсов). А в остальном C++ лучше, он сам определяет по какому ребру идти если путь однозначный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 16:06 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Коллеги, я думаю вы через чур сильно накинулись на Nitro_Junkie, и всё чаще приводите ошибочные доводы. Идея Nitro_Junkie понятна и намерения только приветствуются. Лично я считаю, что текущие языки а-ля СИ слишком просто позволяют программисту делать ошибки, а как известно лучшая ИС та, что не позволяет пользователю ошибаться. Одна только слабая типизация сводит все преимущества, например, PHP, при написании приложений корпоративного уровня в хлам (да, звучит дико, но многие пишут корпоративные приложения на этом языке), получается типичный го.но-код. И выражения типа "кривые руки" здесь не канает. Nitro_Junkie, посоветуйте, пожалуйста, ссылочку на ваш вкус, где можно ознакомиться более подробно либо с вашей концепцией более детально, либо с чужими аналогичными. Я вот понимаю, что декларативный SQL - всего лишь оператор преобразования, на вход подаёшь одно множество, на выходе - получаешь другое. Действительно, тут не нужно хранить никакие состояния и описывать алгоритм, - для оператора достаточно описать закон преобразования. Но вот как на одних операторах преобразования построить полностью бизнес-приложение пока представляю плохо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 16:54 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieGluk (Kazan)Nitro_JunkieGluk (Kazan), Меня очень слабо интересует этимология этого термина. Я понимаю, что в самом названии про наследование ничего не говорится. И общего института стандартизации терминологий к сожалению нету, поэтому единственный вариант конструктивно общаться это аппелировать к общепризнанным понятием, для описания которых в частности и создавалась википедия. Это возможно не истина в последней инстанции, но ничего более объективного на данный момент придумать тяжело. Дело не в этимологии. То что общепринято называть ООП, к ООП имеет весьма отдаленное отношение. И следует отдавать себе отчет как в этом, так и в том почему это произошло. В любом случае, у меня нет желания спорить на эту тему. То есть вы считаете, что есть правильное определение ООП. А то которое в Wikipedia сейчас, оно неправильное . Тогда может скажете как правильно называется то что сейчас в Wikipedia под названием ООП (и то что я описывал в предыдущих постах про ООП), и я буду употреблять именно этот термин. Я считаю, что есть первоначальное определение (объекты обменивающиеся сообщениями). Правильное оно или нет, не мне судить (этот вопрос очень далек от сферы моих интересов). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 16:54 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie P.S.: Следуя вашей логике, нет никакой разницы между SQL, C++ и Prolog... Есть разница :) Первый не Тьюринг-полный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 16:56 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieЯ же вам привел уже пример - частично-рекурсивные функции. Это чистая объектная алгебра. Как с помощью функций получить объект неописанного класса ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 17:28 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieP.S.: Следуя вашей логике, нет никакой разницы между SQL, C++ и Prolog... Между тьюринг-полными нет. Семантику любого ЯП можно описать на лиспе. Если описания совпадут то языки эквивалентны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 17:30 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieЧем мощнее? Параметризованные типы. Т.е. конструктор - это функция с параметрами. А ООП-наследование - простое копирование ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 17:32 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
web_foxКоллеги, я думаю вы через чур сильно накинулись на Nitro_Junkie, и всё чаще приводите ошибочные доводы. Идея Nitro_Junkie понятна и намерения только приветствуются. Лично я считаю, что текущие языки а-ля СИ слишком просто позволяют программисту делать ошибки, а как известно лучшая ИС та, что не позволяет пользователю ошибаться. Одна только слабая типизация сводит все преимущества, например, PHP, при написании приложений корпоративного уровня в хлам (да, звучит дико, но многие пишут корпоративные приложения на этом языке), получается типичный го.но-код. И выражения типа "кривые руки" здесь не канает. Nitro_Junkie, посоветуйте, пожалуйста, ссылочку на ваш вкус, где можно ознакомиться более подробно либо с вашей концепцией более детально, либо с чужими аналогичными. Я вот понимаю, что декларативный SQL - всего лишь оператор преобразования, на вход подаёшь одно множество, на выходе - получаешь другое. Действительно, тут не нужно хранить никакие состояния и описывать алгоритм, - для оператора достаточно описать закон преобразования. Но вот как на одних операторах преобразования построить полностью бизнес-приложение пока представляю плохо. Спасибо за понимание, а то начинает казаться что я что-то совсем не то говорю. Ситуация в том, что проект длится около 2-х лет и только сейчас мы вышли на законченный вариант этой свойство-ориентированной платформы в базовой постановке (бета-версию можно сказать). Честно говоря не ожидал что получится настолько цельная парадигма разработки, но результат превзошел даже мои ожидания. Соответственно с месяц назад мы приступили к описанию парадигмы и сейчас оно готово процентов на 40. В него также войдут презентация, видео с процессом разработки и несколько примеров систем (от самого простого, до достаточно "навернутого")... По плану завершить это все через месяц полтора, на практике думаю все затянется до 2-3 месяцев. После этого начнем продвижение в том числе в нете с целью поиска партнеров, инвесторов, клиентов и т.п. На этот форум ессно ссылку тоже закину :) На самом деле "выходить в свет" раньше окончания этого процесса изначально бесмысленно, и здесь эту тему я создал, чтобы уточнить конкретно интересующий вопрос по стандартам SQL... Потом правда решил повкидывать несколько общих идей, последить за реакцией с целью по другому может расставить акценты в описании, но как то все ушло слишком даже не в ту сторону. Что касается аналогичных концепций, то к сожалению, а может и к счастью, то ничего близкого во всяком случае нам не встречалось (а рынок мы мониторили весьма тщательно). Я понимаю возможный (даже сказал бы неизбежный) скепсицизм относительно такого рода высказываний, но чем больше приходится общаться с разработчиками различного уровня, тем лучше я понимаю почему программирование существует в том виде, в котором оно есть сейчас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 17:34 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)Nitro_Junkie P.S.: Следуя вашей логике, нет никакой разницы между SQL, C++ и Prolog... Есть разница :) Первый не Тьюринг-полный Вы начало темы читали? SQL-1999 как раз Тьюринг-полный... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 17:35 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модNitro_JunkieЯ же вам привел уже пример - частично-рекурсивные функции. Это чистая объектная алгебра. Как с помощью функций получить объект неописанного класса ? Забыли про классы. Мы говорим про объектную алгебру. В данной логике класс это производное понятие. Поясню на примере. То есть если у нас есть функция Объем_двигателя(объект1). То Объем_двигателя(Роза1) = undef. Соответственно Объем_двигателя(митсубиси4332) = объем4 . Класс Авто всего лишь обозначают что для всех объектов не этого класса, функция Объем_двигателя всегда будет давать undef (что впрочем не значит что для Авто она не будет undef). То есть объектную логику можно рассматривать в отрыве от классов, а последние рассматривать как просто характеристику функций. ЗЫ: Если кому-нибудь не _моду, понятен принцип что я написал здесь и выше, напишите, реально интересно... а то мне это очевидно, но такое ощущение что мне одному :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 17:46 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieGluk (Kazan)Nitro_Junkie P.S.: Следуя вашей логике, нет никакой разницы между SQL, C++ и Prolog... Есть разница :) Первый не Тьюринг-полный Вы начало темы читали? SQL-1999 как раз Тьюринг-полный... А вот это еще стоит доказать кстати, вику и надписи на заборах я тоже не читаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 17:55 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieМы говорим про объектную алгебру. Да нет никакой объектной алгебры. То что описали - обычный язык без контроля типов, тот же питон ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 18:00 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модNitro_JunkieМы говорим про объектную алгебру. Да нет никакой объектной алгебры. То что описали - обычный язык без контроля типов, тот же питон Да нет никакой реляционной алгебры. То что описали - обычный язык запросов, тот же SQL. PS: кстати в питоне есть оператор минимизации аргумента? И то что я описал это декларативный язык, а питон - императивный (по моему определению во всяком случае)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 18:11 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)А вот это еще стоит доказать кстати, вику и надписи на заборах я тоже не читаю На раз два доказывается : функция выбора и следование - обычные выражения оператор подстановки - операция Join оператор примитивной рекурсии - рекурсивные CTE оператор минимизации рекурсии- GROUP BY с аггрегирующей функцией MAX Значит эквивалентно частично-рекурсивным функциям, значит SQL - тьюринг-полный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 18:16 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модNitro_JunkieЧем мощнее? Параметризованные типы. Т.е. конструктор - это функция с параметрами. А ООП-наследование - простое копирование _мод, не поймите меня неправильно, но у меня от ваших постов мозги клинит. Вы как будто хотите не объяснить, а еще больше запутать. То есть в вашем примере x это не обозначение ребра наследования, а типа generic'а в Java? Но толку наследоваться от generic'а если интерфейсов вы все равно не знаете. Можно привести пример что можно сделать с параметризованными типами и нельзя сделать логикой наследования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 18:22 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модNitro_JunkieP.S.: Следуя вашей логике, нет никакой разницы между SQL, C++ и Prolog... Между тьюринг-полными нет. Семантику любого ЯП можно описать на лиспе. Если описания совпадут то языки эквивалентны Железно. Можно и на асемблере, а еще круче на машине Тьюринга, назад к земле так сказать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 18:24 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie_модNitro_JunkieМы говорим про объектную алгебру. Да нет никакой объектной алгебры. То что описали - обычный язык без контроля типов, тот же питон Да нет никакой реляционной алгебры. То что описали - обычный язык запросов, тот же SQL. PS: кстати в питоне есть оператор минимизации аргумента? И то что я описал это декларативный язык, а питон - императивный (по моему определению во всяком случае)... А Вы можете объяснить чем операция SQL delete from SomeTable более декларативна чем допустим функция WinAPI DestroyWindow ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 18:26 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie, тогда я вам советую не тратить здесь особо время, а всё-таки довести проект до контрольной точки ;) авторЗЫ: Если кому-нибудь не _моду, понятен принцип что я написал здесь и выше, напишите, реально интересно... а то мне это очевидно, но такое ощущение что мне одному :) Да всё тут понятно. Только трудно представить пользу. Если бы какой-то конкретный реальный пример в двух вариантах (1. как обычно программируют и 2. как предлагается), чтобы и отказоустойчивость такого подхода продемонcтрировать и юзабилити с точки зрения интуитивнопонятности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 18:27 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
web_fox, Вот это все будет, когда будут примеры с описанием... Но в общем да, что-то я многовато потратил на эти абстрактные споры, пора завязывать :) Так что думаю через какое-то время продолжим начатый разговор, но уже в другой теме... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2009, 18:38 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieGluk (Kazan)А вот это еще стоит доказать кстати, вику и надписи на заборах я тоже не читаю На раз два доказывается : функция выбора и следование - обычные выражения оператор подстановки - операция Join оператор примитивной рекурсии - рекурсивные CTE оператор минимизации рекурсии- GROUP BY с аггрегирующей функцией MAX Значит эквивалентно частично-рекурсивным функциям, значит SQL - тьюринг-полный. простите, но под доказательством я привык понимать нечто более формальное Вы думаете , что SQL стал Тьюринг-полным, благодаря введению CTE Я сомневаюсь в том что Вы правы. Развейте мои сомнения. Кстати, даже если он стал Тьюринг-полным, это еще не значит, что на нем удобно программировать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2009, 08:08 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_Junkie Железно. Можно и на асемблере, а еще круче на машине Тьюринга, назад к земле так сказать. Насколько я понял, Вы как раз к этому и призываете: - SQL стал Тьюринг-полным (пусть даже так) - давайте на нем (или на чем то похожем чего Вы не озвучили) программировать ВСЕ - будет Щастье и мы победим я что-то упустил ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2009, 08:14 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieМожно привести пример что можно сделать с параметризованными типами и нельзя сделать логикой наследования. Я не силен в эйфории. Но параметризованный тип - это вычислимая функция - на наследование не похоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2009, 09:59 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)- давайте на нем (или на чем то похожем чего Вы не озвучили) программировать ВСЕ Кстати, хороший вопрос. Например PL/SQL достаточно, чтобы написать на нем ВСЕ (при условии, что GUI делается на IDE). Но PL/SQL далеко не идеален. А вот можно ли придумать идеальный язык, на котором можно написать ВСЕ, как на PL/SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2009, 10:03 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
_модGluk (Kazan)- давайте на нем (или на чем то похожем чего Вы не озвучили) программировать ВСЕ Кстати, хороший вопрос. Например PL/SQL достаточно, чтобы написать на нем ВСЕ (при условии, что GUI делается на IDE). Но PL/SQL далеко не идеален. А вот можно ли придумать идеальный язык, на котором можно написать ВСЕ, как на PL/SQL. Но он то хочет на SQL-е без всяких PL, вот в чем фикус пикус :( С учетом того, что и более достойные кандидаты (LISP, Haskell) за продолжительное время не получили широкого распространения (не в узком кругу лиц), желание безусловно похвальное, но сомнительное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2009, 10:21 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan), Вы передергиваете, я говорил про ВСЕ бизнес-решения (или информационные системы в общем случае). Про написание драйверов, игрушек и т.п. на SQL речи не шло. Впрочем речь шла не о чистом SQL (который во многом ущербен), а о его расширении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2009, 10:51 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Nitro_JunkieGluk (Kazan), Вы передергиваете, я говорил про ВСЕ бизнес-решения (или информационные системы в общем случае). Про написание драйверов, игрушек и т.п. на SQL речи не шло. Впрочем речь шла не о чистом SQL (который во многом ущербен), а о его расширении. Давай будем политкорректны я утрирую но даже если речь идет исключительно о ВСЕХ бизнес-решениях, меня терзают смутные сомнения. Декларативное программирование это очень хорошо (теоретически), но на практике приживается с трудом. Сие означает, что простым смертным пользоваться им неудобно . А пользователь всегда прав ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2009, 11:30 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)Декларативное программирование это очень хорошо (теоретически), но на практике приживается с трудом. Сие означает, что простым смертным пользоваться им неудобно . А пользователь всегда прав Скажем так, простым пользователям (не программистам) пользоваться любой декларативной парадигмой проще чем связкой Java\C# + SQL. Во всяком случае ни одного такого пользователя не встречал, а в нашем проекте все приложение создают бизнес-аналитики (люди для которых программирование закончилось одним уроком информатики в 8 классе) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2009, 11:46 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)Но он то хочет на SQL-е без всяких PL, вот в чем фикус пикус :( Не, без PL не получится, плавали, знаем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2009, 11:47 |
|
||
|
SQL - полнота по тьюрингу
|
|||
|---|---|---|---|
|
#18+
iapNitro_JunkieВезде упоминается что SQL полон только With CTE и Windowing. При этом Windowing можно реализовать вложенными подзапросами . Соответственно кто ошибается, я или они?IMHO, не всегда. К примеру, если в таблице без PK имеются неотличимые строки, попробуйте-ка их пронумеровать в стиле ROW_NUMBER()OVER() подзапросами. Не уверен, правда, что я это всё корректно "по-Тьюрингу" написал. Может, и не к месту... Оно? with t1 as ( select * from (values (1,'aaa'),(1,'bbb'),(1,'ccc')) a (f1, f2) ), t11 as ( select count(*) cnt from t1 ), t2 as ( select 1 id union all select t2.id + 1 from t2 where t2.id < (select cnt from t11) ) select t2.id, t13.f1, t13.f2 from t2 cross apply ( select top 1 f1, f2 from (select top (t2.id * 1) f1, f2 from t1 t11 order by f1 asc, f2 asc ) t12 order by f1 desc, f2 desc ) t13 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2009, 19:15 |
|
||
|
|

start [/forum/topic.php?all=1&fid=35&tid=1552855]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
146ms |
get tp. blocked users: |
1ms |
| others: | 11ms |
| total: | 241ms |

| 0 / 0 |
