[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: