Re[3]: Чего не хватает... А что лишнего?
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 09.12.05 08:44
Оценка: 1 (1) +1
Здравствуйте, Mamut, Вы писали:

Q>>Все было изобретено вместе с Лисп. То, что ты хочешь, это сложные макросы, которые есть в Лиспе. Я не хочу сказать, что они используются именно так, как ты сказал, но реализовать с их помощью такую схему довольно просто.


M>Пример для CLSQL:

M>
M>(with-transaction
M>        ()
M>    (insert-records :into [header]
M>                    :attributes '([id] [customer])
M>                    :values '(2 "Mary Smith"))
M>    (insert-records :into [detail]
M>                    :attributes '([id] [item] [quantity])
M>                    :values '(2 "BMW" 3)))
                
M>(select [customer] [item] [quantity] :from '([header] [detail])
M>        :where [= [header id] [detail id]])
M>


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

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


Вопрос не в том, можно или нельзя это реализовать средствами языка. Вопрос в том, чтобы это можно было реализовать в наиболее элегантной форме. Если взять тот же синтаксис MATLAB, то любому выражению мз него можно записать аналог на C++. Но читабельность (восприятие) этого аналога будет сложнее. Например, двоеточие мы вынуждены будем заменить на некоторую константу, для оперций .* и .+ у нас не найдется операторов, ... Записывая это в LISP-е мы уйдем от привычной записи, когда одну формулу можно охватить одним взглядом без разбора нагромождения из скобочек, ...
Re: Чего не хватает... А что лишнего?
От: reductor  
Дата: 08.12.05 17:41
Оценка: +2
Здравствуйте, Mystic, Вы писали:


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



Этому "плагиновому" языку скоро исполнится 50 лет.
Называется Лисп.
Re[10]: Чего не хватает... А что лишнего?
От: aik Австралия  
Дата: 09.12.05 13:55
Оценка: :))
Здравствуйте, eao197, Вы писали:

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

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

Я даже не знаю чего это такое Но добавили (я думаю) скорее из-за пиара "мы ничем не хуже дотнета" (в дотнете уже есть шаблоны?), чем из-за того что это хорошая и полезная фича.
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))
Чего не хватает... А что лишнего?
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 08.12.05 16:49
Оценка: 3 (1)
Вот читаешь ветки: чего не хватает, чего не хватает... А почему никто не спросит: что лишнего?

Когда Д. Кнут разрабатывал систему TeX, то впоследствии честно признавался, что ставил своей целью написать программу, которая бы удовлетворила бы 95% процентов пользователей. Как он предполагал, остальные 5% пользователей просто внесут извенения в исходный текст TeX так, чтобы он поддерживал необходимые возможности (например, сочетание английского (слева направо) и арабского (справа налево) языков, ...)

Случилось однако так, что в саму систему TeX никто изменений вносить не стал, и Леймпорт при разработке LaTeX использовал только средства самого TeX.

Я иногда мечтаю о некоторой подобной схеме... Если у меня математическое приложение, то даже с учетом перегрузки операций библиотека для работы с матрицами будет, как мне кажется, уступать специализированым возможностям MATLAB. Получается что перегрузка операций лучше чем ничего, но занимает как бы промежуточную нишу. В ряде приложений она не нужна, в ряде приложений лучше MATLAB и где-то посередке располагается библиотека для работы с матрицами с использованием перегруженых операций. Или другой пример. При разработке приложений, работающих с БД, часто не хватает возможности элегантно встроить SQL-операторы в используемый язык программирования. Скажем синтаксис

function GroupSize(GroupId: Integer): Integer;
sql
  SELECT COUNT(*) FROM STUDENTS WHERE GROUP_ID = GroupId
end;


был бы намного полезнее, чем возможность ассемблерных вставок. И т. д. и т. п.

Реализовать это можно было бы как некую надстройку, позволяющую добавлять свой язык для блоков кода (asm..end, sql..end, math..end, ...). Вот собственно и все.

Собственно говоря, насколько жизнеспособна идея создания некоторого плагинового языка программирования? Т. е. написал плагин --- получил некое расширение языка... Что по вашему мнению, является "лишним" в любимых Вами языках программирования, что бы можно было заменить такими плагинами? Какими свойствами должен обладать "минимальный" язык? Насколько вы допускаете для себя идею начинать каждый конкретный с адаптации конкретного языка программирования под нужды проекта? Пугает ли вас то, что в крупном проекте может использоваться несколько адаптаций (каждся для своей части)?
Re[3]: Чего не хватает... А что лишнего?
От: Cyberax Марс  
Дата: 09.12.05 09:24
Оценка: 1 (1)
aik wrote:

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

> никто не спросит: что лишнего?
> _W>RAII в С++ совершенно лишний. Потому что каждая компания пишет свой
> Reflection и RAII.
> А что такое "RAII"?

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

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
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: Чего не хватает... А что лишнего?
От: aik Австралия  
Дата: 08.12.05 16:57
Оценка: -1
Здравствуйте, Mystic, Вы писали:

M>Собственно говоря, насколько жизнеспособна идея создания некоторого плагинового языка программирования?


Никак не жизнеспособная. Даже для одного популярного довольно жестко стандартизированного языка есть куча несовместимых компиляторов. Run-time плагины рулят.
Re: Чего не хватает... А что лишнего?
От: dshe  
Дата: 08.12.05 17:06
Оценка: +1
Здравствуйте, Mystic, Вы писали:

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


Ты об Intentional Programming?
К тому в общем-то оно и идет. Хотя и ооочень медленно.
--
Дмитро
Re: Чего не хватает... А что лишнего?
От: _Winnie Россия C++.freerun
Дата: 09.12.05 07:36
Оценка: +1
Здравствуйте, Mystic, Вы писали:

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


RAII в С++ совершенно лишний. Потому что каждая компания пишет свой Reflection и RAII.
Правильно работающая программа — просто частный случай Undefined Behavior
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[5]: Чего не хватает... А что лишнего?
От: Pzz Россия https://github.com/alexpevzner
Дата: 11.12.05 12:51
Оценка: +1
_Winnie wrote:
>
>>> M>>Вот читаешь ветки: чего не хватает, чего не хватает... А почему
>>> никто не спросит: что лишнего?
>>> _W>RAII в С++ совершенно лишний. Потому что каждая компания пишет свой
>>> Reflection и RAII.
>
> Убейте меня! Я опечатался!
> Вот что я хотел напечатать:
> *RTTI*в С++ совершенно лишний. Потому что каждая компания пишет свой
> Reflection и *RTTI* под свои цели.

Он там не то, чтобы лишний. Он там совершенно unusable. Причем настолько
unusable, что самодельный reflection/RTTI даже не может опираться на
родной как на основу, и существует совершенно независимо от него...
Posted via RSDN NNTP Server 2.0
Re: Чего не хватает... А что лишнего?
От: jedi Мухосранск  
Дата: 08.12.05 17:13
Оценка:
Здравствуйте, Mystic, Вы писали:

M>
function GroupSize(GroupId: Integer): Integer;
M>sql
M>  SELECT COUNT(*) FROM STUDENTS WHERE GROUP_ID = GroupId
M>end;


В общем-то проблема рещена миллион лет назад в ембеддед sql.
Выглядеть буджет где-то так (100% не уверен, давно таким не занимался):

function GroupSize(GroupId: Integer): Integer;
sql
  BEGIN_SQL
    SELECT COUNT(*) FROM STUDENTS WHERE GROUP_ID = GroupId TO :GroupId
  END_SQL 
end;


Реализуется посредством препроцессора который код между BEGIN_SQL/END_SQL парсит и преобразует в вызовы
соответстсвующей либы. Было такое в интербейзе для С (может и в других бд/языках — не интересовался).
Re[2]: Чего не хватает... А что лишнего?
От: jedi Мухосранск  
Дата: 08.12.05 17:22
Оценка:
Здравствуйте, jedi, Вы писали:

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


Сорри:

function GroupSize(GroupId: Integer): Integer;
sql
  BEGIN_SQL
    SELECT COUNT(*) FROM STUDENTS WHERE GROUP_ID = GroupId TO :Result
  END_SQL 
end;
Re: Чего не хватает... А что лишнего?
От: Quintanar Россия  
Дата: 08.12.05 17:33
Оценка:
Здравствуйте, Mystic, Вы писали:

>Реализовать это можно было бы как некую надстройку, позволяющую добавлять свой язык для блоков кода (asm..end, sql..end, math..end, ...). Вот собственно и все.


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


Все было изобретено вместе с Лисп. То, что ты хочешь, это сложные макросы, которые есть в Лиспе. Я не хочу сказать, что они используются именно так, как ты сказал, но реализовать с их помощью такую схему довольно просто.
Опять же, специальные средства OCaml также позволяют достичь этой цели.

Идеальный язык для таких целей — расширенное лямбда исчисление. Оно довольно просто (есть всего несколько сущностей) и вместе с тем черезвычайно эффективно. Собственно, Haskell транслирует сначала свой достаточно сложный синтаксис в промежуточную форму примерно такого вида. Я надеюсь, когда — нибудь будет создана .Functional по аналогии с .NET.

Что касается адаптации языка к проекту, то это тоже к Лисп. Он для этого идеален.
Re[2]: Чего не хватает... А что лишнего?
От: Sinclair Россия https://github.com/evilguest/
Дата: 09.12.05 04:25
Оценка:
Здравствуйте, jedi, Вы писали:
J>Реализуется посредством препроцессора который код между BEGIN_SQL/END_SQL парсит и преобразует в вызовы
J>соответстсвующей либы. Было такое в интербейзе для С (может и в других бд/языках — не интересовался).
Вообще вроде как это является соответствующей частью стандарта SQL. Я не помню точную аббревиатуру. Но возможность встраивать SQL прямо в текст программы была рассмотрена уже очень давно. На практике эта техника так и не прижилась — я точно не знаю, почему. То ли потому, что не позволяет строить динамические запросы, то ли еще что-то мешает.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Чего не хватает... А что лишнего?
От: Mamut Швеция http://dmitriid.com
Дата: 09.12.05 07:11
Оценка:
Q>Все было изобретено вместе с Лисп. То, что ты хочешь, это сложные макросы, которые есть в Лиспе. Я не хочу сказать, что они используются именно так, как ты сказал, но реализовать с их помощью такую схему довольно просто.

Пример для CLSQL:
(with-transaction
        ()
    (insert-records :into [header]
                    :attributes '([id] [customer])
                    :values '(2 "Mary Smith"))
    (insert-records :into [detail]
                    :attributes '([id] [item] [quantity])
                    :values '(2 "BMW" 3)))
                    
(select [customer] [item] [quantity] :from '([header] [detail])
        :where [= [header id] [detail id]])


Ну или вот этот туториал
... << RSDN@Home 1.2.0 alpha rev. 619>>


dmitriid.comGitHubLinkedIn
Re: Чего не хватает... А что лишнего?
От: _Winnie Россия C++.freerun
Дата: 09.12.05 07:37
Оценка:
Здравствуйте, Mystic, Вы писали:

Что касается sql { }, то хороший препроцессор решает.
Либо пишется свой за пару деньков, либо берётся готовый M4.

Либо классически выносим код таких запросов в файл.
Правильно работающая программа — просто частный случай Undefined Behavior
Re[2]: Чего не хватает... А что лишнего?
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 09.12.05 08:28
Оценка:
Здравствуйте, reductor, Вы писали:

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

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

Представления о LISP-е у меня как раз 50-ти летней давности. Программа состоит из списков, первый элемент списка есть название функции, вторые ее аргументы, ... Как, например, встроить в LISP тот же язык SQL я не вижу
Re[3]: Чего не хватает... А что лишнего?
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 09.12.05 08:30
Оценка:
Здравствуйте, Mystic, Вы писали:

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


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

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

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


Не в том порядке прочитал...
Re[2]: Чего не хватает... А что лишнего?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 09.12.05 08:32
Оценка:
Здравствуйте, _Winnie, Вы писали:

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


_W>RAII в С++ совершенно лишний.




И как же в C++ без RAII? А что взамен?
... << RSDN@Home 1.1.4 stable rev. 510>>


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

J>В общем-то проблема рещена миллион лет назад в ембеддед sql.

J>Выглядеть буджет где-то так (100% не уверен, давно таким не занимался):

Речь идет совсем не о встраивании SQL-кода в код программы. Речь идет о том, чтобы предоставлять пользователю расширять язык программирования под конкретные задачи. Хотя бы, допустим, язык для реализации таких препроцессоров.
Re[2]: Чего не хватает... А что лишнего?
От: aik Австралия  
Дата: 09.12.05 08:44
Оценка:
Здравствуйте, _Winnie, Вы писали:

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

_W>RAII в С++ совершенно лишний. Потому что каждая компания пишет свой Reflection и RAII.

А что такое "RAII"?
Re: Чего не хватает... А что лишнего?
От: beroal Украина  
Дата: 09.12.05 09:45
Оценка:
Здравствуйте, Mystic, Вы писали:
M>Собственно говоря, насколько жизнеспособна идея создания некоторого плагинового языка программирования? Т. е. написал плагин --- получил некое расширение языка... Что по вашему мнению, является "лишним" в любимых Вами языках программирования, что бы можно было заменить такими плагинами? Какими свойствами должен обладать "минимальный" язык? Насколько вы допускаете для себя идею начинать каждый конкретный с адаптации конкретного языка программирования под нужды проекта? Пугает ли вас то, что в крупном проекте может использоваться несколько адаптаций (каждся для своей части)?
Я слышал про похожий язык программирования — TCL (ещё известно сочетание TCL/TK — вместе с GUI библиотекой). В TCL даже для математических формул отдельный синтаксис, не встроенный в язык. Нет встроенных массивов. Но больше ничего сказать не могу, близко не знаком. На мой взгляд, ничего интересного у них не получилось.
Re[4]: Чего не хватает... А что лишнего?
От: Mamut Швеция http://dmitriid.com
Дата: 09.12.05 09:49
Оценка:
M>Тут возникает небольшой ньюанс. Используя Common SQL мы так и не уходим от синтаксиса LIST, который, как мне кажется, уступает стандартному синтаксису SQL. Например, необходимость квотирования нужных фрагментов, запись арифметических выражений и т. д. Скажем последний select как для меня гораздо более вразумительнее выглядит в виде:

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


Тогда можно запутаться в том, что есть язык, а что является настройкой к нему. Тот же CLSQL, возможно, можно было сделать в стиле LOOP
(loop with a = 1 
       with b = (+ a 2) 
       with c = (+ b 3)
       return (list a b c))

(loop while (hungry-p) do (eat))
(loop until (not (hungry-p)) do (eat))

(loop for i fixnum from 3 
      when (oddp i) collect i 
      while (< i 5)) 
            
(loop for i from 1 to 10 
      thereis (> i 11) 
      finally (print i))


и так далее..

С другой стороны, а нужна ли нам такая выразительность? Когда не понятно — что код, а что — ждополнительные конструкции языка
... << RSDN@Home 1.2.0 alpha rev. 619>>


dmitriid.comGitHubLinkedIn
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[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[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]: Чего не хватает... А что лишнего?
От: 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[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>>
Re[4]: Чего не хватает... А что лишнего?
От: apd  
Дата: 11.12.05 06:59
Оценка:
Здравствуйте, Mystic, Вы писали:

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


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


Common Lisp имеет также макросы чтения, что в принципе позволяет записать запрос так:

(loop for (c i q) in #[SQL] select customer, item, quantity from header, detail where header_id = detail_id;
         do ...)


НО:
— синтаксис очень не похож на Лисповский, значит, будут проблемы с подсветкой, редактированием, сообщением об ошибках и т.д.;
— а также со вставкой Лисп-выражений в запрос (например, имени переменной name-id);
— видимый "исходный текст" радикально отличается от внутреннего представления, значит подняться еще на один мета-уровень будет сложно.
Re[4]: Чего не хватает... А что лишнего?
От: _Winnie Россия C++.freerun
Дата: 11.12.05 11:55
Оценка:
Здравствуйте, Cyberax, Вы писали:

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

>> никто не спросит: что лишнего?
>> _W>RAII в С++ совершенно лишний. Потому что каждая компания пишет свой
>> Reflection и RAII.

Убейте меня! Я опечатался!
Вот что я хотел напечатать:
RTTIв С++ совершенно лишний. Потому что каждая компания пишет свой Reflection и RTTI под свои цели.
Правильно работающая программа — просто частный случай Undefined Behavior
Re[5]: Чего не хватает... А что лишнего?
От: Дарней Россия  
Дата: 12.12.05 03:16
Оценка:
Здравствуйте, Mystic, Вы писали:

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


править сам компилятор слишком трудно, да и опасно
по хорошему, компилятор должен обеспечивать только каркас, а описание собственно языков — с помощью специально под это заточенного DSL
... << RSDN@Home 1.1.4 stable rev. 510>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.