palm_mute ([info]palm_mute) wrote,
@ 2007-06-01 14:28:00
Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Entry tags:bugs, programming, rant

Занимательная энтомология
Нашел баг в Visual C# 2005. По крайней мере, народ, знающий C# лучше меня, склоняется к тому, что это таки баг. Если лень ходить по ссылке - поведение программы может зависеть от порядка объявлений перегруженных методов в интерфейсе. Что характерно, баг, похоже, в спецификации языка - никто не смог найти конкретный абзац, объясняющий, как должна интерпретироваться данная программа. Мне кажется, что проблема в отсутствии хоть какого-нибудь подобия формального семантики. Эти жуткие документы - стандарт C++ и спецификация C# - напоминают творение адвокатов, а не инженеров, и сочетают в себе худшее из двух миров: пугающие объемы текста, нечитабельный, непонятный язык и масса возможных неоднозначностей и разночтений.

Когда мы придем к власти, миром будут править Карри и его друг Говард.



(Post a new comment)

Именно!
[info]deni_ok
2007-06-01 01:27 pm UTC (link)
Наконец-то кто-то сказал! Ненавижу эти стандарты! Священные системы костылей и подпорок под кривые дизайнерские решения.

'то-то сё-то, однако смотри п.287/345бис в смысле п.33а приложения 2'

Чуствуешь себя канцелярской крысой.

(Reply to this)(Thread)

Re: Именно!
[info]palm_mute
2007-06-01 01:36 pm UTC (link)
Похожая ситуация со стандартами W3C, которые мне доводилось читать. Спецификация SOAP 2.0 мне показалась сущим кошмаром - нагромождение абстрактных недоопределенных понятий без намека на землю под ногами. "S" stands for simple, ага.

(Reply to this)(Parent)


[info]deni_ok
2007-06-01 01:35 pm UTC (link)
Стандарт Хаскелла, кстати, легко читается даже на довольно раннем этапе обучения языку, в отличие от.

(Reply to this)


[info]vorotylo
2007-06-01 02:16 pm UTC (link)
"Прийдем к власти" как-то уж слишком комитетно звучит. Вода затекает в вакуум не потому, что ей захотелось или кто-то верно правит. Я к тому, что правильный язык неизбежно пробьется, а будет это Haskell или Martian — не имеет значения.

C++ гомно язык, спору нет (C# не пробовал).

См. цитатку.

(Reply to this)(Thread)


[info]palm_mute
2007-06-01 03:03 pm UTC (link)
"Когда мы придем к власти" - это просто расхожая фраза, некоторые даже сокращают ее до КМПВ. Люблю я громкие фразы, что поделать :).

Цитатка хороша, но теорема Геделя все портит.

(Reply to this)(Parent)(Thread)

Re: теорема Геделя
[info]vorotylo
2007-06-01 03:10 pm UTC (link)
Это которая из этих?

(Reply to this)(Parent)(Thread)

Re: теорема Геделя
[info]palm_mute
2007-06-01 03:16 pm UTC (link)
Первая вроде больше подходит :)

(Reply to this)(Parent)


[info]deni_ok
2007-06-01 04:45 pm UTC (link)
> Цитатка хороша, но теорема Геделя все портит

Ну, она лишь информирует нас, что предлагаемый к рассмотрению язык не может быть рекурсивно нумеруем ;)

(Reply to this)(Parent)


[info]palm_mute
2007-06-01 03:07 pm UTC (link)
>Я к тому, что правильный язык неизбежно пробьется, а будет это Haskell или Martian — не имеет значения.
Кстати, заметь, о Haskell я не издал ни звука, только о Curry-Howard correspondence, а эта штука, на мой взгляд, должна присутствовать в любом "правильном" языке.

(Reply to this)(Parent)


[info]some41
2007-06-01 02:42 pm UTC (link)
почитай http://blogs.msdn.com/ericlippert
там вроде даже несколько раз были подобные примеры с подробными объяснениями и комментариями. например, вот это http://blogs.msdn.com/ericlippert/archive/2006/04/05/569085.aspx

(Reply to this)(Thread)


[info]palm_mute
2007-06-01 03:00 pm UTC (link)
Wow, спасибо. Другие примеры в блоге пока не искал, но ссылка прекрасно все объясняет (хотя конкретный случай, о котором я спрашивал, там не рассматривается). Собственно, он подтвердил мое утверждение о том, что в спецификации есть дефекты:

What happens when we have both an explicit implementation and a class implementation? The spec does not actually say what to do. It turns out that we end up in a situation where runtime behaviour depends on source code order of the interface!


Но я не понимаю, как такое дурацкое решение (explicit interface implementation mappings in the class match the methods in the interfaces in a first-come-first-served manner) могло прийти в голову. По-моему, куда лучше было бы ругнуться и умереть.

(Reply to this)(Parent)(Thread)


[info]some41
2007-06-03 08:45 pm UTC (link)
я ничего не понимаю в C#, но, по-моему, описанный случай совпадает с твоим. то, что там один из методов был не generic, не существенно. (точнее, это существенно при вызове, но проблема не в вызове, а в implementation mappings)

кстати, продолжение в следующем посте, если ты еще не нашел: http://blogs.msdn.com/ericlippert/archive/2006/04/06/570126.aspx

(Reply to this)(Parent)


[info]subdmitry
2007-06-01 04:01 pm UTC (link)
Интересно, есть ли какая-то практическая ценность в таком коде, или тебе просто захотелось поиздеваться над С#?

(Reply to this)(Thread)


[info]palm_mute
2007-06-01 04:06 pm UTC (link)
На форуме мне тоже задали этот вопрос. Да, use-case у меня был, но я не хотел бы вдаваться в подробности.

(Reply to this)(Parent)


[info]nivanych
2007-10-18 04:16 am UTC (link)
> непонятный язык и масса возможных
> неоднозначностей и разночтений.

Подзабыл я уже, что-ли ...
Где в стандарте C++ неоднозначности ?

(Reply to this)(Thread)


[info]palm_mute
2007-10-18 07:41 am UTC (link)
Да я тоже начал забывать. Но найти при желании можно:
http://std.dkuug.dk/jtc1/sc22/wg21/docs/cwg_defects.html

(Reply to this)(Parent)(Thread)


[info]nivanych
2007-10-19 06:25 am UTC (link)
Спасибо.
Как раз тогда (2002 год)
я и закончил возиться с C++ :-)
Тогда я ещё и не знал, что система
темплейтов у него Тьюринг-полная.
У хаскеля система типов тоже.
Даже и не знаю, хорошо это, или плохо.
Наверное, всё-таки плохо.

http://article.gmane.org/gmane.comp.lang.haskell.general/14088
My purpose today is to show that the GHC typechecker with
multi-parameter typeclasses, functional dependencies, and undecidable instances
is Turing-complete. My strategy will be to embed the SK combinator calculus.

(Reply to this)(Parent)(Thread)


[info]deni_ok
2007-10-19 06:29 am UTC (link)
Хм...
А как связана полнота по Тьюрингу и кривизна стандарта?

(Reply to this)(Parent)(Thread)


[info]nivanych
2007-10-19 11:29 am UTC (link)
Если и про хаскель сомнительно, хорошо ли,
что система типов у него Тьюринг-полная,
то уж в таких типах, как C++, да ещё и кривых,
полнота однозначно может привести к чему-нибудь
довольно нехорошему типа подвисания компилятора.
У меня такое было, сослался на глюк компилятора, хотя,
вполне возможно, что дело и правда было в компиляторе.

(Reply to this)(Parent)


Create an Account
Forgot your login?
Login w/ OpenID
English • Español • Deutsch • Русский…