Re[20]: Странные фичи языков
От: anonymous Россия http://denis.ibaev.name/
Дата: 26.08.10 11:46
Оценка: :)
Здравствуйте, mrTwister, Вы писали:

Молодец, покривлялся.

A>>Теперь мы можем, наверное, перейти к следующему пункту — обоснованности некоторых положений стандарта?

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

А почему нет? Это запрещено?

http://rsdn.ru/forum/flame.comp/3934566.1.aspx
Автор: anonymous
Дата: 26.08.10
Re[17]: Странные фичи языков
От: Erop Россия  
Дата: 26.08.10 12:20
Оценка:
Здравствуйте, anonymous, Вы писали:

A>В Perl это даст 12, а не "12".

А какая, с т. з. PERL разница?

A>Для конкатенации же там отдельный оператор.


Ну да. Только им редко довольно пользуются.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[21]: Странные фичи языков
От: Erop Россия  
Дата: 26.08.10 12:23
Оценка:
Здравствуйте, anonymous, Вы писали:

A>А почему нет? Это запрещено?


Программа немножко плохо предсказуемо работает, а так всё хорошо...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[21]: Странные фичи языков
От: mrTwister Россия  
Дата: 26.08.10 12:24
Оценка:
Здравствуйте, anonymous, Вы писали:

A>А почему нет? Это запрещено?


Потому что это приводит к трудноуловимым ошибкам, так как возникает противоречие: какую именно операцию выполнить? Если для компилятора (или интерпретатора) это противоречие разрешить легко, введя какое-нибудь формальное правило, то с человеком сложнее, так как он должен будет в уме каждый раз производить вычисление этого правила и не дай бог ошибется.
лэт ми спик фром май харт
Re[22]: Странные фичи языков
От: Mr.Cat  
Дата: 26.08.10 12:28
Оценка:
Здравствуйте, mrTwister, Вы писали:
A>>А почему нет? Это запрещено?
T>Потому что это приводит к трудноуловимым ошибкам, так как возникает противоречие: какую именно операцию выполнить?
Виртуальные функции ты, я погляжу, не очень любишь, да?
Re[18]: Странные фичи языков
От: anonymous Россия http://denis.ibaev.name/
Дата: 26.08.10 12:30
Оценка:
Здравствуйте, Erop, Вы писали:

A>>В Perl это даст 12, а не "12".

E>А какая, с т. з. PERL разница?

С точки зрения Perl, оно по разному хранится. Для программиста, в данном конкретном случае, наверное, никакой.

A>>Для конкатенации же там отдельный оператор.

E>Ну да. Только им редко довольно пользуются.

Ты имеешь в виду интерполяцию? Это на любителя. TMTOWTDI.
Re[15]: Странные фичи языков
От: neFormal Россия  
Дата: 26.08.10 12:40
Оценка:
Здравствуйте, anonymous, Вы писали:

A>О, в списке говноязыков новое пополнение. А осталось ли ещё что-нибудь, кроме них?


brainfuck
...coding for chaos...
Re[23]: Странные фичи языков
От: mrTwister Россия  
Дата: 26.08.10 12:50
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

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

A>>>А почему нет? Это запрещено?
T>>Потому что это приводит к трудноуловимым ошибкам, так как возникает противоречие: какую именно операцию выполнить?
MC>Виртуальные функции ты, я погляжу, не очень любишь, да?

В случае с виртуальными функциями мне помогает Liskov substitution principle, который в обсуждаемом вопросе нарушен.
лэт ми спик фром май харт
Re[24]: Странные фичи языков
От: Mr.Cat  
Дата: 26.08.10 12:56
Оценка:
Здравствуйте, mrTwister, Вы писали:
T>В случае с виртуальными функциями мне помогает Liskov substitution principle, который в обсуждаемом вопросе нарушен.
Почему? И строки, и числа с операцией + образуют, емнип, моноид. Везде, где тебе нужен был бы моноид...
Re[25]: Странные фичи языков
От: mrTwister Россия  
Дата: 26.08.10 13:06
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

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

T>>В случае с виртуальными функциями мне помогает Liskov substitution principle, который в обсуждаемом вопросе нарушен.
MC>Почему? И строки, и числа с операцией + образуют, емнип, моноид. Везде, где тебе нужен был бы моноид...

Во-первых операция конкатенации некоммутативна, а арифметическое сложение коммутативно
Во-вторых, если рассматривать пример с '5' + 2 и '5' — 2, то здесь важно то, что для арифметического сложения выполняется правило: a + b = a-(-1*b), а для конкатенации не выполняется.
лэт ми спик фром май харт
Re[26]: Странные фичи языков
От: Mr.Cat  
Дата: 26.08.10 13:16
Оценка:
Здравствуйте, mrTwister, Вы писали:
MC>>Почему? И строки, и числа с операцией + образуют, емнип, моноид. Везде, где тебе нужен был бы моноид...
T>Во-первых операция конкатенации некоммутативна, а арифметическое сложение коммутативно
T>Во-вторых, если рассматривать пример с '5' + 2 и '5' — 2, то здесь важно то, что для арифметического сложения выполняется правило: a + b = a-(-1*b), а для конкатенации не выполняется.
Ну и что? "+" и так ассоциативный и у него есть нейтральный элемент (0 и '') соответственно. Этого мало, чтобы работал LSP?
Re[27]: Странные фичи языков
От: mrTwister Россия  
Дата: 26.08.10 13:23
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

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

MC>>>Почему? И строки, и числа с операцией + образуют, емнип, моноид. Везде, где тебе нужен был бы моноид...
T>>Во-первых операция конкатенации некоммутативна, а арифметическое сложение коммутативно
T>>Во-вторых, если рассматривать пример с '5' + 2 и '5' — 2, то здесь важно то, что для арифметического сложения выполняется правило: a + b = a-(-1*b), а для конкатенации не выполняется.
MC>Ну и что? "+" и так ассоциативный и у него есть нейтральный элемент (0 и '') соответственно. Этого мало, чтобы работал LSP?

Этого мало. Можно написать код, который будет работать если операция коммуттивна, но сломается если операция некоммутативна. Соответственно, мы не можем безопасно заменить одну операцию другой. Значит, LSP нарушен. С правилом "a + b = a-(-1*b)" та же самая ситуация.
лэт ми спик фром май харт
Re[28]: Странные фичи языков
От: Mr.Cat  
Дата: 26.08.10 13:25
Оценка: :)
Здравствуйте, mrTwister, Вы писали:
T>Этого мало. Можно написать код, который будет работать если операция коммуттивна, но сломается если операция некоммутативна. Соответственно, мы не можем безопасно заменить одну операцию другой.
А ты почитай документацию — и не пиши код, который сломается. Пока ты используешь "+" как ассоциативную операцию с нейтральным элементом — ничего не сломается. LSP в действии.

T>Значит, LSP нарушен.

Нет, это значит, что программист не читал документацию.
Re[29]: Странные фичи языков
От: mrTwister Россия  
Дата: 26.08.10 13:41
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

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

T>>Этого мало. Можно написать код, который будет работать если операция коммуттивна, но сломается если операция некоммутативна. Соответственно, мы не можем безопасно заменить одну операцию другой.
MC>А ты почитай документацию — и не пиши код, который сломается. Пока ты используешь "+" как ассоциативную операцию с нейтральным элементом — ничего не сломается. LSP в действии.
Это и есть кривость. Думать о LSP надо при проектировании операций, а не при их использовании.

T>>Значит, LSP нарушен.

MC>Нет, это значит, что программист не читал документацию.
Программист читал документацию, но ошибся. Или ошибаются только лохи?
лэт ми спик фром май харт
Re[30]: Странные фичи языков
От: Mr.Cat  
Дата: 26.08.10 14:20
Оценка:
Здравствуйте, mrTwister, Вы писали:
T>Это и есть кривость. Думать о LSP надо при проектировании операций, а не при их использовании.
Согласен, что можно было расширить применимость +/- для строк. Разработчики не захотели, увы.

T>>>Значит, LSP нарушен.

MC>>Нет, это значит, что программист не читал документацию.
T>Программист читал документацию, но ошибся.
Это не значит, что LSP нарушен.
Re[31]: Странные фичи языков
От: mrTwister Россия  
Дата: 26.08.10 14:28
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

T>>Программист читал документацию, но ошибся.

MC>Это не значит, что LSP нарушен.

It states that, if S is a subtype of T, then objects of type T in a computer program may be replaced with objects of type S (i.e., objects of type S may be substituted for objects of type T), without altering any of the desirable properties of that program (correctness, task performed, etc.).

лэт ми спик фром май харт
Re[32]: Странные фичи языков
От: Mr.Cat  
Дата: 26.08.10 14:30
Оценка:
Здравствуйте, mrTwister, Вы писали:
T>

T>It states that, if S is a subtype of T, then objects of type T in a computer program may be replaced with objects of type S (i.e., objects of type S may be substituted for objects of type T), without altering any of the desirable properties of that program (correctness, task performed, etc.).

Что, по-твоему, в данном случае S, а что T?
Re[33]: Странные фичи языков
От: mrTwister Россия  
Дата: 26.08.10 14:36
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

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

T>>

T>>It states that, if S is a subtype of T, then objects of type T in a computer program may be replaced with objects of type S (i.e., objects of type S may be substituted for objects of type T), without altering any of the desirable properties of that program (correctness, task performed, etc.).

MC>Что, по-твоему, в данном случае S, а что T?

А все равно.
Ты спросил не против ли я виртуальных функций — я ответил, что не против, когда выполняется LSP. То есть когда мне фиолетово, какой тип у переменной. В случае же со сложением строк и сложением чисел мне важен тип переменной, так как в зависимости от типа операцию надо по-разному использовать (так как у неё разные свойства).
лэт ми спик фром май харт
Re[34]: Странные фичи языков
От: Mr.Cat  
Дата: 26.08.10 14:52
Оценка:
Здравствуйте, mrTwister, Вы писали:
T>А все равно.
А не все. Строка и число не являются subtype/supertype. Ты неправильно применяешь к ним LSP.
Re[35]: Странные фичи языков
От: mrTwister Россия  
Дата: 26.08.10 15:08
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

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

T>>А все равно.
MC>А не все. Строка и число не являются subtype/supertype. Ты неправильно применяешь к ним LSP.

Зато у них есть общая операция '+' и мы вместо строки можем подставить (substitute) число и наоборот. То есть они ведут себя так, как будто у них есть базовый тип, определяющий операцию '+'. Вот тут то как раз LSP и нарушается. Но хорошо, допустим я неправильно применил LSP к строкам и числам. Вернемся назад, ты меня спросил:

Виртуальные функции ты, я погляжу, не очень любишь, да?


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