Ш̴̴̜̥͍͕̼̙̱͙͎͍̘̀̐̔́̾̃͒̈̔̎́́͜р̧̛̺͖͖̯̖ͧͤ͋̅̽ͧ̈̐̽̆̐͋ͤͦͬ͛̃̑͞͞и̒ͥͤͯ͂ͣ̐̉̑ͫ̉̑҉̛͏̸̻͕͇͚̤͕̯̱̳͉ͅф̴̴̡̟̞͙̙̻͍̦͔̤̞̔̓́̍͗̚͢͞ͅт̨̐ͫ̂͊̄̃ͥͪ͏̫̺͍̞̼͈̩̥̜͔͜͜ы̸̴̱̺̼̠̦͍͍͍̱̖͔̖̱͉̅͑͌͒ͫ͒̀ͥ͐ͤ̅͘̕.̵̴̡̭̼̮͖͈̙͖͖̲̮̬͍͙̼̯̦̮̮ͦ̆̀̑̌ͮͧͣͯ̔̂́͟г͌ͮ̏̈͂ͯ̚҉̛̙̬̘̲̗͇͕̠̙͙̼̩͚̀͘͞ͅо̷̥̯̘̓ͤ̽͒̋̉̀̂̄̒̓̊ͨ͛́̌ͤ̂̀͠в̶̒͒̓̏̓̚҉̛̙̘̺̰̮̼̟̼̥̟̘̠̜͜н̸̷̸̲̝͈͙̰̟̻̟̰̜̟̗͎̻̻͍̿̔̃ͨ͑о̔̀̋ͫ̇̿̐ͫ͌͗ͩ҉̨̜̙̙͈͍̮̮̼̙̘̞̕͜͡ Войти !bnw Сегодня Клубы

Почему python популярнее рубей, хотя Руби превосходит python по следующим пунктам:
- Метапрограммирование (т.е возможность написания DSL)
- Более серьезная поддерка FP (TCO, простой function composition syntax, pattern matching)
- Более серьезная поддержка OOP (mixins)
- Более серьезная функциональность для обработки текста
- Больший динамизм/расширяемость
- Поддержка continuations
- Однозначность синтаксиса
- Нет такого цирка как python2 vs python3
- Многострочные лямбды

Srsly python выигрывает только за счет того, что для него тупо больше биндингов ко всяким либам.

Пока что вижу ответ: так получилось. Prove me wrong.

Рекомендовали: @krkm @kuzy000
#XNC567 / @ninesigns / 3286 дней назад

Я полагаю, что да, исторически. Собсно, питон появился раньше и на нём раньше начали писать утилиты для операционных систем(когда заебались писать на пердле).

#XNC567/YR5 / @like-all / 3286 дней назад

@like-all хз 1991 vs 1995. Когда там на питоне начали писать утилиты? В начале/середине нулевых?

#XNC567/I4U / @ninesigns --> #XNC567/YR5 / 3286 дней назад
@ninesigns Ruby долго был только для ванаби и луноликих.
#XNC567/FIU / @anonymous --> #XNC567/I4U / 3286 дней назад
- метапрограммирование и continuations есть в python - где в python неоднозначность языка? - по "более серьезным" пруфы будут? - Нет такого цирка как python2 vs python3 - это же наоборот говорит в пользу python, нет "единственно-правильной" версии языка, швободка
#XNC567/DD3 / @anarchy / 3286 дней назад

@anarchy >нет "единственно-правильной" версии языка
ле, что в етом хорошего?

#XNC567/HP8 / @anonymous --> #XNC567/DD3 / 3286 дней назад
@anonymous s/долго был//
#XNC567/GWD / @postman --> #XNC567/FIU / 3286 дней назад

@anarchy > метапрограммирование
покажи в питоне инструментарий по произвольным преобразованием над синтаксисом в compile-time. гуглил - не нашел.

continuations

def call_cc(f,c):
        f(c,c)

это не continuations

где в python неоднозначность языка?

отспупы, local vs global, однострочные лямбды, много statements вместо expressions

python, нет "единственно-правильной" версии языка, швободка

ахаха лойс. скажи кому от этого выгодно плз.

#XNC567/VNJ / @ninesigns --> #XNC567/DD3 / 3286 дней назад
@anonymous считай, что это разные языки с похожим синтаксисом и рядом общих библиотек. Чем больше языков, тем больше свобода выбора, хотя, возможно, кто-то бы и мечтал, чтобы все на лях писали
#XNC567/S07 / @anarchy --> #XNC567/HP8 / 3286 дней назад
В какой реализации есть TCO?
#XNC567/IN2 / @plhk / 3286 дней назад
@ninesigns > compile-time > ruby til
#XNC567/PBH / @postman --> #XNC567/VNJ / 3286 дней назад

@ninesigns > по "более серьезным" пруфы будут?
перечитай /0 плз.
в OOP python тоже явно проигрывает: ruby объектный от начала и до конца, там есть public, private, protected, там есть
насчет FP там написал
более серьезная обработка текста - это шаблонизация строк например.

#XNC567/POQ / @ninesigns --> #XNC567/VNJ / 3286 дней назад

@postman наличие компилятора в рантайме не отменяет существования фазы компиляции (и раскрытия макросов)

#XNC567/KP9 / @ninesigns --> #XNC567/PBH / 3286 дней назад

@plhk
RubyVM::InstructionSequence.compile_option = {
tailcall_optimization: true,
trace_instruction: false
}

#XNC567/T14 / @ninesigns --> #XNC567/IN2 / 3286 дней назад
@ninesigns > покажи в питоне инструментарий по произвольным преобразованием над синтаксисом в compile-time. гуглил - не нашел. есть meta-классы, создаются при помощи type(cюls, (), {}). Используется крайне редко, т.к. задач, требующих мета-программирования найти не так-то просто. Мне за 15 лет программирования только на тестовом задании при устройстве на работу потребовалось. > отспупы, local vs global, однострочные лямбды, много statements вместо expressions по-моему, проблема надуманная, пару раз я сталкивался с кривыми отступами, но ты бы видел, какой код у этих людей был на js. Если человек идиот, его никакой язык не спасет
#XNC567/195 / @anarchy --> #XNC567/VNJ / 3286 дней назад
@anarchy s/лях/сях
#XNC567/0HX / @anarchy --> #XNC567/S07 / 3286 дней назад

@anarchy > есть meta-классы
это заебись, но крч не то.

по-моему, проблема надуманная

не неоднократно слышал батхерат на тему этих проблем. хз может и надуманая.

#XNC567/YAR / @ninesigns --> #XNC567/195 / 3286 дней назад
@ninesigns > ruby объектный от начала и до конца, там есть public, private, protected, Это необходимый и достаточный признак присутствия ООП в языке?
#XNC567/LG6 / @postman --> #XNC567/POQ / 3286 дней назад

@postman нет, но достаточно чтобы утверждать что с т.з ООП ruby > python.

#XNC567/V7X / @ninesigns --> #XNC567/LG6 / 3286 дней назад
@ninesigns С хуев? Можно ли вообще выстроить порядок на языках по ООП-ности?
#XNC567/G3T / @postman --> #XNC567/V7X / 3286 дней назад
Потому что руби – это такая же скриптопараша, только с более уёбищным перлоподобным синтаксисом. Кстати юникоду это пиздоглазое поделие научилось относительно недавно (вот так цирк!).
#XNC567/PDP / @heroin / 3286 дней назад

@postman частичный можно, только лень. сверху естественно будет CLOS.

#XNC567/A6I / @ninesigns --> #XNC567/G3T / 3286 дней назад

@heroin недавно это в 2007 году?
"скриптопарашность" - это базворд.

#XNC567/T3Y / @ninesigns --> #XNC567/PDP / 3286 дней назад
@ninesigns Бля, ну хоть ты-то приведешь мне формальную модель ООП тогда? Чтобы такую прям для всех authoritative?
#XNC567/0TV / @postman --> #XNC567/A6I / 3286 дней назад
@ninesigns нельзя дизайнить язык по принципу "давайте вот эту хуйню притащим, и вот эту вот ещё, и да, вот эту тоже".
#XNC567/9NY / @heroin --> #XNC567/T3Y / 3286 дней назад
@heroin Страуструп разрешил.
#XNC567/DIS / @postman --> #XNC567/9NY / 3286 дней назад
@ninesigns >в 2007 году? ЕМНИП нормальная поддержка появилась только с 1.9
#XNC567/KOK / @heroin --> #XNC567/T3Y / 3286 дней назад
@heroin Помню, точно в 2012-2013 ставил какую-то хуйню, чтобы нокогири не обсиралось на руснявом.
#XNC567/V1X / @postman --> #XNC567/KOK / 3286 дней назад

@postman 1.9 как раз и вышел в 2007 году судя по википедии

#XNC567/CHW / @ninesigns --> #XNC567/V1X / 3286 дней назад
@ninesigns Хуево вышел, значит.
#XNC567/PSO / @postman --> #XNC567/CHW / 3286 дней назад
@ninesigns видать все (дистрибутивы) до последнего сидели на 1.8.x
#XNC567/GIW / @heroin --> #XNC567/CHW / 3286 дней назад
@heroin Это про питон?
#XNC567/LDU / @kuzy000 --> #XNC567/9NY / 3286 дней назад
@ninesigns Шта.
#XNC567/8VN / @kuzy000 --> #XNC567/KP9 / 3286 дней назад

@kuzy000 в первую очередь это про JS, в чуть меньшую про питон и еще в чуть меньшую - про руби.

хуй знает почему они так с utf-8 наложали, видать у них там в подлунном мире своя атмосфера.

#XNC567/T2A / @ninesigns --> #XNC567/LDU / 3286 дней назад
@ninesigns > в первую очередь это про JS, в чуть меньшую про питон и еще в чуть меньшую - про руби. Lua где-то еще дальше?
#XNC567/5WY / @kuzy000 --> #XNC567/T2A / 3286 дней назад

@kuzy000 ну смотри, в классическом лиспе с его image-based подходом и динамизмом компиляция не выносят как отдельную фазу.

я освежил свое знание рубей и понял что вряд ли там макскросы настолкько свободные как в лиспе. метапрограммирование там запилено за счет нихуевого динамизма объектной модели, то есть за счет развитой интроспекции.

то есть про compile-time исполнение кода в рубях я напиздел, сорь.

#XNC567/JXW / @ninesigns --> #XNC567/8VN / 3286 дней назад

@kuzy000 я хз тут без контекста решаемой задачи сложно.
с одной стороны синтаксис lua приятней, встраивание в сишку охуительно, есть metalua и наконец lua-jit.

с другой стороны стандартная либа там куцая.

как standalone язык плюсов у lua я не вижу. В быстром встраивании чтобы не переписывать полпроекта она wins.

#XNC567/XI9 / @ninesigns --> #XNC567/5WY / 3286 дней назад
@ninesigns > ну смотри, в классическом лиспе с его image-based подходом и динамизмом компиляция не выносят как отдельную фазу. В cl разве не macroexpand один раз проходит и все?
#XNC567/UEX / @kuzy000 --> #XNC567/JXW / 3286 дней назад

@kuzy000 я не знаю CL, но знаю что там можно пилить макросы, внутри которых раскрываются макросы.

то есть, одним проходом ты вряд ли обойдешься.

#XNC567/CL6 / @ninesigns --> #XNC567/UEX / 3286 дней назад

@ninesigns пруф или mruby wins

#XNC567/OIO / @anonymous --> #XNC567/XI9 / 3286 дней назад
@ninesigns > то есть, одним проходом ты вряд ли обойдешься. Просто по списку проходишь и все головы-макросы-символы раскрываешь, результат опять пытаешься раскрыть, пока не останется макросов. Правда нужно еще следить за тем, чтоб в defmacro появившиеся в скоуп добавлять. Алсо, интересно, где-нибудь запилены макросы которые могут по выражению до top-level-а из места вызова подниматься? Чтоб совсем FLEXIBILITY.
#XNC567/BPQ / @kuzy000 --> #XNC567/CL6 / 3286 дней назад

@kuzy000 ну это уже рекурсивное раскрытие.

Алсо, интересно, где-нибудь запилены макросы которые могут по выражению до top-level-а из места вызова подниматься? Чтоб совсем FLEXIBILITY.

ты не про макростеппер щас говоришь?

#XNC567/MEG / @ninesigns --> #XNC567/BPQ / 3286 дней назад
@4077 ну да, джанга на метаклассах, но те, кто ее юзает практически никогда мета-классы и не встречали
#XNC567/06N / @anarchy --> #XNC567/2PN / 3286 дней назад
@ninesigns Нет. Я про маняфичу уровня: (defmacro put-parasha-on-top-level () (add-form *top-level* '(parasha)) '()) (defmacro put-parasha-on-parent () (add-form (parent call-point) '(parasha)) '()) (progn (progn (progn (put-parasha-on-parent) (put-parasha-on-top-level) (put-parasha-on-parent)))) После раскрытия: (progn (progn (progn () () ()) (parasha) (parasha))) (parasha)
#XNC567/47T / @kuzy000 --> #XNC567/MEG / 3286 дней назад

@kuzy000 вечером дома подумаю, спс.

#XNC567/BK0 / @ninesigns --> #XNC567/47T / 3286 дней назад
@ninesigns Ле, я чет каждый раз лоллирую, когда вспоминаю, как в свифте все это сделано. Там private член класса, значит, что к этому члену есть доступ у любого говна которое содержится в ЭТОМ ФАЙЛЕ. Два разных класса описанных в одном файле могут теребить приватные члены друг другу и никто их за это не осудит. internal там типа член класса доступен для любого класса в рамках приложухи(допустим фреймворка, тама это типа либа динамически подключаемая) ну а паблик ето то, что торчит наружу. С одной стороны, вроде да, нехуй лепить невзаимосвязанные вещи в одном исходничке, но с другой, это такая же параша уровня питоновских значимых пробелов.
#XNC567/8X3 / @freeingria --> #XNC567/POQ / 3286 дней назад

@freeingria лол, свифтоавторы походу решили не запариваться и сделали bydlo-approved industry-grade.
модули-то там там хоть полноценные?

#XNC567/YR9 / @ninesigns --> #XNC567/8X3 / 3286 дней назад
@ninesigns Дефайн полноценность. Свифт сам по себе охуенен, на самом деле, но вот ета хуйня и отсутствие даже намеков на какие-нибудь неймспейсы расстраивает.
#XNC567/L8H / @freeingria --> #XNC567/YR9 / 3286 дней назад

@freeingria полноценный модуль - это тот, который явно декларирует какие классы/функции/константы он провайдит, например. как раз чтобы например name collisions не было итд.

про классы из одного исходника, которые могут друг другу ТАМ теребонькать private поля это чот хуйня какая-то. Модуль может и из нескольких файлов состоять. как в этом случае будет вопрос решаться?

#XNC567/5C5 / @ninesigns --> #XNC567/L8H / 3286 дней назад
@ninesigns Я ж вроде объяснил. Все public классы внутри модуля доступны извне. Если ты этот модуль подключаешь, то ты можешь там теребить все классы/функции/константы которые объявлены public. Все что в модуле объявлено internal - юзается только внутри модуля и доступа ты к ним не имеешь. Все что объявлено как private юзается только внутри файла, лол. Странная система, но в принципе привыкается быстро. Проблему с несколькими файлами я не понял. Какая разница сколько там файлов, ты приватный член потеребонькать все равно не сможешь из другого файла.
#XNC567/GTC / @freeingria --> #XNC567/5C5 / 3286 дней назад

@freeingria > ты приватный член потеребонькать все равно не сможешь из другого файла.
а internal ?

#XNC567/7SD / @ninesigns --> #XNC567/GTC / 3286 дней назад
@ninesigns Да. Интерналы ты можешь теребить по всему модулю. По умолчанию там все internal, бтв. Ну типа если ты мамкин перфекционист и хочешь Ъ приватный член, то не объявляй в одном файле несколько классов и все. Вероятно, эта клоунада с доступностью внутри файла сделана из-за их экстеншенов и протокольчиков, там же можно расширять вообще все что угодно и как угодно. Довольно гибкая хуита и типобезопасная одновременно. Мне лень думать, так оно или нет, поебать вообще.
#XNC567/OG8 / @freeingria --> #XNC567/7SD / 3286 дней назад
ооп нахуй никому не всрался дсл для написания на рубях говноруби нахуй не всрался чо за обработка текста tfw манкипатчинг это хороший динамизм и расширяемость кроме метапрограммирования не увидел ни одного хоть сколько-то значимого различия, так что хуй знает на что тут отвечать // тупой штоле, руби вообще никому нахуй не нужен был, пока чуваки не упростили вебговно, сделав рельсы // пук
#XNC567/Y5P / @anonymous / 3285 дней назад
#XNC567/Q3H / @anonymous --> #XNC567/LG6 / 3285 дней назад
@ninesigns > в OOP python тоже явно проигрывает: ruby объектный от начала и до конца настолько, что даже сущность Class является объектом класса Object, потому можно добавить статический метод в Object, и он станет доступен из Class или объявить нестатический метод у Class, который можно будет звать из классов, но не из их экземпляров. Может просто нахуй и уж лучше питон?
#XNC567/35Y / @anonymous --> #XNC567/POQ / 3285 дней назад
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.