Паттерны суть слабости языков программирования
От: Курилка Россия http://kirya.narod.ru/
Дата: 24.09.06 15:00
Оценка: 49 (5) +5
Этот вопрос уже обсуждался несколько раз на РСДН, а Марк Доминус в своей статье Design patterns of 1972 описал это на мой взгляд довольно подробно. Упомянул он и презентацию Design Patterns in Dynamic Languages Питера Норвига.
Основная, на мой взгляд, мысль статьи : паттерны это хорошо, но по сути это костыли, т.к. каждый раз паттерн нужно реализовывать снова и снова.
Re: Паттерны суть слабости языков программирования
От: Dr.Gigabit  
Дата: 24.09.06 15:29
Оценка: +1
Здравствуйте, Курилка, Вы писали:

К>Этот вопрос уже обсуждался несколько раз на РСДН, а Марк Доминус в своей статье Design patterns of 1972 описал это на мой взгляд довольно подробно. Упомянул он и презентацию Design Patterns in Dynamic Languages Питера Норвига.

К>Основная, на мой взгляд, мысль статьи : паттерны это хорошо, но по сути это костыли, т.к. каждый раз паттерн нужно реализовывать снова и снова.

Паттерны, это, ИМХО, больше алфавит, достаточно удобный надо признать. А что бы каждый раз их не реализовывать — на то есть DSLи и прочие кодогенерации, на которые можно возложить самую рутинную работу.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Паттерны суть слабости языков программирования
От: Курилка Россия http://kirya.narod.ru/
Дата: 24.09.06 15:43
Оценка: +1
Здравствуйте, Dr.Gigabit, Вы писали:

DG>Паттерны, это, ИМХО, больше алфавит, достаточно удобный надо признать. А что бы каждый раз их не реализовывать — на то есть DSLи и прочие кодогенерации, на которые можно возложить самую рутинную работу.


Вопрос в том — а почему язык это не может сделать? Вот и нужны ему костыли типа кодогенераторов, или что-нибудь наподобие AspectJ.
А как бы тебе понравилось использовать описываемый паттерн "Object-oriented class"? Как раз из кодогенератора (препроцессора) и появился C++ на смену C.
Re: Паттерны суть слабости языков программирования
От: FDSC Россия consp11.github.io блог
Дата: 24.09.06 15:46
Оценка: +2
Здравствуйте, Курилка, Вы писали:

К>Этот вопрос уже обсуждался несколько раз на РСДН, а Марк Доминус в своей статье Design patterns of 1972 описал это на мой взгляд довольно подробно. Упомянул он и презентацию Design Patterns in Dynamic Languages Питера Норвига.

К>Основная, на мой взгляд, мысль статьи : паттерны это хорошо, но по сути это костыли, т.к. каждый раз паттерн нужно реализовывать снова и снова.

Ну да, слабость в каком-то смысле. В принципе, все программы так или иначе друг на друга похожи: то же слабость. Всё равно типовые решения появляться будут, какой бы язык не был. Скорее даже дело в слабости не самого языка, а инструментария, поставляемого с ним: IDE и различного рода билиотек.
Re[2]: Паттерны суть слабости языков программирования
От: FR  
Дата: 24.09.06 15:49
Оценка:
Здравствуйте, Dr.Gigabit, Вы писали:

DG>Паттерны, это, ИМХО, больше алфавит


Скорее словарик типовых фраз.
Re[2]: Паттерны суть слабости языков программирования
От: Курилка Россия http://kirya.narod.ru/
Дата: 24.09.06 15:50
Оценка:
Здравствуйте, Dr.Gigabit, Вы писали:

DG>Паттерны, это, ИМХО, больше алфавит, достаточно удобный надо признать.

А насчёт алфавита:
в рамках "слабых" языков приходится изобретать и использоватьэтот алфавит, т.к. ну нельзя выразить более высокоуровневые абстракции на этих языках (вспоминается блаб П.Грэхэма сразу ).
Re[3]: Паттерны суть слабости языков программирования
От: Dr.Gigabit  
Дата: 24.09.06 16:01
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Здравствуйте, Dr.Gigabit, Вы писали:


DG>>Паттерны, это, ИМХО, больше алфавит, достаточно удобный надо признать.

К>А насчёт алфавита:
К>в рамках "слабых" языков приходится изобретать и использоватьэтот алфавит, т.к. ну нельзя выразить более высокоуровневые абстракции на этих языках (вспоминается блаб П.Грэхэма сразу ).

Думаю, абстракции были и придуманы, потому что в них появилась необходимость. Не будем сейчас делить людей на программистов и индусов, но мне не кажется, что если бы все могли общаться на языке лямбда-исчислений (где, кстати, обычное для ипреративщика именование переменной -- уже синтаксический сахар) это сильно увеличило бы производительность.

Думаю в этом топике не стоит касаться темы маркетинга, т.к. я лично не большой спец, но здается, что серебряная пуля не выгодна никому.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Паттерны суть слабости языков программирования
От: Dr.Gigabit  
Дата: 24.09.06 16:03
Оценка: +1
Здравствуйте, Курилка, Вы писали:

К>Здравствуйте, Dr.Gigabit, Вы писали:


DG>>Паттерны, это, ИМХО, больше алфавит, достаточно удобный надо признать. А что бы каждый раз их не реализовывать — на то есть DSLи и прочие кодогенерации, на которые можно возложить самую рутинную работу.


К>Вопрос в том — а почему язык это не может сделать?


Языки с развитой системой метапрограммирования, такие как Nemerle, это умеют.
зы. Никоим образом не призываю к флейму Nemerle vs all, но это факт.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Паттерны суть слабости языков программирования
От: FR  
Дата: 24.09.06 16:08
Оценка: 1 (1) +1
Здравствуйте, Dr.Gigabit, Вы писали:

DG>Здравствуйте, Курилка, Вы писали:


К>>Здравствуйте, Dr.Gigabit, Вы писали:


DG>>>Паттерны, это, ИМХО, больше алфавит, достаточно удобный надо признать. А что бы каждый раз их не реализовывать — на то есть DSLи и прочие кодогенерации, на которые можно возложить самую рутинную работу.


К>>Вопрос в том — а почему язык это не может сделать?


DG>Языки с развитой системой метапрограммирования, такие как Nemerle, это умеют.

DG>зы. Никоим образом не призываю к флейму Nemerle vs all, но это факт.

из all много языков тоже это умеют.
Re[5]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.09.06 21:44
Оценка:
Здравствуйте, FR, Вы писали:

FR>из all много языков тоже это умеют.


"много" — это очень смелая оценка.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Паттерны суть слабости языков программирования
От: FR  
Дата: 25.09.06 05:18
Оценка:
Здравствуйте, VladD2, Вы писали:

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


FR>>из all много языков тоже это умеют.


VD>"много" — это очень смелая оценка.


То что даже я могу насчитать около десятка это уже много.
Re: Паттерны суть слабости языков программирования
От: Кодёнок  
Дата: 25.09.06 07:22
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Этот вопрос уже обсуждался несколько раз на РСДН, а Марк Доминус в своей статье Design patterns of 1972 описал это на мой взгляд довольно подробно. Упомянул он и презентацию Design Patterns in Dynamic Languages Питера Норвига.

К>Основная, на мой взгляд, мысль статьи : паттерны это хорошо, но по сути это костыли, т.к. каждый раз паттерн нужно реализовывать снова и снова.

Давно уже говорилось: наличие устоявшихся паттернов, начиная от for (int i = 0; i < N; ++i) { use(a[i]) } и заканчивая паттернами проектирования, есть прямое следствие бедности языка.
Re[4]: Паттерны суть слабости языков программирования
От: Курилка Россия http://kirya.narod.ru/
Дата: 25.09.06 08:28
Оценка:
Здравствуйте, Dr.Gigabit, Вы писали:

DG>Языки с развитой системой метапрограммирования, такие как Nemerle, это умеют.

DG>зы. Никоим образом не призываю к флейму Nemerle vs all, но это факт.

Не Немерлом единым жив человек...
Но мысль верная, только вот речь о том, что проще пользоваться этим самым "алфавитом" (хотя далеко не всем), чем использовать более мощные языки, хотя развитие идёт...
Re: Паттерны суть слабости языков программирования
От: LaptevVV Россия  
Дата: 25.09.06 08:28
Оценка: 23 (4) +1
Здравствуйте, Курилка, Вы писали:

К>Этот вопрос уже обсуждался несколько раз на РСДН, а Марк Доминус в своей статье Design patterns of 1972 описал это на мой взгляд довольно подробно. Упомянул он и презентацию Design Patterns in Dynamic Languages Питера Норвига.

К>Основная, на мой взгляд, мысль статьи : паттерны это хорошо, но по сути это костыли, т.к. каждый раз паттерн нужно реализовывать снова и снова.

Нет...
Когда-то и сортировки нужно было каждый раз реализовывать...
Паттерны — это просто новый уровень понимания в программировании...
Так же, как когда-то ООП было новым уровнем понимания, так сейчас и паттерны...
Погодите, дойдет эволюция — и паттерны будут в языках...
Между прочим — это и рсдну типа мысль — а не начать ли нам самим об этом думать всерьез, а не на уровне разговоров в форумах...
Каким может быть язык, в котором паттерн является конструкцией языка?
Очевидно, язык должен уметь вводить новые паттерны аналогично функциям и классам...
Библиотека паттернов и сборка проги с паттернами...

Вообще-то нужно внимателоьно почитать книжку "Порождающее программирование" — там в 11-й главе о работах Микрософта оченьт интересные сведения сообщаются...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: Паттерны суть слабости языков программирования
От: Курилка Россия http://kirya.narod.ru/
Дата: 25.09.06 08:58
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Здравствуйте, Курилка, Вы писали:

К>>Основная, на мой взгляд, мысль статьи : паттерны это хорошо, но по сути это костыли, т.к. каждый раз паттерн нужно реализовывать снова и снова.

LVV>Нет...

Почему нет? С чем именно ты несогласен?
LVV>Когда-то и сортировки нужно было каждый раз реализовывать...
И это не было "костылями", что нельзя было взять готовую библиотечную функцию?
LVV>Паттерны — это просто новый уровень понимания в программировании...
LVV>Так же, как когда-то ООП было новым уровнем понимания, так сейчас и паттерны...
Не соглашусь, имхо я согласен с автором статьи и объектная ориентация (там, наверное, можно разные аспекты выделить) суть набор паттернов, только вот название появилось после ООП, поэтому и обычно их не выделяют.
LVV>Погодите, дойдет эволюция — и паттерны будут в языках...
Они уже есть, см. хотябы упомянутую презентацию Норвига
LVV>Между прочим — это и рсдну типа мысль — а не начать ли нам самим об этом думать всерьез, а не на уровне разговоров в форумах...
LVV>Каким может быть язык, в котором паттерн является конструкцией языка?
LVV>Очевидно, язык должен уметь вводить новые паттерны аналогично функциям и классам...
LVV>Библиотека паттернов и сборка проги с паттернами...
Речь о том, что уже есть подобные языки, но вот какой именно использовать для твоей этой "библитеки паттернов" — основание для флейма
Re[7]: Паттерны суть слабости языков программирования
От: Dr.Gigabit  
Дата: 25.09.06 12:58
Оценка:
FR>>>из all много языков тоже это умеют.

VD>>"много" — это очень смелая оценка.


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


В Философии у многих есть нехорошая привычка говорить лозунгами. Так вот должен отметить, что спорить с человеком, который говорит лозунгами, неовзможно по определению. Никто не сомневается в вашем профессионализме, может кто-то даже и 2 десятка насчитать сможет. Но разговор же не об этом, верно? Примеры, аргументы, обмен опытом своим/коллег оп сабжу -- ИМХО, именно за этим большинство сюда и пришло.

А лозунгами говорить вот уже как 15 лет не модно
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Паттерны суть слабости языков программирования
От: gid_vvp  
Дата: 25.09.06 12:58
Оценка: -2
Здравствуйте, Курилка, Вы писали:

К>Основная, на мой взгляд, мысль статьи : паттерны это хорошо, но по сути это костыли, т.к. каждый раз паттерн нужно реализовывать снова и снова.


Ну не каждый... Александреску показал как можно реализовывать паттерны один раз.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[8]: Паттерны суть слабости языков программирования
От: FR  
Дата: 25.09.06 13:21
Оценка: +5 -1
Здравствуйте, Dr.Gigabit, Вы писали:

FR>>>>из all много языков тоже это умеют.


VD>>>"много" — это очень смелая оценка.


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


DG>В Философии у многих есть нехорошая привычка говорить лозунгами. Так вот должен отметить, что спорить с человеком, который говорит лозунгами, неовзможно по определению. Никто не сомневается в вашем профессионализме, может кто-то даже и 2 десятка насчитать сможет. Но разговор же не об этом, верно? Примеры, аргументы, обмен опытом своим/коллег оп сабжу -- ИМХО, именно за этим большинство сюда и пришло.


Тебе что список нужен?
Держи:

lisp
schema
dylan
rebol
prolog
forth
smalltalk
ruby
python
erlang
ocaml
haskell
clean
scala
refal


DG>А лозунгами говорить вот уже как 15 лет не модно


Да ладно не модно, сейчас с этим еще модней, чтобы это увидеть достаточно включить телевизор
Re[2]: Паттерны суть слабости языков программирования
От: savinov Германия https://github.com/asavinov
Дата: 25.09.06 13:40
Оценка: -1
Здравствуйте, LaptevVV, Вы писали:

LVV>Каким может быть язык, в котором паттерн является конструкцией языка?

LVV>Очевидно, язык должен уметь вводить новые паттерны аналогично функциям и классам...
LVV>Библиотека паттернов и сборка проги с паттернами...

Это все равно, что делать самолет наподобие птиц: чтобы крыльями махал.
Ну либо реализация робота, похожего на человека: чтобы стихи с музыкой сочинял и на двух ногах перемещался
Re[2]: Паттерны суть слабости языков программирования
От: WoldemaR Россия  
Дата: 25.09.06 13:53
Оценка: 2 (1)
Здравствуйте, LaptevVV, Вы писали:

LVV>Нет...

LVV>Когда-то и сортировки нужно было каждый раз реализовывать...
LVV>Паттерны — это просто новый уровень понимания в программировании...
LVV>Так же, как когда-то ООП было новым уровнем понимания, так сейчас и паттерны...
LVV>Погодите, дойдет эволюция — и паттерны будут в языках...
LVV>Между прочим — это и рсдну типа мысль — а не начать ли нам самим об этом думать всерьез, а не на уровне разговоров в форумах...
LVV>Каким может быть язык, в котором паттерн является конструкцией языка?
LVV>Очевидно, язык должен уметь вводить новые паттерны аналогично функциям и классам...
LVV>Библиотека паттернов и сборка проги с паттернами...


Вот в теме интеррактивной графики, (в частности GUI) тоже есть свои паттерны. Правда в таком виде они ещё нигде (ненашёл) не появлялись.

В своё время я уже перечислял эти "паттерны визуализации" под названием "способности".
Перечислю некоторые из них чтоб было понятно о чём речь:
Видимость, перемещаемость, масштабируемость, скроллируемость, выравниваемость и т.д. (Кстати, если кто хочет продолжить этот список — милости просим.)

Каждая такая способность встраивается в класс в нескольких точках так-же как и паттерн. Это их общее свойство.

Догадываюсь, что так обстоит дело в каждой предметной области.
Так что тема эта ещё более актуальна, чем это представляется на первый взгляд.
Re: Паттерны суть слабости языков программирования
От: gid_vvp  
Дата: 25.09.06 14:58
Оценка:
за что минус уважаемый?
с чем не согласны? с тем что некоторые паттерны можно реализовать один раз а потом пользоваться?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Паттерны суть слабости языков программирования
От: Курилка Россия http://kirya.narod.ru/
Дата: 25.09.06 15:35
Оценка: +1
Здравствуйте, gid_vvp, Вы писали:

_>за что минус уважаемый?

_>с чем не согласны? с тем что некоторые паттерны можно реализовать один раз а потом пользоваться?

С тем что на плюсах можно реализовать вменяемые (т.е. понятные изнутри) паттерны, которые используются в реальной жизни.
Re[3]: Паттерны суть слабости языков программирования
От: gid_vvp  
Дата: 25.09.06 15:55
Оценка:
К>С тем что на плюсах можно реализовать вменяемые (т.е. понятные изнутри) паттерны, которые используются в реальной жизни.

во первых, ни кто не говорил о С++
во вторых всё относительно, в том числе понятие вменяемости

а в третьих приведи пожалуйста несколько примеров таких "вменяемых" на твой взгляд паттернов.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.09.06 16:03
Оценка: -6
Здравствуйте, FR, Вы писали:

FR>Тебе что список нужен?

FR>Держи:

FR>lisp

FR>schema

Это один язык. Нет просто "lisp".

Так что 1.

FR>dylan

FR>rebol

Экзотика. Я их и не видел. Ну, да верим на слово.
3.

FR>prolog


Не поддерживает метапрограммирование. Это логическое программирование. Отдельный класс — парадигма.

FR>forth

FR>smalltalk
FR>ruby
FR>python

7.

FR>erlang

FR>ocaml
FR>haskell
FR>clean
FR>scala

Эти тоже к метапрограммированию отношения не имеют. У ocaml-а правда есть препроцессор, но он не являеется часью языка. Есть правда эксперементальная версия Mete Haskell и Mete ML (пара штук).

FR>refal


Опять же не видел, но зачтем до выяснения.

Итого 8.

На два десятка не тянет. Причем даже если зачесть те языки кторые ты не назвал.

Так что это только языком просто сделать. В мире конечно метаязыков больше чем 20. Вот только это частные решения и невероятная экзотика. А из используемых на практике метаязыков вообще еденицы.

Теперь можно сравнить это количество с количеством когда-то появлявшихся языков. Думаю, это будет менее одного процента или около того. Так что назвать это дело "много" слишком смелая оценка.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Паттерны суть слабости языков программирования
От: FDSC Россия consp11.github.io блог
Дата: 25.09.06 16:22
Оценка:
Здравствуйте, WoldemaR, Вы писали:

WR>Догадываюсь, что так обстоит дело в каждой предметной области.

WR>Так что тема эта ещё более актуальна, чем это представляется на первый взгляд.


Эта тема ведёт нас к автоматизированному программированию
Re[10]: Паттерны суть слабости языков программирования
От: FR  
Дата: 25.09.06 16:44
Оценка: 1 (1) +1 -1
Здравствуйте, VladD2, Вы писали:

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


FR>>Тебе что список нужен?

FR>>Держи:

FR>>lisp

FR>>schema

VD>Это один язык. Нет просто "lisp".


Это разные языки, у них философии ортогональны

VD>Так что 1.


FR>>dylan

FR>>rebol

VD>Экзотика. Я их и не видел. Ну, да верим на слово.

VD>3.

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

FR>>prolog


VD>Не поддерживает метапрограммирование. Это логическое программирование. Отдельный класс — парадигма.


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

FR>>forth

FR>>smalltalk
FR>>ruby
FR>>python

VD>7.


FR>>erlang

FR>>ocaml
FR>>haskell
FR>>clean
FR>>scala

VD>Эти тоже к метапрограммированию отношения не имеют. У ocaml-а правда есть препроцессор, но он не являеется часью языка. Есть правда эксперементальная версия Mete Haskell и Mete ML (пара штук).


Читай выше. К тому же хаскель и клеан и без метапрограммирования достаточно выразительны.

FR>>refal


VD>Опять же не видел, но зачтем до выяснения.


Посмотри, по сравнению с ним Nemerle может отдыхать

VD>Итого 8.


Удивительно что ты вообще столько насчитал.

VD>На два десятка не тянет. Причем даже если зачесть те языки кторые ты не назвал.


Кто говорил про два десятка?

VD>Так что это только языком просто сделать. В мире конечно метаязыков больше чем 20. Вот только это частные решения и невероятная экзотика. А из используемых на практике метаязыков вообще еденицы.


Интенсивно используемых языков вообще немного.

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


Это как смотреть, по моему вполне достаточно. И уж точно не только наше (вернее ваше) всё
Re: Паттерны суть слабости языков программирования
От: gid_vvp  
Дата: 25.09.06 18:09
Оценка:
К>Основная, на мой взгляд, мысль статьи : паттерны это хорошо, но по сути это костыли, т.к. каждый раз паттерн нужно реализовывать снова и снова.

ещё подумалось... а в архитектуре (ну там где дома и прочие здания проектируют ) паттерны это костылики к чему?
Re[2]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.09.06 23:16
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Каким может быть язык, в котором паттерн является конструкцией языка?


Паттерны они сами относительно языка строятся. Так что язык может быть любым. Чем больше паттернов в языке тем более высокоуровневые паттеерны используются в нем как паттерны.

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


Есть языки в которых есть возможность втроить паттерны в язык не меняя покмпилятора. И за эттим подходом будущее. А самое забавное, что возник он еще в Лиспе кторый страрше большинства участников форума.

LVV>Вообще-то нужно внимателоьно почитать книжку "Порождающее программирование" — там в 11-й главе о работах Микрософта оченьт интересные сведения сообщаются...


Мне кажется не то ты читать собрался.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.09.06 23:16
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Этот вопрос уже обсуждался несколько раз на РСДН, а Марк Доминус в своей статье Design patterns of 1972 описал это на мой взгляд довольно подробно.


Забавно, значит не только в мою голову такие мысли лизут. А вот товарищи спорят
Автор: VladD2
Дата: 15.09.06
.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.09.06 23:16
Оценка: +2 :)
Здравствуйте, gid_vvp, Вы писали:

_>Ну не каждый... Александреску показал как можно реализовывать паттерны один раз.


И толпа ежиков до сих пор не может ножрать этот кактус.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Паттерны суть слабости языков программирования
От: Трурль  
Дата: 26.09.06 05:20
Оценка: 1 (1)
Здравствуйте, VladD2, Вы писали:


FR>>prolog


VD>Не поддерживает метапрограммирование. Это логическое программирование. Отдельный класс — парадигма.


Принадлежность пролога к классу логических, не мешает ему поддерживать метапрограммирование.
Re[10]: Паттерны суть слабости языков программирования
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 26.09.06 06:41
Оценка:
Здравствуйте, VladD2, Вы писали:

FR>>dylan

VD>Экзотика. Я их и не видел. Ну, да верим на слово.
afaik, Dylan — попытка сделать lisp "с человеческим лицом". Разработан в Apple.
http://www.smalltalk.ru | << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[10]: Паттерны суть слабости языков программирования
От: Mamut Швеция http://dmitriid.com
Дата: 26.09.06 07:01
Оценка: +1
FR>>erlang
FR>>ocaml
FR>>haskell
FR>>clean
FR>>scala

VD>Эти тоже к метапрограммированию отношения не имеют. У ocaml-а правда есть препроцессор, но он не являеется часью языка. Есть правда эксперементальная версия Mete Haskell и Mete ML (пара штук).


SMERL &mdash; Simple Metaprogramming for ERLang
А именно здесь

It turns out that Erlang's dynamic typing, hot code swapping and built-in parsing and compilation tools make for some excellent runtime metaprogramming capabilities (I actually don't know of any other functional language that gives the programmer so much flexibility in the area of runtime code manipulation).


... << RSDN@Home 1.2.0 alpha rev. 655>>


dmitriid.comGitHubLinkedIn
Re[2]: Паттерны суть слабости языков программирования
От: Left2 Украина  
Дата: 26.09.06 08:07
Оценка:
_>ещё подумалось... а в архитектуре (ну там где дома и прочие здания проектируют ) паттерны это костылики к чему?

К архитекторским CAD-ам Ну или изначально — к кульману и ватману
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Паттерны суть слабости языков программирования
От: gid_vvp  
Дата: 26.09.06 08:10
Оценка:
_>>ещё подумалось... а в архитектуре (ну там где дома и прочие здания проектируют ) паттерны это костылики к чему?

L>К архитекторским CAD-ам Ну или изначально — к кульману и ватману


Что то я очень сомневаюсь, что если появятся инструменты без слабостей то паттерны уйдут...
ведь удачные решения типовых задач как были так и будут как и сами типовые задачи.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Паттерны суть слабости языков программирования
От: Кодёнок  
Дата: 26.09.06 08:54
Оценка:
Здравствуйте, gid_vvp, Вы писали:

_>>>ещё подумалось... а в архитектуре (ну там где дома и прочие здания проектируют ) паттерны это костылики к чему?

L>>К архитекторским CAD-ам Ну или изначально — к кульману и ватману

_>Что то я очень сомневаюсь, что если появятся инструменты без слабостей то паттерны уйдут...

_>ведь удачные решения типовых задач как были так и будут как и сами типовые задачи.

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

Например, есть типовые задача — сортировка и решение — алгоритм быстрой сортировки.

В одном языке (напр. Pascal) будет существовать паттерн быстрой сортировки, т.е. каждый раз когда надо сортировать, придется применять это типовое решение, потому что нельзя средствами языка выразить типовое решение в общем виде.

В другом языке (напр. С++) один раз реализуют функцию quick_sort, и затем используют её — таким образом, типовое решение есть, но паттерн не нужен.
Re[4]: Паттерны суть слабости языков программирования
От: Left2 Украина  
Дата: 26.09.06 08:58
Оценка: +1
Здравствуйте, gid_vvp, Вы писали:

_>>>ещё подумалось... а в архитектуре (ну там где дома и прочие здания проектируют ) паттерны это костылики к чему?


L>>К архитекторским CAD-ам Ну или изначально — к кульману и ватману


_>Что то я очень сомневаюсь, что если появятся инструменты без слабостей то паттерны уйдут...

Мы всё ещё об архитектуре говорим? Думаю, вполне реально сделать CAD (возможно, такие уже есть — не интересовался вопросом) в котором человек который умеет тыкать мышой сможет за небольшое время сделать проект дачного домика. Вот только профессиональный архитектор всё равно сделает лучше — дешевле, красивее, прочнее и т.п. Возможно, на дачном домике разница будет не очень заметна, но вот на небоскрёбе — она будет выражаться в порядках Вообщем, всё один-в один как в программировании

_>ведь удачные решения типовых задач как были так и будут как и сами типовые задачи.

В топике насколько я понимаю говорится о том что паттерны не уйдут совсем — они станут частью языка. В применении к аритектуре — будут встроены в CAD.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Паттерны суть слабости языков программирования
От: gid_vvp  
Дата: 26.09.06 09:08
Оценка:
Кё>В одном языке (напр. Pascal) будет существовать паттерн быстрой сортировки, т.е. каждый раз когда надо сортировать, придется применять это типовое решение, потому что нельзя средствами языка выразить типовое решение в общем виде.

Кё>В другом языке (напр. С++) один раз реализуют функцию quick_sort, и затем используют её — таким образом, типовое решение есть, но паттерн не нужен.



ну что тут можно сказать
как я уже говорил на некоторых языках можно реализовывать некоторые паттерны один раз и навсегда
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Паттерны суть слабости языков программирования
От: gid_vvp  
Дата: 26.09.06 09:10
Оценка:
_>>ведь удачные решения типовых задач как были так и будут как и сами типовые задачи.
L>В топике насколько я понимаю говорится о том что паттерны не уйдут совсем — они станут частью языка. В применении к аритектуре — будут встроены в CAD.

и появятся библиотеки паттернов как говорили выше? тогда (+1)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[11]: Паттерны суть слабости языков программирования
От: Curufinwe Украина  
Дата: 26.09.06 09:29
Оценка: +1
Здравствуйте, FR, Вы писали:

VD>>Это один язык. Нет просто "lisp".


FR>Это разные языки, у них философии ортогональны


Извините, что влезаю. А можно в 2 словах про ортогональность. Я то думал, что схема — попытка сделать более простой и стройный лисп.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Re[12]: Паттерны суть слабости языков программирования
От: FR  
Дата: 26.09.06 10:11
Оценка:
Здравствуйте, Curufinwe, Вы писали:


FR>>Это разные языки, у них философии ортогональны


C>Извините, что влезаю. А можно в 2 словах про ортогональность. Я то думал, что схема — попытка сделать более простой и стройный лисп.


Если про философию, то именно простота и понятность, а один из создателей схемы пишет:

Scheme, тот диалект Лиспа, который мы используем, пытается совместить
силу и красоту Лиспа и Алгола. От Лиспа мы берем метаязыковую мощь,
которой он обязан простоте своего синтаксиса, единообразное представление
программ как объектов данных, выделение данных из кучи с последующей их
утилизацией сборщиком мусора. От Алгола мы берем лексическую область дей-
ствия и блоковую структуру, подаренные нам первопроходцами проектирования
языков программирования из комитета по Алголу.

А так про разницу смотри тут: http://rsdn.ru/forum/Message.aspx?mid=2115003&amp;only=1
Автор: Курилка
Дата: 18.09.06
Re: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 26.09.06 10:22
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Основная, на мой взгляд, мысль статьи : паттерны это хорошо, но по сути это костыли, т.к. каждый раз паттерн нужно реализовывать снова и снова.


Видимо, основная мысль статьи в том, что надо напрямую поддерживать паттерны средствами ЯП.
Наверное, частично это верно; некоторые паттерны впоследствии стали частью более развитых ЯП.
Но есть также вопросы и сомнения.
Как надо поддерживать паттерны? "Зашить" их в языке? Включить в библиотеку?
Если включать в язык, то до каких пределов допустимо усложнение языка?
Другой момент: паттерны, как правило, имеют как достоинства, так и недостатки.
Если взять книжку GoF, то там каждый паттерн сопровождается списками "за" и "против".
Включая паттерн непосредственно в язык, мы не только усложняем язык, но также "наследуем" недостатки паттерна.
Поэтому, ИМХО, поддержка паттернов средствами ЯП не такое простое уж дело.

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

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

AVC>Здравствуйте, Курилка, Вы писали:


К>>Основная, на мой взгляд, мысль статьи : паттерны это хорошо, но по сути это костыли, т.к. каждый раз паттерн нужно реализовывать снова и снова.


AVC>Видимо, основная мысль статьи в том, что надо напрямую поддерживать паттерны средствами ЯП.

AVC>Наверное, частично это верно; некоторые паттерны впоследствии стали частью более развитых ЯП.
AVC>Но есть также вопросы и сомнения.
AVC>Как надо поддерживать паттерны? "Зашить" их в языке? Включить в библиотеку?
AVC>Если включать в язык, то до каких пределов допустимо усложнение языка?
Нет, имхо, "зашивать" да и включать в язык (что вроде бы одно и то же, или есть разница?) это тупиковый путь, можно вспомнить как "элементарно" добавляли тот же foreach в яву — до боли простая вещь вроде, но...
Думаю наиболее удобный механизм — метапрограммирование, когда использование подобных вещей не регламентируется создателем языка, а "играться" можно самому, если возникает такая потребность.

AVC>Другой момент: паттерны, как правило, имеют как достоинства, так и недостатки.

AVC>Если взять книжку GoF, то там каждый паттерн сопровождается списками "за" и "против".
AVC>Включая паттерн непосредственно в язык, мы не только усложняем язык, но также "наследуем" недостатки паттерна.
AVC>Поэтому, ИМХО, поддержка паттернов средствами ЯП не такое простое уж дело.
Вот ПОЭТОМУ в язык включать их и не надо. Должны быть механизмы, с помощью которых язык может расширяться (e.g. макросы лиспа). А уж как это будет выглядеть — библиотеки или что-то подобное, думаю не сильно принципиально.
Ну и от защиты от "любителей пофантазировать" нужно иметь ключик в языке, который бы позволял создавать подобные вещи только тем людям, которые понимаю, что делают.
Re[6]: Паттерны суть слабости языков программирования
От: kan Великобритания  
Дата: 26.09.06 10:39
Оценка: +2 -1
gid_vvp wrote:

> и появятся библиотеки паттернов как говорили выше? тогда (+1)

Не совсем понятно вообще что такое библиотека для паттерна, паттерны более абстрактная вещь, чем алгоритм. Ну ладно,
паттерн Visitor, можно это обозвать signal/slots и некоторые алгоритмамы обозвать таким паттерном, что вообще говоря не
совсем точно. Но вот как можно библиотекой представлять те же структурные паттерны. Возьмём какой-нибудь Facade — что
можно библиотекой оргаризовать? Или даже какой язык может предоставить специальную конструкцию для этого паттерна?
Паттерн — вещь абстрактная, и каждая его имплементация — конкретизация, а следовательно потеря общности.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[2]: Паттерны суть слабости языков программирования
От: borisman3 Канада http://paskoboris.blogspot.com/
Дата: 26.09.06 10:48
Оценка: 1 (1)
Здравствуйте, LaptevVV, Вы писали:

LVV>Здравствуйте, Курилка, Вы писали:


К>>Этот вопрос уже обсуждался несколько раз на РСДН, а Марк Доминус в своей статье Design patterns of 1972 описал это на мой взгляд довольно подробно. Упомянул он и презентацию Design Patterns in Dynamic Languages Питера Норвига.

К>>Основная, на мой взгляд, мысль статьи : паттерны это хорошо, но по сути это костыли, т.к. каждый раз паттерн нужно реализовывать снова и снова.

LVV>Нет...

LVV>Когда-то и сортировки нужно было каждый раз реализовывать...
LVV>Паттерны — это просто новый уровень понимания в программировании...
LVV>Так же, как когда-то ООП было новым уровнем понимания, так сейчас и паттерны...
LVV>Погодите, дойдет эволюция — и паттерны будут в языках...
LVV>Между прочим — это и рсдну типа мысль — а не начать ли нам самим об этом думать всерьез, а не на уровне разговоров в форумах...
LVV>Каким может быть язык, в котором паттерн является конструкцией языка?
LVV>Очевидно, язык должен уметь вводить новые паттерны аналогично функциям и классам...
LVV>Библиотека паттернов и сборка проги с паттернами...

Рекомендуется осмотреть BETA и MPS. только не перепутать паттерны BETA и паттены ООП

LVV>Вообще-то нужно внимателоьно почитать книжку "Порождающее программирование" — там в 11-й главе о работах Микрософта оченьт интересные сведения сообщаются...
Re[3]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 26.09.06 11:19
Оценка:
Здравствуйте, Курилка, Вы писали:

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


Да, точно, еще метапрограммирование (забыл его упомянуть).
А читабельность важна?

AVC>>Поэтому, ИМХО, поддержка паттернов средствами ЯП не такое простое уж дело.

К>Вот ПОЭТОМУ в язык включать их и не надо. Должны быть механизмы, с помощью которых язык может расширяться (e.g. макросы лиспа). А уж как это будет выглядеть — библиотеки или что-то подобное, думаю не сильно принципиально.
К>Ну и от защиты от "любителей пофантазировать" нужно иметь ключик в языке, который бы позволял создавать подобные вещи только тем людям, которые понимаю, что делают.

Все-таки фантазии иногда представляют опасность.
Меня пока вполне устраивает (возможно, вследствие характера решаемых мной задач) старая схема, когда возможности языка расширяются за счет модулей (в модульных языках).
Сейчас нет под рукой источника, но помню, как в одной из статей 1970-х гг. Вирт рассуждал о том, что в язык невозможно (и не нужно) включать все потенциально полезные конструкции, но можно расширять возможности языка за счет модульности (похоже, статья была написана на основании опыта Паскаля, но до создания Модулы).

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

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

AVC>А читабельность важна?

Смотря что есть читабельность, вот некоторые скобки лиспа ненавидят, другие — наоборот, так что вопрос скользкий, но важный.
Естественно инструмент должен быть таким чтобы было удобно им пользоваться иначе какой в нём смысл?

AVC>Все-таки фантазии иногда представляют опасность.

Возможно, об этом и речь, тем более в крупных проектах/коммандах.
AVC>Меня пока вполне устраивает (возможно, вследствие характера решаемых мной задач) старая схема, когда возможности языка расширяются за счет модулей (в модульных языках).
AVC>Сейчас нет под рукой источника, но помню, как в одной из статей 1970-х гг. Вирт рассуждал о том, что в язык невозможно (и не нужно) включать все потенциально полезные конструкции, но можно расширять возможности языка за счет модульности (похоже, статья была написана на основании опыта Паскаля, но до создания Модулы).
И? То, что нельзя создать серебрянную пулю это и ежу понятно. Но вот никто не мешает приближаться к этой пуле по меньшей мере в рамках конкретной задачи, которая перед тобой стоит.
А по поводу модульности — она безусловно очень важна, но вот достаточна ли? Не знаю, нужно много думать и иметь какой-то дотстаточный опыт таких проектов и т.п.
Re[4]: Паттерны суть слабости языков программирования
От: WoldemaR Россия  
Дата: 26.09.06 11:29
Оценка:
Здравствуйте, FDSC, Вы писали:

...

FDS>Эта тема ведёт нас к автоматизированному программированию


Ещё более автоматизированному. Не зря народ в открытых проектах за это рубится.

Плохо то, где американец спрашивает — "а как из этого извлечь прибыль?"
русский отвечает — "сам дурак!".

менталитет.
Re[4]: Паттерны суть слабости языков программирования
От: FR  
Дата: 26.09.06 11:31
Оценка: +2
Здравствуйте, AVC, Вы писали:

AVC>Да, точно, еще метапрограммирование (забыл его упомянуть).

AVC>А читабельность важна?

Конечно, правильное использование метапрограммирования ее повышает.

AVC>Все-таки фантазии иногда представляют опасность.

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

Только модульность это очень мало.
Все потенциально возможные конструкции конечно не нужно включать, но и минимализм Вирта когда в язык не включены просто необходимые для современного языка конструкции и возможности тоже плохо.
Re[5]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 26.09.06 11:39
Оценка:
Здравствуйте, FR, Вы писали:

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

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

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

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

Хоар
Re[5]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 26.09.06 11:58
Оценка:
Здравствуйте, Курилка, Вы писали:

К>И? То, что нельзя создать серебрянную пулю это и ежу понятно. Но вот никто не мешает приближаться к этой пуле по меньшей мере в рамках конкретной задачи, которая перед тобой стоит.


Наверное, так.
Но вот такая мысль: использовать к месту паттерн в отдельном проекте не так трудно, а вот "зашить" (в любом виде) тот же самый паттерн в средства разработки требует больших умственных усилий, ИМХО.

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

Хоар
Re[6]: Паттерны суть слабости языков программирования
От: FR  
Дата: 26.09.06 12:15
Оценка: +2
Здравствуйте, AVC, Вы писали:

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


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

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

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


Конструкции не современные, довольно старые.
Если придерживатся максимального минимализма , то хотя бы ФВП и замыкания.
Re[7]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 26.09.06 12:21
Оценка:
Здравствуйте, FR, Вы писали:

FR>Конструкции не современные, довольно старые.

FR>Если придерживатся максимального минимализма , то хотя бы ФВП и замыкания.

Догадываюсь, что ФВП — это "функции высшего порядка".
Т.е. речь идет исключительно о средствах языков функционального программирования?

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

Хоар
Re[3]: Паттерны суть слабости языков программирования
От: LaptevVV Россия  
Дата: 26.09.06 12:23
Оценка:
Здравствуйте, VladD2, Вы писали:

LVV>>Каким может быть язык, в котором паттерн является конструкцией языка?

LVV>>Очевидно, язык должен уметь вводить новые паттерны аналогично функциям и классам...
VD>Паттерны они сами относительно языка строятся. Так что язык может быть любым. Чем больше паттернов в языке тем более высокоуровневые паттеерны используются в нем как паттерны.
VD>Есть языки в которых есть возможность втроить паттерны в язык не меняя покмпилятора. И за эттим подходом будущее. А самое забавное, что возник он еще в Лиспе кторый страрше большинства участников форума.
Вообще-то мне макросы немерли как-то интуитивно зацепляют в этом отношении...
Уж больно мощьные... Скорее всего, с помощью похожего механизма можно будет и паттерны как конструкции вводить...
LVV>>Вообще-то нужно внимателоьно почитать книжку "Порождающее программирование" — там в 11-й главе о работах Микрософта оченьт интересные сведения сообщаются...
VD>Мне кажется не то ты читать собрался.
Да я уж прочитал...
И даже не один раз... А все равно — интересные там идеи — программирование в намерениях...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Паттерны суть слабости языков программирования
От: LaptevVV Россия  
Дата: 26.09.06 12:26
Оценка:
Здравствуйте, VladD2, Вы писали:

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


_>>Ну не каждый... Александреску показал как можно реализовывать паттерны один раз.


VD>И толпа ежиков до сих пор не может ножрать этот кактус.

Ну, очевидно, инструмент реализации -слабоват и не совсем адекватен...
Макросы немерли более подходящи?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[8]: Паттерны суть слабости языков программирования
От: FR  
Дата: 26.09.06 12:35
Оценка:
Здравствуйте, AVC, Вы писали:

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


FR>>Конструкции не современные, довольно старые.

FR>>Если придерживатся максимального минимализма , то хотя бы ФВП и замыкания.

AVC>Догадываюсь, что ФВП — это "функции высшего порядка".


угу

AVC>Т.е. речь идет исключительно о средствах языков функционального программирования?


О средствах которые в основном появились благодаря функциональному программированию, те же ФВП и все что с ними связано ничто ни мешает использовать и в императивных языках.
Re[4]: Паттерны суть слабости языков программирования
От: Андрей Хропов Россия  
Дата: 26.09.06 12:40
Оценка: 1 (1)
Здравствуйте, LaptevVV, Вы писали:

LVV>Вообще-то мне макросы немерли как-то интуитивно зацепляют в этом отношении...

LVV>Уж больно мощьные... Скорее всего, с помощью похожего механизма можно будет и паттерны как конструкции вводить...
Что значит можно? Собственно УЖЕ в какой-то мере: здесь.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 26.09.06 12:42
Оценка:
Здравствуйте, FR, Вы писали:

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


Поправка принята — я выразился неточно.
Я хотел сделать упор на слове "исключительно".

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

Хоар
Re[4]: Паттерны суть слабости языков программирования
От: FR  
Дата: 26.09.06 12:43
Оценка:
Здравствуйте, LaptevVV, Вы писали:

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


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


_>>>Ну не каждый... Александреску показал как можно реализовывать паттерны один раз.


VD>>И толпа ежиков до сих пор не может ножрать этот кактус.

LVV>Ну, очевидно, инструмент реализации -слабоват и не совсем адекватен...
LVV>Макросы немерли более подходящи?

Более подходящи любые адекватные средства метапрограммирования, кроме того многие динамические и функциональные языки и без средств метапрограммирования позволяют реализовывать тоже самое.
Re[5]: Паттерны суть слабости языков программирования
От: Курилка Россия http://kirya.narod.ru/
Дата: 26.09.06 12:55
Оценка: +1 -1
Здравствуйте, FR, Вы писали:

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


LVV>>Макросы немерли более подходящи?


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


Или же при помощи них можно добавить метапрограммирование в сам язык как в случае с эрлангом и smerl.
Re[5]: Оффтопик
От: FDSC Россия consp11.github.io блог
Дата: 26.09.06 13:14
Оценка:
Здравствуйте, WoldemaR, Вы писали:

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


WR>...


FDS>>Эта тема ведёт нас к автоматизированному программированию


WR>Ещё более автоматизированному. Не зря народ в открытых проектах за это рубится.


WR>Плохо то, где американец спрашивает — "а как из этого извлечь прибыль?"

WR>русский отвечает — "сам дурак!".

WR>менталитет.


И правильно делает: нечего из глупостей прибыль извлекать

Вся проблема в том, что нам, собственно, тогда нужен некий компилятор, который просто сможет запоминать и оперировать понятиями человека, а не какого-то конкретного языка. Совершенно абстрактными от кода понятиями. Есть подозрение, что это чуть-чуть невозможно
Re[11]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.06 13:24
Оценка:
Здравствуйте, Mamut, Вы писали:

M>SMERL &mdash; Simple Metaprogramming for ERLang

M>А именно здесь
M>

M>It turns out that Erlang's dynamic typing, hot code swapping and built-in parsing and compilation tools make for some excellent runtime metaprogramming capabilities (I actually don't know of any other functional language that gives the programmer so much flexibility in the area of runtime code manipulation).


M>


И какое это отношение имеет к метапрограммировании в Эрлэнг?

Идем по твоей ссылке на правильную:
http://code.google.com/p/smerl/
Читаем:

Smerl is a library that simplifies the generation and manipulation of Erlang code in runtime.


Еще вопросы есть?

Или уж давайте тогда считать все языки поддерживающими метапрограммирование. А что? На них же можно создать проргамму? А раз так то эта программа может генерировать код.
Эдак у нас C# и Ява метапрограммирование допускают с их то Рефлексией...
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.06 13:24
Оценка:
Здравствуйте, Трурль, Вы писали:

Т>Принадлежность пролога к классу логических, не мешает ему поддерживать метапрограммирование.


Какм боком?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.06 13:24
Оценка:
Здравствуйте, FR, Вы писали:

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



FR>>>Это разные языки, у них философии ортогональны


C>>Извините, что влезаю. А можно в 2 словах про ортогональность. Я то думал, что схема — попытка сделать более простой и стройный лисп.


FR>Если про философию, то именно простота и понятность, а один из создателей схемы пишет:

FR>[q]
FR>Scheme, тот диалект Лиспа,

Мне кажется дальше можно не читать, чтобы опнять что ты не прав. Иначе ты зря остановился еще нужно было Автокадовский диалект приплести и Емаксовский.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.06 13:24
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Вообще-то мне макросы немерли как-то интуитивно зацепляют в этом отношении...


Забавно, что о Немерле я и не заикался.

LVV>Уж больно мощьные... Скорее всего, с помощью похожего механизма можно будет и паттерны как конструкции вводить...


Не "можно". А уже и во всю. Другое дело, что не часто они в этом языке нужны. Но Proxy с делегированием сделали.
А разные Псетители, Строители и т.п. просто не нужны. Хотя можно сделать для разнообразия. Я Посетителя на R# делал. На Nemerle это будет еще проще.

LVV>И даже не один раз... А все равно — интересные там идеи — программирование в намерениях...


Это то что называется "by contract"? Дык в том же Немерле оно тоже уже есть и традиционно реализуется на макросах.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.06 13:24
Оценка: 1 (1)
Здравствуйте, LaptevVV, Вы писали:

VD>>И толпа ежиков до сих пор не может ножрать этот кактус.

LVV>Ну, очевидно, инструмент реализации -слабоват и не совсем адекватен...
LVV>Макросы немерли более подходящи?

Да, но тогда нужно разумно было бы сказать, что "Лисп нам показал", а уж в разные люди поняли его пример по своему. В С++ решили взяться проктологию, а в Немерле обобщить опыт других и взять лучшее. Ведь Александреску всего лишь попытался перенести опыт Лиспа встроив его бледное подобие в С++ на базе побочных эффектов от шаблонов.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.06 13:30
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Или же при помощи них можно добавить метапрограммирование в сам язык как в случае с эрлангом и smerl.


Это не добавление МП в язык. Это фрэймворк для рантайм-кодогенерации. Эдак в любой язык можно добавить МП.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Паттерны суть слабости языков программирования
От: dshe  
Дата: 26.09.06 13:39
Оценка: 1 (1)
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Трурль, Вы писали:


Т>>Принадлежность пролога к классу логических, не мешает ему поддерживать метапрограммирование.


VD>Какм боком?


assert, retract...
первая попавшаяся на эту тему ссылка: http://cs.wwc.edu/KU/PR/Prolog.html#meta
--
Дмитро
Re[5]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.06 13:52
Оценка: +3
Здравствуйте, Кодёнок, Вы писали:

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


Тут есть одна особенность. Паттерны все равно надо будет знать. Просто для того чтобы найти то что его реализует. Другое дело, что достаточно будет знать название паттерна и что он делает. А детали реализации будут скрыты.

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

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

Вот только будет это явно не скоро. Качественная поддержка метапрограммирования еще не вошла в мэйнстрим-яызки. И Сан с МС против этого просто таки борются.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.06 13:52
Оценка:
Здравствуйте, kan, Вы писали:

kan>паттерн Visitor, можно это обозвать signal/slots и некоторые алгоритмамы обозвать таким паттерном, что вообще говоря не совсем точно.


Ага. Совсем не точно. Но тем неменее Visitor не только легко запихиваетя в библиоетеку если в языке есть метапрограммирование (МП), но и вообще может быть бессмысленным если в языке есть сопоставление с образцом (паттерн-матчинг).

kan> Но вот как можно библиотекой представлять те же структурные паттерны. Возьмём какой-нибудь Facade — что можно библиотекой оргаризовать?


Ага. Это как раз замечательный кандидат на автоматизацию. Достаточно продумать как отображать один интерфейс на другой (например, в виде атрибутов) и написать код который породит весь код Фасада по этому простому описанию.

kan> Или даже какой язык может предоставить специальную конструкцию для этого паттерна?


Nemerle! Что за несуразные вопросы, право.

kan>Паттерн — вещь абстрактная, и каждая его имплементация — конкретизация, а следовательно потеря общности.


Паттерн вещь конкретная — это детали реализации могут варьироваться. Ну, так никто не говорит, что реализация должна быть одна и она не может быть гибкой (настраивамемой). Реализаций может быть море. Как у тех же алгоритмов сортировки. А особенности так же можно описывать декларативно, а метакод будет их читать и учитывать.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.06 13:52
Оценка:
Здравствуйте, AVC, Вы писали:

AVC>Но вот такая мысль: использовать к месту паттерн в отдельном проекте не так трудно, а вот "зашить" (в любом виде) тот же самый паттерн в средства разработки требует больших умственных усилий, ИМХО.


Несомненно! Но эти же слова приенимы и к алгоритмам. Причем на сегодня никто не сомневается, что алгоритмы разумно зашибвать в библиотеки, а не писать акждый раз занова.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.06 13:52
Оценка:
Здравствуйте, AVC, Вы писали:

AVC>Догадываюсь, что ФВП — это "функции высшего порядка".

AVC>Т.е. речь идет исключительно о средствах языков функционального программирования?

Они как бы просто напрашиваются. Хорошие проработанные идеи. Что делать вид что их нет? Вирт не просто делает вид, что их нет. Он еще пытается их вредность доказать. Что по-моему вообще неразумно.

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

Но в язык хорош было бы добавить и другие вещи вроде foreach и т.п.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.06 13:52
Оценка:
Здравствуйте, FR, Вы писали:

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


И что ты тогда споришь со мней в соседнем форуме?

ЗЫ

У меня временами создается впечатление, что есть личности которые возразить владу считают насущьной необходимостью. Причем даже если они согласны с ним.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Опять про паттерны
От: WoldemaR Россия  
Дата: 26.09.06 13:57
Оценка: +1
Здравствуйте, FDSC, Вы писали:

FDS>Вся проблема в том, что нам, собственно, тогда нужен некий компилятор, который просто сможет запоминать и оперировать понятиями человека, а не какого-то конкретного языка. Совершенно абстрактными от кода понятиями. Есть подозрение, что это чуть-чуть невозможно


я бы не сказал, что паттерны понятия человека. Скорее это проекция решения некоторых задач на язык.

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

осталось дело за малым — как получать синтаксически компактные представления логики программы для конкретных паттернов.
Re[14]: Паттерны суть слабости языков программирования
От: FR  
Дата: 26.09.06 14:00
Оценка:
Здравствуйте, VladD2, Вы писали:


FR>>Если про философию, то именно простота и понятность, а один из создателей схемы пишет:

FR>>[q]
FR>>Scheme, тот диалект Лиспа,

VD>Мне кажется дальше можно не читать, чтобы опнять что ты не прав. Иначе ты зря остановился еще нужно было Автокадовский диалект приплести и Емаксовский.


Не читай мне то что
Re[12]: Паттерны суть слабости языков программирования
От: Mamut Швеция http://dmitriid.com
Дата: 26.09.06 14:01
Оценка:
VD>Идем по твоей ссылке на правильную:
VD>http://code.google.com/p/smerl/
VD>Читаем:
VD>

Smerl is a library that simplifies the generation and manipulation of Erlang code in runtime.


VD>Или уж давайте тогда считать все языки поддерживающими метапрограммирование. А что? На них же можно создать проргамму? А раз так то эта программа может генерировать код.

VD>Эдак у нас C# и Ява метапрограммирование допускают с их то Рефлексией...

Ну так посмотрим:

Metaprogramming

Metaprogramming is the writing of programs that write or manipulate other programs (or themselves) as their data or that do part of the work that is otherwise done at compile time during runtime. In many cases, this allows programmers to get more done in the same amount of time as they would take to write all the code manually.


Эрланг это позволяет? Позволяет Значит, в нем есть метапрограммирование :

With Smerl, you can both create new modules and manipulate existing modules in runtime. You can also query whether a module has a given function by calling smerl:has_func. To start creating a new module, call smerl:new(ModuleName). Both these functions return an opaque context record for the module. To manipulate the module, use smerl:add_func and smerl:remove_func.


Ну или например:

Here's a short module I wrote, called func_recs, which generates getters and setters for all records in a given source file:


Чем не метапрограммирование? Ну и еще metacurrying:

The get/2 and set/3 functions are mere skeletons. They are not used directly anywhere in the code. (In fact, when you compile this module, the compiler complains that these functions are unused. Little does it know... ) When we process the file person.erl, -- in runtime -- we finally have data we need to embed get/2 and set/3 with the index parameters as well as give them their final names. We achieve this in 1 line of code by calling smerl:curry/5.


Ну и так далее влоть до ErlyDB

Кстати! Smerl нигде не "поганит" исходные сорцы. Все манипуляции происходят только в рантайме. То есть код он-то генерит (что от него и требовалось ), но происходит это, не затрагивая исходники. А что еще надо для щастя?
... << RSDN@Home 1.2.0 alpha rev. 655>>


dmitriid.comGitHubLinkedIn
Re[10]: Паттерны суть слабости языков программирования
От: FR  
Дата: 26.09.06 14:10
Оценка:
Здравствуйте, VladD2, Вы писали:

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


VD>И что ты тогда споришь со мней в соседнем форуме?


Там я спорю потому что ты по моему слишком широко трактуешь понятие "синтаксический сахар"

VD>ЗЫ


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


Ну бывает, иногда
Когда согласен нет.
Re[7]: Паттерны суть слабости языков программирования
От: Курилка Россия http://kirya.narod.ru/
Дата: 26.09.06 14:21
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Курилка, Вы писали:


К>>Или же при помощи них можно добавить метапрограммирование в сам язык как в случае с эрлангом и smerl.


VD>Это не добавление МП в язык. Это фрэймворк для рантайм-кодогенерации. Эдак в любой язык можно добавить МП.


Возможно и так, только весь вопрос в том, насколько это будет просто и удобно в использовании, а также работоспособно.
Re[13]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.06 14:34
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Ну так посмотрим:


M>Metaprogramming

M>

M>Metaprogramming is the writing of programs that write or manipulate other programs (or themselves) as their data or that do part of the work that is otherwise done at compile time during runtime. In many cases, this allows programmers to get more done in the same amount of time as they would take to write all the code manually.


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


Он позволяет написать внешнюю метапрограмму. Это позволяет любой универсальный язык. Когда люди говорят о метапрограммировании в ЯП, то речь идет о средствах самого языка. Таких средств в Эрлэнг нет.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.06 14:34
Оценка:
Здравствуйте, FR, Вы писали:

FR>Там я спорю потому что ты по моему слишком широко трактуешь понятие "синтаксический сахар"


Такое ощущение, что ты только по этому поводу споришь.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Опять про паттерны
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.06 14:34
Оценка:
Здравствуйте, WoldemaR, Вы писали:

WR>осталось дело за малым — как получать синтаксически компактные представления логики программы для конкретных паттернов.


Метапрограммирование решает эту задачу. Так что и решение есть. Осталось дело за мылым. В мэйнстрим должен войти язык хорошо поддерживающий метапрограммирование.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Паттерны суть слабости языков программирования
От: kan Великобритания  
Дата: 26.09.06 14:41
Оценка:
VladD2 wrote:

> kan>паттерн Visitor, можно это обозвать signal/slots и некоторые

> алгоритмамы обозвать таким паттерном, что вообще говоря не совсем точно.
> Ага. Совсем не точно. Но тем неменее Visitor не только легко запихиваетя
> в библиоетеку если в языке есть метапрограммирование (МП), но и вообще
> может быть бессмысленным если в языке есть сопоставление с образцом
> (паттерн-матчинг).
Даже в таком языке реализация тех же банальных сингал-слотов вполне может быть оправданной в некоторых ситуациях.

> kan> Но вот как можно библиотекой представлять те же структурные

> паттерны. Возьмём какой-нибудь Facade — что можно библиотекой оргаризовать?
> Ага. Это как раз замечательный кандидат на автоматизацию. Достаточно
> продумать как отображать один интерфейс на другой (например, в виде
> атрибутов) и написать код который породит весь код Фасада по этому
> простому описанию.
Фасад как простая выборка/переименование некоторых методов — обычно не нужен, нужен тоненький слой кода, а значит уже не
простым отображением ифейса не обойтись.
Вот и тут получилось как обычно в таких ситуациях: "Совсем не точно".

> kan> Или даже какой язык может предоставить специальную конструкцию для

> этого паттерна?
> Nemerle! Что за несуразные вопросы, право.
А я думал 42.

> kan>Паттерн — вещь абстрактная, и каждая его имплементация —

> конкретизация, а следовательно потеря общности.
>
> Паттерн вещь конкретная — это детали реализации могут варьироваться. Ну,
Детали реализации и есть конкретизация в данном случае.

> так никто не говорит, что реализация должна быть одна и она не может

> быть гибкой (настраивамемой). Реализаций может быть море. Как у тех же
> алгоритмов сортировки. А особенности так же можно описывать
> декларативно, а метакод будет их читать и учитывать.
Алгоритмы сортировки — алгоритмы, а не паттерны.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[8]: Опять про паттерны
От: WoldemaR Россия  
Дата: 26.09.06 14:56
Оценка:
Здравствуйте, VladD2, Вы писали:

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


WR>>осталось дело за малым — как получать синтаксически компактные представления логики программы для конкретных паттернов.


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



Влад. Вот в этом утверждении я неуверен. чисто интуитивно.

Вот логика моих размышлений: (очень приближённая схема)

любая программа — это граф. (разрешите опустить детализацию, что это за граф такой).

подняли за одну вершину — получили дерево, потянули за другую — другое дерево.

всё что я знаю о метапрограммировании говорит мне о том, что оно позволяет наиболее эффективно создавать такие деревья.

но тут задача состоит в другом — как из одного дерева получить граф, а по нему построить другое дерево.
эта задача, насколько мне известно, немного шире метапрограммирования.

если неубедил, то попробую подыскать подходящий пример. Хотя что это я. Далеко ходить ненадо — вот к примеру задачка про двойную диспетчеризацию, она же паттерн Visitor, она же мультиметоды.
Re[9]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.06 14:58
Оценка:
Здравствуйте, kan, Вы писали:

kan>Фасад как простая выборка/переименование некоторых методов — обычно не нужен, нужен тоненький слой кода, а значит уже не

kan>простым отображением ифейса не обойтись.
kan>Вот и тут получилось как обычно в таких ситуациях: "Совсем не точно".

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

И даже если оные будут нужны, ну что же? Можно сделать средства добавления этого кода. Все в наших руках. Это если паттерн встроен в язык, то его уже не изменить.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Опять про паттерны
От: Курилка Россия http://kirya.narod.ru/
Дата: 26.09.06 14:59
Оценка:
Здравствуйте, WoldemaR, Вы писали:


WR>если неубедил, то попробую подыскать подходящий пример. Хотя что это я. Далеко ходить ненадо — вот к примеру задачка про двойную диспетчеризацию, она же паттерн Visitor, она же мультиметоды.


И что этот пример должен показать?
Re[9]: Опять про паттерны
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.06 15:07
Оценка:
Здравствуйте, WoldemaR, Вы писали:

WR>Влад. Вот в этом утверждении я неуверен. чисто интуитивно.


Зачем в таких вопросах интуиция?

WR>всё что я знаю о метапрограммировании говорит мне о том, что оно позволяет наиболее эффективно создавать такие деревья.


Вряд ли это можно назвать знанием о МП.

МП — это (если кратко) возможность написать программу которая создаст другую программу по некому алгоритму и входным данным.

Так вот паттерн — это алгоритм. Так что нам нужно создать модель (входные данные) описывающую детали нужные для нашего паттерна (алгоритма) и написать метапрограмму которая будет по ним генерировать конечный код.

Да и что тут обсуждать, когда есть реальные примеры реализации?
Например, вот Прокси с делегированием:
http://nemerle.org/svn/nemerle/trunk/macros/DesignPatterns.n
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Опять про паттерны
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.06 15:12
Оценка:
Здравствуйте, Курилка, Вы писали:

WR>>если неубедил, то попробую подыскать подходящий пример. Хотя что это я. Далеко ходить ненадо — вот к примеру задачка про двойную диспетчеризацию, она же паттерн Visitor, она же мультиметоды.


К>И что этот пример должен показать?


Видимо, то что это легко решается средствами МП.
http://rsdn.ru/projects/rsharp/article/rsharp_mag.xml#ERH
далее ищем по слову Visitor.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Паттерны суть слабости языков программирования
От: kan Великобритания  
Дата: 26.09.06 15:13
Оценка:
VladD2 wrote:

> kan>Фасад как простая выборка/переименование некоторых методов — обычно

> не нужен, нужен тоненький слой кода, а значит уже не
> kan>простым отображением ифейса не обойтись.
> kan>Вот и тут получилось как обычно в таких ситуациях: "Совсем не точно".
>
> Как показывает практика, чем более грамоно проектирование, и чем больше
> используются те самые праттерны, тем меньше нужны ручные прослойки. Так
> что очень дажа можено обойтись и без них.
А что тогда такое Facade, как не ручная прослойка?
Похоже что твой идеал — программист должен выбрать язык (ну понятно, что nemerle), а программа сама напишется; писать
код — для ламеров, настоящие программисты должны знать только единственно правильный язык, этого достаточно.

> И даже если оные будут нужны, ну что же? Можно сделать средства

> добавления этого кода. Все в наших руках. Это если паттерн встроен в
> язык, то его уже не изменить.
Вот пример кода, что там можно сделать встроенным в язык?
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[14]: Паттерны суть слабости языков программирования
От: Mamut Швеция http://dmitriid.com
Дата: 26.09.06 15:18
Оценка: :)
VD>Он позволяет написать внешнюю метапрограмму. Это позволяет любой универсальный язык. Когда люди говорят о метапрограммировании в ЯП, то речь идет о средствах самого языка. Таких средств в Эрлэнг нет.

Ну так нечестно
... << RSDN@Home 1.2.0 alpha rev. 655>>


dmitriid.comGitHubLinkedIn
Re[12]: Паттерны суть слабости языков программирования
От: FR  
Дата: 26.09.06 15:26
Оценка:
Здравствуйте, VladD2, Вы писали:

FR>>Там я спорю потому что ты по моему слишком широко трактуешь понятие "синтаксический сахар"


VD>Такое ощущение, что ты только по этому поводу споришь.


В общем да
Ну кроме того я и с твоим опонентом вполне согласен в том что ФВП это сила
Re[11]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.06 15:28
Оценка:
Здравствуйте, kan, Вы писали:

kan>А что тогда такое Facade, как не ручная прослойка?


Автоматическая прослойка созданная по некоторому правилу.

kan>Похоже что твой идеал — программист должен выбрать язык (ну понятно, что nemerle), а программа сама напишется; писать код — для ламеров, настоящие программисты должны знать только единственно правильный язык, этого достаточно.


Умные люди не пишут код который можно сгенерировать. Точнее делают это один раз, задалбываются и в следующий раз ищут средства автоматизации. МП это как раз такое средство.

kan>Вот пример кода, что там можно сделать встроенным в язык?


Там описан примитивный случай. Тут и автоматизировать нечего. А бывает, так что ты долбишь море похожего кода вместо того чтобы описать одир наз то как он должен создаваться сам.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Опять про паттерны
От: WoldemaR Россия  
Дата: 26.09.06 15:30
Оценка:
Здравствуйте, Курилка, Вы писали:

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



WR>>если неубедил, то попробую подыскать подходящий пример. Хотя что это я. Далеко ходить ненадо — вот к примеру задачка про двойную диспетчеризацию, она же паттерн Visitor, она же мультиметоды.


К>И что этот пример должен показать?


Этот пример показывает. как меняется решение (и даже формулировка) одной и той же задачи в зависимости от точки зрения. А исторически сформировавшихся точек зрения (языки) уже очень много.
В сложившейся ситуации очень наивно полагать, что некоторый язык программирования займёт верх и заткнёт все остальные куда следует. (слишком много людей придётся переучивать).
Можно ожидать появления такой технологии работы с кодом, которая будет обходить эти различия, равно как и точки зрения на задачу.
Re[10]: Опять про паттерны
От: WoldemaR Россия  
Дата: 26.09.06 15:40
Оценка:
Здравствуйте, VladD2, Вы писали:

WR>>всё что я знаю о метапрограммировании говорит мне о том, что оно позволяет наиболее эффективно создавать такие деревья.


VD>Вряд ли это можно назвать знанием о МП.


[поскипано]

Хорошо. У меня есть любимый пример. Классика MFC! Подключаем тулбар в майнфрейму.

Есть следующие точки касания тулбара:

1. декларация объекта тулбара как члена класса.
2. загрузка объекта из ресурса при создании майнфрейма.
3. обработка CmdUI для показа/скрытия тулбара. метод + регистрация обработчика в карте сообщений.
4. кнопка/менюшка для показа/скрытия тулбара. метод + регистрация обработчика в карте сообщений

Влад, может я отстал, чем тут поможет МП?
Re[12]: Паттерны суть слабости языков программирования
От: kan Великобритания  
Дата: 26.09.06 15:51
Оценка:
VladD2 wrote:

> kan>А что тогда такое Facade, как не ручная прослойка?

> Автоматическая прослойка созданная по некоторому правилу.
Не получится ли это в большинстве случаев сложнее ручной?

> kan>Похоже что твой идеал — программист должен выбрать язык (ну понятно,

> что nemerle), а программа сама напишется; писать код — для ламеров,
> настоящие программисты должны знать только единственно правильный язык,
> этого достаточно.
> Умные люди не пишут код который можно сгенерировать. Точнее делают это
> один раз, задалбываются и в следующий раз ищут средства автоматизации.
> МП это как раз такое средство.
На такие разовые случаи обычно продвинутого текстового редактора хватит, или, в конце концов, что-то типа awk или perl —
по вкусу.

> kan>Вот пример кода <http://en.wikipedia.org/wiki/Fa%C3%A7ade_pattern&gt;,

> что там можно сделать встроенным в язык?
> Там описан примитивный случай. Тут и автоматизировать нечего. А бывает,
> так что ты долбишь море похожего кода вместо того чтобы описать одир наз
> то как он должен создаваться сам.
Ок, но мне всё-таки хочется понять, что же в данном (или подобном) случае можно придумать "встроенное в язык"?
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[13]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.06 16:19
Оценка:
Здравствуйте, kan, Вы писали:

kan>VladD2 wrote:


>> kan>А что тогда такое Facade, как не ручная прослойка?

>> Автоматическая прослойка созданная по некоторому правилу.
kan>Не получится ли это в большинстве случаев сложнее ручной?

Автоматизировать нужно только то что можно автоматизирвоать. В прочем принцип разумности он везде будет не лишним.

kan>На такие разовые случаи обычно продвинутого текстового редактора хватит, или, в конце концов, что-то типа awk или perl —

kan> по вкусу.

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

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


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

Я под фасадом все же понимаю преобразование одного интерфейса другим. Вот тут уже можно сделать очень многое.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Опять про паттерны
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.09.06 16:19
Оценка: 2 (1)
Здравствуйте, WoldemaR, Вы писали:

WR>Хорошо. У меня есть любимый пример. Классика MFC! Подключаем тулбар в майнфрейму.


WR>Есть следующие точки касания тулбара:


WR>1. декларация объекта тулбара как члена класса.

WR>2. загрузка объекта из ресурса при создании майнфрейма.
WR>3. обработка CmdUI для показа/скрытия тулбара. метод + регистрация обработчика в карте сообщений.
WR>4. кнопка/менюшка для показа/скрытия тулбара. метод + регистрация обработчика в карте сообщений

WR>Влад, может я отстал, чем тут поможет МП?


В С++ и МФЦ кроме траха ничего. В других языках это можно было бы легко автоматизировать. Но в других языках (в том же C#) перечисленные действия можно было бы устранить сделав добавление новой команды декларируемым в неком XML-файле. Другими словами решить не за счет метапрограммирования, а за счет компонентной парадигмы. Так что это не очень хороший пример.

Хорошим примером является, например, реализация метода почленного сравнения класса или вычисления почленного хэш-значения. Вот такие примеры действительно компонентно не решаются, а с помощью МП решаются на раз. Вот гляди сам:
Макрос анализирующий поля класса и генерирующий стандратный метод вычисления хэш-значения для всех полей класса:
[Nemerle.MacroUsage (Nemerle.MacroPhase.WithTypedMembers,
                     Nemerle.MacroTargets.Class,
                     Inherited = false, AllowMultiple = false)]
macro StructuralHashCode (t : TypeBuilder) {
  def flds = t.GetFields (BindingFlags.Public %| BindingFlags.NonPublic %|          
                          BindingFlags.Instance %| BindingFlags.DeclaredOnly);

  def body = 
    List.FoldLeft (flds, <[ 0 ]>, fun (x : IField, acc) {
      <[ $acc %^ $(x.Name : usesite).GetHashCode () ]>
    });
  t.Define (<[ decl:
    public override GetHashCode () : int {
      $body
    }
  ]>);
}

Макрос добавляющий к классу функцию сравения:
[Nemerle.MacroUsage (Nemerle.MacroPhase.WithTypedMembers,
                     Nemerle.MacroTargets.Class,
                     Inherited = false, AllowMultiple = false)]
macro LexicographicCompareTo (t : TypeBuilder) {
  def tname = t.ParsedName;
  def flds = t.GetFields (BindingFlags.Public %| BindingFlags.NonPublic %|
                          BindingFlags.Instance %| BindingFlags.DeclaredOnly);
  def compareField (fld : IField)
  {
      def nm = Macros.UseSiteSymbol (fld.Name);
      def hasLess = match (fld.GetMemType ()) {
          | MType.Class (ti, _) =>
            def name = ti.FullName;
            match (name) {
                | "Nemerle.Core.string"
                | "System.String"
                | "Nemerle.Core.int"
                | "System.Int32"
                | "System.UInt32"
                | "Nemerle.Core.float"
                | "System.Single"
                | "Nemerle.Core.double"
                | "System.Double"
                | "Nemerle.Core.char"
                | "System.Char" =>
                  true
                | _ =>
                  false
            }
          | _ => 
            false
      }
      if (hasLess)
      {
          <[ 
            if (this.$(nm : name) < other.$(nm : name)) 
            {
                -1
            }
            else if (this.$(nm : name) > other.$(nm : name)) 
            {
                1
            }
            else
            {
                0
            }
         ]>
     }
     else
     {
         <[ this.$(nm : name).CompareTo (other.$(nm : name)); ]>
     }
  }
  def body = 
    List.FoldRight (flds, <[ 0 ]>, fun (x : IField, acc) { 
      <[ 
         def cmp = $(compareField (x));
         if (cmp == 0) 
         {
             $(acc)
         }
         else
         {
             cmp
         }
      ]>
    });
  def full = if (t.IsValueType) 
  {
      body 
  }
  else
  {
      <[ 
         if (object.ReferenceEquals (this, other)) 
         {
             0
         }
         else if (object.ReferenceEquals (other, null))
         {
             1
         }
         else
         {
             $(body)
         }
      ]>
  }

  t.Define (<[ decl:
    public CompareTo (other : $(tname : name)) : int { $full }
  ]>);
  t.Define (<[ decl:
    public CompareTo (Oother : object) : int 
    { 
      try 
      {
        def other = Oother :> $(tname : name);
        this.CompareTo (other)
      } 
      catch 
      {
        | _ is System.InvalidCastException => throw System.ArgumentException ()
      }
    }
  ]>);
}

Далее если нам понадобится добавить к классу функции сравнения или вычисления хэш-значения, то нам останется только пометить класс атрибутами LexicographicCompareTo и StructuralHashCode соотвественно.

И конечно, если мы сталкнемся с более сложными случаями, мы всегда можем реализовать эти функции врнучную.

В наших силах добавлять методы, изменять их тела и т.п. В общем, мы можем делать с кодом почти все. Так что выполнить набор рутинных операций преобразовав их в декларативную конструкцию — это вообще не вопрос.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Паттерны суть слабости языков программирования
От: vdimas Россия  
Дата: 26.09.06 18:26
Оценка:
Здравствуйте, Dr.Gigabit, Вы писали:

DG>Паттерны, это, ИМХО, больше алфавит, достаточно удобный надо признать.


Почти половина паттернов — суть костыли для бинарных подробностей реализации полиморфизма в некоторых языках. Во многих динамических языках они просто не нужны. Так что, тот самый список паттернов из GOF я бы сократил вдвое примерно. Или как минимум разбил список на 2 части.


DG>А что бы каждый раз их не реализовывать — на то есть DSLи и прочие кодогенерации, на которые можно возложить самую рутинную работу.


Кодогенератор — тоже костыль.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[10]: Паттерны суть слабости языков программирования
От: vdimas Россия  
Дата: 26.09.06 18:26
Оценка:
Здравствуйте, VladD2, Вы писали:

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

Because it is possible to directly access program code in Prolog, it is easy to write interpreter of Prolog in Prolog. Such interpreter is called a meta-interpreter. Meta-interpreters are usually used to add some extra features to Prolog ...



...Meta-programming is easy and elegant in Prolog because the term syntax is identical with the clause syntax ...

... so we can use terms (data) to name clauses (programs)

“Meta-programming in Prolog”, CIS335: Logic Programming,
Goldsmiths’ College, University of London 2

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 26.09.06 20:47
Оценка:
Здравствуйте, VladD2, Вы писали:

AVC>>Догадываюсь, что ФВП — это "функции высшего порядка".

AVC>>Т.е. речь идет исключительно о средствах языков функционального программирования?

VD>Они как бы просто напрашиваются. Хорошие проработанные идеи. Что делать вид что их нет? Вирт не просто делает вид, что их нет. Он еще пытается их вредность доказать. Что по-моему вообще неразумно.


Видимо, имеются в виду заявления Вирта, вроде тех, что сделаны им в
http://www.rsdn.ru/article/philosophy/virt.xml
Автор(ы): Никлаус Вирт
Дата: 23.05.2006
Уважаемые читатели! Один из наиболее известных, авторитетных и заслуженных деятелей в области программирования профессор Никлаус Вирт опубликовал в январском номере журнал Computer очень интересную, по моему мнению, статью. Я не мог отказать себе в удовольствии пересказать ее, чтобы предложить получившийся текст вашему вниманию.

как по поводу функционального программирования, так и по другим поводам.
Например,

Фантазии компьютерных ученых в 1960-е гг. не знали границ. Вдохновленные успехом в направлениях автоматического синтаксического анализа и генерации анализаторов, некоторые исследователи предложили идею гибких или, по крайней мере, расширяемых языков, представляя, что программе будут предшествовать синтаксические правила, которыми будет руководствоваться общий синтаксический анализатор при ее анализе. Более того, синтаксические правила можно было рассыпать повсюду в тексте. Например, можно было бы использовать какую-нибудь причудливую форму оператора for, специфицируя даже разные варианты одного и того же понятия в разных частях одной программы.

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

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

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


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

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


Здесь есть опасность вкусовщины.
К примеру, FR, при принципиальном, как мне кажется, согласии с тобой, foreach все же недолюбливает...
Какой критерий включения/невключения новой конструкции в язык можно было бы предложить?

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

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

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


V>Минус за сравнение Схемы с Лиспом и заявлением об отсутствии метапрограмирования в Прологе.


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

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


Ну, и как там реализовать скажем встроенную поддержку ХМЛ?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
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 из своего контекста (откуда же еще?).

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

Хоар
Re[13]: Опять про паттерны
От: WoldemaR Россия  
Дата: 27.09.06 10:16
Оценка: :)
Привет Курилка.
Ну и с чем ты несогласен? Нафига минус поставил?

Если кто-то думает, что автоматизация программирования произойдёт от лингвистических фокусов, тот жестоко ошибается. Поговорите со старшими товарищами, они раскажут вам легенды про компиляторы компиляторов и прочих выкрутасов.

Рекомендую повторять как мантру:
автоматизация программирования произойдёт через развитие среды разработки.
Re[14]: Паттерны суть слабости языков программирования
От: FR  
Дата: 27.09.06 10:37
Оценка:
Здравствуйте, AVC, Вы писали:

AVC>Давай разберемся; может, я неправильно понимаю.

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

Смотри тут Re[4]: Почему у Nemerle нет будущего
Автор: FR
Дата: 05.08.06
Re[14]: Паттерны суть слабости языков программирования
От: Курилка Россия http://kirya.narod.ru/
Дата: 27.09.06 10:41
Оценка: +2
Здравствуйте, AVC, Вы писали:

AVC>Давай разберемся; может, я неправильно понимаю.

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

В том и дело, что не процедура
Хотя это лирика...
А смысл в том, что у тебя есть только контекст вызова, а для замыкания нужен ещё конктекст создания замыкания (может есть другие определения, я из головы придумал ) Получается, что в одном месте ты создаёшь замыкание, в котором участвуют переменные, которые определены в данный момент, потом это замыкание передаётся куда-либо (вот это будет проблемой для паскаля/оберона, т.к. локальные переменные уже могут быть не видны в той точке куда мы попадём) и т.к. это функция, то туда передаются ещё параметры для вызова (0 параметров как один из вариантов). Примерно так.
У тебя же внутри происходи вызов и никуда замыкание "уйти" не может...
Re[14]: Опять про паттерны
От: Курилка Россия http://kirya.narod.ru/
Дата: 27.09.06 10:43
Оценка:
Здравствуйте, WoldemaR, Вы писали:


WR>Привет Курилка.

WR>Ну и с чем ты несогласен? Нафига минус поставил?

Не согласен вообще с идеей и где тут счастье я не понимаю. У тебя получается кодогенератор с ридонли генерируемыми файлами. Повышения абстракции тут я мало вижу. Может прикажешь просто смотреть код, который из программы дизассемблером получить можно?
Re[15]: Паттерны суть слабости языков программирования
От: Трурль  
Дата: 27.09.06 11:06
Оценка: +2
Здравствуйте, Курилка, Вы писали:

К>А смысл в том, что у тебя есть только контекст вызова, а для замыкания нужен ещё конктекст создания замыкания (может есть другие определения, я из головы придумал )


Да не нужны никакие определения . Разница в том, что в одном случае контекст хранится в стеке, а во втором в куче. Соответственно, время его существования либо совпадает со временем активности определяющей его процедуры, либо определяется сборщиком мусора.
Re[16]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 27.09.06 11:29
Оценка:
Здравствуйте, Трурль, Вы писали:

Т>Да не нужны никакие определения . Разница в том, что в одном случае контекст хранится в стеке, а во втором в куче. Соответственно, время его существования либо совпадает со временем активности определяющей его процедуры, либо определяется сборщиком мусора.


То-то я не мог понять, зачем ребята сюда GC "приплели"...

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

Хоар
Re[15]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 27.09.06 11:39
Оценка:
Здравствуйте, FR, Вы писали:

AVC>>Давай разберемся; может, я неправильно понимаю.

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

FR>Смотри тут Re[4]: Почему у Nemerle нет будущего
Автор: FR
Дата: 05.08.06


ИМХО, Трурль показал, в чем ошибка в приведенном примере.
Сначала выходишь из процедуры, портишь стек, а затем сетуешь, что "контекст не сохранился".

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

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

К>Не согласен вообще с идеей и где тут счастье я не понимаю. У тебя получается кодогенератор с ридонли генерируемыми файлами. Повышения абстракции тут я мало вижу. Может прикажешь просто смотреть код, который из программы дизассемблером получить можно?


Извини что недостаточно подробно описал идею.
Если непонятно, то может и ново? Сейчас побегу патент делать.

Короче. Представь себе что это текст который можно править.
А это текст который нельзя править.
Это тоже нельзя ни удалять ни править.
А здесь снова можно править.

Ура!!!
Понятно?
Re[8]: Паттерны суть слабости языков программирования
От: Klapaucius  
Дата: 27.09.06 12:03
Оценка: +1 :))) :))
Здравствуйте, Трурль, Вы писали:

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

K>>Параметрические типы.
K>>Функции как fco, ну и, соответственно, полноценные лексические замыкания и лямбды.
K>>Алгебраические типы, кортежи, pattern matching.
Т>Какие же это это современные конструкции? Наследие 70-х.

Нет! Нееет!!! Только не бросайте меня в терновый куст!
Все дело в том, что разговор начинался так:

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

А продолжался так:

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

Легко видеть, что на данном этапе конструкции, необходимые для того, чтобы язык можно было бы считать современным были подменены на современные конструкции.
Естественно, что современными их называть никак нельзя, но я не стал придираться к словам, хотя, как показала практика, напрасно.
Теперь, конечно, пойдут слухи, что Клапауций — неуч, и не знает когда появился pattern matching.

Отсюда мораль: если увидите ошибку у собеседника — необходимо без промедления, громко и неоднократно выразить свое отношение к этой ошибке, в противном же случае окружающие могут подумать, что эту ошибку вы сами разделяете. Поэтому: cave! А лучше даже сapiat qui сареrе potest!
... << 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[16]: Опять про паттерны
От: Курилка Россия http://kirya.narod.ru/
Дата: 27.09.06 12:07
Оценка:
Здравствуйте, WoldemaR, Вы писали:


WR>Понятно?


Непонятен смысл этого — сделать "безопасные" кодогенераторы?
Re[17]: Опять про паттерны
От: WoldemaR Россия  
Дата: 27.09.06 12:12
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Непонятен смысл этого — сделать "безопасные" кодогенераторы?


Непонял. Что значит "безопасные"? кто говорил об этом?
Re[13]: Опять про паттерны
От: Vermicious Knid  
Дата: 27.09.06 12:14
Оценка: +1
Здравствуйте, WoldemaR, Вы писали:

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

Вроде этой
Автор: VladD2
Дата: 14.08.06
?
Re[18]: Опять про паттерны
От: Курилка Россия http://kirya.narod.ru/
Дата: 27.09.06 12:15
Оценка:
Здравствуйте, WoldemaR, Вы писали:

WR>Здравствуйте, Курилка, Вы писали:


К>>Непонятен смысл этого — сделать "безопасные" кодогенераторы?


WR>Непонял. Что значит "безопасные"? кто говорил об этом?


Тогда объясни — зачем вообще тебе это нужно: "текст который нельзя править".
Re[19]: Опять про паттерны
От: WoldemaR Россия  
Дата: 27.09.06 12:21
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Тогда объясни — зачем вообще тебе это нужно: "текст который нельзя править".


А для отладки. Кнопочку нажал — текст развернулся — можно отлаживаться.
Кнопочку нажал — текст свернулся.

Удобно смотреть как работает генератор кода. Наслаждаться.
Можно комбинировать код сгенерённый и ручной.

Красота.

А теперь объясни про "безопасность". что ты имел ввиду?
Re[8]: Паттерны суть слабости языков программирования
От: Klapaucius  
Дата: 27.09.06 12:25
Оценка:
Здравствуйте, AVC, Вы писали:

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

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

Всегда пожалуйста.

AVC>Что любопытно, еще в середине 90-х для Оберона был предложен "легкий" вариант параметрического полиморфизма.

AVC>Пока не знаю, почему он не прижился (т.е. были какие-то технические трудности или это была принципиальная позиция).

Как показывает практика — технически это задача вполне решаемая. В то время, как идеологическое обоснование было бы достаточно интересно услышать.

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

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

Насколько я знаю, definition не полный аналог интерфейса потому, что возможно множественное наследование defenition-ов, но реализация все равно единичная. Если вспомнить, что я говорил именно про множественную реализацию, то понять смысл возражения довольно сложно. Если я по данному вопросу заблуждаюсь — прошу развеять мои заблуждения.
... << 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[20]: Опять про паттерны
От: Курилка Россия http://kirya.narod.ru/
Дата: 27.09.06 12:27
Оценка:
Здравствуйте, WoldemaR, Вы писали:


WR>Удобно смотреть как работает генератор кода. Наслаждаться.

WR>Можно комбинировать код сгенерённый и ручной.
Только вот кодогенераторами не решить всех вопросов про паттерны

WR>Красота.

Соглашусь полезно

WR>А теперь объясни про "безопасность". что ты имел ввиду?


То, что будут использоваться не нагенерённые файлы, которые любомой сможет править как хочет, а "безопасное" представление (может быть известное только во время компиляции).
Re[21]: Опять про паттерны
От: WoldemaR Россия  
Дата: 27.09.06 12:40
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Только вот кодогенераторами не решить всех вопросов про паттерны


Да вот и мне так кажется.


WR>>А теперь объясни про "безопасность". что ты имел ввиду?


К>То, что будут использоваться не нагенерённые файлы, которые любомой сможет править как хочет, а "безопасное" представление (может быть известное только во время компиляции).


В том то и дело, что не "как хочет", но кое-что может.


Мне представляется, что в ближайшем будущем файл "исходного" кода будет содержать большое количество разнообразных тегов содержащих документирование (уже есть), правила форматирования, редактирования и много чего ещё.
Re[9]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 27.09.06 12:44
Оценка:
Здравствуйте, Klapaucius, Вы писали:

K>Легко видеть, что на данном этапе конструкции, необходимые для того, чтобы язык можно было бы считать современным были подменены на современные конструкции.


Ага. Это я подменил, исключительно для краткости.
И, действительно, зря: получилась путаница.

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

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

Хоар
Re[16]: Паттерны суть слабости языков программирования
От: FR  
Дата: 27.09.06 12:46
Оценка: 1 (1) :)
Здравствуйте, AVC, Вы писали:

FR>>Смотри тут Re[4]: Почему у Nemerle нет будущего
Автор: FR
Дата: 05.08.06


AVC>ИМХО, Трурль показал, в чем ошибка в приведенном примере.

AVC>Сначала выходишь из процедуры, портишь стек, а затем сетуешь, что "контекст не сохранился".

"ошибка" там намереная чтобы показать что паскаль не подерживает замыкания.
Даже если вызывать вложенную функцию, все равно не работает:
program tst;

procedure main;
 type pfunc = function() : integer;

 function fget(n : integer) : pfunc;
   function lget() : integer;
    begin
    lget := n;
    end;
 begin
 fget := @lget;
 end;

var func : pfunc;

begin
 func := fget(1);
 writeln(func());

 func := fget(1234);
 writeln(func());
end;

begin
main;
end.
Re[9]: Паттерны суть слабости языков программирования
От: Трурль  
Дата: 27.09.06 13:01
Оценка: :)))
Здравствуйте, Klapaucius, Вы писали:

K>Теперь, конечно, пойдут слухи, что Клапауций — неуч, и не знает когда появился pattern matching.


K>Отсюда мораль: если увидите ошибку у собеседника — необходимо без промедления, громко и неоднократно выразить свое отношение к этой ошибке, в противном же случае окружающие могут подумать, что эту ошибку вы сами разделяете. Поэтому: cave! А лучше даже сapiat qui сареrе potest!

Правду говорить легко и приятно…

Re[17]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 27.09.06 13:10
Оценка: -1
Здравствуйте, FR, Вы писали:

FR>"ошибка" там намереная чтобы показать что паскаль не подерживает замыкания.

FR>Даже если вызывать вложенную функцию, все равно не работает:
FR>
FR>program tst;

FR>procedure main;
FR> type pfunc = function() : integer;

FR> function fget(n : integer) : pfunc;
FR>   function lget() : integer;
FR>    begin
FR>    lget := n;
FR>    end;
FR> begin
FR> fget := @lget;
FR> end;

FR>var func : pfunc;

FR>begin
FR> func := fget(1);
FR> writeln(func());

FR> func := fget(1234);
FR> writeln(func());
FR>end;

FR>begin
FR>main;
FR>end.
FR>


Давай вместе разберемся.
Переменная n определена в функции fget; lget возвращает значение этой самой переменной n; через func мы вызываем lget.
В твоем примере вызов func приводит к тому, что lget возвращает "мусор".
Отсюда ты, кажется, делаешь правдоподобный вывод, что причина в том, что ты вызвал lget "снаружи", и в Паскале нет замыканий.
ИМХО, настоящая причина возврата "мусора" вместо n в том, что переменная n больше не существует.
Дело не в том, что процедуру вызвали "снаружи", а в том, что функция fget уже завершила работу, и ее локальных объектов больше не существует.

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

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

AVC>Дело не в том, что процедуру вызвали "снаружи", а в том, что функция fget уже завершила работу, и ее локальных объектов больше не существует.


Как раз "снаружи" и получается, т.к. fget завершила свою работу и уничтожила все переменные, замыкание сделать не получается, чтд.
Re[19]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 27.09.06 13:35
Оценка:
Здравствуйте, Курилка, Вы писали:

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


AVC>>Дело не в том, что процедуру вызвали "снаружи", а в том, что функция fget уже завершила работу, и ее локальных объектов больше не существует.


К>Как раз "снаружи" и получается, т.к. fget завершила свою работу и уничтожила все переменные, замыкание сделать не получается, чтд.


Я приводил пример с вызовом из внешней ("наружной") процедуры callback.
Процедура callback не может знать о локальных переменных процедуры p; несмотря на это, код работает.
"Снаружи" здесь следует понимать в лексическом смысле.

Вот одно из определений замыкания, хотя, вероятно, и не лучшее:
http://ru.wikipedia.org/wiki/Замыкание_(программирование)

В программировании, Замыкание (англ. closure) — это процедура, которая ссылается на свободные переменные в своём лексическом контексте.

Замыкание, так же как и экземпляр объекта, есть способ представления функциональности и данных, связанных и упакованных вместе.

Замыкание — это особый вид функции. Она определена в теле другой функции и создаётся каждый раз во время её выполнения. В записи это выглядит как функция, находящаяся целиком в теле другой функции. При этом вложенная внутренняя функция содержит ссылки на локальные переменные внешней функции. Каждый раз при выполнении внешней функции происходит создание нового экземпляра внутренней функции, с новыми ссылками на переменные внешней функции.

Замыкание связывает код функции с её лексическим окружением (местом, в котором она определена в коде). Лексические переменные замыкания отличаются от глобальных переменных тем, что они не занимают глобальное пространство имён. От переменных в объектах они отличаются тем, что привязаны к функциям, а не объектам.

Речь, ИМХО, все время идет только о лексическом окружении.

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

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

AVC>Речь, ИМХО, все время идет только о лексическом окружении.


А кто спорит? Хотя бывают и динамического скоупа замыкания, но это не интересно.
Вопрос в том, что замыкание можно передать "наружу", и с ним будет передаваться контекст (именно лексический).
У FR как раз и показана попытка сделать это.
Но не вызвать изнутри контекста (что у тебя и происходит), а именно передать, чтобы вызвать совершенно в другом контексте.
Re[11]: Паттерны суть слабости языков программирования
От: Трурль  
Дата: 27.09.06 13:48
Оценка: :))
Здравствуйте, FR, Вы писали:

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


Сомневаюсь. Мне кажется, замыкания вообще противопоказаны императивным языкам.

Closures Considered Harmful
For a number of years I have been familiar with the observation that the quality of programmers is a decreasing function of the density of closures in the programs they produce...



FR>Хотя конечно еще нужна полиморфность функций.

А вот это стопудофф.
Re[21]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 27.09.06 14:30
Оценка:
Здравствуйте, Курилка, Вы писали:

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

К>У FR как раз и показана попытка сделать это.
К>Но не вызвать изнутри контекста (что у тебя и происходит), а именно передать, чтобы вызвать совершенно в другом контексте.

Можешь ли ты показать, в каком именно месте вызов вложенных процедур в Паскале не соответствует понятию "замыкания"?
Я такого места (пока) не наблюдаю.
В 7-й главе "Красного дракона" Ахо, Ульмана и Сети (в разделе Параметры-процедуры) написано:

Правила лексической области видимости применимо и в том случае, когда вложенная процедура передается в качестве параметра.

После чего идет пример именно на Паскале.

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

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

AVC>Здравствуйте, Курилка, Вы писали:


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

К>>У FR как раз и показана попытка сделать это.
К>>Но не вызвать изнутри контекста (что у тебя и происходит), а именно передать, чтобы вызвать совершенно в другом контексте.

AVC>Можешь ли ты показать, в каком именно месте вызов вложенных процедур в Паскале не соответствует понятию "замыкания"?

AVC>Я такого места (пока) не наблюдаю.
ОК, реализуй то, что показано в примере в определении википедиевском на Паскале а не на схеме. Конкретного определения не дам, к сожалению...
FR как раз и попытался сделать что-то подобное, но... — результат ты сам знаешь.

AVC>В 7-й главе "Красного дракона" Ахо, Ульмана и Сети (в разделе Параметры-процедуры) написано:

AVC>

AVC>Правила лексической области видимости применимо и в том случае, когда вложенная процедура передается в качестве параметра.

AVC>После чего идет пример именно на Паскале.
И что с лексической областю видимости? К ней претензий не было. Или это ты просто так для красного словца?
Re[12]: Паттерны суть слабости языков программирования
От: FR  
Дата: 27.09.06 14:52
Оценка:
Здравствуйте, Трурль, Вы писали:

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


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


Т>Сомневаюсь. Мне кажется, замыкания вообще противопоказаны императивным языкам.


Если осторожно, то ничего страшного. В той же схеме очень интенсивно используют и ничего

Т>

Т>

Closures Considered Harmful
Т> For a number of years I have been familiar with the observation that the quality of programmers is a decreasing function of the density of closures in the programs they produce...


Почему?
Re[22]: Паттерны суть слабости языков программирования
От: FR  
Дата: 27.09.06 14:52
Оценка: +1
Здравствуйте, AVC, Вы писали:

AVC>Можешь ли ты показать, в каком именно месте вызов вложенных процедур в Паскале не соответствует понятию "замыкания"?

AVC>Я такого места (пока) не наблюдаю.

Вот в этом месте:

Каждый раз при выполнении внешней функции происходит создание нового экземпляра внутренней функции, с новыми ссылками на переменные внешней функции.

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

AVC>В 7-й главе "Красного дракона" Ахо, Ульмана и Сети (в разделе Параметры-процедуры) написано:

AVC>

AVC>Правила лексической области видимости применимо и в том случае, когда вложенная процедура передается в качестве параметра.

AVC>После чего идет пример именно на Паскале.

Я думаю здесь просто путаница лексическая область != лексическому замыканию
Re[23]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 27.09.06 15:12
Оценка:
Здравствуйте, FR, Вы писали:

AVC>>Можешь ли ты показать, в каком именно месте вызов вложенных процедур в Паскале не соответствует понятию "замыкания"?

AVC>>Я такого места (пока) не наблюдаю.

FR>Вот в этом месте:

FR>

FR>Каждый раз при выполнении внешней функции происходит создание нового экземпляра внутренней функции, с новыми ссылками на переменные внешней функции.

FR>из твоей цитаты.

Это-то как раз для Паскаля выполняется: каждому новому вызову внешней функции соответствует новый линк во вложенной процедуре.
На всякий случай замечу, что вложенная процедура в Паскале устроена несколько иначе, чем функция в Си.

FR>При этом этот вновь созданный экземпляр живет уже после того как функция отработала.

FR>При этом этот экземпляр (замыкание) это функция + все переменные которые используются внутри этой функции, их время жизни также продляется.

А вот этого в "моей" вики-цитате как раз нет.
Но, если несколько утрировать, ты считаешь, что "замыкание" несовместимо с автоматическими (стековыми) локальными переменными?

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

Хоар
Re[24]: Паттерны суть слабости языков программирования
От: FR  
Дата: 27.09.06 15:33
Оценка:
Здравствуйте, AVC, Вы писали:

AVC>Это-то как раз для Паскаля выполняется: каждому новому вызову внешней функции соответствует новый линк во вложенной процедуре.

AVC>На всякий случай замечу, что вложенная процедура в Паскале устроена несколько иначе, чем функция в Си.

Я знаю (вернее только смутные воспоминания ), но в паскале не выполняется условие, что после вызова внешней функции все замкнутые переменные должны остатся живыми.

FR>>При этом этот вновь созданный экземпляр живет уже после того как функция отработала.

FR>>При этом этот экземпляр (замыкание) это функция + все переменные которые используются внутри этой функции, их время жизни также продляется.

AVC>А вот этого в "моей" вики-цитате как раз нет.

AVC>Но, если несколько утрировать, ты считаешь, что "замыкание" несовместимо с автоматическими (стековыми) локальными переменными?

Вполне совместимо, если копировать их значения в некий контекст. Например в питоне каждая функция имеет скрытый атрибут func_closure в котором хранятся ссылки на нужные переменные. В C# функция с замыканием реализуется в виде скрытого класса хранящего как поля все нужные переменные.
Re[20]: Опять про паттерны
От: Dr.Gigabit  
Дата: 27.09.06 17:30
Оценка:
Здравствуйте, WoldemaR, Вы писали:

WR>Здравствуйте, Курилка, Вы писали:


К>>Тогда объясни — зачем вообще тебе это нужно: "текст который нельзя править".


WR>А для отладки. Кнопочку нажал — текст развернулся — можно отлаживаться.

WR>Кнопочку нажал — текст свернулся.

Вы сейчас описали работу будущего IntelliSence для Nemerle применительно к макросам
+ Бесплатно типобезопасный генератор (сами макросы)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[25]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 27.09.06 19:54
Оценка:
Здравствуйте, FR, Вы писали:

AVC>>Это-то как раз для Паскаля выполняется: каждому новому вызову внешней функции соответствует новый линк во вложенной процедуре.

AVC>>На всякий случай замечу, что вложенная процедура в Паскале устроена несколько иначе, чем функция в Си.

FR>Я знаю (вернее только смутные воспоминания ), но в паскале не выполняется условие, что после вызова внешней функции все замкнутые переменные должны остатся живыми.


Возможно, именно в этом и заключается причина, почему "замыкание" (или конструкция, сходная с "замыканием"), еще возможное в Паскале, отсутствует в Модуле-2 и Обероне.
Это, конечно, только догадка, но вот как это примерно выглядит.
В Паскале "замыкания" были возможны, потому что в нем не было процедурных переменных (сразу вспоминаю старую статью Пайка с рефреном "tyranny of Pascal" ).
Поэтому время жизни "замкнутых" переменных не играло особой роли: ведь указатель на вложенную процедуру нельзя было сохранить в переменной и использовать после уничтожения контекста.
Как только в Модуле появились процедурные переменные, это условие уже больше не соблюдалось, и возник запрет на присвоение вложенных процедур процедурным переменным.
Вероятно, по этой же причине "замыканий" нет и в Обероне. (Конечно, их можно заменить "функторами", как это принято в Си++. Но это отдельная тема.)
Кажется, логика в этой догадке есть; правда, не мешало бы уточнить факты (например, что можно было, а что нельзя в старом Паскале).

AVC>>Но, если несколько утрировать, ты считаешь, что "замыкание" несовместимо с автоматическими (стековыми) локальными переменными?


FR>Вполне совместимо, если копировать их значения в некий контекст. Например в питоне каждая функция имеет скрытый атрибут func_closure в котором хранятся ссылки на нужные переменные. В C# функция с замыканием реализуется в виде скрытого класса хранящего как поля все нужные переменные.


Интересно, как это сказывается на эффективности?

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

Хоар
Re[26]: Паттерны суть слабости языков программирования
От: FR  
Дата: 27.09.06 21:06
Оценка:
Здравствуйте, AVC, Вы писали:

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


AVC>>>Это-то как раз для Паскаля выполняется: каждому новому вызову внешней функции соответствует новый линк во вложенной процедуре.

AVC>>>На всякий случай замечу, что вложенная процедура в Паскале устроена несколько иначе, чем функция в Си.

FR>>Я знаю (вернее только смутные воспоминания ), но в паскале не выполняется условие, что после вызова внешней функции все замкнутые переменные должны остатся живыми.


AVC>Возможно, именно в этом и заключается причина, почему "замыкание" (или конструкция, сходная с "замыканием"), еще возможное в Паскале, отсутствует в Модуле-2 и Обероне.

AVC>Это, конечно, только догадка, но вот как это примерно выглядит.
AVC>В Паскале "замыкания" были возможны, потому что в нем не было процедурных переменных (сразу вспоминаю старую статью Пайка с рефреном "tyranny of Pascal" ).

Точно не было?
То есть никакого аналога на сишные указатели на функции?
Тогда замыкания просто бессмысленны, и их точно не могло там быть.

AVC>Поэтому время жизни "замкнутых" переменных не играло особой роли: ведь указатель на вложенную процедуру нельзя было сохранить в переменной и использовать после уничтожения контекста.

AVC>Как только в Модуле появились процедурные переменные, это условие уже больше не соблюдалось, и возник запрет на присвоение вложенных процедур процедурным переменным.

Но в том же обероне вместе с GC появилась и возможность сохранять контекст.

AVC>Вероятно, по этой же причине "замыканий" нет и в Обероне. (Конечно, их можно заменить "функторами", как это принято в Си++. Но это отдельная тема.)


Это также удобно как эмулировать классы на си

AVC>Кажется, логика в этой догадке есть; правда, не мешало бы уточнить факты (например, что можно было, а что нельзя в старом Паскале).


AVC>>>Но, если несколько утрировать, ты считаешь, что "замыкание" несовместимо с автоматическими (стековыми) локальными переменными?


FR>>Вполне совместимо, если копировать их значения в некий контекст. Например в питоне каждая функция имеет скрытый атрибут func_closure в котором хранятся ссылки на нужные переменные. В C# функция с замыканием реализуется в виде скрытого класса хранящего как поля все нужные переменные.


AVC>Интересно, как это сказывается на эффективности?


Зависит от компилятора. Если брать Ocaml (как наиболее близкий к статическим Оберону и C++) то оптимизирутеся намертво, то есть так же как в хороших C++ компиляторах вплоть до превращения функции с замыканием в ассемблерную инструкцию заталкивающую число на стек
Re[27]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 27.09.06 21:52
Оценка:
Здравствуйте, FR, Вы писали:

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


FR>Точно не было?

FR>То есть никакого аналога на сишные указатели на функции?
FR>Тогда замыкания просто бессмысленны, и их точно не могло там быть.

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

AVC>>Поэтому время жизни "замкнутых" переменных не играло особой роли: ведь указатель на вложенную процедуру нельзя было сохранить в переменной и использовать после уничтожения контекста.

AVC>>Как только в Модуле появились процедурные переменные, это условие уже больше не соблюдалось, и возник запрет на присвоение вложенных процедур процедурным переменным.

FR>Но в том же обероне вместе с GC появилась и возможность сохранять контекст.


Разве что ценой значительной потери эффективности.
А ведь Оберон все-таки эффективный язык.

AVC>>Вероятно, по этой же причине "замыканий" нет и в Обероне. (Конечно, их можно заменить "функторами", как это принято в Си++. Но это отдельная тема.)


FR>Это также удобно как эмулировать классы на си


Давай посмотрим на это с немного более абстрактной точки зрения.
Действительно ли цель в том, чтобы имитировать в императивном языке "замыкания", или же важно передавать функцию вместе с данными?
С такой общей задачей объекты вполне справляются и без "замыканий".
А как говорил Эйнштейн, "два мыла — это слишком сложно".

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

Хоар
Re[28]: Паттерны суть слабости языков программирования
От: FR  
Дата: 28.09.06 06:23
Оценка: :)
Здравствуйте, AVC, Вы писали:


AVC>Отнюдь.

AVC>Процедурных переменных, действительно, не было. Но были (в дополнение к параметрам-значениям и параметрам-переменным) параметры-процедуры и параметры-функции.
AVC>Т.к. функция в Паскале не могла вернуть функцию или процедуру, то процедуры/функции могли передаваться только вперед (т.е. вниз по стеку вызовов) и никогда назад (как, к слову, было в твоем примере).
AVC>Мне кажется, что это гарантировало, что параметр-процедура/параметр-функция не мог "пережить" свой контекст.
AVC>Следовательно, передача в качестве параметра вложенной процедуры/функции не могло привести к ошибке, подобной ошибке в твоем примере (для конструирования такой ошибки тебе потребовалась процедурная переменная).

может и так, но мне это малоинтересно


FR>>Но в том же обероне вместе с GC появилась и возможность сохранять контекст.


AVC>Разве что ценой значительной потери эффективности.

AVC>А ведь Оберон все-таки эффективный язык.

Практика показывает что ты не прав, компиляторы Ocaml'а почти не уступают хорошим си компиляторам. Реально потеря эффективности вполне сравнима с потерями от использования классов, то есть часто равна нулю.

AVC>>>Вероятно, по этой же причине "замыканий" нет и в Обероне. (Конечно, их можно заменить "функторами", как это принято в Си++. Но это отдельная тема.)


FR>>Это также удобно как эмулировать классы на си


AVC>Давай посмотрим на это с немного более абстрактной точки зрения.


Это точка быстро скатывается до уровня машиного кода

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


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

AVC>С такой общей задачей объекты вполне справляются и без "замыканий".


В лиспе и схеме объекты реализуются через замыкания.

AVC>А как говорил Эйнштейн, "два мыла — это слишком сложно".


А мыло и стиральный порошок?
Re[13]: Паттерны суть слабости языков программирования
От: Трурль  
Дата: 28.09.06 06:44
Оценка: :))) :))
Здравствуйте, FR, Вы писали:

FR>Если осторожно, то ничего страшного. В той же схеме очень интенсивно используют и ничего

Что хохлу в радость, то свинье — смерть.
Re[14]: Паттерны суть слабости языков программирования
От: FR  
Дата: 28.09.06 06:50
Оценка:
Здравствуйте, Трурль, Вы писали:

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


FR>>Если осторожно, то ничего страшного. В той же схеме очень интенсивно используют и ничего

Т>Что хохлу в радость, то свинье — смерть.

А почему куда потерял?
Re[7]: Паттерны суть слабости языков программирования
От: Sinclair Россия https://github.com/evilguest/
Дата: 28.09.06 10:05
Оценка: 14 (3) +3
Здравствуйте, kan, Вы писали:
kan>Паттерн — вещь абстрактная, и каждая его имплементация — конкретизация, а следовательно потеря общности.
Почему ты так думаешь?
Очень многие паттерны, или их заметные части, вполне поддаются встраиванию в язык. Ок, давайте забъем на доисторические паттерны вроде "наследования", которые давно встроены в языки программирования.
Паттерн Abstract Factory. Для С++ это именно "абстрактный паттерн", который нужно конкретизировать для каждого случая. В Delphi реализация этого паттерна вшита в язык: достаточно написать перед именем конструктра слово "virtual", и автоматически будет создана соответствующая фабрика. Причем семейство этих фабрик будет автоматически приводимо друг к другу, что моделируется достаточно сложным и неортогональным кодом на С++. В итоге в Delphi сделать абстрактную фабрику в разы проще, и гораздо меньше шанс совершить ошибку.

Далее, посмотрим на Publisher-Subscriber.
Вот у нас есть совершенно абстрактная вещь. При ее реализации на классическом ЯП есть некоторое количество грабель. Ок, добавляем в C# ключевое слово event, и оно мгновенно вполне конкретизирует нашу абстракцию, позволяя нам избегать примитивных ошибок при реализации подписки/отписки. Заодно делая использование события проще не только со стороны подписчика, но и со стороны публикатора.

В старой джаве был такой Enum Pattern — за неимением нормальной поддержки енумов. Казалось бы, совершенно абстрактная вещь: "создайте класс, в нем набор static final полей...". Ан нет, в 1.6 встроили в язык — и засиял себе паттерн, позволяя существенно экономить код, опять же сокращая количество ошибок.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[7]: Паттерны суть слабости языков программирования
От: Sinclair Россия https://github.com/evilguest/
Дата: 28.09.06 10:05
Оценка:
Здравствуйте, kan, Вы писали:

kan>Или даже какой язык может предоставить специальную конструкцию для этого паттерна?

Ну давай подумаем, как выглядит фасад, и придумаем вымышленный синтаксис. Почему бы не сделать язык, который при построении класса указать список классов, для которых он выступает фасадом, и не получить автоматически код? Ведь код фасада обычно примитивен.
kan>Паттерн — вещь абстрактная, и каждая его имплементация — конкретизация, а следовательно потеря общности.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[8]: Паттерны суть слабости языков программирования
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 28.09.06 12:01
Оценка:
Здравствуйте, Sinclair, Вы писали:

S> ключевое слово event, и оно мгновенно вполне конкретизирует нашу абстракцию, позволяя нам избегать примитивных ошибок при реализации подписки/отписки.


пример, пары таких ошибок можно узнать?
http://www.smalltalk.ru | << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[7]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.09.06 12:24
Оценка: +1
Здравствуйте, Кодёнок, Вы писали:

Кё>

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


Лучше не зларадствовал бы, а помог нам донести человеческие технологии до людей. Без интеграции со студией, рефакторинга, дружественного и удобного интерфейса никто не будет смотреть ни на один супер-пупер язык. Вот мы занимаемя разаботкой Интеграции для Немела. Чем смеяться помог бы.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[28]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.09.06 12:24
Оценка:
Здравствуйте, AVC, Вы писали:

Блин, ну, и делать же вам нечего.

Что тут спорить то? Конечно паскалевские и обероновские функции отчасти замыкания. Но с очень большим списком ограничений. И вот как раз от то и не дает использовать их так же красиво как аналоги их ФЯ. Отсуствие лямб так же усугубляет кратину. Так что по жизни пользоваться ими неудобно. В прочем тоже можно сказать и об Обероне как таковом.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.09.06 12:24
Оценка:
Здравствуйте, FR, Вы писали:

FR>Возьми clisp м запусти вот эту простейшую программу на схеме:


У Лиспа не только диалекты не совместимы, но и даже разные реализации компиляторов. Так это не о чем не говорит. Главно, что "просто лиспа" нет. Есть море клонов. CL, Схема, Автокад Лисп, Емакс...
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.09.06 12:24
Оценка:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

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


Поддерживать средства и иметь языковые возможности несколько разные задачи. Вот для C# есть туча движков для метапрограмирования и что?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Опять про паттерны
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.09.06 12:24
Оценка: 5 (2)
Здравствуйте, WoldemaR, Вы писали:

WR>Короче. Представь себе что это текст который можно править.

WR>
WR>А это текст который нельзя править.
WR>Это тоже нельзя ни удалять ни править.
WR>
А здесь снова можно править.


Небольшой отчет о сделанной работе
Автор: VladD2
Дата: 14.08.06

Подсказки:
...для макроса "while" (сначала приводится код использующий макрос)

(а это уже подсказка) первый варинт нужен чтобы было понятно что ображуем "тело" передавющееся макросу.


Обратите внимание, что код макроса "раскрыт".

... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.09.06 12:24
Оценка: :)
Здравствуйте, FR, Вы писали:

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


Я кажется знаю в чем дело! Во всем виноват МС! Они доплачивают Вирту чтобы он не портил репутацию С++ как языку "не хуже Оберона".
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[29]: Паттерны суть слабости языков программирования
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 28.09.06 12:52
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Так что по жизни пользоваться ими неудобно. В прочем тоже можно сказать и об Обероне как таковом.


Был опыт?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[14]: Паттерны суть слабости языков программирования
От: FR  
Дата: 28.09.06 13:00
Оценка: 1 (1)
Здравствуйте, VladD2, Вы писали:

VD>У Лиспа не только диалекты не совместимы, но и даже разные реализации компиляторов. Так это не о чем не говорит. Главно, что "просто лиспа" нет. Есть море клонов. CL, Схема, Автокад Лисп, Емакс...


Уже давно есть, Common Lisp. Остальные как и схему можно считать лисп подобными языками
Re[29]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 28.09.06 13:17
Оценка:
Здравствуйте, FR, Вы писали:

AVC>>Следовательно, передача в качестве параметра вложенной процедуры/функции не могло привести к ошибке, подобной ошибке в твоем примере (для конструирования такой ошибки тебе потребовалась процедурная переменная).


FR>может и так, но мне это малоинтересно


Ну и не будем об этом говорить.
Меня, например, интересуют различия между Си и Паскалем (например): из этих различий вышло много последствий (и эти различия по-прежнему разделяют некоторые новые языки).
Тебе же, с точки зрения приемов и языков ФП, эти различия не интересны.
Это нормально.

FR>>>Но в том же обероне вместе с GC появилась и возможность сохранять контекст.


AVC>>Разве что ценой значительной потери эффективности.

AVC>>А ведь Оберон все-таки эффективный язык.

FR>Практика показывает что ты не прав, компиляторы Ocaml'а почти не уступают хорошим си компиляторам. Реально потеря эффективности вполне сравнима с потерями от использования классов, то есть часто равна нулю.


Ты меня (пока!) не убедил.
Хотя бы потому, что потеря эффективности от использования классов не равна нулю.

AVC>>Давай посмотрим на это с немного более абстрактной точки зрения.


FR>Это точка быстро скатывается до уровня машиного кода


Хм... машинный код столь абстрактен?

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


FR>Цель ввести в язык мощное средство позволяющее создавать более сложные абстракции и писать более понятный и компактный код. При том не требующее так не любимого Виртом усложнения синтаксиса. Я не спорю что любые высокоуровневые средства можно эмулировать более низкоуровневыми, но это всегда криво и куча лишней ненужной писанины, ничего ни дающей а только скрывающей смысл.


Этой фразы я пока не понял.
Все программирование можно свести к "эмулированию высокоуровневых средств низкоуровневыми".
ИМХО, это нормально.
Больше трудностей вызывает обратный подход.

AVC>>С такой общей задачей объекты вполне справляются и без "замыканий".


FR>В лиспе и схеме объекты реализуются через замыкания.


У меня всегда были проблемы с пониманием отдельных приемов ФП.
Именно потому, ИМХО, что какая-нибудь простая (с императивной точки зрения) сущность зачастую реализуется в них слишком сложно.

AVC>>А как говорил Эйнштейн, "два мыла — это слишком сложно".


FR>А мыло и стиральный порошок?


Пачкаться меньше надо!

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

Хоар
Re[8]: Паттерны суть слабости языков программирования
От: gandalfgrey  
Дата: 28.09.06 13:38
Оценка: +2 -1
Здравствуйте, VladD2, Вы писали:

VD>Лучше не зларадствовал бы, а помог нам донести человеческие технологии до людей. Без интеграции со студией, рефакторинга, дружественного и удобного интерфейса никто не будет смотреть ни на один супер-пупер язык. Вот мы занимаемя разаботкой Интеграции для Немела

Это, мягко говоря, преувеличение...
В моем текущем проекте нет ни интеграции со студией, ни рефакторинга ни для одного из используемых языков. Дружественный интерфейс представлен на выбор FAR или SCITE. Как ни странно, никто не жалуется !
В предыдущей конторе, где я работал, за 8 лет IDE использовалось 1 ( адын ) раз для одного небольшого проекта. И это не была студия.
Весь рефакторинг делался ручками — и только ручками.
Более того, когда я попытался внедрить IDE для тикля ( KOMODO ), это не нашло понимания среди сотрудников.
Так что — окошечки, конечно, хорошо и красиво, но надобность в них не шибео велика
Re[30]: Паттерны суть слабости языков программирования
От: FR  
Дата: 28.09.06 14:16
Оценка:
Здравствуйте, AVC, Вы писали:

AVC>Ну и не будем об этом говорить.

AVC>Меня, например, интересуют различия между Си и Паскалем (например): из этих различий вышло много последствий (и эти различия по-прежнему разделяют некоторые новые языки).

Ну поведение (и существование) вложенных функций мало зависит от того чей потомок язык, например:
int test(int x)
{
int z = 11;

int f(int y)
 {
 return x + y + z;
 }

return f(1);
}

Вполне нормальный код для D.

AVC>Тебе же, с точки зрения приемов и языков ФП, эти различия не интересны.

AVC>Это нормально.

В рамках этого разговоро малоинтересно, а вообще интерсно


FR>>Практика показывает что ты не прав, компиляторы Ocaml'а почти не уступают хорошим си компиляторам. Реально потеря эффективности вполне сравнима с потерями от использования классов, то есть часто равна нулю.


AVC>Ты меня (пока!) не убедил.

AVC>Хотя бы потому, что потеря эффективности от использования классов не равна нулю.

От классов в C++ равна нулю, от виртуальных функций ненулевая, но обычно близкая к нулю. Ты говорил о

Разве что ценой значительной потери эффективности.
А ведь Оберон все-таки эффективный язык

этого и рядом нет.

AVC>>>Давай посмотрим на это с немного более абстрактной точки зрения.


FR>>Это точка быстро скатывается до уровня машиного кода


AVC>Хм... машинный код столь абстрактен?


Так я же не виноват что твоя абстрактная точка зрения катится именно в эту сторону

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


FR>>Цель ввести в язык мощное средство позволяющее создавать более сложные абстракции и писать более понятный и компактный код. При том не требующее так не любимого Виртом усложнения синтаксиса. Я не спорю что любые высокоуровневые средства можно эмулировать более низкоуровневыми, но это всегда криво и куча лишней ненужной писанины, ничего ни дающей а только скрывающей смысл.


AVC>Этой фразы я пока не понял.

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

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

AVC>Больше трудностей вызывает обратный подход.


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

AVC>>>С такой общей задачей объекты вполне справляются и без "замыканий".


FR>>В лиспе и схеме объекты реализуются через замыкания.


AVC>У меня всегда были проблемы с пониманием отдельных приемов ФП.

AVC>Именно потому, ИМХО, что какая-нибудь простая (с императивной точки зрения) сущность зачастую реализуется в них слишком сложно.

Замыкания ничем ни сложнее объектов.

AVC>>>А как говорил Эйнштейн, "два мыла — это слишком сложно".


FR>>А мыло и стиральный порошок?


AVC>Пачкаться меньше надо!


Re[9]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.09.06 16:57
Оценка: +1 :))
Здравствуйте, gandalfgrey, Вы писали:

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


VD>>Лучше не зларадствовал бы, а помог нам донести человеческие технологии до людей. Без интеграции со студией, рефакторинга, дружественного и удобного интерфейса никто не будет смотреть ни на один супер-пупер язык. Вот мы занимаемя разаботкой Интеграции для Немела

G>Это, мягко говоря, преувеличение...

Преувеличение считать, что твое мнение является истиной в последнй инстанции.
Я же говорю о том о чем много раз говорил с другими программистами. В FAR-е сегодня писать решатся еденицы.

G>В моем текущем проекте нет ни интеграции со студией, ни рефакторинга ни для одного из используемых языков. Дружественный интерфейс представлен на выбор FAR или SCITE. Как ни странно, никто не жалуется !


Такое ощущение что от этого всем должно стать сразу радоснее. Я бы еще понял, если бы ты был преставителем супер-мега-стартапа поднявшегося за год с нуля в короли. А так...

G>В предыдущей конторе, где я работал, за 8 лет IDE использовалось 1 ( адын ) раз для одного небольшого проекта. И это не была студия.

G>Весь рефакторинг делался ручками — и только ручками.

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

G>Более того, когда я попытался внедрить IDE для тикля ( KOMODO ), это не нашло понимания среди сотрудников.

G>Так что — окошечки, конечно, хорошо и красиво, но надобность в них не шибео велика

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

Я вот, например, не имею машину и не хочу ее иметь. Причем с деньгами у меня все впорядке. Просто она мне не нужна. У меня работа в 10 минутах хотьбы. Спортзал тоже. А если куда-то нужно доехать то проще руку поднять. Ну, и что? Обоснуем этим фактом отсуствие необходимости в автотранспорте вообще? А кому я тогда руку буду поднимать? И ведь в моем случае никакой экзотики.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[30]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.09.06 16:57
Оценка: :))
Здравствуйте, eao197, Вы писали:

E>Был опыт?


Ага. Хочешь тоже попробовать?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.09.06 16:57
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>В старой джаве был такой Enum Pattern — за неимением нормальной поддержки енумов. Казалось бы, совершенно абстрактная вещь: "создайте класс, в нем набор static final полей...". Ан нет, в 1.6 встроили в язык


В 1.5.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.09.06 16:57
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Почему бы не сделать язык, который ...


Потому-что паттернов может быть море. И на все случаи жизни соломку не подложишь. Такие вещи обязаны быть в библиотеке.

Кстати, паттерн "event" можно было бы и не делать если немного подумать.
Если у нас есть функциональный тип, то вместо событий можно заводить свойство или поле типа динамического массива нужного функционального типа. Будет чуть длинее:
public mutable MyEvent : array[int -> void] = array(0);

Но не так чтобы это было проблемой.
Далее остается реализовать для массива операторы "+" с "-" и дело будет в шляпе.
Ну, а можно и завести класс "event". Тогда будет вообще крастота:
public MyEvent : Event[int -> void] = Event();


Причем так как не надо описывать делегаты, то получается еще короче. Так что иногда паттерны можно не встраивать в язык, а полностью устранять необходимость в них. Думаю, что Курилка в том числе говори и об этом в своеей теме.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[31]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 28.09.06 21:31
Оценка:
Здравствуйте, FR, Вы писали:

FR>Ну поведение (и существование) вложенных функций мало зависит от того чей потомок язык <...>


Многие языки, внешне (синтаксически) похожие на Си, по своему действительному устройству (семантически) являются потомками совсем других языков.
Си++, наверное, единственный живой потомок Си.
Основной чертой Си (без которой этого языка просто нет) является адресная арифметика.
И сколько языков ее унаследовали?

AVC>>Ты меня (пока!) не убедил.

AVC>>Хотя бы потому, что потеря эффективности от использования классов не равна нулю.

FR>От классов в C++ равна нулю, от виртуальных функций ненулевая, но обычно близкая к нулю. Ты говорил о

FR>

FR>Разве что ценой значительной потери эффективности.
FR>А ведь Оберон все-таки эффективный язык

FR>этого и рядом нет.

Не будем спорить — искусным кодированием можно добиться многого.
То, что создание эффективного кода на Си++ (раньше просто — Си с классами) требует дополнительных навыков, не я придумал.
Об этом книги написаны (Булка и др.).
И причина в основном в классах (конструкторы и т.д.).

AVC>>>>Давай посмотрим на это с немного более абстрактной точки зрения.

FR>>>Это точка быстро скатывается до уровня машиного кода
AVC>>Хм... машинный код столь абстрактен?
FR>Так я же не виноват что твоя абстрактная точка зрения катится именно в эту сторону

Не замечал, но в принципе — может быть.
Я сейчас действительно продумываю детали оптимизатора, все эти перестановки инструкций, чтобы потрафить конвейеру, и т.п.
Возможно, это как-то "просачивается" наружу.

FR>Нормально если этим занимается компилятор, а не программист ручками. В обероне по моему победил второй вариант.


Боюсь, мы опять можем погрузиться в спор "персонально" об Обероне.
А спорить не хочется,
Поэтому все, что я скажу, — мои программы пишутся на Обероне удивительно легко.
А вокруг народ спорит, на чем же им, наконец, стоит писать.
Уверяют, что без той или иной "фичи" жить нельзя.
Мне эти фичи ни разу не потребовались.
Вероятно, это связано с характером ПО, которым я занимаюсь; допускаю, что моя точка зрения была бы иной, если бы я писал другие программы.

AVC>>У меня всегда были проблемы с пониманием отдельных приемов ФП.

AVC>>Именно потому, ИМХО, что какая-нибудь простая (с императивной точки зрения) сущность зачастую реализуется в них слишком сложно.

FR>Замыкания ничем ни сложнее объектов.


Согласен.
Но, ИМХО, в процедурных языках вроде Оберона они небезопасны.
По крайней мере, я сразу не вижу, как можно объединить "замыкания" с процедурными переменными и ничем при этом не пожертвовать.
Стоит ли овчинка выделки?
В Обероне существуют свои паттерны, приемы и идиомы, иногда довольно специфичные — "программная шина" и т.п.
Я пока не сталкивался на практике с какими-либо существенными ограничениями Оберона (повторюсь, что, возможно, это связано с типом программирования, которым я в последнее время занимаюсь).

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

Хоар
Re[32]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 28.09.06 21:48
Оценка:
Здравствуйте, AVC, Вы писали:

AVC>Основной чертой Си (без которой этого языка просто нет) является адресная арифметика.


Если обобщить, то вообще — "вольное обращение с указателями" (указатель может указывать на что угодно; массив передается как указатель; нет передачи аргумета по ссылке и т.д.).
Чего изначально и намеренно не было в Паскале и его потомках, где указатели работают только с кучей, есть передача аргументов по ссылке и т.д.

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

Хоар
Re[9]: Паттерны суть слабости языков программирования
От: Sinclair Россия https://github.com/evilguest/
Дата: 29.09.06 04:39
Оценка: +1
Здравствуйте, VladD2, Вы писали:
VD>Кстати, паттерн "event" можно было бы и не делать если немного подумать.
VD>Если у нас есть функциональный тип, то вместо событий можно заводить свойство или поле типа динамического массива нужного функционального типа.
Нельзя. Будет нарушена инкапсуляция. Обрати внимание, что снаружи невозможно получить список подписчиков на event или отписать кого-то неизвестного. В Delphi так и было — события реализовывались как свойства функционального типа. В дотнете все грабли именно с тем, что для свойства есть риск сделать = вместо +=.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[9]: Паттерны суть слабости языков программирования
От: Sinclair Россия https://github.com/evilguest/
Дата: 29.09.06 04:39
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:
ANS>Здравствуйте, Sinclair, Вы писали:
ANS>пример, пары таких ошибок можно узнать?
public class EventPublisher
{
public EventHandler SomethingHappen;
public event EventHandler SomethingElseHappen;
}

public class EventSubscriber
{
public SubscribeTo(EventPublisher p)
{
p.SomethingHappen += HandleEvent; // ok
p.SomethingElseHappen += HandleEvent; // ok
p.SomethingHappen = HandleEvent; // ok!!!
p.SomethingElseHappen = HandleEvent; // compiler error
}
private void HandleEvent(object sender, EventArgs a)
{
}
}
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[15]: Паттерны суть слабости языков программирования
От: Трурль  
Дата: 29.09.06 05:56
Оценка: +1 -1
Здравствуйте, FR, Вы писали:


FR>>>Если осторожно, то ничего страшного. В той же схеме очень интенсивно используют и ничего

Т>>Что хохлу в радость, то свинье — смерть.

FR>А почему куда потерял?


Это же было "кажется", но шас попробую сформулировать.
Когда в замыкании фиксируются значения, получаются простые и понятные с детства знакомые функции. Но когда в замыкании переменные, получается нечто маловразумительное: разрозненные процедуры, манипулирующие частью глобального состояния программы, для которой даже нет имени. Наверняка, этому можно найти применение. Но "как мудрые программисты, осознающие свои ограничения" мы вряд ли воспользуемся этой свободой. Скорее, следуя учению тт. Абельсона и Сассмана, мы соберем все эти процедуры в некоторую структуру и дадим ей имя. То есть, получим самый обычный объект.
Re[32]: Паттерны суть слабости языков программирования
От: FR  
Дата: 29.09.06 06:10
Оценка:
Здравствуйте, AVC, Вы писали:


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

AVC>Си++, наверное, единственный живой потомок Си.
AVC>Основной чертой Си (без которой этого языка просто нет) является адресная арифметика.

Я не думаю что это основная черта си.

AVC>И сколько языков ее унаследовали?


Ну например C# и D.


AVC>Не будем спорить — искусным кодированием можно добиться многого.


При чем тут искуссное кодирование? Тут виноваты только разработчики компиляторов

AVC>То, что создание эффективного кода на Си++ (раньше просто — Си с классами) требует дополнительных навыков, не я придумал.

AVC>Об этом книги написаны (Булка и др.).
AVC>И причина в основном в классах (конструкторы и т.д.).

Угу только учти что без классов все это чащае всего и выглядет стрешнее и работы тербует больше.

FR>>Так я же не виноват что твоя абстрактная точка зрения катится именно в эту сторону


AVC>Не замечал, но в принципе — может быть.

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



FR>>Нормально если этим занимается компилятор, а не программист ручками. В обероне по моему победил второй вариант.


AVC>Боюсь, мы опять можем погрузиться в спор "персонально" об Обероне.

AVC>А спорить не хочется,
AVC>Поэтому все, что я скажу, — мои программы пишутся на Обероне удивительно легко.

На любом нормально освоенном языке программы пишутся удивительно легко

AVC>А вокруг народ спорит, на чем же им, наконец, стоит писать.


Что-то не замечал, вроде большинство здесь довно выбрали на чем писать.

AVC>Уверяют, что без той или иной "фичи" жить нельзя.

AVC>Мне эти фичи ни разу не потребовались.

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

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


А какой именно характер у твоего ПО?

AVC>>>У меня всегда были проблемы с пониманием отдельных приемов ФП.

AVC>>>Именно потому, ИМХО, что какая-нибудь простая (с императивной точки зрения) сущность зачастую реализуется в них слишком сложно.

FR>>Замыкания ничем ни сложнее объектов.


AVC>Согласен.

AVC>Но, ИМХО, в процедурных языках вроде Оберона они небезопасны.

Не опаснее объектов. Если же использовать лексическое статистическое связывание то безопаснее объектов.

AVC>По крайней мере, я сразу не вижу, как можно объединить "замыкания" с процедурными переменными и ничем при этом не пожертвовать.


Я вот не пойму чем именно придется пожертвовать?
Старый код это не затронет, синтаксис не изменится, те кому это не нужно могут просто игнорировать. Например я видел код на питоне, в стиле java все в сплошных мелких классах, его можно переписать на замыканиях сократив раза в два и сделав намного понятнее, но и так как написано работает и то что в языке есть замыкания не мешает писать и по старому.

AVC>Стоит ли овчинка выделки?


Стоит

AVC>В Обероне существуют свои паттерны, приемы и идиомы, иногда довольно специфичные — "программная шина" и т.п.


Интересно, что за зверь?

AVC>Я пока не сталкивался на практике с какими-либо существенными ограничениями Оберона (повторюсь, что, возможно, это связано с типом программирования, которым я в последнее время занимаюсь).


Ты не будешь видеть ограничения пока не попробуешь поработать на более мощных языках. Сам через это проходил, да и здесь думаю полно народа которые это подтвердят.
Re[31]: Паттерны суть слабости языков программирования
От: Трурль  
Дата: 29.09.06 06:11
Оценка:
Здравствуйте, FR, Вы писали:

FR>От классов в C++ равна нулю, от виртуальных функций ненулевая, но обычно близкая к нулю.


А от сборки мусора? Хотя окамловский сборщик мусора очень хорош,но все же на современнных процессорах стек — более подходящее место для локальных переменных, чем куча.
Re[16]: Паттерны суть слабости языков программирования
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 29.09.06 06:13
Оценка:
VladD2,

VD>Поддерживать средства и иметь языковые возможности несколько разные задачи. Вот для C# есть туча движков для метапрограмирования и что?


Да получается, что C# тоже весь насквозь мета, всё упирается в количество сахара
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[16]: Паттерны суть слабости языков программирования
От: FR  
Дата: 29.09.06 06:14
Оценка:
Здравствуйте, Трурль, Вы писали:


FR>>А почему куда потерял?


Т>Это же было "кажется", но шас попробую сформулировать.

Т>Когда в замыкании фиксируются значения, получаются простые и понятные с детства знакомые функции. Но когда в замыкании переменные, получается нечто маловразумительное: разрозненные процедуры, манипулирующие частью глобального состояния программы, для которой даже нет имени. Наверняка, этому можно найти применение. Но "как мудрые программисты, осознающие свои ограничения" мы вряд ли воспользуемся этой свободой. Скорее, следуя учению тт. Абельсона и Сассмана, мы соберем все эти процедуры в некоторую структуру и дадим ей имя. То есть, получим самый обычный объект.

А ну это понятно, я думал есть другие причины кроме религиозных
Re[32]: Паттерны суть слабости языков программирования
От: FR  
Дата: 29.09.06 06:17
Оценка:
Здравствуйте, Трурль, Вы писали:

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


FR>>От классов в C++ равна нулю, от виртуальных функций ненулевая, но обычно близкая к нулю.


Т>А от сборки мусора? Хотя окамловский сборщик мусора очень хорош,но все же на современнных процессорах стек — более подходящее место для локальных переменных, чем куча.


От сборки мусора конечно, но и тут от оптимизатора зависит, тот же окамловский простые случаи вообще до константных чисел раскрывает.
Re[33]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 29.09.06 07:28
Оценка:
Здравствуйте, FR, Вы писали:

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

AVC>>Си++, наверное, единственный живой потомок Си.
AVC>>Основной чертой Си (без которой этого языка просто нет) является адресная арифметика.

FR>Я не думаю что это основная черта си.


Ну вот мне после 20 лет интенсивного кодирования на Си подумалось, что основная.
(Еще можно отметитть краткость синтаксиса, слабую типизацию и наличие битовых операций, но специфическая связь между массивами и указателями, ИМХО, наиболее яркая черта.)
До появления нормальных оптимизаторов адресная арифметика позволяла оптимизировать код "вручную".
Например:
{
    register struct xxx *p;
    struct xxx *stop = &a[n];

    for (p = &a[0]; p < stop; ++p)
    {
         p->...
    }
}


AVC>>И сколько языков ее унаследовали?


FR>Ну например C# и D.


Я в C# не силен (из Си-подобных языков мне по характеру работы наиболее подходит как раз Си ), поэтому верю каждому печатному слову.
Например:
http://www.intuit.ru/department/pl/csharp/11/

В языке C# снято существенное ограничение языка C++ на статичность массивов. Массивы в языке C# являются настоящими динамическими массивами. Как следствие этого, напомню, массивы относятся к ссылочным типам, память им отводится динамически в "куче". К сожалению, не снято ограничение 0-базируемости, хотя, на мой взгляд, в таком ограничении уже нет логики из-за отсутствия в C# адресной арифметики. Было бы гораздо удобнее во многих задачах иметь возможность работать с массивами, у которых нижняя граница не равна нулю.


AVC>>Не будем спорить — искусным кодированием можно добиться многого.


FR>При чем тут искуссное кодирование? Тут виноваты только разработчики компиляторов


Ну и не без этого (хотя я имел в виду, что кодировать на Си++ надо весьма вдумчиво, а то полезут всякие временные объекты, да еще со своими конструкторами).
Только вот "у нас" в Обероне жалоб на них (разработчиков компиляторов) меньше.
Просто написать хороший компилятор Си++ намного труднее, чем хороший же компилятор Оберона.

AVC>>То, что создание эффективного кода на Си++ (раньше просто — Си с классами) требует дополнительных навыков, не я придумал.

AVC>>Об этом книги написаны (Булка и др.).
AVC>>И причина в основном в классах (конструкторы и т.д.).

FR>Угу только учти что без классов все это чащае всего и выглядет стрешнее и работы тербует больше.


Это другой вопрос.
Я только отметил, что накладные расходы на классы все-таки есть.
Догадываюсь, что и сборка мусора в Ocaml не совсем бесплатная.

FR>>>Нормально если этим занимается компилятор, а не программист ручками. В обероне по моему победил второй вариант.


AVC>>А вокруг народ спорит, на чем же им, наконец, стоит писать.


FR>Что-то не замечал, вроде большинство здесь довно выбрали на чем писать.


Давно пишут, да.
Но до сих пор выбирают.
Споры о языках у нас порой самые жуткие.

AVC>>Уверяют, что без той или иной "фичи" жить нельзя.

AVC>>Мне эти фичи ни разу не потребовались.

FR>Да есть такой эффект, когда пишешь на менее мощном языке просто не понимаешь зачем нужны какие то кажущиеся заумными и бесполезными вещи.


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


FR>А какой именно характер у твоего ПО?


В основном — системное (компиляторы, отладчики и т.п.).

FR>>>Замыкания ничем ни сложнее объектов.


AVC>>Согласен.

AVC>>Но, ИМХО, в процедурных языках вроде Оберона они небезопасны.

FR>Не опаснее объектов. Если же использовать лексическое статистическое связывание то безопаснее объектов.


В Обероне (в отличие от ФЯ) опаснее.
Система типов в Обероне герметичная, доступ в память полностью под контролем.
А если использовать "замыкание" со стековыми локальными переменными и наличии в языке процедурных переменных (а в Обероне это так), то можно получить "замыкательный" аналог "dangling pointer".

AVC>>По крайней мере, я сразу не вижу, как можно объединить "замыкания" с процедурными переменными и ничем при этом не пожертвовать.


FR>Я вот не пойму чем именно придется пожертвовать?

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

AVC>>Стоит ли овчинка выделки?


FR>Стоит


Спорить не стану, буду думать.
Меня смущает, что в моей практике (возможно, дело в ее ограниченности) в замыканиях нужды нет.
Но чем черт не шутит, может я еще просто не распробовал этот "фрукт".

AVC>>В Обероне существуют свои паттерны, приемы и идиомы, иногда довольно специфичные — "программная шина" и т.п.


FR>Интересно, что за зверь?


Отдаленно похоже на обработку оконных сообщений в Windows, но при полном контроле типов.
Сообщение передается как запись (структура).
Обработчик сообщений обрабатывает сообщение в соответствии с его динамическим типом. (Благодаря специфическому устройству дескриптора типа в Обероне динамическая проверка типа сводится к одному сравнению (в машинном коде).)
Главное назначение — возможность расшения набора сообщений без перекомпиляции других модулей.
Используется в основном для визуальных объектов, в сочетании с принипом "родительского контроля" позволяет делать рассылки без "актов подписки/отписки" и связанных с ними возможных ошибок.
Ну и т.д.

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

Хоар
Re[10]: Паттерны суть слабости языков программирования
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 29.09.06 07:31
Оценка: +1
Здравствуйте, Sinclair, Вы писали:

S> public EventHandler SomethingHappen;

S> public event EventHandler SomethingElseHappen;
S> p.SomethingHappen = HandleEvent; // ok!!!
S> p.SomethingElseHappen = HandleEvent; // compiler error

Ради этого вводить сущность event? А не проще было сделать интерфейс addEvent, removeEvent. А прямой доступ вообще закрыть. Или сдесь еще есть что-то?
http://www.smalltalk.ru | << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[34]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 29.09.06 07:47
Оценка: +1
AVC>>>И сколько языков ее унаследовали?

FR>>Ну например C# и D.


Ага, кажется понял, что ты имел в виду.
http://www.bytemag.ru/?ID=600814

Указатели и управление памятью. В языке C++ работа с указателями занимает одно из центральных мест. Нормальный стиль программирования на C# предполагает написание безопасного кода, а это значит — никаких указателей, никакой адресной арифметики, никакого управления распределением памяти. Возможность работы с указателями в духе C++ ограничена "небезопасными" блоками. Небезопасный код для C# программистов будет скорее исключением, чем правилом.

Т.е. в unsafe блоках все-таки использовать адресную арифметику можно.
Ясно. Наверное, меня тут Java немного с толку сбила: думал, после нее уже вообще не станут использовать адресную арифметику.

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

Хоар
Re[9]: Паттерны суть слабости языков программирования
От: kan Великобритания  
Дата: 29.09.06 08:06
Оценка:
VladD2 wrote:

> public MyEvent : Event[int -> void] = Event();

> Причем так как не надо описывать делегаты, то получается еще короче. Так
> что иногда паттерны можно не встраивать в язык, а* полностью устранять
> необходимость в них*. Думаю, что Курилка в том числе говори и об этом в
> своеей теме.
А это точно всё? Ты уверен, что банальный массив указателей на методы удовлетворит жаждущего паттерн Visitor? Ведь если
взять те же boost::signals и посмотреть что там есть:
Ordering slot call groups
Passing values from slots
Disconnecting Slots
Blocking Slots
Scoped connections

Или это уже не паттерн?
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[10]: Паттерны суть слабости языков программирования
От: gandalfgrey  
Дата: 29.09.06 08:16
Оценка: 1 (1) +1
Здравствуйте, VladD2, Вы писали:

VD>Преувеличение считать, что твое мнение является истиной в последнй инстанции.

VD>Я же говорю о том о чем много раз говорил с другими программистами. В FAR-е сегодня писать решатся еденицы.
Кто говорит про незыблемую истину ? Я всего лишь ОБОСНОВАННО опроверг твое утверждение, что студия нужна всем. И ФАР был как пример, поскольку люди используют и Сцинтиллу, и Анжуту, которые не более чем редакторы с тем или иным сервисом. Кроме того, не будем забывать про существование Эклипса ( который тяжел и кривоват ) и Емакса /ВИМа

VD>Такое ощущение что от этого всем должно стать сразу радоснее. Я бы еще понял, если бы ты был преставителем супер-мега-стартапа поднявшегося за год с нуля в короли. А так...

Это означает, что нет потребности в чем-то более другом. Радостнее или нет — это еще вопрос, но то, что печали и скорби ни у кого не вызывает — это факт.

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

На предыдущей работе или сейчас ?
Ссылка бесполезна, ибо информационный сайт давно не обновлялся
Раньше писал всякую телеметрию / телеуправление, удаленную обработку приборных данных и т.п. Все многоплатформенное, и Вынь никак не основная платформа. Стоит и используется на ядерных и прочих критических производствах. Языки : С, С++, Тикль, Ерланг
Сейчас делаем сервер обработки муниципальных данных. Это всяческие паспортные столы, товарищества собственников жилья и прочее. Движок гибкий : позволяет использовать как скрипты, так и наборы правил для реализации конкретного приложения. Сервер целиком на ерланге + на ерланге же в нем реализован DSL. Клиент на тикле + около 200 строк на плоском С

G>>Более того, когда я попытался внедрить IDE для тикля ( KOMODO ), это не нашло понимания среди сотрудников.

G>>Так что — окошечки, конечно, хорошо и красиво, но надобность в них не шибео велика

VD>Это твое мнение которое не разделяет большинство программистов. Если вам нравится экзотика, то никто вам мешать не будет. Но не надо обосновывать воей экзотичностью отсуствие нобходимости в чем-то для окружающий.

Они сами — не жаждут. Им никто не запрещает использовать то, что больше понравится. Даже более того, я это поощряю ( в робкой надежде, что производительность труда возрастет ). Они и пробуют периодически то одно, то другое. Заметного выигрыша как-то не обнаружено.
Почему экзотика ? Или ты про выбор языков ?

VD>Я вот, например, не имею машину и не хочу ее иметь. Причем с деньгами у меня все впорядке. Просто она мне не нужна. У меня работа в 10 минутах хотьбы. Спортзал тоже. А если куда-то нужно доехать то проще руку поднять. Ну, и что? Обоснуем этим фактом отсуствие необходимости в автотранспорте вообще? А кому я тогда руку буду поднимать? И ведь в моем случае никакой экзотики.

Это какая-то совсем левая аналогия...
Re[17]: Паттерны суть слабости языков программирования
От: Трурль  
Дата: 29.09.06 08:21
Оценка: +2
Здравствуйте, FR, Вы писали:
FR>А ну это понятно, я думал есть другие причины кроме религиозных

Я бы классифицировал их как прагматические . На фига мне замыкания, если я буду использовать из как объекты, а объекты и так уже есть?
Re[34]: Паттерны суть слабости языков программирования
От: FR  
Дата: 29.09.06 12:31
Оценка: 3 (1)
Здравствуйте, AVC, Вы писали:


AVC>Ну вот мне после 20 лет интенсивного кодирования на Си подумалось, что основная.


Не знаю, по моему основное в си максимальная близость к железу, все остальное следствия.


FR>>Ну например C# и D.


AVC>Я в C# не силен (из Си-подобных языков мне по характеру работы наиболее подходит как раз Си ), поэтому верю каждому печатному слову.


В unsafe доступна работа с указателями и индексной арифметикой.


FR>>При чем тут искуссное кодирование? Тут виноваты только разработчики компиляторов


AVC>Ну и не без этого (хотя я имел в виду, что кодировать на Си++ надо весьма вдумчиво, а то полезут всякие временные объекты, да еще со своими конструкторами).

AVC>Только вот "у нас" в Обероне жалоб на них (разработчиков компиляторов) меньше.
AVC>Просто написать хороший компилятор Си++ намного труднее, чем хороший же компилятор Оберона.

Это да.

AVC>Это другой вопрос.

AVC>Я только отметил, что накладные расходы на классы все-таки есть.
AVC>Догадываюсь, что и сборка мусора в Ocaml не совсем бесплатная.

конечно.

AVC>Давно пишут, да.

AVC>Но до сих пор выбирают.
AVC>Споры о языках у нас порой самые жуткие.




FR>>А какой именно характер у твоего ПО?


AVC>В основном — системное (компиляторы, отладчики и т.п.).


Такие вещи говорят как раз проще писать ML подобных языках, например на том же Ocaml'е


AVC>В Обероне (в отличие от ФЯ) опаснее.

AVC>Система типов в Обероне герметичная, доступ в память полностью под контролем.
AVC>А если использовать "замыкание" со стековыми локальными переменными и наличии в языке процедурных переменных (а в Обероне это так), то можно получить "замыкательный" аналог "dangling pointer".

Если вводить в оберон замыкание, этой "опаснасти" быть не должно, компилятор должен при создании замыкания копировать переменные в контекст.


FR>>Стоит


AVC>Спорить не стану, буду думать.

AVC>Меня смущает, что в моей практике (возможно, дело в ее ограниченности) в замыканиях нужды нет.
AVC>Но чем черт не шутит, может я еще просто не распробовал этот "фрукт".



AVC>>>В Обероне существуют свои паттерны, приемы и идиомы, иногда довольно специфичные — "программная шина" и т.п.


FR>>Интересно, что за зверь?


AVC>Отдаленно похоже на обработку оконных сообщений в Windows, но при полном контроле типов.


То есть аналог dispath (если склероз не подвел) методов из Delphi?
Re[34]: Паттерны суть слабости языков программирования
От: WolfHound  
Дата: 29.09.06 15:25
Оценка: 16 (3)
Здравствуйте, AVC, Вы писали:

FR>>А какой именно характер у твоего ПО?

AVC>В основном — системное (компиляторы, отладчики и т.п.).
Ууу... Тут тебе самая дорога на клоны ML вобще и немерле в чатности.
Я тут пишу парсер простенького языка описаний чтото типа такого:
chanel FileStorageChanel
{
    message Ok();
    message Error(message : string);

    message BeginTransaction();
    message PutFile(name : string, data : stream);
    message DelFile(name : string);
    message EndTransaction();
    message Commit();
    message Rollback();

    state Main
    {
        !BeginTransaction
        (!PutFile | !DelFile)*
        !EndTransaction
        (!Commit | !Rollback)
        (?Ok | ?Error)
        -> Main
    }

    message GetFile(name : string);
    message File(data : stream);

    state Main
    {
        !GetFile
        (?File | ?Error)
        -> Main
    }
}

process FileStorage
{
    Start(key : string, user : string, chanel : FileStorageChanel.Out.Main);
}

Ключевые слова chanel, message, state, process контекстно зависимые те можно написать так
chanel chanel
{
    message message();
}

И мы получим канал с именем chanel в котором есть сообщение с именем message.
Думаю полностью рукописный синтаксический анализатор со всеми проверками и человекочитаемыми сообщениями об ошибках у меня займет 400 — 500 строк.
А все по тому что после лексера который еще и сворачивает по скобкам и имена типа asd.asd.asd также сворачивает в один токен
[Record]
public variant Token
{
    public begin : Pos;
    public end : Pos;
    
    | Identifier { name : list[string]; }
    | Operator { name : string; }
    | Semicolon                      // ;
    | Colon                          // :
    | Comma                          // ,
    | Brace { tokens : list[Token] } // { }
    | Round { tokens : list[Token] } // ( )
//Дальше идет реализация лексера мение 200 строк

я могу писать так
        def parse(tokens : list[Token])
        {
        | Identifier(["chanel"]) :: Identifier(name) :: Brace(decls) :: tokens =>
            parseChanel(name, decls);
            parse(tokens);

        | Identifier(["process"]) :: Identifier(name) :: Brace(decls) :: tokens =>
            parseProcess(name, decls);
            parse(tokens);

        | token :: _ => 
            throw CompileError(token);
        
        | [] => ()
        }
        and parseChanel(name, decls)
        {
            WriteLine($"chanel : $name");
            def parse(decls : list[Token])
            {
            | Identifier(["message"]) :: Identifier(name) :: Round(decls) :: Semicolon :: tokens =>
                parseMessage(name, decls);
                parse(tokens);

            | Identifier(["state"]) :: Identifier(name) :: Brace(decls) :: tokens =>
                parseState(name, decls);
                parse(tokens);
            
            | token :: _ => 
                throw CompileError(token);
            
            | [] => ()
            }

Причем нет никаких проблем с заглядыванием вперед (хотя тут оно вобщем и не нужно).

Это называется pattern-matching + алгебраические типы(variant).
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[17]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.09.06 17:44
Оценка:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>Да получается, что C# тоже весь насквозь мета, всё упирается в количество сахара


Получается, что кто-то выдает желаемое за действительное и в упор не хочет видеть факты.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.09.06 17:44
Оценка:
Здравствуйте, gandalfgrey, Вы писали:

VD>>Преувеличение считать, что твое мнение является истиной в последнй инстанции.

VD>>Я же говорю о том о чем много раз говорил с другими программистами. В FAR-е сегодня писать решатся еденицы.
G>Кто говорит про незыблемую истину ? Я всего лишь ОБОСНОВАННО опроверг твое утверждение,

Своим частным мнением? Создай голосование, увидишь чего оно стоит.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.09.06 17:44
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Нельзя. Будет нарушена инкапсуляция.


S> Обрати внимание, что снаружи невозможно получить список подписчиков на event или отписать кого-то неизвестного.


Event можно сделать классом и наружу выставить только операторы + и -.
Ключевое слово event в C# банально вводит свойство доступное только для чтения обеспечивая доступ к нему только по операторам + и -. В общем, бессмысленный хардкодинг.

Да и кому такая инкапсуляция нужна. Это что инкапсуляция ради инкапсуляции?

S> В Delphi так и было — события реализовывались как свойства функционального типа.


В Дельфи не было списка.

S> В дотнете все грабли именно с тем, что для свойства есть риск сделать = вместо +=.


Для этого достаточно сделать свойство доступное только для чтения или такое же поле. В общем, это уже притягивание за уши никому не нужной фигни. Да и в Дельфи никогда проблем не видел.

А вот то что в язык вообще не надо встраивать ничего чтобы получить такой же эффект — это показатель. И таких вещей море.

В общем, я согласен с автором статьи приведенной в теме, что наличие паттернов является показателем отсуствия в языке нужных средств. И согласен с Курилкой, что лучшим решением будет не хардкодинг паттернов в языке, а добавление средств позволяющих оформлять паттерны в виде библиотек и расширять язык шататными средствами.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.09.06 17:44
Оценка:
Здравствуйте, kan, Вы писали:

kan>VladD2 wrote:


>> public MyEvent : Event[int -> void] = Event();

>> Причем так как не надо описывать делегаты, то получается еще короче. Так
>> что иногда паттерны можно не встраивать в язык, а* полностью устранять
>> необходимость в них*. Думаю, что Курилка в том числе говори и об этом в
>> своеей теме.
kan>А это точно всё?

Ага. Для событий все. Причем не нужно даже ядрёной енергии макросов. Просто более грамотный дизайн языка.

kan> Ты уверен, что банальный массив указателей на методы удовлетворит жаждущего паттерн Visitor?


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

kan> Ведь если взять те же boost::signals и посмотреть что там есть: kan>Ordering slot call groups

kan>Passing values from slots
kan>Disconnecting Slots
kan>Blocking Slots
kan>Scoped connections

kan>Или это уже не паттерн?


Весь буст это недоразумение. В нем в основном реализуется то, что должно быть реализовано в языке. Это мое, сугубо личное, мнение.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[35]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.09.06 17:44
Оценка: :)
Здравствуйте, WolfHound, Вы писали:

WH>Это называется pattern-matching + алгебраические типы(variant).


Да уж Обероновские структуры с динамическим типом явно отдыхают.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[35]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 30.09.06 07:02
Оценка:
Здравствуйте, WolfHound, Вы писали:

FR>>>А какой именно характер у твоего ПО?

AVC>>В основном — системное (компиляторы, отладчики и т.п.).
WH>Ууу... Тут тебе самая дорога на клоны ML вобще и немерле в чатности.

Спасибо за идею.
Я буду посматривать в этом направлении.

При создании компилятора надо решить много разных задач, больших и маленьких.
(Слава Богу, что это давно не целина, а хорошо исследованная область!)
Кроме лексического разбора, синтаксического и семантического анализа есть еще оптимизация и генерация кода, сохранение отладочной информации и т.д.
Есть и свои противоречия: например, трудновато совместить оптимизацию кода и отладку (оптимизированный код далек от исходного).
Собственно, именно, они и занимают все время, лексика и синтаксис обычно вообще не проблема (если это не Си++ ).
Интересно, насколько клоны ML могут помочь мне в этих задачах.
Что же касается синтаксического анализа, то частенько "все сделано до нас" (для известных языков).
Если есть необходимость написать парсер и не хочется писать его методом рекурсивного спуска a-la Wirth (или грамматика не позволяет), то в нашем распоряжении yacc (для LR-грамматик) или CoCo/R(для LL(1)-грамматик; кстати, автор CoCo/R является также автором языков Object Oberon и Оберон-2).

WH> <...>

WH>Причем нет никаких проблем с заглядыванием вперед (хотя тут оно вобщем и не нужно).

А какие есть проблемы с заглядыванием вперед?
Если я пользуюсь генератором парсеров, то я вообще с такой проблемой не сталкиваюсь.
Если пишу парсер вручную, то заглядывание происходит всего на один символ вперед.

WH>Это называется pattern-matching + алгебраические типы(variant).


Спасибо, буду знать.

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

Хоар
Re[35]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 30.09.06 07:29
Оценка: +1
Здравствуйте, FR, Вы писали:

AVC>>Ну вот мне после 20 лет интенсивного кодирования на Си подумалось, что основная.

FR>Не знаю, по моему основное в си максимальная близость к железу, все остальное следствия.

"Близость к железу" — скорее, все-таки, "идея".
Если разбирать конкретные особенности языка, то "близость к железу" превратится в конкретные пункты:

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

Пункты 2 и 3 позволяют программисту неплохо оптимизировать циклы вместо оптимизатора.
При наличии оптимизатора надобность в них отпадает, а адресная арифметика начинает скорее мешать оптимизации, чем помогать, т.к. способствует созданию "псевдонимов памяти" — известных блокираторов оптимизации.

FR>>>А какой именно характер у твоего ПО?

AVC>>В основном — системное (компиляторы, отладчики и т.п.).
FR>Такие вещи говорят как раз проще писать ML подобных языках, например на том же Ocaml'е

Спасибо тебе (а также WolfHound-у) за эту мысль.
Интересно будет познакомиться с другим подходом.

AVC>>Отдаленно похоже на обработку оконных сообщений в Windows, но при полном контроле типов.

FR>То есть аналог dispath (если склероз не подвел) методов из Delphi?

Увы, на Delphi я не писал; до Оберона основными языками у меня были Си/Си++ и Турбо Паскаль (в самом начале 90-х).
Единственно, что могу сказать: "программная шина" появилась в Обероне в 1980-х; в сочетании с модульностью это основной инструмент расширения системы.

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

Хоар
Re[36]: Паттерны суть слабости языков программирования
От: WolfHound  
Дата: 30.09.06 13:25
Оценка:
Здравствуйте, AVC, Вы писали:

AVC>При создании компилятора надо решить много разных задач, больших и маленьких.

AVC>(Слава Богу, что это давно не целина, а хорошо исследованная область!)
AVC>Кроме лексического разбора, синтаксического и семантического анализа есть еще оптимизация и генерация кода, сохранение отладочной информации и т.д.
Это тоже все оченьхорошо делается при помощи pattern-matching'а.
Ведь нам больше не нужно что-то придумывать ибо вместо этого мы можем просто написать паттерны.
AVC>Есть и свои противоречия: например, трудновато совместить оптимизацию кода и отладку (оптимизированный код далек от исходного).
Честно говоря вобще невижу смысла смешивать оптимизацию и отладку.

AVC>Что же касается синтаксического анализа, то частенько "все сделано до нас" (для известных языков).

А для толькочто придуманых?

AVC>Если есть необходимость написать парсер и не хочется писать его методом рекурсивного спуска a-la Wirth (или грамматика не позволяет), то в нашем распоряжении yacc (для LR-грамматик) или CoCo/R(для LL(1)-грамматик; кстати, автор CoCo/R является также автором языков Object Oberon и Оберон-2).

Тут не все так простл. Попробуй ими распарсить тотже C#... Влад пытался использовать CoCo/R но получилось мягко говоря не очень. А что касается всяких yacc'ов то их озвереешь отлаживать и добится от них человекочитаемых сообщений об ошибках.

AVC>А какие есть проблемы с заглядыванием вперед?

LL(1) циифирка 1 о чем говорит?
AVC>Если я пользуюсь генератором парсеров, то я вообще с такой проблемой не сталкиваюсь.
ты только с ней и сталкиваешься... просто ты уже привых укладывать грамматики в прокрустово ложе парсеров.
AVC>Если пишу парсер вручную, то заглядывание происходит всего на один символ вперед.
А я могу заглянуть на сколько нужно.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[35]: Паттерны суть слабости языков программирования
От: VoidEx  
Дата: 30.09.06 17:26
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Я тут пишу парсер простенького языка описаний чтото типа такого:

WH>
WH>channel FileStorageChan[b]n[/n]el
WH>

Может быть так? Или я не понял смысла ключевого слова?
Re[36]: Паттерны суть слабости языков программирования
От: VoidEx  
Дата: 30.09.06 17:27
Оценка:
Забыл извинться за оффтопик

Прошу прощения за оффтоп
Re[37]: Паттерны суть слабости языков программирования
От: Трурль  
Дата: 02.10.06 05:30
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>LL(1) циифирка 1 о чем говорит?

WH>А я могу заглянуть на сколько нужно.
Всё равно это будет LL(N). На Обероне можно сделать практически так же, хотя длиннее и не так красиво.
[code]
IF tokens[pos] IS Identifier & tokens[pos](Identifier).name = "chanel"
& tokens[pos+1] IS Identifier
& tokens[pos+2] IS Brace
THEN
parseChanel(tokens[pos+1](Identifier).name, tokens[pos+1].Brace.decls,0);
parse(tokens, pos+2);
ELSIF ...
[code]

А вот Пролог позволяет не парицца с N.
Re[11]: Паттерны суть слабости языков программирования
От: Дарней Россия  
Дата: 02.10.06 06:56
Оценка:
Здравствуйте, gandalfgrey, Вы писали:

Муниципальный софт, говоришь? Тогда неудивительно, что не жалуются Народ там не избалован удобными программами, мягко говоря.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[12]: Паттерны суть слабости языков программирования
От: gandalfgrey  
Дата: 02.10.06 08:18
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Своим частным мнением? Создай голосование, увидишь чего оно стоит.

Мы все еще говорим про надобность / необходимость IDE ?
А как создать голосование ?
Re[12]: Паттерны суть слабости языков программирования
От: gandalfgrey  
Дата: 02.10.06 08:33
Оценка: +1
Здравствуйте, Дарней, Вы писали:

Д>Муниципальный софт, говоришь? Тогда неудивительно, что не жалуются Народ там не избалован удобными программами, мягко говоря.

А как связан тип написуемого софта с использованием / неиспользованием IDE ?
Не жалуются-то разработчики, а не конечные юзвери — которым как-то без разницы, каким образом это писалось. Им ( юзверям ) хочется удобный и красивый гуй, который они и получают.
Re[11]: Паттерны суть слабости языков программирования
От: kan Великобритания  
Дата: 02.10.06 09:04
Оценка:
VladD2 wrote:

> kan>А это точно всё?

> Ага. Для событий все. Причем не нужно даже ядрёной енергии макросов.
> Просто более грамотный дизайн языка.
"640кб оперативной памяти должно быть достаточно для каждого".

> kan> Ты уверен, что банальный массив указателей на методы удовлетворит

> жаждущего паттерн Visitor?
> Уверен, что нет. Но на личном опыте убеждался, что средствами
> метапрограммирования паттерн Посетитель реализуется элементарно. Далее
> он ложится в библиотеку и становится столь элементарным в исползовании,
> что просто поразительно как другие тратят столько времени на его
> реализацию и, самое главное, на его поддержание.
Реализованный паттерн Посетитель это уже не паттерн, а конкретный алгоритм.

> kan> Ведь если взять те же boost::signals и посмотреть что там есть:

> kan>Ordering slot call groups
> kan>Passing values from slots
> kan>Disconnecting Slots
> kan>Blocking Slots
> kan>Scoped connections
> kan>Или это уже не паттерн?
> Весь буст это недоразумение. В нем в основном реализуется то, что должно
> быть реализовано в языке. Это мое, сугубо личное, мнение.
Забудь о том что это буст. Перечисленные возможности по-твоему к чему относятся? Это паттерн Посетитель? Или что?
Посмотри на SObjectizer (110000 строк кода, ну ладно, пусть на Nemerle будет в 100 раз меньше, 1100 строк), это всё ещё
события? Асинхронных событий никому не нужно? Что именно должно быть реализованно в языке?
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[11]: Паттерны суть слабости языков программирования
От: Sinclair Россия https://github.com/evilguest/
Дата: 02.10.06 09:18
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS> Ради этого вводить сущность event? А не проще было сделать интерфейс addEvent, removeEvent. А прямой доступ вообще закрыть. Или сдесь еще есть что-то?

Вы не могли бы излагать свои мысли более внятно?
Ок, попробую угадать, что имелось в виду в качестве альтернативы:
public interface IEvent 
{
  void AddHandler(EventHandler handler);
    void RemoveHandler(EventHandler handler);
}

public class EventPublisher
{
  private class EventImplementation: IEventHandler
    {
      private EventHandler _handler;
    public void AddHandler(EventHandler handler)
        {
            _handler += handler;
        }
        public void RemoveHandler(EventHandler handler)
        {
            _handler -= handler;
        }
        public void Invoke(object source, EventArg args)
        {
          if(_handler != null)
                _handler(source, args);
        }
    }
    
    private EventImplementation _eventHandler = new EventImplementation();
    public IEvent SomethingHappen { get { return _eventHandler; } }
}


public class EventSubscriber
{
    public SubscribeTo(EventPublisher p)
    {
        p.SomethingHappen.AddHandler(HandleEvent);
        p.SomethingHappen.RemoveHandler(HandleEvent);
    }
    private void HandleEvent(object sender, EventArgs a)
    {
    }
}

И вот это называется проще? Разработчикам компилятора естественно проще. К счастью, Хейльсберг больше думал о программистах, чем вы предлагаете. И встроил вот этот громоздкий паттерн в язык.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[11]: Паттерны суть слабости языков программирования
От: Sinclair Россия https://github.com/evilguest/
Дата: 02.10.06 09:18
Оценка:
Здравствуйте, VladD2, Вы писали:
VD>Event можно сделать классом и наружу выставить только операторы + и -.
Влад, это потребует написания класса на каждый чих. Зачем?
В качестве упражнения: попробуй реализовать аналогичную евентам функциональность в библиотеке на C# 2.0.
VD>Ключевое слово event в C# банально вводит свойство доступное только для чтения обеспечивая доступ к нему только по операторам + и -. В общем, бессмысленный хардкодинг.
Влад, в твоем возрасте пора бы уже привыкнуть к тому, что "Влад не видит смысла" != "бессмысленный". Ключевое слово event, кстати, никакого свойства не вводит. Оно вводит два спецметода похожим на свойство образом. Кроме того, оно иногда автоматически вводит поле подходящего типа.

VD>Да и кому такая инкапсуляция нужна. Это что инкапсуляция ради инкапсуляции?

Как бы всем. Влад, евенты встречаются в дотнете сплошь и рядом. Инкапсуляция, очевидно, нужна для устойчивости кода к мелким ошибкам, непроверяемым компилятором.
VD>В Дельфи не было списка.
Я в курсе.
S>> В дотнете все грабли именно с тем, что для свойства есть риск сделать = вместо +=.
VD>Для этого достаточно сделать свойство доступное только для чтения или такое же поле. В общем, это уже притягивание за уши никому не нужной фигни.
А общем, это уже просто нежелание напрячь мозг на 10 секунд чтобы понять очевидные вещи.
VD>Да и в Дельфи никогда проблем не видел.
Ну конечно не видел. Евенты в дельфи были одиночными, поэтому ситуация случайного переписывания обработчика вместо добавления в список не могла возникнуть.
Зато в тех местах, где была нужна множественная подписка, в VCL была написана просто тонна кода. Поверь мне на слово, Влад, Хейльсберг гораздо лучше, чем ты, знает достоинства и недостатки Delphi.
VD>А вот то что в язык вообще не надо встраивать ничего чтобы получить такой же эффект — это показатель. И таких вещей море.
VD>В общем, я согласен с автором статьи приведенной в теме, что наличие паттернов является показателем отсуствия в языке нужных средств.
Совершенно верно.
VD>И согласен с Курилкой, что лучшим решением будет не хардкодинг паттернов в языке, а добавление средств позволяющих оформлять паттерны в виде библиотек и расширять язык шататными средствами.
Совершенно верно. Поддержка event в шарпе — это хорошо. Необходимость переделки компилятора для этого — плохо. Я уверен, что nemerle позволяет реализовывать такие вещи без обращения к разработчикам компилятора. Что позволяет надеяться на его повальное внедрение.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[13]: Паттерны суть слабости языков программирования
От: Дарней Россия  
Дата: 02.10.06 09:47
Оценка:
Здравствуйте, gandalfgrey, Вы писали:

G>Не жалуются-то разработчики, а не конечные юзвери — которым как-то без разницы, каким образом это писалось.


Ну если так — пардон, неправильно понял.
А каков примерно функционал системы и объем кода?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[14]: Паттерны суть слабости языков программирования
От: gandalfgrey  
Дата: 02.10.06 10:37
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>Ну если так — пардон, неправильно понял.

Д>А каков примерно функционал системы и объем кода?
Сервер — на Ерланге. Включает в себя компилятор и среду выполнения своего спец-языка. Есть движок правил — для более жесткого и простого описания логики там, где это возможно. + процессор запросов от клиента. Все это поддерживает некую модель представления данных и связей между ними, как-то Человек-Прописка-Квартира ( в самом простом случае ). По замыслу, должно быть пригодно для обработки любой информации в рамках муниципальных отношений. Просто дописываются скрипты / правила для реализации дополнительной логики.
Клиент — на Тикле + чуть-чуть С. В нем : шина сообщений, процессор интерфейсов — автоматическая обработка форм в смысле сборки / разборки данных ( пока для не шибко сложных форм ), ну и куча формочек...
количество кода — для сервера 7500 строк, из них писано руками 4500, остальное сгенерено для лексера и парсера. Это после рефакторинга так сплющилось — аж самим удивительно, сколько мусора болталос... Для клиента — 6000 строк, из них где-то половина — это описание геометрии и инициализация.
Если бы мы с самого начала знали, какой рынок будет у нас СЕЙЧАС...месяца за 4 написали бы. Текущая реализация написана месяца за 2.5 — но не с нуля.
Re[12]: Паттерны суть слабости языков программирования
От: WolfHound  
Дата: 02.10.06 10:59
Оценка: +1
Здравствуйте, kan, Вы писали:

kan>"640кб оперативной памяти должно быть достаточно для каждого".

Демагогия.

kan>Реализованный паттерн Посетитель это уже не паттерн, а конкретный алгоритм.

Ты этим что хотел сказать?

kan>Забудь о том что это буст. Перечисленные возможности по-твоему к чему относятся?

boost::signals это жуткий мутант и ошибка природы которая должна умереть.
kan>Это паттерн Посетитель? Или что?
Это точно не посетитель. Ты вобще знаешь что такое посетитель и зачем он нужен?

kan>Посмотри на SObjectizer (110000 строк кода, ну ладно, пусть на Nemerle будет в 100 раз меньше, 1100 строк), это всё ещё события? Асинхронных событий никому не нужно? Что именно должно быть реализованно в языке?

Замыкния.

А что касается SObjectizer то мне тоже понадобилось асинхронное общение но идеология SObjectizer'а меня мягко говоря не впечатлила.
Пишу свой велосипед.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: Паттерны суть слабости языков программирования
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 02.10.06 11:14
Оценка:
Здравствуйте, Курилка, Вы писали:

Паттерны, они разные бывают. Не только примитивные и универсальные, описанные в GoF.
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[2]: Паттерны суть слабости языков программирования
От: Курилка Россия http://kirya.narod.ru/
Дата: 02.10.06 11:52
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Паттерны, они разные бывают. Не только примитивные и универсальные, описанные в GoF.


И что ты этим хотел сказать?
Re[13]: Паттерны суть слабости языков программирования
От: kan Великобритания  
Дата: 02.10.06 12:00
Оценка:
WolfHound wrote:

> kan>Реализованный паттерн Посетитель это уже не паттерн, а конкретный

> алгоритм.
> Ты этим что хотел сказать?
Паттерн != алгоритм. Реализация паттерна есть алгоритм (и то не всегда). Реализация алгоритма есть библиотека или
конструкция языка. Я понимаю, что часто эти понятия путаются, чаще ради упрощения, но в данном контексте, при обсуждении
сабжа — это важно различать.

> kan>Забудь о том что это буст. Перечисленные возможности по-твоему к

> чему относятся?
> boost::signals это жуткий мутант и ошибка природы которая должна умереть.
> kan>Это паттерн Посетитель? Или что?
> Это точно не посетитель.
А что?

> Ты вобще знаешь что такое посетитель и зачем он нужен?

In object-oriented programming and software engineering, the visitor design pattern is a way of separating an
algorithm from an object structure. A practical result of this separation is the ability to add new operations to
existing object structures without modifying those structures
.
(с) http://en.wikipedia.org/wiki/Visitor_pattern


В общем почти всё. Это относится к "public MyEvent : Event[int -> void] = Event();" довольно слабо. Что именно должно
поддерживаться языком?

> kan>Посмотри на SObjectizer (110000 строк кода, ну ладно, пусть на

> Nemerle будет в 100 раз меньше, 1100 строк), это всё ещё события?
> Асинхронных событий никому не нужно? Что именно должно быть реализованно
> в языке?
> Замыкния.
Причём тут это? Замыкания требуют gc, а языки без него уже не языки и в них паттерны не реализуются?

> А что касается SObjectizer то мне тоже понадобилось асинхронное общение

> но идеология SObjectizer'а меня мягко говоря не впечатлила.
> Пишу свой велосипед.
Неважно. Вопрос в другом. Ассинхронные сообщения это Event? А если сообщение можно временно блокировать, это всё ещё
Event? Или event это только то, что поддерживается языком "public MyEvent : Event[int -> void] = Event();"?
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[10]: Паттерны суть слабости языков программирования
От: Klapaucius  
Дата: 02.10.06 12:04
Оценка: +1
Здравствуйте, AVC, Вы писали:

AVC>Из всего, что я здесь прочел, напрашивается вывод, что "современными" считаются императивные языки с включением отдельных функциональных конструкций.


Не только. Современным может быть и чистый функциональный язык, например. Но это не важно.
Непонятно, кстати, почему слово "современные" Вы ставите в кавычки. Современные без всяких ковычек. Просто тенденция сейчас такая, веянье времени.
Если мы говорим об императивном ООП, то есть и нововведения которые никак нельзя назвать "отдельными функциональными конструкциями".
В этом смысле Scala — очень показательный пример.
... << 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[3]: Паттерны суть слабости языков программирования
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 02.10.06 12:26
Оценка: +3
Здравствуйте, Курилка, Вы писали:

AVK>>Паттерны, они разные бывают. Не только примитивные и универсальные, описанные в GoF.


К>И что ты этим хотел сказать?


То, что встраивать в язык паттерны вроде трехзвенного приложения или SCOAB было бы перебором, не находишь?

По факту есть паттерны, которые можно сделать конструкциями языка. Есть паттерны, для которых можно написать библиотеку, облегчающую их реализацию. Для некоторых паттернов нужна метабиблиотека. А некоторые — просто набор абстрактных идей. Пытаться подравнять все паттерны под одну гребенку, а потом делать на основе этого глубокомысленные выводы я бы не советовал.
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[4]: Паттерны суть слабости языков программирования
От: Курилка Россия http://kirya.narod.ru/
Дата: 02.10.06 12:32
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>По факту есть паттерны, которые можно сделать конструкциями языка. Есть паттерны, для которых можно написать библиотеку, облегчающую их реализацию. Для некоторых паттернов нужна метабиблиотека. А некоторые — просто набор абстрактных идей. Пытаться подравнять все паттерны под одну гребенку, а потом делать на основе этого глубокомысленные выводы я бы не советовал.


По факту получается, что паттерны — это слишком размазанное понятие,
Re[5]: Паттерны суть слабости языков программирования
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 02.10.06 12:47
Оценка:
Здравствуйте, Курилка, Вы писали:

К>По факту получается, что паттерны — это слишком размазанное понятие,


Не размазанное, просто довольно широкое. Утаптывать его в рамки GoF не стоит. Главное, что я хотел заметить, в другом — если мы то, что я сказал, применим к статье в корне топика, то статья, по сути, привратиться в набор банальностей.
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[6]: Паттерны суть слабости языков программирования
От: Курилка Россия http://kirya.narod.ru/
Дата: 02.10.06 13:02
Оценка: +2
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Курилка, Вы писали:


К>>По факту получается, что паттерны — это слишком размазанное понятие,


AVK>Не размазанное, просто довольно широкое. Утаптывать его в рамки GoF не стоит. Главное, что я хотел заметить, в другом — если мы то, что я сказал, применим к статье в корне топика, то статья, по сути, привратиться в набор банальностей.


А можно посмотреть это на с другой точки зрения: простые вещи типа визиторов и т.п. приравнивают к архитектурным паттернам и вместо того, чтобы реализовать просто удобный механизм, разводят религию аля "паттерны — это наше видение мира и надо всё описать паттернами". Т.е. как всегда крайности вещь вредная и надо находить золотую середину
Re[13]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.10.06 14:08
Оценка:
Здравствуйте, gandalfgrey, Вы писали:

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


VD>>Своим частным мнением? Создай голосование, увидишь чего оно стоит.

G>Мы все еще говорим про надобность / необходимость IDE ?

Я бы даже сказал про обязательность качественной поддержки мощьной IDE для того чтобы большинство программистов решилось использовать язык.

G>А как создать голосование ?


Сами голосования тут: http://rsdn.ru/poll/polllist.aspx

За списком голосований есть пункт добавить голосование.
Только добавляя голосование имеет смысл оставить возможность добавления своего варианта, так как почти наверняка многие захотят высказать особое мнение.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.10.06 14:08
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Влад, это потребует написания класса на каждый чих. Зачем?


Хороший такой чих. МС аж его захардкодил в язык и рантайм.
Меж тем создать такой класс нужно ровно один раз.

S>В качестве упражнения: попробуй реализовать аналогичную евентам функциональность в библиотеке на C# 2.0.


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

Что касается релизации на C# 2.0, то это действительно сложно так как язык не обладает базовыми элеми необходимыми для реализации этой возможности. А вот на Nemerle я тебе это реализую без особых проблем. Собственно об этом тебе и говорю.

VD>>Ключевое слово event в C# банально вводит свойство доступное только для чтения обеспечивая доступ к нему только по операторам + и -. В общем, бессмысленный хардкодинг.

S>Влад, в твоем возрасте пора бы уже привыкнуть к тому, что "Влад не видит смысла" != "бессмысленный".

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

Я выражаю свою точку зрения и не скрываю этого. Если ты не согласен с ней, то говори что-то по сущетсву, а не занимайся дешевыми переходами на личность оппнента.

S> Ключевое слово event, кстати, никакого свойства не вводит. Оно вводит два спецметода похожим на свойство образом. Кроме того, оно иногда автоматически вводит поле подходящего типа.


Это мелкие детали. По сути это тоже свойство вид сбоку. Тебе уже скзали, что небыло бы никакой разницы если бы вместо этих спец-методов был бы некий интерфейс с думя методами.

VD>>Да и кому такая инкапсуляция нужна. Это что инкапсуляция ради инкапсуляции?

S>Как бы всем.

Говори за себя. Я к этим всем не отношусь. Мня вообще в последнее время догмы парадигм все меньше колышат. Меня колышит только поростота и элегантность решения. Фича ради фичи — это религия.

S> Влад, евенты встречаются в дотнете сплошь и рядом.


Ага. Причем чаще всего по недаразумению и из-за отсуствия более удобных средств. Вот появится в C# 3.0 полноценная лямбда и сам увидишь, как потребность в ивентах резо уменшится.

Ну, и без этой инкапсуляции они вряд ли стали бы хуже. Если это такой способ борьбы с null, то он какой-то непоследовательный. Ведь от того что мы можем присвоить null в ссылочные свойства или поля оные хуже для нас не становятся. Просто другая семантика.

S> Инкапсуляция, очевидно, нужна для устойчивости кода к мелким ошибкам, непроверяемым компилятором.


Инкапсуляция — это инструмент достижения цели. И не всегда нужна эта цель. Например, вырожденные свойства никаой инкапсуляцией не являются. Это чистый синтаксический оверхэд. Так же многие типы данных используемые (особенно струтуры) не требуют инкапсуляции. Ее прикручиввают исключительно из-за соблюдения догматов.

S>>> В дотнете все грабли именно с тем, что для свойства есть риск сделать = вместо +=.

VD>>Для этого достаточно сделать свойство доступное только для чтения или такое же поле. В общем, это уже притягивание за уши никому не нужной фигни.
S>А общем, это уже просто нежелание напрячь мозг на 10 секунд чтобы понять очевидные вещи.

Я бы назвал это некооректным высказыванием. Что-то ты стал ими злоупотреблять в последнее время.

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

VD>>Да и в Дельфи никогда проблем не видел.

S>Ну конечно не видел. Евенты в дельфи были одиночными, поэтому ситуация случайного переписывания обработчика вместо добавления в список не могла возникнуть.

Хм. Я мог присвоить им nil. Ты тут говорил, что это так плохо. А вот на практике оказывется что очень даже приемлемо.

S>Зато в тех местах, где была нужна множественная подписка, в VCL была написана просто тонна кода.


Я согласен, что список событий иногда удобнее. Но его нет проблем создать без хардкода.

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

S> Поверь мне на слово, Влад, Хейльсберг гораздо лучше, чем ты, знает достоинства и недостатки Delphi.


Извини, но верить тебе у меня желания нет. Хейльсберг наделал ошибок в Дельфи и наделал их в C#. Отрадно видеть что ошибок в последнем меньше, но таки они есть и как раз мне, как постороннему наблюдателю использующему этот язык и знакомому с другими языками лучше выдны его ошибки. Ведь свои ошибки всегда видны хуже чем чужие.

S>Совершенно верно. Поддержка event в шарпе — это хорошо. Необходимость переделки компилятора для этого — плохо. Я уверен, что nemerle позволяет реализовывать такие вещи без обращения к разработчикам компилятора. Что позволяет надеяться на его повальное внедрение.


К сожалению, насколько я помню, ивенты захардкодили в рантайме дотнета. Они описываются в метаданных и т.п. Да и делегаты это явно надуманная сущьность. Они слишком конкретны. Весьма странно, что разные методы можно привести к одному делегату, но два одинаковых делегата не совместимы между собой. Это создает некторые проблемы. Меж тем есть боле естественное и более общее решение — фукнциональные типы. Как показала практика их без проблем можно создать на базе обыкровенных классов. При этом они получаются более понятными, логичными и даже работают быстрее. Да и не нужно делать отдельных оптимизаций, ведь можно просто оптимизировать работу с классами тем самым опримизируя и функциональные типы.

В общем, я тоже согласен что включение подобных средств в язык полезно, но не согласен ни со средствами вклюения, ни с дийаном конкретных реализаций. Чем меньше хардкода, тем лучше.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.10.06 14:08
Оценка:
Здравствуйте, kan, Вы писали:

>> kan>А это точно всё?

>> Ага. Для событий все. Причем не нужно даже ядрёной енергии макросов.
>> Просто более грамотный дизайн языка.
kan>"640кб оперативной памяти должно быть достаточно для каждого".

Так. Кто оставил палату номер 6 открытой?

kan>Реализованный паттерн Посетитель это уже не паттерн, а конкретный алгоритм.


Алгоритм легко реализуется функцией. Реализуй Посетителя функцией и поглядим. Здесь идет речь об алгоритме реализации паттерна. А это уже другое дело. Это уже мата-алгоритм. И нет никаких препятствий в создании сколь угодно мета-алгоритма коотрый можно будет в последствии повторно использовать.

kan>Забудь о том что это буст. Перечисленные возможности по-твоему к чему относятся?


К тому что называется функциональным типов в более грамотно спроектированных языках. Все примитивы буста выражаются ими на раз по месту (без окромных и запутанных библоотек). А вот паттерны ООП — это другое дело. Их средствами ООП или ФП повторно используемыми сделать не удатстся.

kan> Это паттерн Посетитель? Или что?


Это "или что".

kan>Посмотри на SObjectizer (110000 строк кода, ну ладно, пусть на Nemerle будет в 100 раз меньше, 1100 строк), это всё ещё события?


Нет. Это сервис. Но в более гибком языке он мог бы быть библиотекой.

kan> Асинхронных событий никому не нужно? Что именно должно быть реализованно в языке?


Вообще-то в донтнете асинхронные события и так реализованы. У делегатов есть методы ассинхронного вызова. В C# правда это выглядит не очень красиво, но это вопрос сахара.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Паттерны суть слабости языков программирования
От: kan Великобритания  
Дата: 02.10.06 15:28
Оценка:
VladD2 wrote:

>> > kan>А это точно всё?

>> > Ага. Для событий все. Причем не нужно даже ядрёной енергии макросов.
>> > Просто более грамотный дизайн языка.
> kan>"640кб оперативной памяти должно быть достаточно для каждого".
> Так. Кто оставил палату номер 6 открытой?
Так выходи пока есть возможность! Погляди на белый свет!

> kan>Реализованный паттерн Посетитель это уже не паттерн, а конкретный

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

> kan>Забудь о том что это буст. Перечисленные возможности по-твоему к

> чему относятся?
> К тому что называется функциональным типов в более грамотно
> спроектированных языках. Все примитивы буста выражаются ими на раз по
> месту (без окромных и запутанных библоотек). А вот паттерны ООП — это
> другое дело. Их средствами ООП или ФП повторно используемыми сделать не
> удатстся.
Каким образом? Скажем, упорядоченные группы вызовов? Да чтобы это в язык было встроено. Иначе, реализация "по
месту" ничем принципиально не будет отличаться от запутанных библиотек, кроме сахара.

> kan> Это паттерн Посетитель? Или что?

> Это "или что".
> kan>Посмотри на SObjectizer (110000 строк кода, ну ладно, пусть на
> Nemerle будет в 100 раз меньше, 1100 строк), это всё ещё события?
> Нет. Это сервис. Но в более гибком языке он мог бы быть библиотекой.
Да, но по сути это всё ещё реализация паттерна Visitor!

> kan> Асинхронных событий никому не нужно? Что именно должно быть

> реализованно в языке?
> Вообще-то в донтнете асинхронные события и так реализованы. У делегатов
> есть методы ассинхронного вызова. В C# правда это выглядит не очень
> красиво, но это вопрос сахара.
А в каком порядке они вызываются? Из каких нитей? Какой контекст? Что и как блокируется? И почему так, а не иначе и как
это изменить при необходимости?
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[5]: Паттерны суть слабости языков программирования
От: kan Великобритания  
Дата: 02.10.06 15:34
Оценка: -2
Курилка wrote:

> По факту получается, что паттерны — это слишком размазанное понятие,

Не размазанное, а неформализуемое (что значит неалгоритмизируемое в общем случае), т.к. более абстрактное, чем
алгоритм/структура данных.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[14]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.10.06 17:45
Оценка:
Здравствуйте, kan, Вы писали:

kan>Тебе осталось доказать, что паттерн вещь алгоритмизируемая, тогда препятствий не будет.


Это факт. Его описание — это алгоритм. И я тебе давал ссылку на реализацию этого паттерна, но ты ее успешно профильтровал.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.10.06 17:45
Оценка:
Здравствуйте, WolfHound, Вы писали:

kan>>Это паттерн Посетитель? Или что?

WH>Это точно не посетитель. Ты вобще знаешь что такое посетитель и зачем он нужен?

Похоже это главный вопрос. И похоже ответ на него отрицательный. Потому и разговор весьма странный получается.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.10.06 17:45
Оценка:
Здравствуйте, kan, Вы писали:

kan>Паттерн != алгоритм.


Ага. Это мета-алгоритм.

kan> Реализация паттерна есть алгоритм


Ага. Мета-алгоритм.

kan>(и то не всегда).


Если это не алгоритм, то это и не паттерн. Это уже черти что.

kan> Реализация алгоритма есть библиотека


Ага. А мета-алгоритма, есть мета-библиотека.

kan>или конструкция языка.


Алгоритм конструкция языка? Примеры можно?

kan> Я понимаю, что часто эти понятия путаются, чаще ради упрощения, но в данном контексте, при обсуждении сабжа — это важно различать.


Что мешает?


>> kan>Забудь о том что это буст. Перечисленные возможности по-твоему к

>> чему относятся?
>> boost::signals это жуткий мутант и ошибка природы которая должна умереть.
>> kan>Это паттерн Посетитель? Или что?
>> Это точно не посетитель.
kan>А что?

Мутировавшая реализация делегата/функции высшего порядка/события...

>> Ты вобще знаешь что такое посетитель и зачем он нужен?

kan>

In object-oriented programming and software engineering, the visitor design pattern is a way of separating an
kan>algorithm from an object structure. A practical result of this separation is the ability to add new operations to
kan>existing object structures without modifying those structures
.
kan>(с) http://en.wikipedia.org/wiki/Visitor_pattern


kan>В общем почти всё. Это относится к "public MyEvent : Event[int -> void] = Event();" довольно слабо. Что именно должно

kan>поддерживаться языком?

Нда. Случай клинический. Гляжу в книгу вижу...

Перепутать паттерн Посетитель с событием — это уже перебор.

Почитай полное описание по своей ссылее. И особо обрати внимание на пример. Это как раз и есть Посетитель. Неуже ли он похож на событие?

kan>Неважно. Вопрос в другом. Ассинхронные сообщения это Event?


Эээ вообще-то нет. В дотнете ивенты — это конкретная сущность. Но их в приципе можно вызвать асинхронно.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.10.06 22:19
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>...

S>И вот это называется проще?

Это? Нет, конечно.. А вот это — да:
using System.Console;

/// Библиотечный класс. По уму еще надо создать пергруженный 
/// вариант для событий с возвращаемым значением.
public class Event[T]
{
    // Конструкторы
  public this() { _handlers = []; }
  public this(handler : T -> void) { _handlers = [handler]; }
  public this(handler : list[T -> void]) { _handlers = handler; }
  // Операторы приведения типов для инициализации по месту создания.
  public static @: (handler : T -> void) : Event[T] { Event(handler) }
  public static @: (handlers : list[T -> void]) : Event[T] { Event(handlers) }

  protected mutable _handlers : list[T -> void]; // список подключенных обработчиков событий

  public Add(handler : T -> void) : void { _handlers ::= handler; }
  public Remove(handler : T -> void) : void { _handlers = _handlers.Remove(handler) }
  /// Инициирует рассылку события. 
  public Fire(args : T) : void 
  {
    foreach (handler in _handlers)
      handler(args);
  }
}

/// Тестовый класс в котором определяются события (module == static class в C#).
module Test
{
    // Заметь, описание делегатов попросу не нужно!
  public Event1 : Event[int] = Event();
  // Инициализация по месту.
  public Event2 : Event[string * int] = (str, x) => WriteLine($"str: '$str' x: $x");

  Main() : void
  {
    Event1.Add(x => WriteLine(x));
    Event1.Fire(123);

    Event2.Fire("test", 789);
  }
}


S> Разработчикам компилятора естественно проще. К счастью, Хейльсберг больше думал о программистах, чем вы предлагаете. И встроил вот этот громоздкий паттерн в язык.


Если бы он подумал о программистах чуть болше и ввелбы, пускай не вместо, а вмесе с этим паттерном еще и возможности использованные мной при написании кода выше, то было бы еще лучше.

Согласись это выглядит очень неплохо для встроенных возможностей языка?

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

Так что выразительный язык может зачастую (скорее даже очень часто) обойтись без хардкодинга в компиляторе. И при этом он как минимум не проиграет в выразительности.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Паттерны суть слабости языков программирования
От: Кодёнок  
Дата: 03.10.06 03:05
Оценка:
Здравствуйте, VladD2, Вы писали:

kan>>Паттерн != алгоритм.

VD>Ага. Это мета-алгоритм.

kan>> Реализация паттерна есть алгоритм

VD>Ага. Мета-алгоритм.

Мета-алгоритм это частный случай реализации одного паттерна, или любого количества паттернов, автоматизации их применения. Например, у тебя есть некий чисто декларативный язык описания паттернов, и общий движок его компиляции в код. Алгоритм движка не есть какой-то паттерн, и каждое конкретное описание паттерна на языке не является алгоритмом (потому что это просто декларация). Алгоритм движка есть мета-алгоритм по отношению к сгенерированному им коду, но ты не можешь показать ни на какой конкретный паттерн и сказать, что алгоритм движка есть его реализация, потому что движок сам по себе не реализует ни один паттерн.
Re[13]: Паттерны суть слабости языков программирования
От: Sinclair Россия https://github.com/evilguest/
Дата: 03.10.06 08:10
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Если бы он подумал о программистах чуть болше и ввелбы, пускай не вместо, а вмесе с этим паттерном еще и возможности использованные мной при написании кода выше, то было бы еще лучше.


VD>Согласись это выглядит очень неплохо для встроенных возможностей языка?

Ну естественно неплохо! Влад, ты похоже потерял нить рассуждений. Речь идет о выразимости паттернов в виде конструкций. kan сомневался
Автор: kan
Дата: 26.09.06
в том, что паттерн можно выразить в языке, а уж тем более в библиотеке.
Я привел примеры того, как паттерны встраиваются в язык. Ты собственно с чем споришь? С тем, что их нужно поддерживать? Или что их нужно поддерживать при помощи Nemerle?
Вся ценность Nemerle собственно в том и состоит, что он позволяет повысить повторную используемость кода.

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

Это здорово. Непонятно только, с чего ты решил, что я с этим спорю.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[13]: Паттерны суть слабости языков программирования
От: Sinclair Россия https://github.com/evilguest/
Дата: 03.10.06 08:10
Оценка:
Здравствуйте, VladD2, Вы писали:

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


S>>Влад, это потребует написания класса на каждый чих. Зачем?


VD>Хороший такой чих. МС аж его захардкодил в язык и рантайм.

VD>Меж тем создать такой класс нужно ровно один раз.
Ну, в рамках .net 1.0 это пришлось бы делать ровно один раз на каждый тип делегата. Руками.
S>>В качестве упражнения: попробуй реализовать аналогичную евентам функциональность в библиотеке на C# 2.0.
VD>Синклер, ты меня извини, но ты меня с кем-то спутал. Я упражняюсь в программировании каждый день и ни в упражнениях, ни в учетелях не нуждаюсь. Более того считаю подобные предложения не корректно по отношению к другим программистам.
Почему некорректно? Ты делаешь заявления о легкости реализации чего-то другими средствами. Очевидно, что хейльсберг решил, что внесение event в язык/платформу дешевле, чем полноценная поддержка метапрограммирования. Иначе бы он изобрел Nemerle.

VD>Что касается релизации на C# 2.0, то это действительно сложно так как язык не обладает базовыми элеми необходимыми для реализации этой возможности.

Ну, вообще-то как раз на 2.0 можно написать один класс. Он, кстати, будет не многим менее удобен в использовании, чем твой вариант на Nemerle.
Я привел пример встраивания конкретного паттерна в язык. Продемонстрировав преимущества такого встраивания по сравнению с тем же языком без такого встроенного паттерна.
VD> А вот на Nemerle я тебе это реализую без особых проблем. Собственно об этом тебе и говорю.
Ты очень много говоришь, и очень мало слушаешь. В Nemerle встраивать event в язык уже не надо. Точно так же, как в С уже не надо встраивать в язык оператор вывода на консоль, в отличие от классического BASIC. И ровно по той же причине — в С есть возможность писать функции, которые реализуют ту же возможность без харкода в компилятор.

VD>Синклер, ты меня извини, но твой менторский тон мне не нравится. Или убери эту маску гуру, или давай завершим разговор.

Только после вас.

VD>Это мелкие детали. По сути это тоже свойство вид сбоку. Тебе уже скзали, что небыло бы никакой разницы если бы вместо этих спец-методов был бы некий интерфейс с думя методами.

Я вижу, мои объяснения, что это не тоже самое, не внедряются в кору головного мозга оппонентов. Ок, зайдем с другого конца: почему бы собственно свойства не выкинуть в пользу некоего интерфейса с двумя методами: set и get? Поясни, пожалуйста, cвою точку зрения.

S>> Влад, евенты встречаются в дотнете сплошь и рядом.

VD>Ага. Причем чаще всего по недаразумению и из-за отсуствия более удобных средств. Вот появится в C# 3.0 полноценная лямбда и сам увидишь, как потребность в ивентах резо уменшится.
Не понял, куда это она уменьшится. Ты не мог бы привести пример, каким образом удастся при помощи лямбды избавиться, к примеру, от AppDomain.AssemblyResolve?

S>> Инкапсуляция, очевидно, нужна для устойчивости кода к мелким ошибкам, непроверяемым компилятором.



VD>Представь, что имеется мнение отличное от твоего и представь, что твое мнение не является истиной в последней инстанции.

Вот как раз у меня-то с этим все в порядке.
VD>Причем люди могут банально иметь более широкий опыт и тем самым мыслить чуть шире.
Пока что я вижу обратный эффект. Мне заявляют "чего-то не может быть, потому что я этого не встречал". Очень сомневаюсь, что это признак широты мышления.
VD>Ты же не имея этого опыта
Очень опять же сомневаюсь, что у тебя есть возможность адекватно оценивать мой опыт.
Я кстати никаких комментариев о ширине мышления не приводил. Я просто объясняю, с какими ситуациями призван бороться определенный паттерн.

VD>>>Да и в Дельфи никогда проблем не видел.

S>>Ну конечно не видел. Евенты в дельфи были одиночными, поэтому ситуация случайного переписывания обработчика вместо добавления в список не могла возникнуть.

VD>Хм. Я мог присвоить им nil. Ты тут говорил, что это так плохо.

Нет, я не говорил, что nil это плохо. Я говорю, что отсутствие инкапсуляции приводит к тому, что можно банально забыть о том, что ты не единственный субскрайбер или просто опечататься и набрать = вместо +=. В Дельфи ты всегда был единственным субскрайбером, и поток событий был значительно проще. У тебя просто не было пяти мест вида "OnResize += HandleResize", в каждом из которых ты мог ошибиться. Если ты записал nil, то это быстро станет заметно.

VD>Я согласен, что список событий иногда удобнее. Но его нет проблем создать без хардкода.

См. VCL Source. Я уже не помню имена юнитов наизусть, но парни сделали таки без хардкода поддержку множественных подписчиков на состояние датасорсв. Ох там и кода наколбашено... А самое приятное — то, что если тебе понадобится делать множественную подписку для другого типа событий в Delphi 3-7, то ты будешь воспроизводить 1600 строк кода с нуля. По мне так это совсем не "без проблем" — лучше хардкод (а еще лучше — нормальный метапрограмминг).

VD>В общем, ивенты — это хороший сахар для ООЯ, но не было никакой необходимости хардкодить его в рантайм дотнета.

Вопрос интересный. Хейльсберг, судя по всему, посчитал паттерн Publisher-Subscriber настолько важным, что принципиально хотел его наличия совместимым образом во всех языках дотнета.
VD> А в языке можно было добавить более универсальные средства на базе которых само событие получалось бы неотличимым от встроенного.
В отдельном языке — да. Кстати, интересно: насколько сложно было бы сделать такие евенты кросс-языковыми? Чтобы в VB.NET по-прежнему можно было бы писать после имени метода handles EventBlaBla?

VD>Извини, но верить тебе у меня желания нет. Хейльсберг наделал ошибок в Дельфи и наделал их в C#. Отрадно видеть что ошибок в последнем меньше, но таки они есть и как раз мне, как постороннему наблюдателю использующему этот язык и знакомому с другими языками лучше выдны его ошибки. Ведь свои ошибки всегда видны хуже чем чужие.

Это какие например? Я в Delphi архитектурных ошибок не вижу. Его недостатки очевидным образом связаны как с ограниченными ресурсами, так и с ограниченным опытом использования.
VD>К сожалению, насколько я помню, ивенты захардкодили в рантайме дотнета.
Совершенно верно. Как и свойства. Свойства, кстати, ведь тоже наверняка можно было бы сделать на уровне библиотеки для языка с метапрограммингом (aka Nemerle)?
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[11]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 03.10.06 09:06
Оценка:
Здравствуйте, Klapaucius, Вы писали:

AVC>>Из всего, что я здесь прочел, напрашивается вывод, что "современными" считаются императивные языки с включением отдельных функциональных конструкций.


K>Не только. Современным может быть и чистый функциональный язык, например. Но это не важно.

K>Непонятно, кстати, почему слово "современные" Вы ставите в кавычки. Современные без всяких ковычек. Просто тенденция сейчас такая, веянье времени.

Я просто хотел отстраниться и посмотреть со стороны, без всяких оценок: "современными" принято считать языки с такими-то свойствами.
Я часто заключаю слово в кавычки, чтобы обратить на него внимание. Возможно, это не всегда уместно.
Для меня само понятие "современных языков" возникло в процессе этого обсуждения.
Ясно, что слово "современный" употребляется здесь в каком-то определенном смысле, потому что и сейчас есть люди, пишущие на Фортране, да и функциональные языки сами по себе — не такая уж новость.
Возможно, Ваша ремарка говорит о том, что Вы считаете функциональный подход в целом более современным (прогрессивным?), чем императивный?

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

Хоар
Re[15]: Паттерны суть слабости языков программирования
От: Дарней Россия  
Дата: 03.10.06 10:29
Оценка:
Здравствуйте, gandalfgrey, Вы писали:

G>Если бы мы с самого начала знали, какой рынок будет у нас СЕЙЧАС...месяца за 4 написали бы. Текущая реализация написана месяца за 2.5 — но не с нуля.


Значит, серьезная неоходимость в рефакторинге еще не назрела. Дальше будет хуже, а желание делать рефакторинг руками будет все меньше и меньше.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[15]: Паттерны суть слабости языков программирования
От: kan Великобритания  
Дата: 03.10.06 10:43
Оценка:
VladD2 wrote:

> kan>или конструкция языка.

> Алгоритм конструкция языка? Примеры можно?
Тривиальные алгоритмы в основном. Скажем, map в некоторых языках, конкатенация строк. Или алгоритм обработки исключений.
Даже управляющие конструкции как while, switch/case тоже тривиальные алгоритмы. Встраивание нетривиальных алгоритмов
обычно сильно запутывает язык, так что обычно не пользуется спросом (хороший пример perl6).

>> > kan>Забудь о том что это буст. Перечисленные возможности по-твоему к

>> > чему относятся?
>> > boost::signals это жуткий мутант и ошибка природы которая должна умереть.
>> > kan>Это паттерн Посетитель? Или что?
>> > Это точно не посетитель.
> kan>А что?
> Мутировавшая реализация делегата/функции высшего порядка/события...
Ээээ. Это boost::function/boost::bind.

> kan>В общем почти всё. Это относится к "public MyEvent : Event[int ->

> void] = Event();" довольно слабо. Что именно должно
> kan>поддерживаться языком?
> Нда. Случай клинический. Гляжу в книгу вижу...
> Перепутать паттерн Посетитель с событием — это уже перебор.
> Почитай полное описание по своей ссылее. И особо обрати внимание на
> пример. Это как раз и есть Посетитель. Неуже ли он похож на событие?
Прошу прощения за невнимательность, конечно Observer.

> kan>Неважно. Вопрос в другом. Ассинхронные сообщения это Event?

> Эээ вообще-то нет. В дотнете ивенты — это конкретная сущность. Но их в
> приципе можно вызвать асинхронно.
Т.е. это не паттерн Observer из-за того, что асинхронный?
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[12]: Паттерны суть слабости языков программирования
От: Klapaucius  
Дата: 03.10.06 12:40
Оценка: +1
Здравствуйте, AVC, Вы писали:

K>>Современным может быть и чистый функциональный язык, например. Но это не важно.

K>>Непонятно, кстати, почему слово "современные" Вы ставите в кавычки. Современные без всяких ковычек. Просто тенденция сейчас такая, веянье времени.
AVC>Ясно, что слово "современный" употребляется здесь в каком-то определенном смысле, потому что и сейчас есть люди, пишущие на Фортране, да и функциональные языки сами по себе — не такая уж новость.
AVC>Возможно, Ваша ремарка говорит о том, что Вы считаете функциональный подход в целом более современным (прогрессивным?), чем императивный?

Я считаю, что "функциональный подход" — это просто способ декомпозиции и может ли он быть прогрессивным или современным ответить затрудняюсь. Тем более я затрудняюсь сравнивать функциональный подход с императивным, ведь по моему мнению, это вещи просто таки ортогональные. Вот декларативный "подход" с императивным я сравнить смогу. Можно, пожалуй, сказать, что декларативный в каком-то смысле прогрессивнее императивного. Но можно этого и не говорить.
Однако "прогрессивный" или "современный" все-таки не синонимы. Если понимать в хронологическом смысле, то, к примеру, чистый функциональный язык по понятным техническим причинам, не может не быть современным, хотя функциональные языки вообще, конечно, не новость. Причем под современным с хронологической точки зрения языком я подразумеваю не используемый в настоящее время, а разработанный и реализованный в настоящее время.
Понятно, что если говорить о современном только в хронологическом смысле, то разговоры о том, что должно быть в языке для того, чтобы он считался современным довольно странно. Поясняю: новые с хронологической точки зрения языки, появляющиеся в настоящее время создают некоторую конъюнктуру. Можно выделить некоторую общую для большинства из них совокупность черт, которые и позволяют судить о том, соответствует ли новый язык этой самой конъюнктуре или является анахронизмом.
Вот и все что я имею в виду, говоря о современных и несовременных языках. Надеюсь, что теперь ситуация прояснилась?
... << 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[23]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 03.10.06 13:37
Оценка:
Здравствуйте, Курилка, Вы писали:

AVC>>В 7-й главе "Красного дракона" Ахо, Ульмана и Сети (в разделе Параметры-процедуры) написано:

AVC>>

AVC>>Правила лексической области видимости применимо и в том случае, когда вложенная процедура передается в качестве параметра.

AVC>>После чего идет пример именно на Паскале.
К>И что с лексической областю видимости? К ней претензий не было. Или это ты просто так для красного словца?

Нет, не для красного словца.
Просто мне показалось — мы договорились, что речь идет только о лексическом контексте.
А в Паскале вложенная процедура "помнит" о своем лексическом контексте.
Исходя из представления, что замыкание = функция + лексический контекст, я и сослался на Дракона.
В принципе, я понял, что имел в виду FR, поэтому дальнейшее выяснение вопроса выродилось бы просто в спор о словах.
Вполне можно считать, что в Паскале было "квази-замыкание", т.е. не совсем замыкание, как оно понимается в ФП.

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

Хоар
Re[16]: Паттерны суть слабости языков программирования
От: gandalfgrey  
Дата: 03.10.06 14:32
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>Значит, серьезная неоходимость в рефакторинге еще не назрела. Дальше будет хуже, а желание делать рефакторинг руками будет все меньше и меньше.

Видимо, я неправильно выразился. Проект существует больше года, тотальный рефакторинг проводился 2 раза. Частные вещи рефакторятся регулярно, по достижении некоей очередной стадии
Re[13]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 03.10.06 18:06
Оценка:
Здравствуйте, Klapaucius, Вы писали:

K>>>Современным может быть и чистый функциональный язык, например. Но это не важно.

K>>>Непонятно, кстати, почему слово "современные" Вы ставите в кавычки. Современные без всяких ковычек. Просто тенденция сейчас такая, веянье времени.
AVC>>Ясно, что слово "современный" употребляется здесь в каком-то определенном смысле, потому что и сейчас есть люди, пишущие на Фортране, да и функциональные языки сами по себе — не такая уж новость.
AVC>>Возможно, Ваша ремарка говорит о том, что Вы считаете функциональный подход в целом более современным (прогрессивным?), чем императивный?

K>Я считаю, что "функциональный подход" — это просто способ декомпозиции и может ли он быть прогрессивным или современным ответить затрудняюсь. Тем более я затрудняюсь сравнивать функциональный подход с императивным, ведь по моему мнению, это вещи просто таки ортогональные. Вот декларативный "подход" с императивным я сравнить смогу.


Действительно, я сопоставил понятия разного уровня, что, наверное, не вполне корректно.
Но, ИМХО, они не "ортогональны" (не сопоставимы?), т.к. функциональное программирование есть разновидность декларативного подхода.
В этом смысле я и упомянул "функциональный подход".

K>Однако "прогрессивный" или "современный" все-таки не синонимы. Если понимать в хронологическом смысле, то, к примеру, чистый функциональный язык по понятным техническим причинам, не может не быть современным, хотя функциональные языки вообще, конечно, не новость. Причем под современным с хронологической точки зрения языком я подразумеваю не используемый в настоящее время, а разработанный и реализованный в настоящее время.


В таком случае, я бы говорил о "новых" языках.
ИМХО, слово "современные" не так однозначно.

K>Понятно, что если говорить о современном только в хронологическом смысле, то разговоры о том, что должно быть в языке для того, чтобы он считался современным довольно странно. Поясняю: новые с хронологической точки зрения языки, появляющиеся в настоящее время создают некоторую конъюнктуру. Можно выделить некоторую общую для большинства из них совокупность черт, которые и позволяют судить о том, соответствует ли новый язык этой самой конъюнктуре или является анахронизмом.


Боюсь, в таком случае мы можем получить всего лишь "среднюю температуру по больнице".
Некоторые "анахронизмы", возможно, просто несколько опережают свое время.

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


Более или менее.
Спасибо, это помогло мне несколько уточнить свои представления.

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

Хоар
Re[37]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 03.10.06 18:41
Оценка:
Здравствуйте, WolfHound, Вы писали:

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

WH>Честно говоря вобще невижу смысла смешивать оптимизацию и отладку.

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

AVC>>Что же касается синтаксического анализа, то частенько "все сделано до нас" (для известных языков).

WH>А для только-что придуманых?

Тогда, конечно, придется самому.

AVC>>Если есть необходимость написать парсер и не хочется писать его методом рекурсивного спуска a-la Wirth (или грамматика не позволяет), то в нашем распоряжении yacc (для LR-грамматик) или CoCo/R(для LL(1)-грамматик; кстати, автор CoCo/R является также автором языков Object Oberon и Оберон-2).

WH>Тут не все так простл. Попробуй ими распарсить тотже C#... Влад пытался использовать CoCo/R но получилось мягко говоря не очень. А что касается всяких yacc'ов то их озвереешь отлаживать и добится от них человекочитаемых сообщений об ошибках.

Та же ситуация с чтением сообщений компилятора Си++ об ошибках в шаблонах (по крайней мере, так было еще недавно).
Вообще так обстоит дело со многими генераторами (самыми разными).

AVC>>А какие есть проблемы с заглядыванием вперед?

WH>LL(1) циифирка 1 о чем говорит?

О заглядывании, конечно.
Просто наличие одной дополнительной переменной ОчереднаяЛексема, ИМХО, не является большой проблемой.

AVC>>Если я пользуюсь генератором парсеров, то я вообще с такой проблемой не сталкиваюсь.

WH> ты только с ней и сталкиваешься... просто ты уже привых укладывать грамматики в прокрустово ложе парсеров.

Да, может быть, что это просто привычка.

AVC>>Если пишу парсер вручную, то заглядывание происходит всего на один символ вперед.

WH>А я могу заглянуть на сколько нужно.

В принципе, Трурль здесь предложил вариант, как это сделать на Обероне, хотя меня этот вариант не вдохновил.
Подобный способ используется и при создании парсеров с помощью YACC, например, при попытке использовать лексемы слева от правила: $0 и т.д.

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

Хоар
Re[36]: Why ML/OCaml are good for writing compilers
От: Gaperton http://gaperton.livejournal.com
Дата: 03.10.06 19:02
Оценка: 9 (2)
Здравствуйте, AVC, Вы писали:

AVC>Интересно, насколько клоны ML могут помочь мне в этих задачах.


Здесь это примерно объяснено.
Why ML/OCaml are good for writing compilers
Re[14]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.10.06 13:56
Оценка:
Здравствуйте, Sinclair, Вы писали:

VD>>Согласись это выглядит очень неплохо для встроенных возможностей языка?

S>Ну естественно неплохо! Влад, ты похоже потерял нить рассуждений.

Я? Ты меня с кем-то путаешь.

S>Речь идет о выразимости паттернов в виде конструкций. kan сомневался
Автор: kan
Дата: 26.09.06
в том, что паттерн можно выразить в языке, а уж тем более в библиотеке.


Похоже нить потерял кто-то другой. С этим товарищем все ясно. Он несомненно заблуждается. Мы же в данный момент говорим о замечании Andrei N.Sobchuck
Автор: Andrei N.Sobchuck
Дата: 29.09.06
, о том, что многое можно было бы не хардкодить в язык, а реализовать средствами языка или сделать такие средства язык чтобы некоторые паттерны не имели смысла.

S>Я привел примеры того, как паттерны встраиваются в язык. Ты собственно с чем споришь?


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

S> С тем, что их нужно поддерживать? Или что их нужно поддерживать при помощи Nemerle?


С тем что чем хардкодить подобные решения в язык лучше делать язык более гибким. Я бы был бы очень рад если опыт того саомго Немерле были учтеным МС. В конце концов в самом Немерле ничего в общем-то радикально новго не придумано. Это обобщение опыта кучи народа. Далеко не идеальное обобщение, но все же результат получается более качественным чем у МС где обобщали опыт только ООЯ.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.10.06 16:56
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Ну, в рамках .net 1.0 это пришлось бы делать ровно один раз на каждый тип делегата. Руками.


Да, без дженерико конечно сложно. Хотя возможно если их подерживть на уровне языка.

S>Почему некорректно?


Потому что ты не учитель, а я не ученик.

S> Ты делаешь заявления о легкости реализации чего-то другими средствами. Очевидно, что хейльсберг решил, что внесение event в язык/платформу дешевле, чем полноценная поддержка метапрограммирования. Иначе бы он изобрел Nemerle.


Я табе уже показал кажется, что метапрограммирование для таких задач не требуется. А Хейльсберг не является богом. Он инженер, т.е. человек. И он делает как и мы все ошибки. Ошибки эти незаметы пока ты не видел ничего другого. Но сравнивая решения они становятся отчетливо видны. Вот делегаты, отсуствие дженериков в 1.х и кортежей — это ошибки уменьшающие выразительность языка. Отсюда и необходимость внонитровать довольно примитивные паттерны в язык.

С другой стороны эти ошибки все же более терпимы нежели идеологические промахи Явы. Но Ява пролое оправдение.

S>Ну, вообще-то как раз на 2.0 можно написать один класс. Он, кстати, будет не многим менее удобен в использовании, чем твой вариант на Nemerle.


Напиши, сравним. Увидишь, что выразительных средств нехватает. Дело портят делегаты и остуствие кортежей. Реализация метода Fire() окажется затруднительной. Ведь передать параметры метода делегату в общем случае будет нельзя.

S>Ты очень много говоришь, и очень мало слушаешь.


Синклер, тебе не кажется что подобные переходы на личности не красят тебя лично?

S> В Nemerle встраивать event в язык уже не надо.


Ага. И ничего не мешало МС сделать в Шарпе тоже самое.

VD>>Синклер, ты меня извини, но твой менторский тон мне не нравится. Или убери эту маску гуру, или давай завершим разговор.

S>Только после вас.

А я где-то разговаривал с тобой в поучающей монере? Я страюсь разговаривать на равных даже если передомной явно находится желторотый юнец. А уж с тобой и подавно себе такого не позволяю. Собственно странно что ты не понимаешь.

VD>>Это мелкие детали. По сути это тоже свойство вид сбоку. Тебе уже скзали, что небыло бы никакой разницы если бы вместо этих спец-методов был бы некий интерфейс с думя методами.

S>Я вижу, мои объяснения, что это не тоже самое, не внедряются в кору головного мозга оппонентов.

А должны? Ну, не знаю, я внушения всегда плохо поддавался. На мой взгляд это заблуждения.

S> Ок, зайдем с другого конца: почему бы собственно свойства не выкинуть в пользу некоего интерфейса с двумя методами: set и get? Поясни, пожалуйста, cвою точку зрения.


Потому что они снизят выразительные возожности языка. Тут же я тебе кажется показал, что разницы практически нет.

Кстати, о свойствах. По-моему, свойства — accessor-ы к полям являются форменной глупостью и для них как раз требовался специальнй синтаксис. А еще лучше было бы сделать так, чтобы вообще небыло разницы между свойствами и полями. Для этого всего-то нужно было запретить передачу ссылок в параметры методов. Вот только это вызвает проблему дизайна, так как других средств вернуть множество значений в языке нет, а без этого жить плохо (Ява тому прекрасное подтверждение).

S>Не понял, куда это она уменьшится. Ты не мог бы привести пример, каким образом удастся при помощи лямбды избавиться, к примеру, от AppDomain.AssemblyResolve?


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

События конечо не уйдут, но потребность в них будет уменьшаться.

S>Вот как раз у меня-то с этим все в порядке.


По твоему отношению к другим это не заметно.

VD>>Причем люди могут банально иметь более широкий опыт и тем самым мыслить чуть шире.

S>Пока что я вижу обратный эффект.

Вот это и есть проявление того о чем я тебе говорю.

S> Мне заявляют "чего-то не может быть, потому что я этого не встречал". Очень сомневаюсь, что это признак широты мышления.


А ты не сомневайся. А сомневаясь разбирайся и ищи истину, а не делай надменный вид.

VD>>Ты же не имея этого опыта

S>Очень опять же сомневаюсь, что у тебя есть возможность адекватно оценивать мой опыт.

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

S>Я кстати никаких комментариев о ширине мышления не приводил. Я просто объясняю, с какими ситуациями призван бороться определенный паттерн.


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

VD>>Хм. Я мог присвоить им nil. Ты тут говорил, что это так плохо.

S>Нет, я не говорил, что nil это плохо. Я говорю, что отсутствие инкапсуляции приводит к тому, что можно банально забыть о том, что ты не единственный субскрайбер или просто опечататься и набрать = вместо +=.

Во как. То есть инкапсуляция должна спосать от опечаток? Браво. И почему же эта самая инкапсуляция не трогает тебе в отношении полей и свойств? Ведь в них тоже вместо += можно поставить случайно = и результат будет иным. К тому же реализованное мной решение не имеет такой проблем.

S> В Дельфи ты всегда был единственным субскрайбером, и поток событий был значительно проще. У тебя просто не было пяти мест вида "OnResize += HandleResize", в каждом из которых ты мог ошибиться. Если ты записал nil, то это быстро станет заметно.


Инкапсуляция тут никаким боком. Ты подменяешь проблему работы с null-ссылкам и вообще модифицирующего присвоения и инкапсуляцию. Вот в чисто функциональных языках нет таких проблем в принципе, так как нет изменяемых переменных.

VD>>Я согласен, что список событий иногда удобнее. Но его нет проблем создать без хардкода.

S>См. VCL Source. Я уже не помню имена юнитов наизусть, но парни сделали таки без хардкода поддержку множественных подписчиков на состояние датасорсв. Ох там и кода наколбашено...

Это их проблемы. Я тебе привел код работающей реализации.

S>В отдельном языке — да. Кстати, интересно: насколько сложно было бы сделать такие евенты кросс-языковыми? Чтобы в VB.NET по-прежнему можно было бы писать после имени метода handles EventBlaBla?


Проблемы языков не стоит смешивать. ВБ всю жизнь все хардкодил. Ну, и тут не проблема была. А вооще можно было и в ВБ добавить нужные вещи.

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

S>Это какие например? Я в Delphi архитектурных ошибок не вижу.


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

S> Его недостатки очевидным образом связаны как с ограниченными ресурсами, так и с ограниченным опытом использования.


Ага, так и есть, как, в рочем и с огрниченым опытом авторов.

VD>>К сожалению, насколько я помню, ивенты захардкодили в рантайме дотнета.

S>Совершенно верно. Как и свойства. Свойства, кстати, ведь тоже наверняка можно было бы сделать на уровне библиотеки для языка с метапрограммингом (aka Nemerle)?

В общем, да. Можно было бы вместо хардкода свойств просто ввести специальны атрибут говорящий что пара методов является свойствами. С точки зрения дизайна это правильно, так как встроенный дизайн не отличался бы от расширений.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Паттерны суть слабости языков программирования
От: Sinclair Россия https://github.com/evilguest/
Дата: 05.10.06 01:47
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Похоже нить потерял кто-то другой.

А, да, что-то я упустил этот момент.
VD>Мы же в данный момент говорим о замечании Andrei N.Sobchuck
Автор: Andrei N.Sobchuck
Дата: 29.09.06
, о том, что многое можно было бы не хардкодить в язык, а реализовать средствами языка или сделать такие средства язык чтобы некоторые паттерны не имели смысла.

А, я просто понял его утверждение так, что можно было обойтись без event в "обычном" шарпе. Потому, что он использовал только упоминание об интерфейсе, который есть начиная с 1.0, а громоздкость этого решения я продемонстрировал.Это ты уже предложил попросту заменить его другим языком
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[16]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.10.06 22:03
Оценка:
Здравствуйте, kan, Вы писали:

kan>Прошу прощения за невнимательность, конечно Observer.


Вот и мне показалось, что ты говоришь не о паттерне Посетитель.

Мы же вели речь именно о нем. Этот паттерн отличает то, что он пронизывает сразу кучу классов и как бы пенпердикулярен основной задаче решаемой этим самым паттерном. Реализация и сопровождение его весьма не просты. И вот как раз его неполохо можно было бы встроить в язык. И метапрограммирование является отличным средством для этого. Хотя если в языке есть паттерн-матчинг, то необходимость в самом паттерне Посетитель в общем-то нивелируется.

kan>Т.е. это не паттерн Observer из-за того, что асинхронный?


Не понял к чему этот вопрос вообще.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.10.06 10:20
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>А, я просто понял его утверждение так, что можно было обойтись без event в "обычном" шарпе.


Думаю, самое простое спросить его самого. Но я понял его слова как скорее претензию к самому Шарпу. Он же поклонник Смолтока где многие подобные вещи прокатывают без расширения зяыка.

S> Потому, что он использовал только упоминание об интерфейсе, который есть начиная с 1.0, а громоздкость этого решения я продемонстрировал.Это ты уже предложил попросту заменить его другим языком


Как я понял — это был ответ на твой вопрос "как быть с +=".
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Паттерны суть слабости языков программирования
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 09.10.06 12:42
Оценка:
Здравствуйте, VladD2, Вы писали:


S>>А, я просто понял его утверждение так, что можно было обойтись без event в "обычном" шарпе.


VD>Думаю, самое простое спросить его самого.


Я уже просёк, что без дженериков потеряется типизированость этой структуры. Вроде в v.1 не было дженериков, вот и прилепили невесть что.

Отвращение к внесению подобных сущностей в язык у меня осталось
http://www.smalltalk.ru | << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 31.10.06 22:41
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Этот вопрос уже обсуждался несколько раз на РСДН, а Марк Доминус в своей статье Design patterns of 1972 описал это на мой взгляд довольно подробно. Упомянул он и презентацию Design Patterns in Dynamic Languages Питера Норвига.

К>Основная, на мой взгляд, мысль статьи : паттерны это хорошо, но по сути это костыли, т.к. каждый раз паттерн нужно реализовывать снова и снова.

Возвращаясь ненадолго к этой, уже "остывшей", теме.
Если основная мысль в том, что паттерны — всего-лишь "костыли", и все должно быть включено в язык, то в таком общем виде эта мысль, вероятно, неверна.
Надо учесть, что некоторые паттерны специально созданы для того, что избавиться от слишком большой жесткости языка программирования и привнести дополнительную косвенность.
В качестве примера можно взять паттерны порождения объектов.
Прямое указание класса создаваемого объекта ограничивает гибкость.
Чтобы избежать этого и созданы паттерны порождения объектов.
Т.е. они созданы именно для того, чтобы преодолеть ограничения языка (при создании объекта надо задать класс объекта).

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

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

Хоар
Re[2]: Паттерны суть слабости языков программирования
От: FR  
Дата: 01.11.06 07:28
Оценка:
Здравствуйте, AVC, Вы писали:


AVC>Возвращаясь ненадолго к этой, уже "остывшей", теме.

AVC>Если основная мысль в том, что паттерны — всего-лишь "костыли", и все должно быть включено в язык, то в таком общем виде эта мысль, вероятно, неверна.

А теории да.

AVC>Надо учесть, что некоторые паттерны специально созданы для того, что избавиться от слишком большой жесткости языка программирования и привнести дополнительную косвенность.

AVC>В качестве примера можно взять паттерны порождения объектов.
AVC>Прямое указание класса создаваемого объекта ограничивает гибкость.
AVC>Чтобы избежать этого и созданы паттерны порождения объектов.
AVC>Т.е. они созданы именно для того, чтобы преодолеть ограничения языка (при создании объекта надо задать класс объекта).

В динамических языках таких ограничений нет, и практически все паттерны порождающие объекты (и даже классы) реализуются парой строк кода.
Re[3]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 01.11.06 07:54
Оценка: 5 (1)
Здравствуйте, FR, Вы писали:

AVC>>Надо учесть, что некоторые паттерны специально созданы для того, что избавиться от слишком большой жесткости языка программирования и привнести дополнительную косвенность.

AVC>>В качестве примера можно взять паттерны порождения объектов.
AVC>>Прямое указание класса создаваемого объекта ограничивает гибкость.
AVC>>Чтобы избежать этого и созданы паттерны порождения объектов.
AVC>>Т.е. они созданы именно для того, чтобы преодолеть ограничения языка (при создании объекта надо задать класс объекта).

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


Ты хочешь сказать, что нет разницы между "приобретением" типа в порождающем паттерне и динамическом языке?
(Маленькое лирическое отступление. Помню старую советскую карикатуру. Две мыши в библиотеке грызут книги. Одна говорит другой: "Не вижу разницы между классикой и современной литературой". )
В языках с динамической типизацией переменная "приобретает" тип, когда ей присваивается значение.
В "порождающих" паттернах происходит ровно то же самое: указатель получает "конкретный" тип, когда начинает указывать на созданный объект.
Вроде, все похоже.
ИМХО, в динамических языках действует именно паттерн (назовем его...э-э... "получение типа от другого уже созданного объекта" или "получил тип сам — передай другому").

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

Хоар
Re[4]: Паттерны суть слабости языков программирования
От: FR  
Дата: 01.11.06 08:29
Оценка:
Здравствуйте, AVC, Вы писали:


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


AVC>Ты хочешь сказать, что нет разницы между "приобретением" типа в порождающем паттерне и динамическом языке?


Интересно в таком направлении не думал, но похоже так оно и есть
Я просто имел в виду что в динамике этот паттерн практически встроен.

AVC>(Маленькое лирическое отступление. Помню старую советскую карикатуру. Две мыши в библиотеке грызут книги. Одна говорит другой: "Не вижу разницы между классикой и современной литературой". )

AVC>В языках с динамической типизацией переменная "приобретает" тип, когда ей присваивается значение.
AVC>В "порождающих" паттернах происходит ровно то же самое: указатель получает "конкретный" тип, когда начинает указывать на созданный объект.
AVC>Вроде, все похоже.
AVC>ИМХО, в динамических языках действует именно паттерн (назовем его...э-э... "получение типа от другого уже созданного объекта" или "получил тип сам — передай другому").

Угу действует, и поэтому твой пример с порождающими паттернами не верен
Re[2]: Паттерны суть слабости языков программирования
От: Курилка Россия http://kirya.narod.ru/
Дата: 01.11.06 09:03
Оценка:
Здравствуйте, AVC, Вы писали:

AVC>Возвращаясь ненадолго к этой, уже "остывшей", теме.

AVC>Если основная мысль в том, что паттерны — всего-лишь "костыли", и все должно быть включено в язык, то в таком общем виде эта мысль, вероятно, неверна.
Откуда ты взял выделенное, интересно?
Или ты не видишь разницы между расширяемым языком и языком, в который включено всё, что только можно?
Re[5]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 01.11.06 09:38
Оценка:
Здравствуйте, FR, Вы писали:

AVC>>(Маленькое лирическое отступление. Помню старую советскую карикатуру. Две мыши в библиотеке грызут книги. Одна говорит другой: "Не вижу разницы между классикой и современной литературой". )

AVC>>В языках с динамической типизацией переменная "приобретает" тип, когда ей присваивается значение.
AVC>>В "порождающих" паттернах происходит ровно то же самое: указатель получает "конкретный" тип, когда начинает указывать на созданный объект.
AVC>>Вроде, все похоже.
AVC>>ИМХО, в динамических языках действует именно паттерн (назовем его...э-э... "получение типа от другого уже созданного объекта" или "получил тип сам — передай другому").

FR>Угу действует, и поэтому твой пример с порождающими паттернами не верен


Отнюдь.
Просто я спросонок выражаюсь по утреннему туманно.
Я как раз хотел сказать, что в этом пункте (порождение объектов) между динамическими и статическими языками нет принципиальной разницы.
В динамических языках какой-нибудь оператор x = "Hello!" ничуть не лучше скрывает тип, чем в Си++ p = new String("Hello!").
В динамическом языке, чтобы сохранить гибкость при порождении объекта, тебе точно также придется прибегнуть к паттерну.

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

Хоар
Re[6]: Паттерны суть слабости языков программирования
От: FR  
Дата: 01.11.06 09:57
Оценка:
Здравствуйте, AVC, Вы писали:


AVC>Отнюдь.

AVC>Просто я спросонок выражаюсь по утреннему туманно.
AVC>Я как раз хотел сказать, что в этом пункте (порождение объектов) между динамическими и статическими языками нет принципиальной разницы.
AVC>В динамических языках какой-нибудь оператор x = "Hello!" ничуть не лучше скрывает тип, чем в Си++ p = new String("Hello!").
AVC>В динамическом языке, чтобы сохранить гибкость при порождении объекта, тебе точно также придется прибегнуть к паттерну.

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

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


AVC>>В динамическом языке, чтобы сохранить гибкость при порождении объекта, тебе точно также придется прибегнуть к паттерну.


FR>Который выродится просто в строку кода на этом динамическом языке.


Не факт.
Господа — вы бы хоть договорились о том, какой же паттерн вы реализуете, или речь про сферических конях?
Re[8]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 01.11.06 12:21
Оценка:
Здравствуйте, Курилка, Вы писали:

AVC>>>В динамическом языке, чтобы сохранить гибкость при порождении объекта, тебе точно также придется прибегнуть к паттерну.


FR>>Который выродится просто в строку кода на этом динамическом языке.


К>Не факт.

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

Возьмем для примера абстрактную фабрику.
Например:
class AbstractFactory {
public:
    virtual A *CreateA() = 0;
    virtual B *CreateB() = 0;
    ...
};

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

Хоар
Re[7]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 01.11.06 12:24
Оценка:
Здравствуйте, FR, Вы писали:

AVC>>В динамических языках какой-нибудь оператор x = "Hello!" ничуть не лучше скрывает тип, чем в Си++ p = new String("Hello!").

AVC>>В динамическом языке, чтобы сохранить гибкость при порождении объекта, тебе точно также придется прибегнуть к паттерну.

FR>Который выродится просто в строку кода на этом динамическом языке.


Например?

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

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

AVC>Возьмем для примера абстрактную фабрику.

AVC>Например:
AVC>
AVC>class AbstractFactory {
AVC>public:
AVC>    virtual A *CreateA() = 0;
AVC>    virtual B *CreateB() = 0;
AVC>    ...
AVC>};
AVC>


Постановка задачи очень неполна, непонятно откуда у нас берётся фабрика — на базе чего? Если так то можно одной строчкой обойтись типа
A = SuperPuperA.new
Re[8]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 01.11.06 12:54
Оценка: :))) :))
Здравствуйте, Курилка, Вы писали:

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


Паттерн — Сфероконь. А чё классно звучит. Предлагаю дать ему описание.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Паттерны суть слабости языков программирования
От: Курилка Россия http://kirya.narod.ru/
Дата: 01.11.06 13:09
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Паттерн — Сфероконь. А чё классно звучит. Предлагаю дать ему описание.


Вариант реализации не нарисуешь?
Какой язык возьмёшь для неё?
Re[8]: Паттерны суть слабости языков программирования
От: FR  
Дата: 01.11.06 13:31
Оценка:
Здравствуйте, AVC, Вы писали:


FR>>Который выродится просто в строку кода на этом динамическом языке.


AVC>Например?


Re[9]: Паттерны суть слабости языков программирования
Автор: Курилка
Дата: 01.11.06
Re[9]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 01.11.06 13:47
Оценка:
Здравствуйте, FR, Вы писали:

FR>>>Который выродится просто в строку кода на этом динамическом языке.


AVC>>Например?


FR>Re[9]: Паттерны суть слабости языков программирования
Автор: Курилка
Дата: 01.11.06


Что такое SuperPuperA?
Если это класс, то цель (избежать привязки к конкретным классам) не достигнута.
Если это переменная, то налицо паттерн, использование которого и на Си++ выразится одной строчкой:
A *a = afp->CreateA();

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

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

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

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


FR>>>>Который выродится просто в строку кода на этом динамическом языке.


AVC>>>Например?


FR>>Re[9]: Паттерны суть слабости языков программирования
Автор: Курилка
Дата: 01.11.06


AVC>Что такое SuperPuperA?

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

Блин, ну определи чётко цель-то! Что и как происходит? Уже конкретно достало паттерн Сфероконь обсуждать
Re[11]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 01.11.06 14:57
Оценка:
Здравствуйте, Курилка, Вы писали:

AVC>>Что такое SuperPuperA?

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

К>Блин, ну определи чётко цель-то! Что и как происходит? Уже конкретно достало паттерн Сфероконь обсуждать


Паттерн Сфероконь пока что обсуждаешь только ты с VladD2.
Я говорю о хорошо известном паттерне Абстрактная Фабрика из книжки GoF.
Если ты вдруг запамятовал, что это такое и для чего используется, загляни в книжку.
А если не запамятовал, то к чему рассуждения о Сфероконях?

А цель простая.
Хочу, чтобы мне показали как можно обойтись без порождающих паттернов (в смысле GoF), одними средствами языка (например, с динамической типизацией).

Потому как в статье, которую ты вынес на обсуждение в этом топике, резюме, ИМХО, достаточно резкое:

Patterns are signs of weakness in programming languages.

When we identify and document one, that should not be the end of the story. Rather, we should have the long-term goal of trying to understand how to improve the language so that the pattern becomes invisible or unnecessary.


Вот я и хочу испытать, ко всем ли паттернам применим этот тезис.

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

Хоар
Re[12]: Паттерны суть слабости языков программирования
От: FR  
Дата: 01.11.06 15:27
Оценка:
Здравствуйте, AVC, Вы писали:

AVC>Здравствуйте, Курилка, Вы писали:


AVC>>>Что такое SuperPuperA?

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

К>>Блин, ну определи чётко цель-то! Что и как происходит? Уже конкретно достало паттерн Сфероконь обсуждать


AVC>Паттерн Сфероконь пока что обсуждаешь только ты с VladD2.

AVC>Я говорю о хорошо известном паттерне Абстрактная Фабрика из книжки GoF.

В GoF как раз написано что паттерн абстрактная фабрика в смаллтоке мало полезен, и легко реализуется через патерн прототип
Вообще для языков с утиной типизацией абстрактная фабрика просто вырождается в реализации конкретных фабрик, в абстрактной же фабрике никакой необходимости нет.
Re[13]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 01.11.06 15:45
Оценка:
Здравствуйте, FR, Вы писали:

AVC>>Я говорю о хорошо известном паттерне Абстрактная Фабрика из книжки GoF.


FR>В GoF как раз написано что паттерн абстрактная фабрика в смаллтоке мало полезен, и легко реализуется через патерн прототип

FR>Вообще для языков с утиной типизацией абстрактная фабрика просто вырождается в реализации конкретных фабрик, в абстрактной же фабрике никакой необходимости нет.

Насколько я помню, в GoF говорится о том, что в Смоллтоке необязательно создавать класс для каждой отдельной абстрактной фабрики.
В Смоллтоке сама фабрика может быть создана с помощью паттерна Прототип.
Полезность самой фабрики под сомнение, вроде бы, там не ставится.
Т.е. в Смоллтоке получается двойное использование паттернов: Абстрактная Фабрика, которая, в свою очередь, создается с помощью паттерна Прототип.
(Кстати, в первоначальном Обероне для создания фабрики новый класс также не потребовался бы. )

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

Хоар
Re[14]: Паттерны суть слабости языков программирования
От: FR  
Дата: 01.11.06 16:25
Оценка: +1
Здравствуйте, AVC, Вы писали:

AVC>Полезность самой фабрики под сомнение, вроде бы, там не ставится.


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

AVC>Т.е. в Смоллтоке получается двойное использование паттернов: Абстрактная Фабрика, которая, в свою очередь, создается с помощью паттерна Прототип.


Там очень многие паттерны также вырождаются.

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


Почему?
Re[15]: Паттерны суть слабости языков программирования
От: AVC Россия  
Дата: 01.11.06 19:50
Оценка: 1 (1)
Здравствуйте, FR, Вы писали:

AVC>>Т.е. в Смоллтоке получается двойное использование паттернов: Абстрактная Фабрика, которая, в свою очередь, создается с помощью паттерна Прототип.


FR>Там очень многие паттерны также вырождаются.


Но не исчезают.

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


FR>Почему?


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

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

Хоар
Re[10]: Паттерны суть слабости языков программирования
От: ironwit Украина  
Дата: 02.11.06 06:03
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Я вот, например, не имею машину и не хочу ее иметь. Причем с деньгами у меня все впорядке. Просто она мне не нужна. У меня работа в 10 минутах хотьбы. Спортзал тоже. А если

ИМХО только это уже показывает что ты о ней задумываешься?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Я не умею быть злым, и не хочу быть добрым.
Re[16]: Паттерны суть слабости языков программирования
От: Курилка Россия http://kirya.narod.ru/
Дата: 02.11.06 08:28
Оценка:
Здравствуйте, AVC, Вы писали:

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


AVC>>>Т.е. в Смоллтоке получается двойное использование паттернов: Абстрактная Фабрика, которая, в свою очередь, создается с помощью паттерна Прототип.


FR>>Там очень многие паттерны также вырождаются.


AVC>Но не исчезают.


Ну скажи, откуда ты это "исчезновение" придумал? Речь изначально шла о том, чтобы не писать заново и заново груды кода для реализации паттерна, т.е. использовать его, но написать при этом лишь достаточное число кода (т.е. тот код, который изменеятся при каждом использовании паттерна, и не повторять одни и те же части его)
Re[11]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.11.06 10:02
Оценка: :)
Здравствуйте, ironwit, Вы писали:

VD>>Я вот, например, не имею машину и не хочу ее иметь. Причем с деньгами у меня все впорядке. Просто она мне не нужна. У меня работа в 10 минутах хотьбы. Спортзал тоже. А если

I>ИМХО только это уже показывает что ты о ней задумываешься?

Я иногда о мышах и такраканах задумываюь. Что же мне из-за этого их заводить что ли?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Паттерны суть слабости языков программирования
От: FR  
Дата: 02.11.06 10:21
Оценка: :)
Здравствуйте, VladD2, Вы писали:


VD>Я иногда о мышах и такраканах задумываюь. Что же мне из-за этого их заводить что ли?


Да жаль что автомобили в отличии от мышей и тараканов сами собой не заводятся.
Re[17]: Паттерны суть слабости языков программирования
От: WolfHound  
Дата: 02.11.06 10:51
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Ну скажи, откуда ты это "исчезновение" придумал? Речь изначально шла о том, чтобы не писать заново и заново груды кода для реализации паттерна, т.е. использовать его, но написать при этом лишь достаточное число кода (т.е. тот код, который изменеятся при каждом использовании паттерна, и не повторять одни и те же части его)

Для этого динамика не ну нужна... Правильные статические языки тоже позволяют не писать одно и тоже кучу раз.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[18]: Паттерны суть слабости языков программирования
От: Курилка Россия http://kirya.narod.ru/
Дата: 02.11.06 11:02
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, Курилка, Вы писали:


К>>Ну скажи, откуда ты это "исчезновение" придумал? Речь изначально шла о том, чтобы не писать заново и заново груды кода для реализации паттерна, т.е. использовать его, но написать при этом лишь достаточное число кода (т.е. тот код, который изменеятся при каждом использовании паттерна, и не повторять одни и те же части его)

WH>Для этого динамика не ну нужна... Правильные статические языки тоже позволяют не писать одно и тоже кучу раз.
Я где-то утверждал, что для этого обязательно нужна динамика? И расскажи, пожалуста, что такое "правильнось" статических языков
Re[13]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.11.06 17:27
Оценка:
Здравствуйте, FR, Вы писали:

FR>Да жаль что автомобили в отличии от мышей и тараканов сами собой не заводятся.


Кому-то жаль...
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Паттерны суть слабости языков программирования
От: vdimas Россия  
Дата: 03.11.06 13:07
Оценка: :))
Здравствуйте, VladD2, Вы писали:

VD>паттерн-матчинг нивилирует необходимость в этом паттерне.


Это смотря сколько посещений надо сделать. Двойная диспечеризация работает быстрее всяких сравнений.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[16]: Паттерны суть слабости языков программирования
От: WolfHound  
Дата: 03.11.06 13:31
Оценка:
Здравствуйте, vdimas, Вы писали:

VD>>паттерн-матчинг нивилирует необходимость в этом паттерне.

V>Это смотря сколько посещений надо сделать. Двойная диспечеризация работает быстрее всяких сравнений.
И с чего ты взял что patterm-matching нельзя оптимизировать до двойной диспетчеризации в тех члучаях когда это возможно?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[17]: Паттерны суть слабости языков программирования
От: vdimas Россия  
Дата: 03.11.06 15:19
Оценка: -1
Здравствуйте, WolfHound, Вы писали:


V>>Это смотря сколько посещений надо сделать. Двойная диспечеризация работает быстрее всяких сравнений.

WH> И с чего ты взял что patterm-matching нельзя оптимизировать до двойной диспетчеризации в тех члучаях когда это возможно?

Ну вот откомпили в Nemerle или еще где, и покажи нам в рефлекторе, до какого уровня там оптимизируется. Пока что я в имплементации паттерн-матчинга черти что видел. Расплату за удобства.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[18]: Паттерны суть слабости языков программирования
От: WolfHound  
Дата: 03.11.06 16:27
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Ну вот откомпили в Nemerle или еще где, и покажи нам в рефлекторе, до какого уровня там оптимизируется. Пока что я в имплементации паттерн-матчинга черти что видел. Расплату за удобства.

Ну и зачем докапыватся до КОНРЕТНЫХ реализаций чтобы доказать что такое не возможно в принципе? Столь примитивная демагогия в данном форуме не пройдет.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[19]: Паттерны суть слабости языков программирования
От: IT Россия linq2db.com
Дата: 03.11.06 16:53
Оценка: +1
Здравствуйте, WolfHound, Вы писали:

V>>Ну вот откомпили в Nemerle или еще где, и покажи нам в рефлекторе, до какого уровня там оптимизируется. Пока что я в имплементации паттерн-матчинга черти что видел. Расплату за удобства.

WH>Ну и зачем докапыватся до КОНРЕТНЫХ реализаций чтобы доказать что такое не возможно в принципе? Столь примитивная демагогия в данном форуме не пройдет.

И всё же я бы спросил что там не так
Если нам не помогут, то мы тоже никого не пощадим.
Re[20]: Паттерны суть слабости языков программирования
От: WolfHound  
Дата: 03.11.06 17:34
Оценка:
Здравствуйте, IT, Вы писали:

IT>И всё же я бы спросил что там не так

Это
Автор: VladD2
Дата: 22.05.06
уже починили?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[16]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.11.06 17:59
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Это смотря сколько посещений надо сделать. Двойная диспечеризация работает быстрее всяких сравнений.


Вообще-то паттерн матчинг работает быстрее чем двойная дипетчиризация. К тому же он сильно удобнее и гибче.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Паттерны суть слабости языков программирования
От: WolfHound  
Дата: 03.11.06 18:35
Оценка:
Здравствуйте, VladD2, Вы писали:

V>>Это смотря сколько посещений надо сделать. Двойная диспечеризация работает быстрее всяких сравнений.

VD>Вообще-то паттерн матчинг работает быстрее чем двойная дипетчиризация.
Вобщето это не так.
Если рассматривать простейшую диспетчерезацию по двум параметрам то в обоих случаях будет переход по двум таблицам. И тут уж чей оптимизатор лучше...
VD>К тому же он сильно удобнее и гибче.
А вот с этим согласен.
И с тем что в сложных случаях паттерн-матчинг порвет двойную диспетчерезацию с костылями я тоже согласен.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[18]: Паттерны суть слабости языков программирования
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.11.06 19:01
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Вобщето это не так.

WH>Если рассматривать простейшую диспетчерезацию по двум параметрам то в обоих случаях будет переход по двум таблицам. И тут уж чей оптимизатор лучше...

А причем тут по двум параметрам? Вдимас явно о простом варианте говорит.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Паттерны суть слабости языков программирования
От: EvilChild Ниоткуда  
Дата: 03.11.06 20:02
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Паттерн — Сфероконь. А чё классно звучит. Предлагаю дать ему описание.

Предлагаю нарисовать UML диаграмму
now playing: Genetix — Structures (Future Prophecies Remix)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.