eugenk
Авг. 15, 2013 15:29:19
Приветствую многоуважаемый all ! Скажите, существуют ли какие-то инструменты для питона, поддерживаемые IDE, позволяющие вводить статическую типизацию ??? У меня очень приличный опыт работы со статическими языками типа С++, ява и т.п. Сейчас нужно освоить питон, на котором пишу для одного проекта сервер. Что больше всего достает в языке - это именно его утиная типизация. Когда ни мне ни IDE непонятно, с чем работает та или иная функция в проекте размером в несколько тысяч строк.
Ранее тот же самый вопрос я задавал на форуме по javascript, на котором пишется клиент. Народ там заклеймил меня позором и ненормативной лексикой, назвал земляным червяком и желтой рыбой. Но один из клеймящих и ругающихся посоветовал такую штуку как TypeScript. Сейчас перешел на него и счастлив с исходниками, перевалившими уже за 10К строк. Короче вопрос, есть ли для питона что-то наподобее TypeScript ?
И тогда уж еще один вопрос. Чего бы такого интересного по питону почитать, желательно на русском ? Луца мне читать скучно. Хочу что-то средне-продвинутого уровня. Типа “Современный С++” Александриеску. Есть ли такое ? Т.е. того уровня, когда hello world уже пишется с закрытыми глазами, но МЕТОДОЛОГИЯ применения языка еще не очень понятна.
FishHook
Авг. 15, 2013 15:32:20
посмотри на boo, это питон для .net со статической типизацией.
eugenk
Авг. 15, 2013 15:39:26
Спасибо, обязательно гляну. Но мне к сожалению нужен именно настоящий питон, причем ветки 2.Х. Дело в том, что мне на сервере придется запускать NlPack, который только для второй ветки, причем не идет даже на jpython. Как вариант, конечно можно разрабатывать что-то на boo, а потом переносить на питон, но хотелось бы это иметь прозрачно и бесшовно, как сейчас пишу на яваскрипте с помощью TypeScript.
wbt
Авг. 15, 2013 16:15:52
Сравнивать python с javascript я бы не стал - в python строгая типизация. Хоть ты тресни, сложить строку с числом и помножить на None не получится.

И что значит “с чем работает?” Если вы не знаете, какие данные эта функция обрабатывает, то последнее, что будет интересовать - это её тип.

А если знаете - то несколько тысяч строк это ещё не страшно, можно и разобраться. Ну или префиксы введите для типов, чтобы глазами видеть. Мне сложно представить, как это может раздражать… вчера краем глаза читал про генераторы, которые наконец-то появились в пыхе, там человек жаловался, что функцию для обработки генераторов нужно делать одну, для array-ев - вторую, для строк - третью. Вот это, понимаю, раздражает.
sergeek
Авг. 15, 2013 17:05:25
Утиную типизацию никто не заставляет использовать, наверное, имелась в виду динамическая? Тогда для описания сигнатур используют докстринги типа
def __init__(self, foo, bar='baz'):
"""A really simple class.
Args:
foo (str): We all know what foo does.
Kwargs:
bar (str): Really, same as foo.
"""
IDE с них и парсят типы.
Есть еще аннотации, но питонокомьюнити затупило с ними. Да и они только для 3-й ветки
4kpt
Авг. 15, 2013 17:44:51
sergeek
Вы правы. Утиная это и есть динамическая: «Если оно выглядит как утка, плавает как утка и крякает как утка, то это, наверное, и есть утка». :)
eugenk
Авг. 15, 2013 18:54:44
wbt, я даже скорее об IDE, чем о себе любимом. На яваскрипте это просто АдЪ, СодомЪ и Гоморра. Например я хочу описать панельку. В ней имеет место быть поле width, описывающее ширину. Допустим я хочу задать ширину равной 200. Но я описАлся и пишу вместо panel.width=200, panel.widht=200. Яваскрипт поймет это как то, что для объекта panel введено новое поле widht и ему присвоено значение 200. IDE этот момент не отловит. А поскольку язык не компилируемый, ошибка вылезет только при исполнении и может быть поймана только после долгого мозгофакства на тему почему оно не работает как надо. В С++, благодаря его статической типизации, оно будет выявлено еще при наборе кода с помощью IDE. Что будет на питоне - пока не знаю, ибо с классами еще не программировал. Но опыт использования драйвера для MongoDB, настраивает на довольно мрачные мысли.
sergeek, про аннотации читал. Увы, мне нужен питон именно второй ветки. С сигнатурами конечно попытаюсь, но это не спасает от библиотек, написанных без оных. С тем же драйвером MongoDB к примеру.
4kpt
Авг. 15, 2013 19:04:54
eugenk
Послушайте. Вы меня поражаете. Есть язык, есть принципы работы на нем. Есть определенные методики и паттены проектирования. Есть куча плюсов и минусов. Существует определенная технология создания программного продукта. Если Вам приходится писать на этом языка, то надо это принимать и приспосабливаться, а не выть, как волк на луну. Все, что Вы пытаетесь найти - будут костыли, которые Ваш код для других питонистов превратят в кромешный АД.
Как, например, мотоцикл.
- Не, хочу, чтобы он ездил задом???
- Хочешь задом - купи МТ с коляской.
- Да не мне нужен этот, и чтобы задом.
- Ну так он технически под это не затачивался.
- Ну а мне НАДО!!!!
P.S. Про минусы здесь писать не надо. Все и так их знают.
P.S.S. А меня бесит статическая типизация. Работал на делфях. Вспоминаю как страшный, кошмарный, ужасный, …., сон.
sergeek
Авг. 15, 2013 19:06:47
Что будет на питоне - пока не знаю
тоже самое будет
В питоне вроде вообще все в рантайме происходит. Печально, да.
4kpt
Авг. 15, 2013 19:12:07
Помню когда-то мне принесли на проверку код, который писал явист. Принес студент и пытался выдавать за свою работу. Я этот код читал часа 2. Какой это только ужас… Просто представляю, что мне придеться столкнуться с кодом человека, который работает на питоне, как на С++ и становится страшно…