- *python *говноДинамическая типизация — это глобально и надежно! paste.pocoo.orgfrom Azoth_primary, 3 months ago
Replies (120)
- @kb:@0xd34df00d у меня тоже все работает, и динамическая типизация тожеfrom 40c636ec, 3 months ago, in reply to /2
- @Cthulhu:@kb Беседовали тут недавно в одном из тредиков с питонщиками о целесообразности его применения в вебе. Так они мне рассказали, что запускать по несколько экземпляров фреймворка для избавления от влияния gil — вполне нормально, ведь каждый процесс будет не так уж и много памяти отъедать, дешевого железа на всех хватит. Я робко попробовал намекнуть на то, что в больших проектах динамическая типизация приведет к материализации потусторонних кошмаров, если вдруг придется сделать более-менее серьезный рефакторинг. Так они меня ткнули носом в джанго, сказали "вон у пацанов получилось, значит не бывает ничего невозможного", а в конце пригвоздили к монитору фразой "при динамической типизации получается меньше кода, значит и рефакторить меньше, и ваще, правильный дизайн не должен требовать рефакторинга".
И вот уже несколько дней я хожу в сомнениях — быть может стоит выбросить эти ваши плюсцы с хаскелями, и переходить на няшный обезьяний питон? (from Miranda, 3 months ago, in reply to /1 - @0xd34df00d:@Cthulhu Да ну их, ты прав, давай переходить на питон и дотнет.from Azoth_primary, 3 months ago, in reply to /12
- @0xd34df00d:@nya Меня кормят плюсы и хаскель, ЧЯДНТ?from Azoth_primary, 3 months ago, in reply to /15
- @qnikst:@0xd34df00d к таким ссылкам нужно и истории успеха даватьfrom ekg2, 3 months ago, in reply to /19
- @kb:@0xd34df00d о нет, а я не знал что на плюсах можно писать под веб!! ЭТО ЖЕ ВСЁ МЕНЯЕТ!! Я ДУМАЛ ТАМ ПРОЦЕССОР ДРУГОЙ!from 40c636ec, 3 months ago, in reply to /19
- @0xd34df00d:@qnikst А я на нее и просто так обдрочился.from Azoth_primary, 3 months ago, in reply to /21
- @kb:@0xd34df00d к тому, что я знаю, что на плюсах есть веб-фреймворки. И иногда они даже нужны.from 40c636ec, 3 months ago, in reply to /25
- @Cthulhu:@kb Я всего лишь пересказал беседу с питонщиками. Последнее предложение — легкая ирония (всегда рад помочь, ваш К. О. ).
Там, правда, дальше беседа сместилась ко всяким хаппстекам, потому что они сказали "хаскель совершенно неприменим в вебе", и на вопрос "почему же?" ответили "ну это же очевидно".
Дальнейшая аргументация была "у нас большое комьюнити, и мы дешевые специалисты, в отличие от этих ваших штангистов". Я намекнул на то, что если бы дело было несколько лет назад, они точно так же могли бы доказывать преимущества php перед питоном. После этого меня обозвали троллем, и конструктив с их стороны закончился.
А написал я все это, наверное, потому, что меня все больше начинает пугать "эффект питона" (не как языка, а как явление). Сожрем больше памяти, вместо пула потоков запустим кучу процессов, будем тормозить и внезапно валиться с бектрейсом, зато быстро в разработке, дешево, стильно, молодежно.from Miranda, 3 months ago, in reply to /26 - @0xd34df00d:from Azoth_primary, 3 months ago, in reply to /28
- @kb:@Cthulhu в том-то и дело, что тормозов нету (при хоть немного нормальном коде), как и внезапных сваливаний с бектрейсом (при тестировании кода). Насчет процессов — ничего плохого не вижу (сжирает действительно мало, а как минимум thread-unsafe ничего не сломает). Но в нашем проекте общей памяти около 300Мб (внутренний кеш), потому да, экономнее запускать тредами.from 40c636ec, 3 months ago, in reply to /28
- @0xd34df00d:@ei-grad Да, но смысл покрывать тесткейсами то, что в нормальных языках покрывается тайпчекером компилятора?from Azoth_primary, 3 months ago, in reply to /35
- @kb:@qnikst мне понравилось вот это чтиво по поводу тредов в питоне artima.com И думаю, что это таки не слишком глобально и надёжно)from 40c636ec, 3 months ago, in reply to /34
- @kb:@qnikst тем более, даже в perfbook написано kernel.org "подумайте, если проще распараллелить скриптом на баше — так и сделайте". Я им верю)from 40c636ec, 3 months ago, in reply to /34
- @Cthulhu:@kb Вот это я и называю "эффектом питона". Раньше такие скриптовые языки продвигались под лозунгом "избежим же тех страшных ошибок, которые вы можете допустить, кодя, например, на c++ [возмущенный крик из зала — да, у них же указатели !]".
А теперь, когда эти языки внезапно покинули свою уютную скриптовую нишу и полезли выше, лозунги чуть изменились.
"Нет ничего плохого в куче процессов" — да, а пул потоков был придуман просто так, от нечего делать, скучающими задротами. Hello, ipc! Welcome back, cgi!
"Тормозов нету, если писать правильно" — no comments;
"Падать не будет, если писать правильно и тестировать" — кто сказал "стопроцентное тестовое покрытие", покажите мне этого Копперфильда! Кто сказал "противоречие с самым-самым первым лозунгом — ведь даже у c++ проблем не будет, если писать правильно и тестировать" — выйди, мальчик, тут взрослые дяди собрались!
Туда же и "идеальный дизайн", который не потребует рефакторинга (он ведь нестрашен, при стопроцентном покрытии-то).from Miranda, 3 months ago, in reply to /30 - @ei-grad:@0xd34df00d Никто не пишет тесты только ради проверки на отсутствие косяков с типами. Все они отлавливаются сами при написании обычных тестов.from Pidgin6DA816C4, 3 months ago, in reply to /36
- @Cthulhu:@0xd34df00d Запили, я потом форк сделаю, который еще и деньги за меня зарабатывать будет :3from Miranda, 3 months ago, in reply to /29
- @kb:@Cthulhu эээ, ты что-то путаешь. Какой куче процессов? У тебя по процессу на ядро (ну, или чуть больше), а апач уже делает пул запросов (и ждёт освобождения воркеров, если что). И они создаются при поднятии (и всё). В cgi же вроде при каждом запросе создавались, не?
Рефакторинг в питоне вполне хорош. Что не нравится-то?from 40c636ec, 3 months ago, in reply to /39 - @Cthulhu:@kb Вот, например, небольшая статья komar.bitcheese.net , там есть раздел про типизацию и рефакторинг. Многовато максимализма, imho, но по сути все правильно написано.from Miranda, 3 months ago, in reply to /43
- @qnikst:на правах вброса а вот в яве очень логичные ExecutorService сделаны, благодаря которым можно грамотно управлять процессом выполнения причём в зависимости от особенностей реального хоста :)from ekg2, 3 months ago
- @kb:@Cthulhu если честно — без знаний ocaml'а ничерта не понял. Я согласен, что с сильной типизацией компилятор вам часто даст по рукам, но всякие подобные библиотечные штуки обязаны обкладываться тестами (hello, coverage.py nedbatchelder.com ) и любой рефакторинг (даже в языках со строгой типизацией) должен производиться рядом с тестами, проверяющими, что ничего не сломалось.from 40c636ec, 3 months ago, in reply to /48
- @0xd34df00d:@kb Иногда тесткейсом может быть сам код, само объявление, а оболочкой для прогонки тестов — компилятор.from Azoth_primary, 3 months ago, in reply to /51
- @kb:@0xd34df00d да. А иногда ты понимаешь, что тебе не нужен тест кейс на каждый чих, ты сможешь и так убедиться, что все работает. И тут ты понимаешь, что тебе для реализации маленького чиха не пришлось морочиться с типами)from 40c636ec, 3 months ago, in reply to /52
- @kb:@0xd34df00d ну в конце слова "Как по мне, рефакторинг без статической типизации, алгебраических типов и паттерн-матчинга — это пытка. И после него код все равно оказывается полным ошибок.". Ок, так почему же код не оказывается полным ошибок? Почему разные более-менее сложные библиотеки успешно себе существуют во всех этих питонах? Автор, наверное, не верит в их работу и думает, что там сплошные ошибки)from 40c636ec, 3 months ago, in reply to /52
- @demiazz:ага. а сегфалты посреди выполнения без каких либо сообщений — еще надежнее :Dfrom Gajim, 3 months ago
- @Cthulhu:@kb Конечно, тот самый идеальный случай, когда даже самую мелкую и примитивную фигню со всех сторон обкладывают тестами. Но в реальном мире ведь все обычно совсем не так — кодер скажет "зачем мне лишняя паранойя, я и так знаю, что это будет работать, и менять мне тут ничего не придется". И внезапно приходится. И, даже покрыв тестами место с определением класса, например, нельзя гарантировать, что ими будут покрыты все места, которые его используют. И то, что могло быть моментально отдетекчено компилятором, внезапно превращается в падение с бектрейсом и потерей данных.from Miranda, 3 months ago, in reply to /51
- @Cthulhu:@0xd34df00d Интересно, мне ли одному после прочтения этого комментария послышалось слово 'темплейты'? :3from Miranda, 3 months ago, in reply to /52
- @demiazz:@Cthulhu ну вообще то, про ненужность рефакторинга никто не говорил. говорилось про то, что большой код рефакторить даже на статически типизированном языке — не легче. В общем это лишь споры. Проекты по всему миру пишутся. Главное, что когда все работает — все молчат. а когда что то ломается — это крику на весь жуйк. Я сейчас пользуюсь Sublime Text 2, который написан на питоне, жрет в пределах 50 метров (для него — это норм, даже если не учитывать, что питон). И что блять самое удивительное — ни одного падения. Ни одного. ЧЯДНТ? зачем тыкать ошибками в ПО, которые всегда были есть и будут, и говорить — а вон язык виноват и ваш подход кривой. Не надо пытаться запихнуть подходы программирования на статических языках в динамические. Не сравнивайте теплое с мягким, и не раздувайте из мухи слона. Если люди пишут вполне работающие вещи — может быть у вас что то не работает?from Gajim, 3 months ago, in reply to /12
- @kb:@Cthulhu да, но практика показывает, что большинство функционала отлично тестируется, а ошибки таки да, есть (вот уж не знаю, помогла бы нам статическая типизация, тут еще сильно задуматься надо), но они не критичны. И если взвешивать выбор этого пути с выбором статической типизации — да никогда в жизни. То есть пока мы бы писали идеально работающий код со строгой типизацией нам бы этот функционал просто не был бы нужен.
Я согласен, что есть свои юз-кейсы. К примеру, в журнале "практика ФП" была статья о написании своего ЯП для мобильных телефонов (ну, с каким-то слабеньким процом). И там да, взяли статическую типизацию потому что ошибка на таком устройстве мегакритична и лучше отловить её заранее. Но это настолько затратно по сравнению с динамической типизацией, и ошибок отлавливается настолько мало, что это просто не нужно для веба и кучи других мест.from 40c636ec, 3 months ago, in reply to /56 - @Cthulhu:@kb Небольшой логический баг в твоих рассуждениях )
Из того, что эти библиотеки существуют и работают, следует только то, что рефакторинг возможен даже на языках с динамической типизацией. В статье не было опровержения этого утверждения. Речь там идет о том, что в общем случае он куда более сложен и error-prone.from Miranda, 3 months ago, in reply to /54 - @kb:@Cthulhu там утверждалось, что это пытка (и что все равно сколько не рефакторь остаются ошибки, причем он не сказал даже "иногда"). Если бы это была пытка — такого огромного количества библиотек просто не существовало. Неуж-то столько людей подвергают себя пытке? И еще и удовольствие от этого получают? Нет, автор явно нафантазировал.from 40c636ec, 3 months ago, in reply to /61
- @Cthulhu:@demiazz Наша песня хороша — начинай сначала :)
С нашей стороны раздаются крики о том, что динамическая типизация в общем случае способна привести ко многим ошибкам, которые могли бы быть пойманы компилятором, сразу, даже без тестового покрытия. с объяснением, с примерами.
С вашей — крики "а у нас все работает, и по всему миру люди пишут, значит проблемы нет". С игнором аргументации, тащем. Просто вот работает и все, значит проблем нет.from Miranda, 3 months ago, in reply to /59 - @Cthulhu:@kb Вот, уже и появилась шкала 'критичности ошибок'. Тенденция-с.
Вполне вероятно, что в вашем проекте работают только грамотные ответственные люди, которые все проверяют и перепроверяют, и действительно не допускают ошибок. Но если взять 'среднестатистический проект' — в нем все будет совсем не так. И те игрушечные примеры, которые были приведены в статье, могут привести к очень неожиданным и печальным результатам. А поскольку тех самых 'среднестатистических' проектов большинство...from Miranda, 3 months ago, in reply to /60 - @kb:@Cthulhu нет, у нас много молодых программистов, много ошибок, даже отдел тестирования имеется. И при этом все равно написать такой проект, да еще с такой скоростью добавлять функционал на строго типизированном языке было бы просто невозможно. Собственно, можно взять любую аутсорс-джава-контору и посмотреть, за сколько какой функционал реализуется.. это капец просто. В том числе из-за статической типизации)from 40c636ec, 3 months ago, in reply to /65
- @0xd34df00d:@demiazz ${еще более общее утверждение, которое бессмысленно опровергать ввиду его общности, поэтому прокатит за ответ, когда сказать нечего}.from Azoth_primary, 3 months ago, in reply to /64
- @0xd34df00d:@demiazz Да. На хаскеле все быстро и круто. Влияет.from Azoth_primary, 3 months ago, in reply to /72
- @demiazz:@0xd34df00d а я и не хочу ничего говорить в ответ. бессмысленно фанатикам доказывать что либо.from Gajim, 3 months ago, in reply to /74
- @kb:@Cthulhu пытаюсь представить питон со строгой типизацией) Нет, все же мы под "питоном со строгой типизацией" не можем сейчас иметь в виду просто строгую типизацию (оставив её динамической), а сразу же подразумеваем, что он становится компилируемым в некоторый байткод (и этим компилятором прекрасно просчитываются все возможные несоответствия типов), иначе тогда смысл этой типизации отпадает как таковой. Да, в таком случае придется архитектуру очень и очень сильно затронуть, чтоб сделать её "полностью предсказуемой для компилятора".from 40c636ec, 3 months ago, in reply to /75
- @demiazz:@Cthulhu я от фактов не закрываюсь. но фактами также вполне можно назвать реально рабочие проекты. все криво, все плохо, питон хуйня. но люди пишут проекты, проекты работают. Наверное они маги, не знаю. вам удобно так, нам удобно так. вы на хаскелле. мы на своем. все это лишь меряться хуями и не более. вы ищете проблемы, а мы молча их решаем. вот и всеfrom Gajim, 3 months ago, in reply to /78
- @Cthulhu:@demiazz Разница в подходах. Мы, приводя факт, стараемся объяснить, почему так. Вон ошибки, будут возникать в таких и таких случаях, их можно было бы избежать.
Вы же просто приводите факт, абстрагируясь от всех остальных факторов. Без анализа, без ничего. "Работает — значит проблемы нет". Хотя элементарная логика говорит нам, что это всего лишь значит, что эти проблемы можно обойти, приложив некоторые усилия.from Miranda, 3 months ago, in reply to /80 - @demiazz:@Cthulhu элементарная логика говорит, что гибкость статических язков по сравнению с динамическими — как небо и земля. Проблма гибкости порой стает остро. Но ее тоже можно обойти приложив некоторые усилия. вы нам рефакторинг — мы вам про тонны кода, который нужен чтобы обойти статичность языка. А в итоге мы имеем ноль полезной информации. о проблемах нечего рассуждать. их надо решать. решать на тех инструментах, которые удобны. и если человек работает с инструментом долго, то он вполне легко обойдет его минусы. так что не надо драматизировать.from Gajim, 3 months ago, in reply to /81
- @0xd34df00d:@demiazz Г-споди, какой пиздец, какой лютый пиздец.from Azoth_primary, 3 months ago, in reply to /86
- @demiazz:@Cthulhu надеюсь в следующий раз я поборю желание поучавствовать в срачике, где участники твердо верят в свою точку зрения, и не будут менять мнение, а целью их стоит убедить других что они абсолютно правы во всем, и что их идеалы полезны везде и всегда. ))) посему, у меня такое и поведение и отношение к этой дискусии в целомfrom Gajim, 3 months ago, in reply to /92
- @demiazz:@Cthulhu важность аргументов зависит от приоритета ценностей конкретной личности. даже если вы правы в каких то вещах, я от этого не убегу на Haskell. Причины: мне нравится Python/Ruby, мне приятно и удобно на них писать. А проблемные места. Ну что поделать. От того что я перейду на другой язык, я могу лишиться многих проблем Python/Ruby, а взамен приобрету другие проблемы. То же касается и преимуществ. Так что еще раз повторю. Я не хочу прикладывать усилия к тому, чтобы победить в споре. Для меня нет такой цели, и мое самоутверждение от победы/проигрыша никак не изменится.from Gajim, 3 months ago, in reply to /96
- @kb:@Cthulhu о, черт, дискуссия настолько горяча, что я пропустил полный текст /86 :-) Да, это эпично. Кстати, "думать об аргументах", хороший пример для измерения увеличения скорости разработки с питоном — использование того же def a(something, something_else, args, kw). Вот эти самые *kw. Осталось только пример толковой мини-задачки придумать.from 40c636ec, 3 months ago, in reply to /100
- @Cthulhu:@demiazz Да, про приоритеты я написал в /88 .
Суть не в 'победе' или 'проигрыше' в споре, и я, вроде, в прошлом тредике уже писал об этом. Суть в том, что я рассматриваю дискуссию с позиции "проверю-ка я на прочность свою аргументацию, пусть мне покажут, где я не прав; а я поступлю так же с оппонентами". А ты — с позиции "зачем думать об аргументах, я же просто убиваю время".
Also, tell me more о проблемах хаскеля, с которыми ты столкнешься )from Miranda, 3 months ago, in reply to /101 - @demiazz:@0xd34df00d так, что я не выделяю лучшего худшего. а количество проблем — это понятие не фиксированное. так что о том, больше их там меньше — я не говорил. мне нравится тем чем я пользуюсь, мне удобно этим пользоваться. не больше, не меньше. я же тебе не говорю, как ты можешь писать тонны кода на плюсах, выдумывать все более изощренные(а может извращенные) решения, для обхода тех или иных ограничений. тебе удобно, ты этим пользуешься, ты можешь эффективно решать задачи инструментами, которые тебе удобны. ты же к примеру не начал писать личкрафты на си и GTK. ты увидел свои преимущества в плюсах, и они для тебя более приоритетны. я увидел свои преимущества и назначил им приоритет. в чем проблема собственно?from Gajim, 3 months ago, in reply to /108
- @0xd34df00d:@demiazz Блядь, мне было физически больно читать этот текст. Извините, пойду подавлюсь лучше пельмешками.from Azoth_primary, 3 months ago, in reply to /109
- @Cthulhu:@0xd34df00d Тренируй парсер, bro. Я прочитал и даже не заплакал )from Miranda, 3 months ago, in reply to /110
- @0xd34df00d:@Cthulhu Мне еще на стадии синтаксического анализа стало больно. Ни одной большой буквы, блеать!from Azoth_primary, 3 months ago, in reply to /112
- @kb:@Cthulhu кстати, Гвидо сам вбросил за всех питонистов)) КАК Я ЭТО ПРОПУСТИЛ?? neopythonic.blogspot.comfrom 40c636ec, 3 months ago, in reply to /117
- @kb:@Cthulhu Вся соль для Ъ:
I have to agree with Steve — if this is what it takes to have compile-time type-safety in a language, I'll take dynamic typing any day. There's got to be a better way — perhaps Haskell? Haskell is a pure functional language with a fast implementation that seems to have solved the I/O problem of functional languages well — while its Monads are truly deep and take real work to create, their use seems quite straightforeward.from 40c636ec, 3 months ago, in reply to /117