Re: Нужна ли нам статическая типизация?
От: Воронков Василий Россия  
Дата: 02.10.13 15:10
Оценка:
Здравствуйте, nikov, Вы писали:

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


Вроде как это вполне естественное поведение. Какой бы крутой ни была система типов, все равно найдется примерчик, который она разгрызть не сможет. Это даже если смотреть на проблему с позиции, когда код в принципе можно типизировать, но на практике конкретная система типов его отвергнет. А ведь бывают и ситуации, когда код статически типизировать нельзя — например, тип функции может зависеть от рантайм-значений, и в одной ситуации это, скажем, a->b, а в другой — a->b->c, причем все зависит от того, какое *значение* будет у второго аргумента.

В Ela, например, есть библиотечка espec, которая реализует DSL для тестов, и спецификация теста выглядит так:

test1 = 
  test "Demonstration of espec"
  given [1..5]
    should contain 1
    shouldn't contain 3
    shouldn't contain 6
    when reverse
    should be [5,4..1]
    when tail
    should be [3,2..1]
    when head
    should be 4


Обычный хаскелевый синтаксис
Re[2]: Нужна ли нам статическая типизация?
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 03.10.13 03:35
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ> А ведь бывают и ситуации, когда код статически типизировать нельзя — например, тип функции может зависеть от рантайм-значений, и в одной ситуации это, скажем, a->b, а в другой — a->b->c, причем все зависит от того, какое *значение* будет у второго аргумента.


В зависимых типах можно же.

ВВ>В Ela, например, есть библиотечка espec, которая реализует DSL для тестов, и спецификация теста выглядит так:

ВВ> should be [5,4..1]
ВВ> when tail
ВВ> should be [3,2..1]

Баги, баги.. Не, не заменят тесты типов.
Re[3]: Нужна ли нам статическая типизация?
От: Воронков Василий Россия  
Дата: 03.10.13 09:07
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>Здравствуйте, Воронков Василий, Вы писали:

ВВ>> А ведь бывают и ситуации, когда код статически типизировать нельзя — например, тип функции может зависеть от рантайм-значений, и в одной ситуации это, скажем, a->b, а в другой — a->b->c, причем все зависит от того, какое *значение* будет у второго аргумента.
DM>В зависимых типах можно же.

В зависимых типах зависимость будет от типов, а не от рантайм-значений.

ВВ>>В Ela, например, есть библиотечка espec, которая реализует DSL для тестов, и спецификация теста выглядит так:

ВВ>> should be [5,4..1]
ВВ>> when tail
ВВ>> should be [3,2..1]
DM>Баги, баги.. Не, не заменят тесты типов.

Если ты про ошибку внутри теста, то она нарочитая — пример взят из доки, как раз показывает поведение теста в случае, когда ассерты падают. Кстати, как бы статическая типизация помогла в подобном случае? Ведь с типами-то все в порядке =)

Вообще мне довольно много приходится программировать на динамических языках, причем не самых лучших — JavaScript, Lua. Могу сказать, что нет каких-то заметных проблем с ошибками типов. В той же Луа до фига проблем, связанных с особенностями Луа ("юникодные" строки, например), но вот ошибки типа встречаются весьма редко. Да и, честно говоря, ревнители статической типизации зачастую забывают, что ООП мейнстримный — это уже наполовину динамика. Да и куча задач в проекте фактически приводит к тому, что у нас понятие статического типа низводится, скажем, до XML схемы, которая валидируется в рантайме или вообще каких-то рукопашных пассов, причем никто особо не страдает от этого.

Так ли страшен черт, как его малюют?
Re[4]: Нужна ли нам статическая типизация?
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 03.10.13 09:49
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>В зависимых типах зависимость будет от типов, а не от рантайм-значений.


Неправда, даже в этой самой теме я уже показывал пример обратного:
http://rsdn.ru/forum/philosophy/5261900?tree=tree
Автор: D. Mon
Дата: 15.08.13

Зависимые типы зависят именно что от значений, а не только от типов.

ВВ>Если ты про ошибку внутри теста, то она нарочитая


А, ок.

ВВ>Так ли страшен черт, как его малюют?


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