Здравствуйте, artelk, Вы писали:
A>Имхо, если Nemerle позиционируется, как строготипизированный язык, то тут должна быть ошибка.
Не вижу связи. Строгая типизация, это когда к объекту позволяют обращаться только через интерфейс соответствующий его типу. Питон и Руби, к примеру, строго типизированы.
A>Падает в рантайме. A>Имхо, если Nemerle позиционируется, как строготипизированный язык, то тут должна быть ошибка.
Тут аналогично случаю с, например, кодом в котором может случиться NullReferenceException при каких-то входных значениях. Если ты можешь гарантировать логикой выше, что в match FooBar.Foo никогда не придёт — то ничего не свалится. Если не можешь — внемли предупреждению и напиши обработчик и для ветки | Foo.
Здравствуйте, Don Reba, Вы писали:
DR>Здравствуйте, artelk, Вы писали:
A>>Имхо, если Nemerle позиционируется, как строготипизированный язык, то тут должна быть ошибка.
DR>Не вижу связи. Строгая типизация, это когда к объекту позволяют обращаться только через интерфейс соответствующий его типу. Питон и Руби, к примеру, строго типизированы.
Я имел ввиду статически типизирован. Т.е. чтоб ошибки, сделанные по невнимательности, выявлял на этапе компиляции. Думаю, паттерн-матчинг это случай, где лучше получить ошибку компиляции. Кому нужно пусть явно укажут _=>...
Здравствуйте, artelk, Вы писали:
A>Я имел ввиду статически типизирован. Т.е. чтоб ошибки, сделанные по невнимательности, выявлял на этапе компиляции. Думаю, паттерн-матчинг это случай, где лучше получить ошибку компиляции. Кому нужно пусть явно укажут _=>...
Он и выявил. А кто игнорирует варнинги, ССЗБ.
Имхо, компилятор должен падать с ошибкой только тогда, когда неясно какой код генерировать. А здесь все ясно.
Все известные мне языки с ПМ допускают неполный матчинг, генерят только ошибки.
Здравствуйте, _NN_, Вы писали:
_NN>Здравствуйте, artelk, Вы писали:
_NN>А здесь должна быть ошибка или нет ?
_NN>
_NN> F() : bool { true }
_NN>
Отвечу "не должна" и ты поменяешь F(), чтобы возвращалось случайное значение, так?
Re[3]: match, всего лишь предупреждение??
От:
Аноним
Дата:
17.09.13 10:34
Оценка:
Здравствуйте, artelk, Вы писали:
A>Здравствуйте, _NN_, Вы писали:
_NN>>Здравствуйте, artelk, Вы писали:
_NN>>А здесь должна быть ошибка или нет ?
_NN>>
_NN>> F() : bool { true }
_NN>>
A>Отвечу "не должна" и ты поменяешь F(), чтобы возвращалось случайное значение, так?
Здравствуйте, artelk, Вы писали:
A>Отвечу "не должна" и ты поменяешь F(), чтобы возвращалось случайное значение, так?
Предлагаете компилятору анализировать вызовы методов ?
Проще уж ошибку выдать, чтобы вставить "_" на всякий случай.
Здравствуйте, _NN_, Вы писали:
_NN>Здравствуйте, artelk, Вы писали:
A>>Отвечу "не должна" и ты поменяешь F(), чтобы возвращалось случайное значение, так? _NN>Предлагаете компилятору анализировать вызовы методов ? _NN>Проще уж ошибку выдать, чтобы вставить "_" на всякий случай.
Предлагаем использовать в when только чистые функции, дабы избежать взрыва мозга и, например, позволить компилятору соптимизировать так:
Здравствуйте, artelk, Вы писали:
A>Предлагаем использовать в when только чистые функции, дабы избежать взрыва мозга и, например, позволить компилятору соптимизировать так:
Конечно, теперь останется всего ничего — добавить анализ чистоты функции
Здравствуйте, catbert, Вы писали:
C>Имхо, компилятор должен падать с ошибкой только тогда, когда неясно какой код генерировать. А здесь все ясно.
Не согласен. При доступе к приватным полям чужих классов тоже может быть понятно, какой код генерировать (в .NET через рефлексию, в C++ — вообще такой же код, как и при доступе к паблик полям).
Однако компиляторы выдают ошибку.
Здравствуйте, hardcase, Вы писали:
H>Здравствуйте, artelk, Вы писали:
A>>Предлагаем использовать в when только чистые функции, дабы избежать взрыва мозга и, например, позволить компилятору соптимизировать так:
H>Конечно, теперь останется всего ничего — добавить анализ чистоты функции
100% гарантий не требуется. К приватным полям можно через рефлексию обратится, но это же не значит, что "все делаем public — один фиг гарантий нет".
Если кто будет делать побочные эффекты, то ССЗБ.
Вопрос к знатокам: делает ли сейчас компилятор оптимизацию, минимизирующую операции "is\as Foo" и выкидывающую лишний вызов F()?