Здравствуйте, vdimas, Вы писали:
V>>>Это предопределённое поведение: F>>ага, а задокументированная бага становится фичей V>Не вижу баги.
а я тут при чём? это ж ты не видишь
V>Тут аналогично — была нарушена спецификация списка.
спецификация списка в динамическом языке?
V>Ввиду своего невысокого среднего уровня.
сказал пхпшник, который солнца не видел
V>>>Ага. Тут можно начать с того, что создания объекта — это тоже вызов ф-ии. F>>нет. V>Садись, два.
F>>за время твоего унижения питон можно выучить вдоль и поперёк. V>А толку, если тебе аргументировать всё-равно нечем? V>Тебе задали конкретный вопрос: V>
V>Так что помешало в стандартной библиотеке принять единообразное решение — контейнеры будут создавать через вызов конструктора или через вызов ф-ии — фабрики?
Help on function namedtuple in module collections:
V>5-й раз не можешь понять, в чём было дело конкретно в том идентификаторе. ))
пхпшник, плз
F>>про какой модуль ты тут распинаешься, я не в курсе. V>Дык, открой соответствующий исходник на гит и ознакомься.
Здравствуйте, novitk, Вы писали:
N>Задача абсолютно типичная, я ее специально под Питон не подбирал, решается за 2 минуты из коробки. N>Какие библиотеки? csvparser? Ты хочешь сказать что в "суперпродуктивной" 4GL нет csv парсера и его надо делать из говна и палок?
ну, строго говоря в csv "говно и палки"™ заключается в паре split'ов.
не такая большая лажа, хотя и характерная.
Здравствуйте, Artem Korneev, Вы писали:
AK>Скорость разработки примерами показать сложно. Это не то же самое, что количество строк кода. Оно в некоторой степени кореллирует, но не линейно и не всегда. Перл, к примеру, очень лаконичный язык, позволяющий довольно много действий запихнуть в минимум строк кода. Но практически нечитаемый. "Write-Only" язык. Когда проще переписать, чем отрефакторить.
вот серьёзно, был бы перл так прост, его бы использовали все.
но увы.
Здравствуйте, vdimas, Вы писали:
V>Тут самое время сказать, что Питон, судя по всему, отупляет, но не буду, бо обобщать нехорошо. V>Похоже, сей эффект случился только с тобой.
пхпшник, плз.
от тебя это звучит хуже анекдота
питон, конечно, не самый лучший язык для выражения мыслей, но твои аргументы — это что-то с чем-то
Здравствуйте, neFormal, Вы писали:
AK>> Перл, к примеру, очень лаконичный язык, позволяющий довольно много действий запихнуть в минимум строк кода. Но практически нечитаемый. "Write-Only" язык. Когда проще переписать, чем отрефакторить. F>вот серьёзно, был бы перл так прост, его бы использовали все.
Разве я сказал, что он прост? Напротив. Я привел пример, когда кода вроде бы мало, но он нечитаемый. Продираться через перловую кашу всех этих "?s:<-|&@" то еще удовольствие.
Здравствуйте, vdimas, Вы писали:
V>Не из каробки, либы надо устанавливать.
В питоне для целевой задачи ничего не надо.
V>Для описанного достаточно однажды написать из нескольких строчек какой-нить import-хелпер, навскидку:
Мне надо полное решение задачи подсчета, как у меня, а не псевдо-код COM-wrapper для парсера и его вызова.
Можешь реализовать парсер на split-ax, точная семантика кавычек не важна. Вот код "без библиотек":
import sys
counts = dict()
for r in [s.split(",") for s in sys.stdin.readlines()]:
counts[r[1]] = counts.get(r[1], 0) + 1
print counts.items()
Здравствуйте, neFormal, Вы писали:
F>ну, строго говоря в csv "говно и палки"™ заключается в паре split'ов. F>не такая большая лажа, хотя и характерная.
Здравствуйте, Artem Korneev, Вы писали:
AK>Первый пример — самый читабельный.
Ты императивный прогер. Это не модно.
AK>А вот эти две конструкции читаются хуже. Особенно f2().
f2 — самое расширяемое и глубокое решение из предложенных. Это модно.
Здравствуйте, novitk, Вы писали:
V>>Для описанного достаточно однажды написать из нескольких строчек какой-нить import-хелпер, навскидку: N>Мне надо полное решение задачи подсчета, как у меня, а не псевдо-код COM-wrapper для парсера и его вызова.
Тебе надо остыть.
N>Можешь реализовать парсер на split-ax, точная семантика кавычек не важна. Вот код "без библиотек":
Вот код без библиотек:
' test.vbsset stdin = WScript.stdin
set stdout = WScript.stdout
set counts = CreateObject("scripting.dictionary")
do while not stdin.AtEndOfStream
for each r in split(stdin.ReadLine, ",") : r1 = trim(r) : counts(r1) = counts(r1) + 1: next
loop
for each s in counts : stdout.WriteLine s & "=" & counts(s) : next
Здравствуйте, novitk, Вы писали:
AK>>А вот эти две конструкции читаются хуже. Особенно f2(). N>f2 — самое расширяемое и глубокое решение из предложенных. Это модно.
Двойной прогон по коллекции — это круто, конечно. ))
Здравствуйте, Artem Korneev, Вы писали:
AK>Скорость разработки примерами показать сложно. Это не то же самое, что количество строк кода. Оно в некоторой степени кореллирует, но не линейно и не всегда. Перл, к примеру, очень лаконичный язык, позволяющий довольно много действий запихнуть в минимум строк кода. Но практически нечитаемый. "Write-Only" язык. Когда проще переписать, чем отрефакторить.
Здравствуйте, vdimas, Вы писали:
V>Здравствуйте, netch80, Вы писали:
V>>>>>А так-то сам по себе PHP очень даже неплох, местами на голову выше Питона, разумеется. N>>Начни с обоснования этого тезиса, безаргументный ты наш...
V>- Меньше неявных соглашений.
Безаргументно. С учётом следующего пункта — их больше.
V>- Возможность строгой типизации.
Ага-ага. "Возможность". И как давно убрали автоконверсии между строками и числами? В Питоне этого дерьма не было изначально.
V>- Поддержка абстрактных классов и интерфейсов. Для абстрактного класса можно задать сигнатуру конструктора.
Есть абстрактные классы.
V>- Абстрактный итератор в языке, возможность описания собственных/произвольных итераторов (не путать с генераторами).
Зачем нужен?
V>- "чистая" реализация генераторов в виде корутин, что этот механизм применяется напрямую как для итерации, так и для задач, где в C# или Питоне 3.6 используют костыли async/await.
Корутины есть отдельно. И чем именно async — костыли?
V>- Абстрактный функциональный тип в языке, возможность описания произвольных своих функторов.
Функторы есть. Абстрактный функциональный тип в языке — в стандартной библиотеке есть достаточно близкое.
V>- Декомпозиция элементов языка (можно property описать как объект-шаблон).
Зачем нужно?
V>- Более последовательная и удобная работа с метаинформацией.
Бездоказательно.
V>- Константы в языке.
Можно сделать, кому нужно. В принципе — согласен.
V>- Явное наличие неймспейсов, операторы области видимости '::'.
Делается на импортах проще и удобнее.
V>- Строгие замыкания, возможность управления замыканием по имени или по-значению, а так же "уровнем" захвата переменной (вот эта вечная боль в JS — когда же надо создавать промежуточную переменную для вложенной иерархии анонимных ф-ий, а когда нет, вся эта боль решается, при надобности, явным use в PHP и указанием типа индирекции).
Что такое "строгие" замыкания и чем они лучше обычных питоновых?
V>- Анонимные классы.
Зачем?
V>- Карринг и частичное применение в явном виде.
functools.
V>- Набор аргументов ф-ий можно рассматривать как один именованный тупл, т.е. оперировать им как единой сущностью (привет теориям типов).
В Питоне из коробки, но зачем?
V>- Миксины, трейты, явное управление конфликтами: V>
V>class Aliased_Talker {
V> use A, B {
V> B::smallTalk insteadof A;
V> A::bigTalk insteadof B;
V> B::bigTalk as talk;
V> }
V>}
V>
Всё есть.
V>- Туда же ключевое слово final;
final делается при необходимости, но ни разу не потребовался.
V>- Управление уровнем ссылочности, разыменование ссылок. V>- Т.е. фактически прямой выход скриптового исходника на возможность его "честной" компиляции в нейтив, в отличие от полукомпиляции в проекте CPython и других уже умерших проектах-экспериментах.
CPython живее всех живых. О чём конкретно речь?
V>- Легкое расширение языка, см. модули паттерн-матчинга, модуля-аналога LINQ, модуль PHP-COM, модуль PHP-.Net, обертки над нейтивом и т.д. V>- Наличие позднего статического связывания позволяет разрабатывать абсолютно-достоверную диагностику для кода, т.е. не нужны никакие среды-утилиты, это всё можно делать через встроенные ср-ва языка.
Пример?
V>- Легкое подключение нейтивных ф-ий.
V>Про синтаксису Питона не проходился только ленивый, это объект нескончаемого флейма.
Сплошное хейтерство ((c) vdimas) от неосиляторов отступов.
V>Напротив, синтаксис PHP никакого флейма не вызывает, там всё чисто изначально.
Агащазз.
V>Взять даже хотя бы определение статических ф-ий и св-в.
V>Я не перечислял равные возможности, навроде генераторов yield и т.д., так шта, просьба не пытаться отвечать "а вот у Питона зато есть то-то и то-то" не проверив сначала, в каком виде "оно же" есть в PHP.
Так ты объясни, что именно в конкретных реализациях тебе так больше нравится, потому что угадать твои предпочтения невозможно, а к практике они обычно ортогональны.
V>PHP рвёт Python как тузик грелку по скорости исполнения кода. V>Причём, кто тут попытается что-то говорить (орать?) про CPython и Ко, пытаясь сравнивать их с референсной скриптовой реализацией PHP — лучше сравните их с любым популярным ускорителем PHP, все вопросы отпадут моментально.
Тут не спорю. Попсовость привела таки к огромному количеству дерьмового кода и необходимости его ускорять. Это факт и для PHP, и для JS, где имеем V8, которым пользуются все кому ни лень.
Задачи, где требуется суперскорость собственного кода, я на Питоне и не рассматриваю. Но таких 1-5%.
V>=============== V>В целом и общем Питон более простой язык. Местами вовсе ущербный.
Что простой — согласен. Потому что в разы более логичный. Есть некоторые недоработки и принципиальные шизы авторов, но их можно терпеть.
V>Очистить всё это можно, конечно, за какие-нить большие вложения, только а смысл? )) V>Вот и выходит, что PHP охотно используют относительно большие компании, которые могут позволить себе чуток вложиться в допиливание инфраструктуры самого PHP, взять даже VK или Yandex. V>Бо в базе самого языка там всё очень даже ОК. V>Сравнивать с ним убогие JS или Python можно лишь от упёртой агнажированности, т.е. поправ всякую объективность.
Здравствуйте, vdimas, Вы писали:
N>>Не надо мне рассказывать, как рефакторинг усложняется при отсутствии статической типизации — эта тема уже активно отрабатывается (аннотации типов в >=3.6, хотя бы). N>>А вот критерий мог бы показать принципиальную возможность или невозможность какого-то вида рефакторинга, но даже тебе должно быть очевидно, что он весь возможен вопрос в цене поддержки и в её востребованности.
V>Вопрос в модели ООП. V>В PHP эта модель явная. V>Для типов не "аннотации", а просто указаны типы.
Аннотация это и есть указание типов, и в чём тебе столь принципиальная разница?
Кстати, чего ты вдруг перепрыгнул на PHP, хотя перед этим субтред относился к сравнению с Matlab?
"Забегал" ((c) vdimas)
N>>И это я ещё не вспоминаю, зачем тут вообще категорически хотеть сложный рефакторинг для языка прототипирования, если в прототипе некуда те сложные методы применять. V>В прототипе можно и нужно не только функциональность прототипировать, но обязательно "играть" с внешним АПИ и основными сценариями. V>Разработка АПИ и сценариев его применения — это тоже важная часть разработки, ес-но.
Которые никакой рефакторинг не покроет, потому что свойства API за пределами его понимания. Подтасовываешь...
V>>>Верно, не отличается. V>>>Та же хрень, вид сбоку. V>>>Прототипировать на ём можно только от невладения другими ср-вам прототипирования. N>>Которые ты, разумеется, никому не покажешь.
V>Ну а смысл тебе показывать, бо ты не раз проявлял себя как классический хейтер того же дотнета, т.е. не раз занимал позицию отрицания ради отрицания.
Ну я так и понял, что аргументы ты просто не принимал, не рассматривая.
V>И что характерно, что я часто прототипировал на дотнете, а целевые проекты — плюсовые для линухов. V>Лично меня это не смущает, я ХЗ почему смущает некоторых. ))
Потому что критический пласт функциональности, связанный, например, с управлением дочерними процессами, там или отсутствует, или закрыт так, что недоступен. Причём в Core его ещё больше закрыли.
V>>>"По сумме факторов". V>>>Я отвечал на конкретные абзацы. N>>И неконкретно рубанул с размаху упоминанием этих трёх языков. V>Я указал на твой мухлёж.
Ja-ja
V>Надо было прямо писать "он середнячок в разных дисциплинах, но в сумме набирает больше баллов".
Нет, не надо было. Потому что не просто "в сумме", а в адекватном сочетании элементов в удобную конструкцию.
V>Итого, ключевое тут — использование одного и того же языка для всего. V>Последние 25+ лет я считаю такой подход ущербным.
Приём Pugna: приписал мне "использование для всего" и отвергаешь эту собственную приписку.
Затем отсылка к собственному авторитету — "25+ лет".
Смешной ты, так прямо палиться.
V>>>Здечь я отвечал на использование в кач-ве языка для высокоуровневой "склейки" в реальных боевых проектах. Питон опять сливает в этом месте. N>>Твои глюки другим не видны. Ты бы их хотя бы описал подробно...
V>Почему мои? V>Я отвечал на конкретный твой абзац, контекст там задан. V>Питон не очень удобно сопрягать с нейтивом, в отличие от того же VB/VBA/VBS, Lua или дотнета. V>Поэтому, "клей" из него откровенно никудышный. V>Есть целая охрененейшая библиотека Boost.Python, и даже с её помощью остаётся достаточно траха. V>Само наличие такой либы уже много о чём говорит, что задача не из тривиальных.
Само наличие такой либы говорит, что потребность очень высока — выше, чем для любого другого языка.
А оформить в библиотеку некоторые вещи — полезно для любого FFI.
N>>Есть и другая инженерная база, которая говорит, что не надо без совсем уж безысходности требовать гайки на M3.1415926 или напильник с поперечным профилем циклоиды и разными насечками с разных сторон. V>Но закручивать гайки, всё же, лучше гаечным ключом, а не плоскогубцами. V>Пусть даже это очень клёвые плоскогубцы и вообще ты к ним привык как к родным.
Так это ты предлагаешь их закручивать напильником.
N>>Но ты эту инженерную базу почему-то игнорируешь в одном конкретном случае. V>Наоборот, я утверждаю, что никакого одного конкретного случая не существует. V>Питоноводы доказывают мне обратное — что любой случай сводится к одному. ))
А ты не с абстрактными "питоноводами" в своих глюках общайся, если мне отвечаешь, а со мной.
N>>Как ты замечательно передёрнул, вдруг заменив тему на "синтаксически" строгие языки.
V>Ну ты же про "грабли".
И какая причина перейти на синтаксис? Ты других страшных слов не знаешь?
V>В Lua и VB вообще никаких граблей прямо бай дизайн.
Тебе уже ответили.
V>В VB и JS можно запретить использование необъявленных переменных.
Можно. Я никогда не спорил, что именно это в Питоне мне не нравится. Но простейший статический анализатор ловит подавляющее большинство случаев опечатки/etc., а остальное — тестами, потому что любая динамика их требует больше, чем статика.
N>>Хотя я вообще ни слова про синтаксис не говорил. V>При чём тут ты?
Если ты отвечаешь на мои аргументы, то вполне при чём.
Если ты споришь с собственными галлюцинациями, то зачем для этого писать ответ мне?
N>>Начинаю сомневаться, что ты на Питоне вообще что-то писал больше двух страниц V>А надо писать больше на самом скриптовом из всех языков? V>Рилли? ))
Чтобы про него говорить с хоть сколько-то реальными аргументами — да, рилли, надо.
V>>>Но в отсутствии систематизации и единообразия АПИ оно всё представляет из себя информационный мусор. N>>И опять, разумеется, у тебя есть не менее 3 примеров конкретных областей. Но которые ты не покажешь. V>Я покажу стандартную библиотеку Dart. V>Вот где радующая глаз продуманность всего и вся. V>Там учтены ошибки проектирования даже таких более-менее современных (в сравнении с Питоном) платформ, как дотнета. V>На сегодня в природе нет скриптового языка чище, во всех смыслах.
Покажи пару самых вкусных, по-твоему, примеров. Как обычно, твою логику предсказать нельзя, поэтому отсылка в гугл не работает.
N>>>>>>Аналоги для компилируемых языков в виде мер "выгрузить целиком classloader или assembly, сериализовав состояние" не дают плавный незаметный переход. V>Между второй и последней строчкой можно "на лету" заменить бинарник COM-объекта.
Не читаешь.
V>Во второй строчке моего примера, еcли это была последняя ссылка, то бинарная либа выгрузится. V>Если использована строгая типизация, то тут ограничение на сохранение интерфейса подменяемой на лету реализации. V>А если использовать просто Object, то даже такого ограничения не будет.
N>>Иначе сложно объяснить, почему ты даже в моём укороченном описании пропустил всё, кроме упоминания выгрузки.
V>Я не пропустил, я как раз показал, что "горячая замена кода" легко делается даже на нейтиве, т.е. не аргумент ни в одном из мест.
"Легко" она как раз не делается.
N>>Ты же вместо этого предложил посмотреть на функцию, которая делает проверки типа "я ещё нужна?" изнутри библиотеки.
V>Потому что я верил, что ты, скорее всего, хотя бы краем уха слышал о такой функциональности, просто забыл в пылу спора — иначе бы не потребовал ссылок. V>Но ты потребовал ссылки, чем и спалился, собсно. Вот я тебе и намекнул. ))
Спалился ты — на нечтении задачи. Опять невидимые собеседники чего-то намешали, видимо...
Здравствуйте, uncommon, Вы писали:
V>>Оказывается, еще 3 года назад вышел более-менее работающий perl6! ))) U>Точнее последние 3 года он выходил, выходил. Выходил, выходил. Но всё никак не мог выйти.