Re[19]: Снова о Nemerle или профанация не пройдет :)
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 23.02.06 11:06
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Как обычно. Сказать есть что, но тебе это не нравится.


Увы, слова про "хрень" — действительно "как обычно". И, таки так, восхищения у меня они не вызывают.

VD>match заменяет и if, и switch и даже операторы вроде && и ||. Доказательством служит то, что в Нэмерел операторы if реализован на базе match, а switch вообще отсуствует, так как проигрывает match-у в выразительности.


VD>Но это сказать это, все равно что ничего не сказать.

VD>match — это в разы большее мошьная конструкция.
VD>Конечно, все что можно сделать с помощь match можно сэмулировать сочетанием груды if-ов cо switch-ами, плюс прийдется пользоваться хэш-таблицами и писать кучу кода.

Влад, сопостовление с образцом это средство связывания данных с кодом их обрабатывающим, можно сказать средство создания контекста выполнения. Вот тебе пример из A Gentle Introduction to Haskel:

4.1 Pattern-Matching Semantics
A successful match binds the formal parameters in the pattern.
При успешном сопоставлении (данные) связываются с формальными параметрами образца.
/.../
4.3 Case Expressions
Pattern matching provides a way to "dispatch control" based on structural properties of a value.
Сопоставлени с образцом позволяет "передавать управление" в зависимости от структуры значения.


Кроме операторов ветвления if/switch в современных языках есть другие способы как передачи управления, так и связывания кода с данными. Это, известные всем, методы объектов, где код всегда связан с нужными данными. И перегрузка методов в статически типизируемых языках.

И ежу понятно, что сопоставление с образцом более гибко, чем объекты + (виртуальные) методы, потому, что структура объектов более жесткая. Но, поскольку сказано, что пример "наглядно демонстрирует некоторые отличия между Nemerle и C#
Автор: Vermicious Knid
Дата: 20.02.06
", то, корректной была бы программа-образец в которой сравнивались методы + объекты + if/switch с сопоставлением. Использованный пример можно заимплементить даже без if (Что я и показал). Что интересно, достаточно легко выбрать задачу, которая через сопоставление решается "веселее" чем на конструировании объектов/методов/if-ов. Простейший пример — любая задача требующая множественной диспетчеризации (для примера может хватить и двойной).

А уж если сравнивать сопоставление только с if/switch, то нужно было бы взять читый C. Только сомневаюсь, что сравнение Nemerle с С добавит первому очков.

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

VD>Собственно именно это и пытался продемонстрировать Vermicious Knid в обсуждаемом сообщении
Автор: Vermicious Knid
Дата: 20.02.06
.


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

VD>Не приймите, это за наезд или оскорбление, но вам похоже нужно просто по серьезнее изучить match и его возможности. Тогда вам будет очевидно, что match — это намного более универсальная и выразительная вещь чем switch. Ну, а if является более врыазительным в некоторых случаях, но не обеспечивает всего функционала. Куча же if-фов является явно менее выразительной.


А мужики то и не знают, что match нужно сравнивать со switch. А они взяли и написали:

Сопоставление с образцом это способ разложения сложных структур.

И не сказали, что это способ управления потоком выполнения. Нужно написать им баг-репорт, однозначно.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.