Устали от несемантического тестирования, чтобы компенсировать динамическую типизацию - предложения?

Я много занимался веб-программированием на Rails (до этого PHP), прежде чем начал изучать компьютерную инженерию. .

С тех пор я проделал много школьной работы по C и немного личных вещей по Objective-C (материал для Mac). Я научился любить статическую типизацию.

Но теперь мне нужно заняться профессиональной веб-разработкой (фриланс), и я снова выбрал Rails. Мне очень неприятно писать тесты с несемантической проверкой типов. Я получал их бесплатно из компиляторов C и Objective-C. Мне нравилось нажимать Build, и система проверяла весь мой код, чтобы убедиться, что A может вызывать B, B может вызывать какую-то неясную библиотеку C и т.д. Все, что мне нужно было сделать, это проверить семантику. Но с Rails я компилятор. :(

Кто-нибудь шел по тому же пути? Мои единственные варианты веб-разработки ASP.NET MVC с C # и платформой Java + x? Ищу какие-то предложения или даже сочувствие ...: P

путь, Я делаю конкретную ссылку на Rails, а не на Ruby, потому что я не возражаю против динамической природы Ruby для простых вещей, таких как создание сценариев или чего-то еще. Но так как Rails зависит от очень многих драгоценных камней и поскольку обычно добавляется ряд других драгоценных камней, динамическая типизация становится проблемой.

Спасибо!

редактировать:

Я последовал предложению pst и заглянул в Scala. Читая книгу «Программирование на Scala», написанную создателем языка Мартином Одерски, я наткнулся на этот фрагмент текста, который во многих отношениях выражает мои опасения и даже немного больше. Очень интересное чтение.

Взято со страницы 52 книги Мартина Одерского «Программирование на Scala»:

Scala статически типизирована.

Система статических типов классифицирует Но так как Rails зависит от очень многих драгоценных камней и поскольку обычно добавляется ряд других драгоценных камней, динамическая типизация становится проблемой.

Спасибо!

редактировать:

Я последовал предложению pst и заглянул в Scala. Читая книгу «Программирование на Scala», написанную создателем языка Мартином Одерски, я наткнулся на этот фрагмент текста, который во многих отношениях выражает мои опасения и даже немного больше. Очень интересное чтение.

Взято со страницы 52 книги Мартина Одерского «Программирование на Scala»:

Scala статически типизирована.

Система статических типов классифицирует Но поскольку Rails зависит от очень многих драгоценных камней, и поскольку обычно добавляется ряд других драгоценных камней, динамическая типизация становится проблемой.

Спасибо!

редактировать:

Я последовал предложению pst и заглянул в Scala. Читая книгу «Программирование на Scala», написанную создателем языка Мартином Одерски, я наткнулся на этот фрагмент текста, который во многих отношениях выражает мои опасения и многое другое. Очень интересное чтение.

Взято со страницы 52 книги Мартина Одерского «Программирование на Scala»:

Scala статически типизирована.

Система статических типов классифицирует Мартин Одерски, я наткнулся на этот фрагмент текста, который во многих смыслах выражает мои опасения и многое другое. Очень интересное чтение.

Взято со страницы 52 книги Мартина Одерского «Программирование на Scala»:

Scala статически типизирована.

Система статических типов классифицирует Мартин Одерски, я наткнулся на этот фрагмент текста, который во многих смыслах выражает мои опасения и многое другое. Очень интересное чтение.

Взято со страницы 52 книги Мартина Одерского «Программирование на Scala»:

Scala статически типизирована.

Система статических типов классифицирует переменные и выражения согласно какие ценности они придерживаются и вычислить. Scala выделяется как язык с очень продвинутым статическим система типов. Начиная с системы типы вложенных классов очень похожи на Java, он позволяет параметризовать типы с дженериками, чтобы комбинировать типы, используя перекрестков, и скрыть детали типы, использующие абстрактные типы. Это дает прочный фундамент для строительства и составлять свои собственные типы, чтобы вы может разрабатывать интерфейсы, которые в то же время безопасный и гибкий в использовании.

Если вам нравятся динамические языки, такие как Perl, Python, Ruby или Groovy, вы может показаться немного странным, что Система статических типов Scala указана как одна из его сильных сторон. После все, отсутствие статического типа система была названа некоторыми как главное преимущество динамических языков. Наиболее частые аргументы против статические типы - это то, что они делают программы слишком подробны, предотвращают программисты от самовыражения как они хотят, и сделать невозможное определенные модели динамических модификации программных систем.

Однако часто эти аргументы не идти против идеи статических типов в общий, но против конкретного типа системы, которые воспринимаются как слишком многословный или слишком негибкий. За Например, Алан Кей, изобретатель язык Smalltalk, однажды заметил: «Я не против типов, но я не против знать системы любого типа, которые не являются полная боль, поэтому мне все еще нравится динамический печатать. »

Мы надеемся убедить вас в этой книге что система типов Scala далека от быть «полной болью». Фактически, это красиво обращается к двум обычным опасения по поводу статической типизации: многословность избегается благодаря типу вывод и гибкость через сопоставление с образцом и несколько новые способы писать и составлять шрифты. Убрав эти препятствия, классические преимущества статического типа системы можно лучше оценить. Среди наиболее важных из них преимущества - проверяемые свойства программные абстракции, сейф рефакторинги и лучше документация.

Проверяемые свойства

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

Других видов ошибок не обнаружено. сегодняшними системами статического типа. За например, они обычно не обнаруживают непрерывные функции, массив ограничивает нарушения или разделения нуль. Они также не обнаружат, что ваша программа не соответствует ее спецификация (при условии, что spec, то есть!). Системы статического типа поэтому были отклонены некоторыми как не очень полезный. Аргумент так как системы такого типа могут обнаруживают только простые ошибки, тогда как модульные тесты предоставляют более обширные покрытие, зачем заморачиваться со статическими типами вообще?

Мы считаем, что эти аргументы отсутствуют точка. Хотя статический тип система определенно не может заменить блок тестирования, это может уменьшить количество модульные тесты, необходимые для заботы о некоторые свойства, которые иначе необходимо протестировать. Аналогично, unit тестирование не может заменить статическую типизацию. В конце концов, как сказал Эдсгер Дейкстра, тестирование может доказать только наличие ошибки, а не их отсутствие. Так что гарантирует, что статическая типизация дает могут быть простыми, но они настоящие гарантии формы нет суммы тестирование может дать результат.

Безопасный рефакторинг

Система статического типа обеспечивает сеть безопасности, которая позволяет вам вносить изменения к кодовой базе с высокой степенью уверенность. Рассмотрим, например, рефакторинг, который добавляет дополнительный параметр метода. В статическом введенный язык, вы можете внести изменения, перекомпилируйте вашу систему и просто исправьте все строки, вызывающие ошибку типа. Как только вы закончите с этим, вы обязательно нашли все места, которые нужно изменить. То же самое и для многие другие простые рефакторинги, такие как изменение имени метода или перемещение методы из одного класса в другой. В во всех случаях проверка статического типа будет обеспечить достаточную уверенность в том, что новый система работает так же, как и старая.

Документация

Статические типы - это программная документация. что проверяется компилятором на предмет правильность. В отличие от обычного комментария, аннотация типа никогда не может быть вне дата (по крайней мере, если исходный файл который содержит это недавно прошло компилятор). Кроме того, компиляторы и интегрированные среды разработки может использовать аннотации типов для предоставить лучшую контекстную помощь. За например, комплексная разработка среда может отображать все члены доступны для выбора определение статического типа выражение, на котором производится выбор сделал и просмотрел всех членов этот тип.

9
задан Alexandre 8 December 2010 в 12:07
поделиться