Re[4]: Чего не хватает... А что лишнего?
От: dshe  
Дата: 09.12.05 09:49
Оценка:
Здравствуйте, Mystic, Вы писали:

M>Тут возникает небольшой ньюанс. Используя Common SQL мы так и не уходим от синтаксиса LIST, который, как мне кажется, уступает стандартному синтаксису SQL.


M>Вопрос не в том, можно или нельзя это реализовать средствами языка. Вопрос в том, чтобы это можно было реализовать в наиболее элегантной форме. Если взять тот же синтаксис MATLAB, то любому выражению мз него можно записать аналог на C++. Но читабельность (восприятие) этого аналога будет сложнее. Например, двоеточие мы вынуждены будем заменить на некоторую константу, для оперций .* и .+ у нас не найдется операторов, ... Записывая это в LISP-е мы уйдем от привычной записи, когда одну формулу можно охватить одним взглядом без разбора нагромождения из скобочек, ...


Полностью согласен.

Приведу еще цитату (Не сочтите за навязчивую рекламу IP)
http://softwarevoices.com/

For a long time there's been a style of software development that seeks to describe software systems using a collection of domain specific languages. You see this in the Unix tradition of 'little languages' which generate code via lex and yacc; you see it in the Lisp community with languages developed inside Lisp, often with the help of Lisp's macros. Such approaches are much liked by their advocates, but this style of thinking hasn't caught on as much as many of these people would like.

In the last few years there's been an attempt to support this style of development through a new class of software tool. The earliest and best known of these is Intentional Programming — originally developed by Charles Simonyi while at Microsoft. However there are other people doing similar things too, generating enough momentum to create some interest in this approach.


И еще это: http://www.cse.unsw.edu.au/~cs3141/ip.asf
--
Дмитро
Re[4]: Чего не хватает... А что лишнего?
От: aik Австралия  
Дата: 09.12.05 10:04
Оценка:
Здравствуйте, Cyberax, Вы писали:

>> M>>Вот читаешь ветки: чего не хватает, чего не хватает... А почему

>> никто не спросит: что лишнего?
>> _W>RAII в С++ совершенно лишний. Потому что каждая компания пишет свой
>> Reflection и RAII.
>> А что такое "RAII"?
C>Resource Acquisition Is Initialization — захват ресурсов производится в
C>конструкторе, а их освобождение в деструкторе. Благодаря
C>детерминированности C++ у нас получается удобное средство управления
C>дефецитными ресурсами (сетевыми соединениями, курсорами в БД и т.п.).

Поооонял Тогда согласен с _Winnie, ненужная штука. Деструкторы — это да, тема.
Re[5]: Чего не хватает... А что лишнего?
От: dshe  
Дата: 09.12.05 10:19
Оценка:
Здравствуйте, Mamut, Вы писали:

M>>Тут возникает небольшой ньюанс. Используя Common SQL мы так и не уходим от синтаксиса LIST, который, как мне кажется, уступает стандартному синтаксису SQL. Например, необходимость квотирования нужных фрагментов, запись арифметических выражений и т. д. Скажем последний select как для меня гораздо более вразумительнее выглядит в виде:


M>>
select customer, item, quantity from header, detail where header_id = detail_id


M>Тогда можно запутаться в том, что есть язык, а что является настройкой к нему. Тот же CLSQL, возможно, можно было сделать в стиле LOOP


M>С другой стороны, а нужна ли нам такая выразительность? Когда не понятно — что код, а что — ждополнительные конструкции языка


Дело в том, что и то, и то код. Только один это General Purpose, а другой Domain Specific. И разделение это довольно условное и оно в общем-то, и не нужно. Разве кого-то смущает, что те функции и классы, которыми вы расширяете язык, выглядят так же, как и функции и классы из стандартной библиотеки?

Нужна ли такая смесь из языков-нотаций? Думаю, нужна. В качестве достоинств можно отметить:

1. возможность правильности использований конструкций Domain Specific нотации так же как и General Purpose. Например, если будет синтаксическая ошибка в SQL запросе, то в большинстве mainstream подходов она проявится в только runtime, хотя могла бы быть обнаружена еще на этапе компиляции. Причем с нормальным Domain Specific диагностическим сообщением.

2. простор для Domain Specific оптимизации. Например, при реализации влоб матриц на C++, умножение и сложение их будет происходить с использованием промежуточной матрицы.
matrix a = x + y * z;

Есть конечно Blitz++, но это скорее исключение.
--
Дмитро
Re[5]: Чего не хватает... А что лишнего?
От: dshe  
Дата: 09.12.05 10:23
Оценка:
Здравствуйте, aik, Вы писали:

>>> А что такое "RAII"?

C>>Resource Acquisition Is Initialization — захват ресурсов производится в
C>>конструкторе, а их освобождение в деструкторе. Благодаря
C>>детерминированности C++ у нас получается удобное средство управления
C>>дефецитными ресурсами (сетевыми соединениями, курсорами в БД и т.п.).

aik>Поооонял Тогда согласен с _Winnie, ненужная штука. Деструкторы — это да, тема.


Так это ж и есть RAII! И ничего в C++ реализовывать не надо, оно там и так есть. Или теперь я чего-то не понял?
--
Дмитро
Re[6]: Чего не хватает... А что лишнего?
От: aik Австралия  
Дата: 09.12.05 10:33
Оценка:
Здравствуйте, dshe, Вы писали:

>>>> А что такое "RAII"?

C>>>Resource Acquisition Is Initialization — захват ресурсов производится в
C>>>конструкторе, а их освобождение в деструкторе. Благодаря
C>>>детерминированности C++ у нас получается удобное средство управления
C>>>дефецитными ресурсами (сетевыми соединениями, курсорами в БД и т.п.).
aik>>Поооонял Тогда согласен с _Winnie, ненужная штука. Деструкторы — это да, тема.
D>Так это ж и есть RAII! И ничего в C++ реализовывать не надо, оно там и так есть. Или теперь я чего-то не понял?

Ты нить потерял Мы тут обсуждаем чего лишнего есть в c++. Там еще лишний RTTI и исключения, ну имхо.
Re[7]: Чего не хватает... А что лишнего?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 09.12.05 10:36
Оценка: :)
Здравствуйте, aik, Вы писали:

aik>>>Поооонял Тогда согласен с _Winnie, ненужная штука. Деструкторы — это да, тема.

D>>Так это ж и есть RAII! И ничего в C++ реализовывать не надо, оно там и так есть. Или теперь я чего-то не понял?

aik>Ты нить потерял Мы тут обсуждаем чего лишнего есть в c++. Там еще лишний RTTI и исключения, ну имхо.


А еще классы, шаблоны, ссылки (чем там еще он от C отличается)
Ребята, если вам достаточно C, то пользуйтесь C, зачем же над C++ изголяться.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[8]: Чего не хватает... А что лишнего?
От: aik Австралия  
Дата: 09.12.05 10:47
Оценка: :)
Здравствуйте, eao197, Вы писали:

aik>>>>Поооонял Тогда согласен с _Winnie, ненужная штука. Деструкторы — это да, тема.

D>>>Так это ж и есть RAII! И ничего в C++ реализовывать не надо, оно там и так есть. Или теперь я чего-то не понял?
aik>>Ты нить потерял Мы тут обсуждаем чего лишнего есть в c++. Там еще лишний RTTI и исключения, ну имхо.
E>А еще классы, шаблоны, ссылки (чем там еще он от C отличается)

Cсылки — да, вполне можно выкинуть, но это очень мелкая фича на самом деле.
С классами — нынче очень уж навороченные схемы с наследованиями, виртуальностью и прочим хламом, можно было б почистить.
Шаблоны — кроме как в STL, слабо понятно зачем нужны. Все можно делать без них, что доказывает Java сообщество изо дня в день. Даже множественного наследования чаще всего не нужно.

E>Ребята, если вам достаточно C, то пользуйтесь C, зачем же над C++ изголяться.


Си экстремально убог и нестрог. Изголяются как раз на C++, делая из него универсальный супер мега перегруженный язык, компилятор к которому так и не написан на все 100%.
Re[9]: Чего не хватает... А что лишнего?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 09.12.05 10:54
Оценка:
Здравствуйте, aik, Вы писали:

aik>Шаблоны — кроме как в STL, слабо понятно зачем нужны. Все можно делать без них, что доказывает Java сообщество изо дня в день.


Настолько хорошо доказывает, что generic-и были таки добавлены в Java 1.5.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[10]: Чего не хватает... А что лишнего?
От: aik Австралия  
Дата: 09.12.05 13:55
Оценка: :))
Здравствуйте, eao197, Вы писали:

aik>>Шаблоны — кроме как в STL, слабо понятно зачем нужны. Все можно делать без них, что доказывает Java сообщество изо дня в день.

E>Настолько хорошо доказывает, что generic-и были таки добавлены в Java 1.5.

Я даже не знаю чего это такое Но добавили (я думаю) скорее из-за пиара "мы ничем не хуже дотнета" (в дотнете уже есть шаблоны?), чем из-за того что это хорошая и полезная фича.
Re[11]: Чего не хватает... А что лишнего?
От: dshe  
Дата: 09.12.05 14:10
Оценка:
Здравствуйте, aik, Вы писали:

aik>Здравствуйте, eao197, Вы писали:


aik>>>Шаблоны — кроме как в STL, слабо понятно зачем нужны. Все можно делать без них, что доказывает Java сообщество изо дня в день.

E>>Настолько хорошо доказывает, что generic-и были таки добавлены в Java 1.5.

aik>Я даже не знаю чего это такое Но добавили (я думаю) скорее из-за пиара "мы ничем не хуже дотнета" (в дотнете уже есть шаблоны?), чем из-за того что это хорошая и полезная фича.


Мысли о том, чтобы добавить Generics в Java, появилась давным давно. Дальним прототипом Java 5 был язык Pizza. И на него оказал влияние отнюдь не C#, а скорее C++ (хотя generics сильно отличаются от C++ template).
--
Дмитро
Re[12]: Чего не хватает... А что лишнего?
От: reductor  
Дата: 09.12.05 14:30
Оценка: 1 (1)
Здравствуйте, dshe, Вы писали:

D>Здравствуйте, aik, Вы писали:


aik>>Здравствуйте, eao197, Вы писали:


aik>>>>Шаблоны — кроме как в STL, слабо понятно зачем нужны. Все можно делать без них, что доказывает Java сообщество изо дня в день.

E>>>Настолько хорошо доказывает, что generic-и были таки добавлены в Java 1.5. :)

aik>>Я даже не знаю чего это такое :) Но добавили (я думаю) скорее из-за пиара "мы ничем не хуже дотнета" (в дотнете уже есть шаблоны?), чем из-за того что это хорошая и полезная фича.


D>Мысли о том, чтобы добавить Generics в Java, появилась давным давно. Дальним прототипом Java 5 был язык Pizza. И на него оказал влияние отнюдь не C#, а скорее C++ (хотя generics сильно отличаются от C++ template).


Нет, на Pizza оказали влияние ML и Haskell
Особенно, если учесть кто его авторы.

Вот человек, ответственный за монады в хаскеле и generics в java и Pizza:
http://homepages.inf.ed.ac.uk/wadler/
Philip Wadler, очень известный Computer Scientist
А так же (GJ & Pizza):
http://lampwww.epfl.ch/~odersky/
Martin Odersky, так же причастный к языку Scala
Re[12]: Чего не хватает... А что лишнего?
От: aik Австралия  
Дата: 09.12.05 14:32
Оценка:
Здравствуйте, dshe, Вы писали:

aik>>>>Шаблоны — кроме как в STL, слабо понятно зачем нужны. Все можно делать без них, что доказывает Java сообщество изо дня в день.

E>>>Настолько хорошо доказывает, что generic-и были таки добавлены в Java 1.5.
aik>>Я даже не знаю чего это такое Но добавили (я думаю) скорее из-за пиара "мы ничем не хуже дотнета" (в дотнете уже есть шаблоны?), чем из-за того что это хорошая и полезная фича.
D>Мысли о том, чтобы добавить Generics в Java, появилась давным давно. Дальним прототипом Java 5 был язык Pizza. И на него оказал влияние отнюдь не C#, а скорее C++ (хотя generics сильно отличаются от C++ template).

Да я не фичу обсуждаю, а причину и время ее реализации.
Re[3]: Чего не хватает... А что лишнего?
От: reductor  
Дата: 09.12.05 14:38
Оценка:
Здравствуйте, Mystic, Вы писали:

M>Здравствуйте, reductor, Вы писали:


R>>Этому "плагиновому" языку скоро исполнится 50 лет.

R>>Называется Лисп.

M>Представления о LISP-е у меня как раз 50-ти летней давности. Программа состоит из списков, первый элемент списка есть название функции, вторые ее аргументы, ... Как, например, встроить в LISP тот же язык SQL я не вижу :(


Программа представляет из себя уже готовй AST, потому такая странная форма.
Который можно как угодно трансформировать с помощью лисповских макросов.

так что делается просто макрос sql, который знает во что превратить то, что внутри этого выражения.

Вот замечательная книжка по лиспу для самого начального уровня (online & offline): http://www.gigamonkeys.com/book/
Там есть и про макросы и про прочее.

Лисп — это первое, с чем нужно знакомиться при тяге к метапрограммированию.

Для .NET еще есть Nemerle: http://nemerle.org/Main_Page
Но я категорически не советую начинать с него.
Re[4]: Чего не хватает... А что лишнего?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 09.12.05 14:52
Оценка:
Здравствуйте, Mystic, Вы писали:

M>Тут возникает небольшой ньюанс. Используя Common SQL мы так и не уходим от синтаксиса LIST, который, как мне кажется, уступает стандартному синтаксису SQL. Например, необходимость квотирования нужных фрагментов, запись арифметических выражений и т. д. Скажем последний select как для меня гораздо более вразумительнее выглядит в виде:


M>
select customer, item, quantity from header, detail where header_id = detail_id


Посмотри в сторону Ruby (Re[2]: Metaprogramming et al: Ruby?
Автор: eao197
Дата: 18.10.05
) или Smalltalk (Re[3]: Metaprogramming et al: Ruby?
Автор: Andrei N.Sobchuck
Дата: 18.10.05
).
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[4]: Чего не хватает... А что лишнего?
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 09.12.05 14:59
Оценка:
Здравствуйте, reductor, Вы писали:

R>Лисп — это первое, с чем нужно знакомиться при тяге к метапрограммированию.


У меня тяга не совсем к к метапрограммированию. У меня тяга к созданию компиляторов. Более радикальный подход. Скажем так, чтобы новые возможности в язык можно было вносить не средствами самого языка, а прямой правкой исходников транслятора. Ну и чтобы обеспечить наиболее удобные механизмы как для этого...
Re[5]: Чего не хватает... А что лишнего?
От: reductor  
Дата: 09.12.05 15:14
Оценка:
Здравствуйте, Mystic, Вы писали:

M>Здравствуйте, reductor, Вы писали:


R>>Лисп — это первое, с чем нужно знакомиться при тяге к метапрограммированию.


M>У меня тяга не совсем к к метапрограммированию. У меня тяга к созданию компиляторов. Более радикальный подход. Скажем так, чтобы новые возможности в язык можно было вносить не средствами самого языка, а прямой правкой исходников транслятора. Ну и чтобы обеспечить наиболее удобные механизмы как для этого...


Компилятору метаязыка :)

Я озвучу еще раз: лисповские макросы — это средство расширения компилятора.

С помощью его макросов можно заставить компилятор лиспа компилировать код на С++ или Обероне в Lisp VM

Ну правда в случае с С++ уже конечно смысл это делать малозаметен и сложность очень большая, а вот просто макросы для представления обероновского синтаксиса — думаю, пара часов и готово.

SQL, если его сам по себе не разбирать — это вообще не обсуждается, 3 строчки.
Re[6]: Чего не хватает... А что лишнего?
От: dshe  
Дата: 09.12.05 16:15
Оценка:
Здравствуйте, reductor, Вы писали:

R>Здравствуйте, Mystic, Вы писали:


M>>Здравствуйте, reductor, Вы писали:


R>>>Лисп — это первое, с чем нужно знакомиться при тяге к метапрограммированию.


M>>У меня тяга не совсем к к метапрограммированию. У меня тяга к созданию компиляторов. Более радикальный подход. Скажем так, чтобы новые возможности в язык можно было вносить не средствами самого языка, а прямой правкой исходников транслятора. Ну и чтобы обеспечить наиболее удобные механизмы как для этого...


R>Компилятору метаязыка


R>Я озвучу еще раз: лисповские макросы — это средство расширения компилятора.


R>С помощью его макросов можно заставить компилятор лиспа компилировать код на С++ или Обероне в Lisp VM


И что, неужели все это можно сделать без Lots of Irritating Superfluous Parentheses?
--
Дмитро
Re[7]: Чего не хватает... А что лишнего?
От: reductor  
Дата: 09.12.05 16:41
Оценка: 8 (1)
Здравствуйте, dshe, Вы писали:

R>>Компилятору метаязыка :)

R>>Я озвучу еще раз: лисповские макросы — это средство расширения компилятора.
R>>С помощью его макросов можно заставить компилятор лиспа компилировать код на С++ или Обероне в Lisp VM
D>И что, неужели все это можно сделать без Lots of Irritating Superfluous Parentheses? :)

эти Irritating Superfluous Parentheses в лиспе лишь показывают _во что_ парсятся программы.
А из чего — не имеет никакого значения.
Чтобы указать из чего — достаточно написать макрос.

Претензии к скобочкам есть только у тех, кто не пробовал нормально на лиспе программировать.
если они такие irritating, то откуда берется вся эта любовь к лиспу у тех, кто попрограммировал на нем хотя бы немного.

код на _стандартном_ Common Lisp, использующий встроенный макрос (loop):
(loop for i from 1 to 100
      if (evenp i)
        minimize i into min-even and 
        maximize i into max-even and
        unless (zerop (mod i 4))
          sum i into even-not-fours-total
        end
        and sum i into even-total
      else
        minimize i into min-odd and
        maximize i into max-odd and
        when (zerop (mod i 5)) 
          sum i into fives-total
        end
        and sum i into odd-total
      do (update-analysis min-even
                          max-even
                          min-odd
                          max-odd
                          even-total
                          odd-total
                          fives-total
                          even-not-fours-total))
Re[8]: Чего не хватает... А что лишнего?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 09.12.05 18:35
Оценка:
Здравствуйте, reductor, Вы писали:

R>Претензии к скобочкам есть только у тех, кто не пробовал нормально на лиспе программировать.

R>если они такие irritating, то откуда берется вся эта любовь к лиспу у тех, кто попрограммировал на нем хотя бы немного.

Про Лисп здесь недавно было две большие темы: Metaprogramming et al
Автор:
Дата: 09.07.05
и Lisp
Автор: fionbio
Дата: 12.07.05
. Интересны, например, были результаты задачи из Re: Lisp
Автор: AndrewVK
Дата: 13.07.05
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Чего не хватает... А что лишнего?
От: pvgoran Россия  
Дата: 10.12.05 12:51
Оценка:
Здравствуйте, beroal, Вы писали:

M>>Собственно говоря, насколько жизнеспособна идея создания некоторого плагинового языка программирования? Т. е. написал плагин --- получил некое расширение языка... Что по вашему мнению, является "лишним" в любимых Вами языках программирования, что бы можно было заменить такими плагинами? Какими свойствами должен обладать "минимальный" язык? Насколько вы допускаете для себя идею начинать каждый конкретный с адаптации конкретного языка программирования под нужды проекта? Пугает ли вас то, что в крупном проекте может использоваться несколько адаптаций (каждся для своей части)?

B>Я слышал про похожий язык программирования — TCL (ещё известно сочетание TCL/TK — вместе с GUI библиотекой). В TCL даже для математических формул отдельный синтаксис, не встроенный в язык. Нет встроенных массивов. Но больше ничего сказать не могу, близко не знаком. На мой взгляд, ничего интересного у них не получилось.

Не согласен, что TCL — это "оно".

У TCL просто "минималистичный" синтаксис, а так — довольно обычный язык, со своей культурой, типичными паттернами и т.п.. Для "plug-in'ности" в нем нет и, видимо, не планировалось нормальной поддержки — хотя DSL он делать позволяет (я познакомился с TCL при изучении графического движка The Nebula Device, в котором TCL использовался для скриптов и на его основе был сделан язык описания проектов).
... << RSDN@Home 1.1.4 stable rev. 510>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.