Smalltalk по-русски
вторник, Март 15, 2005
Dynamic typing

Никто не мог бы сказать на эту тему лучше, чем Martin Fowler:

Мне очень не хотелось вносить свой вклад в спор о статической и динамической типизации в языках программирования. Это одна из тех эмоциональных тем, где люди предпочитают спорить, нежели чем слушать. Но так как меня несколько раз спрашивали об этом, я поделюсь своим опытом. Я не пытаюсь убедить кого-то или что-то, но я надеюсь кто-нибудь найдет пищу для размышлений благодаря этому.
Когда я первый раз осознал различие, я быстро убедился в преимуществах статической типизации. Мой опыт в программировании начался с языков Basic и Fortran IV - где типизация была ограничена. Потом я перешел к Pascal и он быстро стал языком, с которым я получал от программирования удовольствие.
Когда я познакомился с объектами, я работал одновременно с C++ и Smalltalk. В течение некоторого времени я рассматривал динамическую типизацию Smalltalk-а как недостаток - небольшая плата за восхитительную в остальном продуктивность платформы.
Я реально начал задаваться этим вопросом, когда был вовлечен в средние по размеру проекты на Smalltalk. Общий довод в пользу статических типов заключается в том, что они отлавливают ошибки, которые по-другому найти сложно. Но я обнаружил, что, при наличии SelfTestingCode, большинство ошибок, которые имелись бы со статическими типами, настолько же просто будут найдены тестами. А так как тесты находят намного больше, чем ошибки типизации, они нужны и в статически и в динамически типизированных языках, так что наличие статической типизации дает немного преимуществ.
Также было интересно увидеть, что другие сделали открытие в этом же направлении. Robert Martin и Bruce Eckel обнаружили то же самое при переходе от C++ к Python.
Однажды я пытался проанализировать некоторый хорошо написанный код на Ruby. Я обнаружил, что недостаток информации о типах параметров делает жизнь сложнее - я продолжал говорить себе "что именно мы здесь имеем?". Это не было такой проблемой в Smalltalk по двум причинам: превосходная среда позволяет просто открыть отладчик и посмотреть что ты имеешь (Прим.перев.: в действительности отладчик применяется достаточно редко, обычно используется браузер и команды Senders/Implementors для просмотра кто посылает/реализует сообщение), и, во-вторых, общепринятое соглашение об именовании параметров по их типам (это имеет смысл, так как Smalltalk имеет параметры с ключевыми словами, а не позиционные, так что ключевое слово уже объясняет роль, которую играет параметр).
Другая область, где статическая типизация нелишняя, это то, что она делает среды разработки намного более полезными. Открытием здесь (и во многих других вещах) была IntelliJ. С IDE, подобной этой, я действительно чувствовал, что система типов помогает мне. Даже простые вещи вроде авто-завершения в большей степени возможны благодаря статическим типам, и ведущие IDE могут намного больше, чем это.
Но, несмотря на все это, есть нечто особенно привлекательное в программировании на языках вроде Smalltalk и Ruby - и я думаю это в значительной мере определяется динамической типизацией. Беседуя на Camp 4 Coffee с Bruce Eckel мы оба согласились, что одной из самых разочаровывающих вещей в спорах о статической/динамической типизации, является то, что очень тяжело выразить словами преимущества работы с динамически типизированным языком. Каким-то образом все протекает лучше, когда ты программируешь в такой среде, даже когда я использую Ruby в Emacs-е вместо IntelliJ (Smalltalk, конечно, обладает и языком и восхитительной средой разработки).
Я подозреваю, что выразительность языка позволяет такие вещи, как DomainSpecificLanguage в самом языке. Работая с языками вроде Java и C# я всегда чувствую необходимость бегло просмотреть тект, чтобы понять что происходит.
Но, какова бы ни была причина, этот непрерывный поток (flow) приводит к большей радости от программирования - даже в худшей среде. Может показаться что это имеет небольшое значение, кого волнует испытывают ли программисты радость? Но меня волнует, потому что я действительно получаю удовольствие от программирования. Мне нравится делать вещи быстро без пустого трепа между процессом мышления и запуском кода. Для меня это удовольствие от Smalltalk и Ruby, и почему я перехожу к ним в моих персональных проектах. И в радости имеется ценность для бизнеса - в конце концов мотивация это главный фактор продуктивности программиста.

Как можно заметить, Martin Fowler отметил две особенности Smalltalk, отличающие его в лучшую сторону от других динамических языков - великолепная среда разработки и самодокументирующийся код, не ухудшающий читабельность даже при отсутствии статического указания типов.

Comments: Отправить комментарий

<< Home

Популярные статьи
:: Smalltalk?!
:: Почему Smalltalk?
:: Great Leap Forward from Java to Smalltalk

Последние сообщения
:: [Squeak] 64-bit VM
:: Анонсы событий от ESUG и STIC на 2005-й год
:: Bruce Eckel о языках для обучения программированию...
:: Alan Kay о Smalltalk
:: Don Box о языках для обученя программированию
:: The Smalltalk Report. 1996
:: [Squeak] Самосформировалась команда, которая будет...
:: Smalltalk MT 5.2 Release
:: The Smalltalk Report. 1991-1995
:: GemStone: Где хранить серверный код

Архив
Предыдущие новости / Декабрь 2004 / Январь 2005 / Февраль 2005 / Март 2005 / Апрель 2005 / Май 2005 / Июнь 2005 / Июль 2005 / Август 2005 / Сентябрь 2005 / Октябрь 2005 / Ноябрь 2005 / Декабрь 2005 / Январь 2006 / Февраль 2006 / Март 2006 / Апрель 2006 / Май 2006 / Июнь 2006 / Июль 2006 / Сентябрь 2006 / Октябрь 2006 / Ноябрь 2006 / Декабрь 2006 / Январь 2007 / Февраль 2007 / Март 2007 / Апрель 2007 / Май 2007 / Июнь 2007 / Август 2007 / Сентябрь 2007 / Ноябрь 2007 / Январь 2008 / Март 2008 / Май 2008 / Июнь 2008 / Июль 2008 / Август 2008 / Сентябрь 2008

Atom Feed
Smalltalk по-русски


Powered by Blogger