Re: Perl or Python?
Mikhail Gusarov wrote:
> Twas brillig at 09:52:03 22.03.2009 UTC+02 when storchaka@gmail.com did
> gyre and gimble:
> SS> Какие проблемы создала бы возможность указывать тип параметров
> SS> допустим в питоне (есть такой проект)?
>
> Простой пример: в разных библиотеках для питона есть специализированные
> типы, притворяющиеся строками для всех практических нужд, но
> реализованные по-другому (кэширование, внутренние преобразования,
> дополнительная функциональность).
Ага, duck typing. Если кто-то ходит как утка, крякает как утка и выглядит
как утка, то будем считать его уткой.
> Для получения эквивалентной функциональности потребовалось бы ввести
> новое понятие: контракт, выражающийся не в типе, а в наборе свойств,
> которым требуется удовлетворять. Не считая той досадной вещи, что
> проверка контракта невычислима, всё хорошо.
Думаю, это решаемо. Даже в статически типизированной жаве это решили с
помошью интерфейсов, а питоне можно и duck-интерфейсы определять в
подавляющем большинстве случаев. Удовлетворять контракт не наследованием от
определённых классов/интерфейсов (не только этим), а наличием определённого
множества методов (с совместимыми сигнатурами).
Сложность только в том, что питон слишком динамический, есть возможность
самому обрабатывать вызов метода и значит список методов объекта до вызова
может быть неизвестен. Но этим не злоупотребляют и в редких случаях можно
придумать какой-нибудь компромисс. Например игнорировать ограничение типа.
Хуже не будет.
Тормозит работу тут думаю только большой объём работы по проверке
стандартной библиотеки (и популярных нестандартных) на полноту поддержки
контрактов. Если что-то притворяется строкой, то хотелось бы, чтобы
притворялось хорошо, чтобы и выделение подстроки работало, и преобразование
регистра, и т.п. Сейчас не так и вылезающие в рантайме проблемы прячут под
ковёр явным преобразованием к строке.
Reply to: