Re[10]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.06 22:22
Оценка: +2 :))
Здравствуйте, AVC, Вы писали:

AVC>Вместе с тем, ИМХО, Вирт высказал вполне разумную мысль.


Догмы он свои высказвает. Не более того.

AVC>Локальные (вложенные?) процедуры (в т.ч., конечно, процедуры-функции) в Обероне есть (как, кажется, и во всех потомках Паскаля).


Нет их там. Там именно как в Паскле можно обявить локальную функцию между сигнатурой метода и начало его тела. Этого явно недостаточно, так как при этом невозможны замыкания на тело метода. А это самое важное, чтобы облегчить процесс описания сложных вещей. Вместо этого все прийдется протаскивать через параметры, а это дико неудобно.

В общем, освой любой язык с полноценными локальными функциями и сам поймешь что был не прав.

AVC>Вместе с тем, существует запрет на присвоение локальных процедур процедурным переменным.


Это продолжение маразма. Запрет этот ничем не обоснован. Сегодня многие языки это позволяют и обеспечивают очень хороший результат.

AVC>Возможная причина — при вызове локальной процедуры должна передаваться некая дополнительная информация (дисплеи и т.п.), корректность которой компилятор может обеспечить только при "правильной" последовательности вызовов.


Это поток сознания, а не причина. Передавать локальные функции может даже C# 2.0. А языки вроде Лиспа делали это 25 лет назад. Все что нужно для корректной передачи ссылок на функции — это наличие GC. Он в Обероне есть. Так что единственная причина — это то что Вирт за столько лет не смог вникнуть в то что делали параллельно его конкуренты. Иными словами в чужой опыт.

VD>>Но в язык хорош было бы добавить и другие вещи вроде foreach и т.п.


AVC>Здесь есть опасность вкусовщины.


Здесь есть опасность трепавщины. Я не видел ни одного человека пользовавшегося языками с аналогами foreach, которые бы простестовали бы против этого оператора.

AVC>К примеру, FR, при принципиальном, как мне кажется, согласии с тобой, foreach все же недолюбливает...


Серьезно? Жаль он этого не знает.
На самом деле FR поклонник Питона где foreach называется for-ом, а конструкции аналогичной for-у из С/С++ попросту нет. Так что он не то чтобы не недолюбливает. Он только им и пользуется.

AVC>Какой критерий включения/невключения новой конструкции в язык можно было бы предложить?


Критерия два 1) удобство, 2) осуствие проблем. Уж что, что, а с этим у foreach-а проблем нет. Другое дело, что я согласен с Курилкой, что лучше иметь универсальные средства расширения языка. И согласен с тобой, Виртом и представителями МС с Саном, что как раз этот вопрос довольно спорен. Вот только я лично считаю, что спорен он в основном потому, что те кто о нем спорят сами не пробывали использовать расширяемые языки.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Паттерны суть слабости языков программирования
От: vdimas Россия  
Дата: 27.09.06 00:17
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>С Прологом я правда могу ошибаться, а то что Схема — это клон Лиспа — это 100%.


Ну блин, тогда C# — это клон С, потому что скобочки одинаковые и операторы while, for и прочие очень похожи. Вот примерно так же сопоставимы Лисп и Схема.


V>> В прологе сразу несколько способов метапрограммирования... У него программа — как данные, и в классическом виде это интерпретатор На нем довольно легко свои DSL вводить или обогащать семантику стандартного "решателя".


VD>Ну, и как там реализовать скажем встроенную поддержку ХМЛ?


Так же как и везде — через разработку XML-ридеров и вообще XML-либы. Уверен, что этого добра уже есть тонны. Вот вариантик: http://www.zen37763.zen.co.uk/xml_download.html
Довольно-таки миниатюрный исходник для XML-либы. В нем сама логика занимает где-то четверть, а остальное — база данных преобразований для именованных юникодных и всяких управляющих символов, CDATA и т.д. Валидные XML-структуры хоть и записаны в виде программы, но выглядят как простое перечисление оных... В общем, в сравнении с исходниками XML-либы на C# — небо и земля.

Для представления узлов XML-дерева ничего писать не надо, разумеется, как и в Лиспе, ибо встроенные ср-ва как раз наиболее удобно работают с древовидными и списочными структурами.

Кстати, интерпретаторы на Прологе записываются в форме, очень похожей на нормальную Бэкуса-Наура. Потому на нем удобно прототипировать грамматики (всякие DSL, например ).
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Паттерны суть слабости языков программирования
От: Кодёнок  
Дата: 27.09.06 04:46
Оценка: +1 :)
Здравствуйте, VladD2, Вы писали:

VD>Думаю, что это же ждет и паттерны. Знать реализацию паттернов будет так же полезно как знание алгоритмов сортировки.


VD>Вот только будет это явно не скоро. Качественная поддержка метапрограммирования еще не вошла в мэйнстрим-яызки. И Сан с МС против этого просто таки борются.


Согласен.

Но главное что я хотел показать, это что паттерны вокруг которых все хороводы пляшут, это не что-то новое, изобретенное недавно. Паттерны, например из книги большой четверки — это такой же Copy-Paste вылизанных типовых решений, как и Copy-Paste кода. Поэтому мне нелепо читать про "новые языки программирования, которые будут поддерживать паттеры, и программирование паттернами", и т.п.

New features in Visual C++ 2025:
...
— Now you can copy-and-paste your code thus reusing good solution rather than reinventing it!
...

Re[14]: Паттерны суть слабости языков программирования
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 27.09.06 06:20
Оценка:
VladD2,

M>>Эрланг это позволяет?


VD>Он позволяет написать внешнюю метапрограмму. Это позволяет любой универсальный язык. Когда люди говорят о метапрограммировании в ЯП, то речь идет о средствах самого языка. Таких средств в Эрлэнг нет.


Плиз. Эрланг содержит средства для манипуляции своим же АСТ. Всякие субатомные различия о том, насколько подходы к подобной манипуляции различаются по сравнению с другими языками можно оставить за бортом.
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[15]: Паттерны суть слабости языков программирования
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 27.09.06 06:22
Оценка:
Здравствуйте, Mamut, Вы писали:

VD>>Он позволяет написать внешнюю метапрограмму. Это позволяет любой универсальный язык. Когда люди говорят о метапрограммировании в ЯП, то речь идет о средствах самого языка. Таких средств в Эрлэнг нет.


M>Ну так нечестно


Нечестно использовать апелляции к мифическим людям, которые "говорят о метапрограммировании в ЯП".
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[12]: Паттерны суть слабости языков программирования
От: FR  
Дата: 27.09.06 06:25
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>С Прологом я правда могу ошибаться, а то что Схема — это клон Лиспа — это 100%. Так что зайди из под анонима и поставь себе минус сам.


Возьми clisp м запусти вот эту простейшую программу на схеме:
(define (fib x)
  (if (< x 2) 1 (+ (fib (- x 1)) (fib (- x 2)) ))
)

(display (fib 16))
(display "\n")

Читай сообщения об ошибках, думай
Re[7]: Паттерны суть слабости языков программирования
От: FR  
Дата: 27.09.06 06:25
Оценка:
Здравствуйте, Кодёнок, Вы писали:


Кё>Но главное что я хотел показать, это что паттерны вокруг которых все хороводы пляшут, это не что-то новое, изобретенное недавно. Паттерны, например из книги большой четверки — это такой же Copy-Paste вылизанных типовых решений, как и Copy-Paste кода. Поэтому мне нелепо читать про "новые языки программирования, которые будут поддерживать паттеры, и программирование паттернами", и т.п.


Все-таки паттерны они разные, и приличный их процент вполне легко засовывается в библиотеки и без всяких новых языков. Но есть и такие патерны которые на самом деле нелепо и невозможно так реализовать.
Re[10]: Паттерны суть слабости языков программирования
От: FR  
Дата: 27.09.06 06:25
Оценка:
Здравствуйте, AVC, Вы писали:

AVC>Вместе с тем, ИМХО, Вирт высказал вполне разумную мысль.

AVC>Причем у меня возникает впечатление, что между "современными" методами расширения языков (например, макросами Немерле) и "классическими" ( =упомянутыми Виртом ) есть существенное сходство.

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

VD>>Вот только из ФЯ я бы в первую очередь брал бы паттерн-матчинг, замыкания и локальные функции (которые почти есть в Обероне).


AVC>Локальные (вложенные?) процедуры (в т.ч., конечно, процедуры-функции) в Обероне есть (как, кажется, и во всех потомках Паскаля).

AVC>Вместе с тем, существует запрет на присвоение локальных процедур процедурным переменным.
AVC>Возможная причина — при вызове локальной процедуры должна передаваться некая дополнительная информация (дисплеи и т.п.), корректность которой компилятор может обеспечить только при "правильной" последовательности вызовов.

Просто нужно реализовать нормальное замыкание, Вирт сказал А но не сказал B. Реально для такого примитивного (извини ) языка как оберон просто нормальные замыкания и фвп (включая лямбду) дало бы очень много. Хотя конечно еще нужна полиморфность функций. Притом синтаксическм Оберон практически при этом не усложнится (можно сравнить с тем же питоном, сложность грамматик вполне сопоставима, а мощность нет).

VD>>Но в язык хорош было бы добавить и другие вещи вроде foreach и т.п.


AVC>Здесь есть опасность вкусовщины.

AVC>К примеру, FR, при принципиальном, как мне кажется, согласии с тобой, foreach все же недолюбливает...

Ну Влад уже сказал про питоновский for
Хотя в этом я вполне могу принять минимализм, не нужно кучу for'ов, хватит и одного достаточно мощного. Гораздо важнее включить те конструкции про которые я писал выше.

AVC>Какой критерий включения/невключения новой конструкции в язык можно было бы предложить?


Это от языка зависит. Тот же оберон я думаю вполне может и без сахара в виде foreach и т. п. обойтись, лучше добавить то что на самом деле повысит мощьность языка.
Re[15]: Паттерны суть слабости языков программирования
От: gandalfgrey  
Дата: 27.09.06 06:45
Оценка:
Здравствуйте, Mamut, Вы писали:

VD>>Он позволяет написать внешнюю метапрограмму. Это позволяет любой универсальный язык. Когда люди говорят о метапрограммировании в ЯП, то речь идет о средствах самого языка. Таких средств в Эрлэнг нет.


M>Ну так нечестно


Мне так вот помнится, что в ерланге есть такая полезная штука, как parse transform. Через нее сделана MNEMOSYNE

-------------------------------------
{parse_transform,Module}

Causes the parse transformation function Module:parse_transform/2 to be applied to the parsed code before the code is checked for errors.
-------------------------------------
То-есть на этапе компиляции вызывается произвольный внешний модуль, который и трансформирует отпарсенные формы во что-то другое
Re[6]: Паттерны суть слабости языков программирования
От: Klapaucius  
Дата: 27.09.06 07:39
Оценка: +1
Здравствуйте, AVC, Вы писали:

FR>>Только модульность это очень мало.

FR>>Все потенциально возможные конструкции конечно не нужно включать, но и минимализм Вирта когда в язык не включены просто необходимые для современного языка конструкции и возможности тоже плохо.
AVC>О каких именно современных конструкциях идет речь?

Параметрические типы.
Функции как fco, ну и, соответственно, полноценные лексические замыкания и лямбды.
Алгебраические типы, кортежи, pattern matching.

Да чего там говорить? В Обероне, кажется, даже интерфейса как языковой сущности не существует. И множественной реализации нет, так ведь?

Можно еще и traits/mixins, кстати, но это на любителя.
... << RSDN@Home 1.2.0 alpha rev. 655>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[11]: Паттерны суть слабости языков программирования
От: Трурль  
Дата: 27.09.06 07:45
Оценка: 7 (2) +2
Здравствуйте, VladD2, Вы писали:


AVC>>Локальные (вложенные?) процедуры (в т.ч., конечно, процедуры-функции) в Обероне есть (как, кажется, и во всех потомках Паскаля).


VD>Нет их там. Там именно как в Паскле можно обявить локальную функцию между сигнатурой метода и начало его тела.


Со времен Алгола-60 именно это и называется локальными функциями.

VD>Так что единственная причина — это то что Вирт за столько лет не смог вникнуть в то что делали параллельно его конкуренты. Иными словами в чужой опыт.


Удобная позиция: "Если кто-то несогласен со мной, то это исключительно от незнания и скудоумия".
Но у Вирта была возможность поучиться и на собственном опыте. Его первый язык был очень похож на синтаксически подслащенный Лисп.
Re[7]: Паттерны суть слабости языков программирования
От: Трурль  
Дата: 27.09.06 07:53
Оценка: +1
Здравствуйте, Klapaucius, Вы писали:

AVC>>О каких именно современных конструкциях идет речь?


K>Параметрические типы.

K>Функции как fco, ну и, соответственно, полноценные лексические замыкания и лямбды.
K>Алгебраические типы, кортежи, pattern matching.

Какие же это это современные конструкции? Наследие 70-х.
Re[11]: Опять про паттерны
От: Курилка Россия http://kirya.narod.ru/
Дата: 27.09.06 08:03
Оценка: -1
Здравствуйте, WoldemaR, Вы писали:

WR>Этот пример показывает. как меняется решение (и даже формулировка) одной и той же задачи в зависимости от точки зрения. А исторически сформировавшихся точек зрения (языки) уже очень много.

WR>В сложившейся ситуации очень наивно полагать, что некоторый язык программирования займёт верх и заткнёт все остальные куда следует. (слишком много людей придётся переучивать).
WR>Можно ожидать появления такой технологии работы с кодом, которая будет обходить эти различия, равно как и точки зрения на задачу.

Мне думается, что ты копаешь уже совсем в другую сторону
Вопрос в паттернах в том, чтобы сделать это всё автоматизированным, т.е. использовать библиотечный макрос или что-то подобное.
Какой конкретно для конкретной задачи — решает программист/архитектор.
Зачем смотреть на паттерн сразу с разных т.зр. я не совсем понимаю, хотя может кому-то это и нужно
Re[14]: Сабжи типа "Паттерны суть слабости языков программир
От: kan Великобритания  
Дата: 27.09.06 08:06
Оценка:
> Автоматизировать нужно только то что можно автоматизирвоать. В прочем
> принцип разумности он везде будет не лишним.
Ок.

> ОК. Но есть же куча случаев когда паттерн определяет набор рутинных

> действий которые без проблем автоматизируются. Верно? Вот их и нужно
> автоматизировать.
Ок.

> kan>Ок, но мне всё-таки хочется понять, что же в данном (или подобном)

> случае можно придумать "встроенное в язык"?
> В данном ничего. Но это лишь потому, что по сути паттерна тут и нет. Это
> пример банальной инкапсуляции. С тем же успехом можно было бы добавить
> одну функцию.
Тут алгоритма нет, т.е. того, что можно записать на формальном языке. Но вот это и есть суть паттерна!
hint: инкапсуляция — тоже паттерн! Да, он слишком очевиден для ООП-языка, но может быть применён, скажем, в процедурном
языке.

> Я под фасадом все же понимаю преобразование одного интерфейса другим.

> Вот тут уже можно сделать очень многое.
Если преобразование тривиально (что обычно и значит возможность автоматизации), то оно вряд ли может быть ценным (по
крайней мере явно не во всех случаях).


В общем, мой тезис я внёс в сабж, нарушив принцип "фидошники сабжей не меняют".
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[7]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 27.09.06 09:01
Оценка:
Здравствуйте, Klapaucius, Вы писали:

K>Параметрические типы.

K>Функции как fco, ну и, соответственно, полноценные лексические замыкания и лямбды.
K>Алгебраические типы, кортежи, pattern matching.

Спасибо.
Что любопытно, еще в середине 90-х для Оберона был предложен "легкий" вариант параметрического полиморфизма.
Пока не знаю, почему он не прижился (т.е. были какие-то технические трудности или это была принципиальная позиция).

K>Да чего там говорить? В Обероне, кажется, даже интерфейса как языковой сущности не существует. И множественной реализации нет, так ведь?


Возможно, имя "Оберон" слишком много означает, что вызывает некоторую путаницу.
Оберон (кроме, разумеется, литературных и астрономических ассоциаций) — это:
1) операционная система (теперь, пожалуй, даже целое их семейство);
2) язык программирования, использованный для создания этой операционки;
3) семейство языков — "дериватов" Оберона (Оберон-2, Активный Оберон, Зоннон; на самом деле таких языков гораздо больше).
В первоначальном Обероне-языке не было (множественных) интерфейсов, но в Активном Обероне и Зонноне есть их аналог — definition. (Т.е. не все "оберонщики" такие же минималисты, как Вирт. )

Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

Хоар
Re[12]: Опять про паттерны
От: WoldemaR Россия  
Дата: 27.09.06 09:39
Оценка: -1
Здравствуйте, Курилка, Вы писали:

К>Мне думается, что ты копаешь уже совсем в другую сторону

К>Вопрос в паттернах в том, чтобы сделать это всё автоматизированным, т.е. использовать библиотечный макрос или что-то подобное.
К>Какой конкретно для конкретной задачи — решает программист/архитектор.
К>Зачем смотреть на паттерн сразу с разных т.зр. я не совсем понимаю, хотя может кому-то это и нужно


я понял. сейчас всем будет счастье.

надо чтобы среда (ИДЕ) показывала сгенерённый код выделенным шрифтом и недавала его редактировать (типо как асм).

Интересно. хоть какая-то среда так делает?

Отсюда приходим к выводу, что для Nemerle нужна своя ИДЕ.

Или я неправ?
Re[15]: Сабжи "Паттерны..." суть слабости понимания понятия
От: kan Великобритания  
Дата: 27.09.06 09:39
Оценка:
kan wrote:

> В общем, мой тезис я внёс в сабж, нарушив принцип "фидошники сабжей не

> меняют".
Ай-яй-яй... Порезался сабж однако... было:

Сабжи типа "Паттерны суть слабости языков программирования" суть слабости понимания понятия "паттерн"

В общем ни к чему хорошему нарушение принципа не привело
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[11]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 27.09.06 09:55
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Это поток сознания, а не причина. Передавать локальные функции может даже C# 2.0. А языки вроде Лиспа делали это 25 лет назад. Все что нужно для корректной передачи ссылок на функции — это наличие GC. Он в Обероне есть. Так что единственная причина — это то что Вирт за столько лет не смог вникнуть в то что делали параллельно его конкуренты. Иными словами в чужой опыт.


В принципе, многие реализации Паскаля позволяли (и позволяют) делать замыкания, именно благодаря вложенным процедурам и функциям.
Простейший пример (кстати, из книжки Элджера по... Си++, где он горько сетует, что в Си нет вложенных процедур):
procedure p(n: integer);
  procedure fn;
  begin
    do_something(n)
  end;
begin
  callback(@fn)
end;

Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

Хоар
Re[12]: Паттерны суть слабости языков программирования
От: Курилка Россия http://kirya.narod.ru/
Дата: 27.09.06 10:01
Оценка:
Здравствуйте, AVC, Вы писали:

AVC>В принципе, многие реализации Паскаля позволяли (и позволяют) делать замыкания, именно благодаря вложенным процедурам и функциям.

AVC>Простейший пример (кстати, из книжки Элджера по... Си++, где он горько сетует, что в Си нет вложенных процедур):
<skipped/>

Тут FR уже приводил факт — ну не замыкания это, т.к. контекст с ними не передаётся и действует только внутри функции. Хотя частично похоже
Re[13]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 27.09.06 10:15
Оценка:
Здравствуйте, Курилка, Вы писали:

AVC>>В принципе, многие реализации Паскаля позволяли (и позволяют) делать замыкания, именно благодаря вложенным процедурам и функциям.

AVC>>Простейший пример (кстати, из книжки Элджера по... Си++, где он горько сетует, что в Си нет вложенных процедур):

К>Тут FR уже приводил факт — ну не замыкания это, т.к. контекст с ними не передаётся и действует только внутри функции. Хотя частично похоже


Давай разберемся; может, я неправильно понимаю.
Как это "контекст не передается"?
callback — какая-то внешняя процедура, мы передаем туда fn, callback вызывает fn, fn использует значение n из своего контекста (откуда же еще?).

Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.

Хоар
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.