о языках программирования
Dec. 21st, 2004 04:22 pm«Смолток просто-напросто непрактичен» — пишет
dz, наряду с другой ерундой, в своём сравнении Джавы и Смоллтока. Видно, что он просто не очень хорошо понимает, какая это качественная разница — действительное динамическое ООП — если думает, что «есть reflection API, который все ПРАКТИЧЕСКИЕ задачи - решает». Конечно, все практические задачи, которые могут возникнуть в системе, спроецированной статически, он решает, а другие задачи человеку, не понимающему Смоллток и динамическое ООП, и в голову не придут.
Мне это, впрочем, напомнило тему «супер-языков», о которой приходилось иногда размышлять. Под этим я понимаю вот что: иногда бывает так, что поклонники какого-то языка программирования утверждают, что использование их языка позволяет повысить эффективность написания тех или иных сложных программ в несколько раз (а то и больше). Вообще-то подобные утверждения то и дело высказывают поклонники чуть ли не любого языка программирования, но обычно их не стоит воспринимать всерьёз. Но это не значит, что такое в принципе невозможно, с другой стороны.
Как-то это сумбурно звучит, поэтому попробую зайти с другой стороны. Ясно, что есть области применения, в которых некоторые языки подходят куда лучше других. Ясно, что программисты разнятся по своим способностям, качеству и скорости работы, эффективности результата, и прямое сравнение тут невозможно. Если мы учтём все эти «ясно» и попытаемся всё же вынести из за скобки, останется ли внутри что-то объективное, зависящее от языка? И если останется, насколько оно влиятельно?
Во мне, когда я думаю об этом, борются два противоположных хода мысли. С одной стороны, мне хочется сказать, что язык и его особенности часто переоценивают. В конечном итоге всё решает сложность поставленной задачи, переходящая в сложность работы программиста, решающего эту задачу. Язык программирования как бы стоит посредине этого перехода, «амортизируя» часть сложности задачи и принимая её на себя; но использование разных языков хоть и меняет качество этой амортизации, но не слишком значительно, не во много раз. Использование очень разных языков программирования, основанных на разных подходах, может давать преимущество в тех или иных удобных для решения этими подходами задачах; но в случае, если таких удобств или специальных требований нет, их эффективность примерно одинакова, есть только иллюзия особенной эффективности того или иного языка, появляющаяся у программиста, который очень хорошо его знает, привык, притёрся к нему, и действительно для него лично он быстрее и эффективнее всего остального.
С другой стороны, мне хочется сказать, что всё наоборот. Метафора амортизации несостоятельна, т.к. не отражает тот факт, что, глядя на одну и ту же задачу с точки зрения очень разных языков и подходов к программированию, мы видим совершенно разные вещи, и исходная сложность поставленной задачи не является чем-то неизменным, она навязана нам тем взглядом, к которому мы привыкли; при смене языка/взгляда/подхода может оказаться, что всё стало во много раз легче, и это не какой-то особенный случай, вызванный специальными обстоятельствами исходной задачи, а самое обыденное дело. И может оказаться, что какие-то языки с этой точки зрения особенно эффективны, т.е. очень хорошо знающий такой язык программист сможет в среднем работать значительно эффективнее, чем очень хорошо знающий другой язык программист тех же способностей, при работе над той же не-специальной задачей общего направления (естественно, такая точка зрения должна опираться на предположение о возможности определить «задачу общего направления» и «примерно тех же способностей» так, чтобы не впасть в замкнутый круг, и, действительно, неочевидно, что можно это сделать).
В общем, я лично сохраняю скептицизм по этому поводу, и первая из вышеописанных точек зрения в целом побеждает во мне вторую. Ко второй, тем не менее (и вообще к теме разных подходов к программированию, и тому, насколько такие подходы влияют на результаты и эффективность работы программиста) сохраняется живой интерес. Так вот, наиболее убедительные и подтверждённые фактами претензии на особую эффективность любимого языка, которые мне приходилось встречать, проистекали из среды поклонников двух языков: Смоллток и Форт. Не знаю, почему именно эти два, возможно, это больше случайность моего личного знакомства с языками, программистами, и различными сетевыми обсуждениями этой темы, чем какая-то объективная реальность; и, как я написал выше, я вовсе не уверен в том, что такие претензии основаны на чём-то реальном. Но любопытно отметить, что общего в этих двух языках (вообще-то очень разных): именно концептуальная чистота языка («всё — объект» или «всё — макро») и ещё я бы отметил интеграцию языка внутри интерактивной системы, полностью написанной на этом же языке, что-то вроде мини-ОС для языка.
Мне это, впрочем, напомнило тему «супер-языков», о которой приходилось иногда размышлять. Под этим я понимаю вот что: иногда бывает так, что поклонники какого-то языка программирования утверждают, что использование их языка позволяет повысить эффективность написания тех или иных сложных программ в несколько раз (а то и больше). Вообще-то подобные утверждения то и дело высказывают поклонники чуть ли не любого языка программирования, но обычно их не стоит воспринимать всерьёз. Но это не значит, что такое в принципе невозможно, с другой стороны.
Как-то это сумбурно звучит, поэтому попробую зайти с другой стороны. Ясно, что есть области применения, в которых некоторые языки подходят куда лучше других. Ясно, что программисты разнятся по своим способностям, качеству и скорости работы, эффективности результата, и прямое сравнение тут невозможно. Если мы учтём все эти «ясно» и попытаемся всё же вынести из за скобки, останется ли внутри что-то объективное, зависящее от языка? И если останется, насколько оно влиятельно?
Во мне, когда я думаю об этом, борются два противоположных хода мысли. С одной стороны, мне хочется сказать, что язык и его особенности часто переоценивают. В конечном итоге всё решает сложность поставленной задачи, переходящая в сложность работы программиста, решающего эту задачу. Язык программирования как бы стоит посредине этого перехода, «амортизируя» часть сложности задачи и принимая её на себя; но использование разных языков хоть и меняет качество этой амортизации, но не слишком значительно, не во много раз. Использование очень разных языков программирования, основанных на разных подходах, может давать преимущество в тех или иных удобных для решения этими подходами задачах; но в случае, если таких удобств или специальных требований нет, их эффективность примерно одинакова, есть только иллюзия особенной эффективности того или иного языка, появляющаяся у программиста, который очень хорошо его знает, привык, притёрся к нему, и действительно для него лично он быстрее и эффективнее всего остального.
С другой стороны, мне хочется сказать, что всё наоборот. Метафора амортизации несостоятельна, т.к. не отражает тот факт, что, глядя на одну и ту же задачу с точки зрения очень разных языков и подходов к программированию, мы видим совершенно разные вещи, и исходная сложность поставленной задачи не является чем-то неизменным, она навязана нам тем взглядом, к которому мы привыкли; при смене языка/взгляда/подхода может оказаться, что всё стало во много раз легче, и это не какой-то особенный случай, вызванный специальными обстоятельствами исходной задачи, а самое обыденное дело. И может оказаться, что какие-то языки с этой точки зрения особенно эффективны, т.е. очень хорошо знающий такой язык программист сможет в среднем работать значительно эффективнее, чем очень хорошо знающий другой язык программист тех же способностей, при работе над той же не-специальной задачей общего направления (естественно, такая точка зрения должна опираться на предположение о возможности определить «задачу общего направления» и «примерно тех же способностей» так, чтобы не впасть в замкнутый круг, и, действительно, неочевидно, что можно это сделать).
В общем, я лично сохраняю скептицизм по этому поводу, и первая из вышеописанных точек зрения в целом побеждает во мне вторую. Ко второй, тем не менее (и вообще к теме разных подходов к программированию, и тому, насколько такие подходы влияют на результаты и эффективность работы программиста) сохраняется живой интерес. Так вот, наиболее убедительные и подтверждённые фактами претензии на особую эффективность любимого языка, которые мне приходилось встречать, проистекали из среды поклонников двух языков: Смоллток и Форт. Не знаю, почему именно эти два, возможно, это больше случайность моего личного знакомства с языками, программистами, и различными сетевыми обсуждениями этой темы, чем какая-то объективная реальность; и, как я написал выше, я вовсе не уверен в том, что такие претензии основаны на чём-то реальном. Но любопытно отметить, что общего в этих двух языках (вообще-то очень разных): именно концептуальная чистота языка («всё — объект» или «всё — макро») и ещё я бы отметил интеграцию языка внутри интерактивной системы, полностью написанной на этом же языке, что-то вроде мини-ОС для языка.
no subject
Date: 2004-12-21 04:07 pm (UTC)1. Ну, начинается всё со стандартного наезда - обычно я его слышу из лагеря функциональщиков: dz типа не сечёт парадигмы, а если б сёк - пёрся бы, как всё круто.
Это всё офигенно, конечно, только я худо-бедно знаю, что такое смоллтоковская парадигма. Я вообще старый и с седыми яйцами, я языки программирования делаю на завтрак. Смолтокообразные в том числе. С абсолютной рефлексивностью в том числе.
"Если бы он втыкал в смолток, он бы придумал задачи для него".
Когда моя жизнь станет ТАК скучна, что мне придётся придумывать задачи - я повешусь. До сих пор задачи мне поставляет окружающий мир. И только это и есть задачи. А то, что ты придумал сам, называется УПРАЖНЕНИЕ или ЭТЮД. Языки Паскаль (оригинальный) и Смоллток (любой) для упражнений и этюдов очень хороши. Хоть и не для всех. (Типа наехал в ответ. Типа нефиг наезжать не по делу, это все умеют.)
Короче: на бочку задачу, для которой Смолток невероятно хорош. (Моя многолетняя практика общения на эти темы показывает, что задача или не появляется, или оказывается весьма академической.)
Конец пункта 1. Краткое содержание пункта 1: Люди, которые прутся от N, склонны считать, что только они по-настоящему понимают N. Они ошибаются.
2. В 1 сказано: есть такая тема - настоящие объектные языки. Завалишин не сечёт, как же они круты. А дальше сказано: правда, я сам не знаю, есть ли вообще между языками разница. Может и нет.
Бабка - ты определись. "dz не сечёт" или "я тут такой весь диалектический в душе, мудро размышляю, где ж истина.".
3. Right tool for the job, как тут уже сказано.
4. Товарищ. Коли ты уже добрался о мыслей о парадигмах и их применимости к конкретным задачам, различай и программистов.
Одним программистам нужны годы, чтобы въехать в новую парадигму, и они будут нуждаться в полном комплекте инструментов.
Другим требуется полчаса на понимание, а потом пара дней и ЛЮБОЙ язык программирования, чтобы эту парадигму воплотить.
Ты меня извини, но так неудачно получилось, я тут ровно вчера как раз оживил интерпретатор байткода для языка, чем-то (не парадигмой ли?) напоминающего смолток. Я примерно раз в пару лет какой-нибудь язычок делаю, как показывает практика. Из них пара применяется примерно полмиллиона раз в день.
Я - очень неудачный слушатель для того, чтобы учить меня парадигмам. Я могу такую парадигму выкатить, от которой самые экстремалы почувствуют себя либерально. Толку-то.
Я, знаешь, когда мне говорят "ты не понимаешь" раньше смеялся, а теперь уже просто оторопь берёт: вы ПРАВДА считаете, что ЭТО (парадигма смолтока) - какое-то откровение господне?
3.14здец. Яду мне.
ДЕТИ! Если дедушка не назвал вашу игрушку лучшей, то это не потому, что он не умеет играть. Он умеет. Отличайте же академическое от практического. Если я говорю "по России надо ездить на Жигулях", то это не потому, что я не видел машин лучше. Это ИМЕННО потому, что я видел.
Нет, б..дь, яду мне. Ну вот он лежит - вот, интерфейсы, методы, код, класс, голимый интеджер на... - ВСЁ ОБЪЕКТ. И фигли? Что ж, блядь (тут уже без точек надо), за магия такая в этом? Ну - Я-ТО ХОТЬ ЗНАЮ, ЗАЧЕМ МНЕ ЭТО. Это исследовательский проект. Есть свои причины. НО ВАМ-ТО ЗАЧЕМ!?
И - КАК ТОЛЬКО Я ПОЙМУ, КАК ИМЕННО ЭТО СДЕЛАТЬ - Я ЛИШУ ЕГО ЭТОЙ КРАСОТЫ РАДИ ПРАКТИЧНОСТИ!
Форт ещё. А что ж не Рефал? А где Плэннер? А на unix sed писать не пробовали? Это невероятно красивый язык - всё - строка. Бляд. Сил моих нет.
Страдания юных вертеров - отчего противные людшки на красивые автобусы только смотрят, а ездят на мерзких, но быстрых. Потому что красота - это чтоб смотреть и восторгаться, товарищ. И - вы удивитесь, сантехник, который чинит вам унитаз, тоже может слушать Ренуара, читать Баха и глядеть на полотна Пушкина взглядом истинного эстета.
Я рад, что всё больше и больше людей дошло до понимания и оценки красоты концепций. Теперь, раз уж вы это постигли, надо сделать усилие над собой и понять, что оптимизация идёт по многим факторам, и красота парадигмы в некоторые члены входит с минусом.
(Я не очень сегодня злой? Извини, если что. Не имел в виду обидеть.)
no subject
Date: 2004-12-21 04:14 pm (UTC)no subject
Date: 2004-12-21 05:09 pm (UTC)no subject
Date: 2004-12-21 04:21 pm (UTC)Мммм... продвинутй GUI? Вот, скажем, IDE какая-нибудь. Вроде на смоллтоке отлично выходит?
На форте многие embedded-программеры пишут оч. эффективно (знаком с людьми). Он и придумывался для таких вещей (телескопом управлять, iirc). Не хуже C во многих случаях. Да чего я объясняю :)
no subject
Date: 2004-12-21 05:21 pm (UTC)А продвинутый GUI вообще никто не пишет - его собирают, и язык для него - не си и не ява, язык для него - форм-конструктор. С генератором кода или без - не важно.
Провязка GUI с кодом - вообще отдельный и внеязыковой (!) разговор. Я лично делал бы сегодня, наверное, как-то так: сцеплял бы элементы GUI с точками в XML-дереве и давал бы программе его DOM-представление, которое с другой стороны редактирует оный GUI. Ну и события в программу по факту модификации того или иного поддерева.
Я не вижу никаких особых преимуществ реализации GUI на smalltalk/c++/java - разница будет в пределах 10%. Ты видишь? Изложи. Где тут абсолютная динамичность смолтока поможет? Да - реализация DOM-дерева в C++ - это почти реализация смолтока в нём, но это недорого стоит. Учитывая наличие библиотек - ничего.
no subject
Date: 2004-12-22 06:32 am (UTC)Ява - очень многословный язык. поскольку человеческое восприятие ограничено, то чем меньше не необходимых деталей украшают ваш текст - тем лучше. отсутствие необходимости продумывать до мельчайших деталей тип ваших переменных, описывать их и менять это описание и использование консистентным образом по всему тексту - большое облегчение.
статическая типизация позволяет отлавливать некоторые ошибки, но далеко не все, и далеко не самые злобные или часто встречающиеся. ошибки типа вылавливаются в первые же несколько тестовых прогонов - они гораздо менее трудноуловимые, чем стрельба по памяти, например.
заслуга Явы в том, что она легитимизировала в массовом сознании несколько правильных вещей - сборку мусора, защищенную модель исполнения, виртуальную машину. в основном, все это относится к Яве, как среде исполнения, а не к языку или библиотекам. картину портит язык Ява, который многословен и невыразителен. есть идитотизмы и в виртуальной машине: стек - на кой хер? multithreaded execution - не знаю как сейчас, но в первых версиях он вел себя совсем по разному на разных машинах, да и как модель исполнения - очень низкоуровневая и опасная (некий концептуальный эквивалент goto).
в общем, у меня много претензий к Яве; основная и концептуальная - сделана она явно не для себя, а для идиотов, чтобы они не дай бог не порезались. и используют ее люди в основном именно в этом контексте - большой проект с постоянно меняющимся составом программистов, которыми надо управлять и которые ничего не решают, а только кодируют.
решают - супер-дупер архитекторы, которые получают много бабла за выпасание этого стада идиотов.
у фирмы тоже задница прикрыта: идеал менеджера - это возможность всех уволить нахер и набрать новую команду without losing a heartbeat.
если по простому, то Питон почти для всего лучше чем Ява, но это без учета конъюнктуры.
а, кстати, знакомы ли вы с 10-м законом Гринспуна?
"Any sufficiently complicated C or Fortran program contains an ad-hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp."
это я к тому, что многие называют Питон "Лисп без скобок". да и вообще, могут ли ошибаться такие люди, как Питер Норвиг и Брюс Экел ;-)
no subject
Date: 2004-12-22 07:07 am (UTC)Объектное программирование - это когда обращение к переменной (полю класса) локализовано в одном исходнике, а лучше - в группе из 2-4 методов. Поэтому "согласованно менять по всему коду" - нонсенс.
Стрельба по памяти - это к тонким ценителям С++.
Язык невыразителен: пример кода в студию.
"Лучше без учёта" - это клёво. Без учёта некоторых факторов я - безусловно лучший гомо сапиенс на планете. (Тсс - с учётом - тоже, но это секрет.)
Я не знаком с десятыми законами, а мысль, в нём изложенная, банальна и очевидна. Я её в этой дискуссии раз пять написал, и один раз отдельно. Гринспун кроме bug ridden и slow (на его совести и вопрос умения программировать) забыл сказать, что оно будет ещё и заточено под конкретную задачу. Кроме того, как я уже раз 30 сказал, во времена всех этих невероятных восхищений лиспом не было STL.
Ошибаться могут все люди. В частности - те, кто пытается промышленно программировать на экспериментальном языке. Авторы которого не ошибальсь - они просто оттягивались в своё удовольствие и решали свои собственные задачи.
А те самые идиоты, которые не порезались и задница прикрыта - и есть люди, выпускающие 99% софта в мире. И ровно для них вся каша. И ровно потому Ява успешна, что её создатели понимают, где промышленное программирование, а где - маргиналы.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2004-12-21 04:32 pm (UTC)"Короче: на бочку задачу, для которой Смолток невероятно хорош"
(устало)
да для любой, в общем-то - в разумных, конечно, пределах.. Это язык общего применения От навигационных систем до текстовых редакторов (впрочем, и про embdedded я писал у тебя в комментариях).
ну скажем:
http://www.cincom.com/forms/profiles.html
http://www.whysmalltalk.com/production/
И не нужно про юного Вертера. Все, с чем я спорю - не нужно считать Смоллток академическим языком. Красота концепций - в каком-то смысле, побочный эффект. Или мысль о том, что практический язык может быть еще и красив концептуально - невозможна? Зачем к ней привязываться в духе "шашечки или ехать"? И шашечки, И ехать!
Да, он не в 50 раз лучше, чем Java и С++. Так что, я это где-то утверждал?
no subject
Date: 2004-12-21 04:48 pm (UTC)no subject
Date: 2004-12-21 04:51 pm (UTC)Лучше попробуйте.
no subject
Date: 2004-12-22 10:27 am (UTC)no subject
Date: 2004-12-21 04:55 pm (UTC)Для любой в общем задачи в разумных пределах хорош любой в общем язык.
Фраза "мы смогли ЭТО сделать на Смолтоке" не описывает свойства языка.
Прости, времени копаться в саксесс сториз софтверных компаний нет. :( Более того - у меня нет сомнений, что Я могу найти задачу, которая на смолтоке решается лучше, чем на си++.
Я бы хотел, чтобы именно ТЫ это сделал. Ибо это озадачен вопросом "почему никто не использует смолток". :)
no subject
Date: 2004-12-21 05:01 pm (UTC)В формулировке "достаточно хорош", aka "терпим" :)
Пишут же на чистом C OO-код для GUI (gtk), но это не от хорошей жизни %) Хотя, опять же, работает.
no subject
Date: 2004-12-21 06:10 pm (UTC)Я не буду искать case study с сравнением килострок (да и пользы от них)? Объяснять, почему (ну, к примеру) edit-n-continue в Смоллток увеличивает удобство работы - тоже не выйдет, потому что не имеющие такого механизма и не нуждаются в нем. И не знают о нем.
Пойдем иначе и возьмем статистику. Утверждение "Смоллток ощутимо эффективнее для программиста" поддерживают:
1) Программисты, писавшие на C++/Java, и ушедшие на Смоллток
2) Программисты на Смоллток, волей судеб и начальства вынужденные сейчас писать на Java/C++
Вместе с тем, с этим утверждением обычно спорят все, Смоллтоком серьезно не занимавшиеся (знакомство на уровне основ языка не считаем. В любом случае, Смоллток - это в первую очередь культура программирования).
Вместе с тем, мы наблюдаем огромное количество споров Java vs C++, Java vs C# и т.д. - причем обе спорящие стороны, как правило, разбираются и в том, и другом. Т.е. в целом наблюдается забавная картина: если взять умного и хорошего программиста что на С++, что на Java (я специально беру "близкие" по применению ОО-языки, играющие в одной нише), и обучить его Смоллтоку, то он в 95% становится его апологетом. Подобные цифры вряд ли можно увидеть в случае перехода на Java/С++. И это не Форт, который еще может "понравится/не понравится". И не LISP. Это слишком иные миры - Смоллток же побеждает в своей нише.
Эффективность Смоллтока почему-то лучше всего ощущается пост-фактум, "заранее" в ней убедить сложно; возможно, моя недостаточная некомпетентность и недостаток опыта тому виной, но похожие споры я вижу уже столько раз..
--
Почему никто не использует Смоллток? Потому что о нем не знают. Почему не знают? Маркетинг хреновый. Ему не повезло - как не повезло OS/2 и Бетамакс. Тут нет никаких вопросов. Лучшие побеждают далеко не всегда.
Мой-то problem в другом: хорошим хочется делиться, поэтому мне приятно заронить в кого-нибудь (не в тебя, это уже не выйдет :) сомнения в том, что Java и C++ - единственные приемлимые решения для разработки (в общем случае).
Так что, если кратко, Смоллток - это красота и эффективность разработчика (а уж последнее разбивается на кучу "случаев" и "подслучаев")
--
А что ты ждал? Я скажу, что на Смоллтоке лучше всего писать.. ээ.. текстовые редакторы? Или военные симуляции? Это был бы удар по языку - он претендует на бОльшее - и при этом играет на том же поле, что и С++/C#/Java.
no subject
Date: 2004-12-21 07:21 pm (UTC)Нет, блин, я офигеваю.
МУЖЧИНА. Это у вас ДЕТСКИЙ МАКСИМАЛИЗМ. От него надо избавляться.
Смоллток у меня стоял на машине ещё когда она была IBM PC AT с двумя мегабайтами.
Некоторые вещи, которые ты вчера узнал и которые кажутся тебе откровением и которыми хочется поделиться - тривиально другими людьми пройдены. Просто пройдены и всё. Я тоже бегал от него по потолку, да. Ну я уже отбегался.
Это неправда, что ему просто не повезло. То есть - да, могло больше повезти, могло. Но говорить "в сане сидят идиоты, вложили бы они свои бабки в Смолток - было бы круто" - это чистое детство в жопе. Если бы у тебя были таке деньги, ты бы знал, почему их надо вложить в яву, а не в смолток.
Коротко - потому что с Явой есть хоть какой-то шанс вернуть инвестиции, а со Смолтоком - почти никакого. Да, маркетинг - это сильный механизм, но (Я ЭТО ГОВОРИЛ, ТЫ ПРОСТО НЕ ХОЧЕШЬ СЛЫШАТЬ) - Микрософт вложил в маркетинг Бейсика вряд ли меньше денег, чем Сан в маркетинг Явы. И - однако - ява выплыла, а бейсик - нет.
Это язык красивый, но непрактичный. Я эту примитивную фазу сказал уже раз сто. Им можно поделиться, некоторое количество людей в мире с него пропрётся - а большинство на это способных уже и пропёрлись. И - ВСЁ.
Да - наверняка где-то он вполне применим практически. Просто не везде.
Да - у IBM есть для него инструментарий. Но ты же никогда не согласишься с мыслью, что они сделали его по ошибке и теперь просто волокут свой крест. :) Я этого не утверждаю, но и так бывает.
Я совсем забыл про статическую типизацию - нельзя без неё жить на практике, НЕЛЬЗЯ. Кстати, я ровно в данный момент рздумываю, как на VM Smalltalk-стиля аккуратрно на уровне компайлера привинтить статик тайпчек. Есть идеи? Чтоб и динамику не убить, и вообще.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(если серьезно)
From:(no subject)
From:(no subject)
From:(no subject)
From:И еще
Date: 2004-12-21 04:48 pm (UTC)Дмитрий, я прощу прощения, я не говорю, что "дедушка не умеет", но приведенная Вами ссылка - это Google's "I'm feeling lucky" по запросу "Smalltalk vs Java". Или она просто наиболее четко выражает Ваше отношение к языку?
Между прочим, I'm feeling lucky на "обратном" запросе дает куда более развернутый и интересный вариант..
Re: И еще
Date: 2004-12-21 05:00 pm (UTC)Я нигде не говорю, что он плох. Я не спорю, что на нём - можно. Я даже допускаю, что на нём - приятно и легко. Я сам, как сказано выше, спроектировал язык, схожий более со Смоллтоком, чем с Явой.
Я просто показываю, почему именно Смолток не стал тем, чем стала Ява.
Я просто в очередной раз отмечаю, что стать языком номер 1 только за счёт качества языка нельзя. Что из его отличий от Явы два несущественны, а одно - в минус.
Да, это ещё один хороший язык. Нет, он ничего по сравнению с Явой не даёт - во всяком случае, двое высказавшихся тут апологетов этого не смогли объяснить.
Нет, абстрактное "более красивый" (с которым я вполне соглашаюсь) не помогает.
Вот и всё.
Re: И еще
Date: 2004-12-21 06:59 pm (UTC)Раз уж мир пришел к байткоду - надо этим воспользоваться :)
В каком-то смысле Microsoft можно сказать спасибо за новый общий знаменатель в виде .NET, не так ли?
О S#, кстати, говорят только хорошее. Увы, пока сам не смотрел.
no subject
Date: 2004-12-21 07:38 pm (UTC)Вашу запись я упоминаю в одном абзаце из шести. Пожалуйста, не надо воспринимать всю запись как один длинный наезд на себя, это даже черезчур самонадеянно как-то ;) Такого намерения у меня не было, в любом случае.
"Если бы он втыкал в смолток, он бы придумал задачи для него".
Не совсем так. Разные значения слова "задача". Задача в общем смысле поставлена одна, её надо решить. Специально придумывать её не надо. Однако если уж мы занимаемся ООП и строим иерархию классов для решения данной задачи, то у приверженца динамического ООП есть неизмеримо больше возможностей сделать её гораздо более гибкой и легко изменяемой как во время проектирования и написания, так и в runtime. Такие вещи, как, например, перестройка иерархии классов во время работы программы даже не придут в голову приверженцу статического ООП, он не понимает, как такое возможно (а если понимает, потому что знает динамические языки, то ему всё равно не придёт в голову это использовать во время проектирования системы на статическом языке). Он обойдёт это и сделает по-другому - с большим количеством вообще говоря ненужных абстрактных базовых классов, с внедрением разных методов на такие уровни абстракции, где они совсем не нужны, лишь бы все классы, которым они вдруг случайно могут когда-то понадобиться, их унаследовали, итд. итп. В том числе и рефлексию использует, где надо, и она действительно решит ему все задачи, которые возникнут перед ним в процессе проектирования и написания этой системы. В том узеньком пространстве для манипуляций классами и объектами, которое доступно ему, рефлексия действительно решает все "практические" задачи.
Сюда же относится эффективное использование DoesNotUnderstand и прочие динамические прелести.
Короче: на бочку задачу, для которой Смолток невероятно хорош. (Моя многолетняя практика общения на эти темы показывает, что задача или не появляется, или оказывается весьма академической.)
Сложные финансовые системы - одна из ниш, в которой Смоллток на практике оказывается очень эффективным и часто используется. Насчёт "невероятно хорош" я не знаю, я такого и не утверждал.
[окончание следует]
no subject
Date: 2004-12-21 08:12 pm (UTC)Например, Яндекс-Маркет написан на 4-х языках, из них два - статически типизованные Си++ и Ява, один - специальный функциональный однотиповый и один - специальный императивный с жёсткой системой типов, заточенной под задачу.
При этом сам Яндекс-Маркет использует несколько иерархий динамической типизации сущностей, с которыми работает. Что ж тут ТАКОГО?
Про сложные финансовые системы - пойдём смотреть. Какое свойство задачи делает Смоллток столь применимым?
Какое вообще его свойство не заменяется в языке Си (обычном, не ++) функцией malloc, структурой object и пойнтером?
no subject
Date: 2004-12-22 06:44 am (UTC)Дим, мы сейчас к машине Тьюринга скатимся с таким подходом.
no subject
Date: 2004-12-22 07:30 am (UTC)Тебе отчего-то кажется, что есть на свете нечто чистое и светлое, оно хорошее, но я его не люблю, а люблю вонючую и грязную Яву. А ты несёшь людям чистое и светлое.
Я им это всё носил, знаешь? Во-первых, они не прониклись, а во-вторых я как-то внезапно понял, что если двигаться до упора по пути концептуализации, хуйня выходит. Доводя ортогональность базиса до блеска приезжаешь ИМЕННО что в машину Тьюринга, и всё.
Ну или в Форт. Вот Патрышев выступил охуительно - ну это я ему просто на мозоль наступил, он Форт очень любит - типа, вообще язык надо строить каждый раз.
И отчасти он прав, это примерно то, что и я говорю - по сути, если задача велика, под неё надо строить язык. А если невелика - то пофиг, на чём её программировать.
Но как раз это окончательно нивелирует языки программирования, так как языки строить можно на чём угодно примерно с одинаковым успехом.
И всё это, увы, не имеет отношения к реальной жизни, так как в ней код делают индусы, да - см. пост про тупых и умных начальников, он очень правильный.
no subject
Date: 2004-12-21 07:56 pm (UTC)Бабка - ты определись. "dz не сечёт" или "я тут такой весь диалектический в душе, мудро размышляю, где ж истина.".
"
Кстати, все уже высказанные и много невысказанных до сих пор конкретных аргументов на тему сравнения этих языков пережёвано было уже давно на JavaVsSmalltalk, стоит сходить почитать.
3. Right tool for the job, как тут уже сказано.
Да.
4. Товарищ. Коли ты уже добрался о мыслей о парадигмах и их применимости к конкретным задачам, различай и программистов.
Я различаю программистов. Просто я не об этом думал и не об этом написал. Квалификация программистов - тема повздыхать в другой раз, мне сейчас неинтересно. Мне интересно подумать, в совершенном отрыве от реальности, о том, можно ли сравнивать эффективность языков, и если да, есть ли языки, заметно более эффективные, чем другие, и если да, то почему. То, что в реальном мире существует ещё десять более важных факторов, как-то индусы, боссы, buzzword'ы, наличие рабсилы - всё это мне известно, но я ведь и не предлагаю всем сейчас начинать писать на Смоллтоке или Форте. Вы почему-то решили, что предлагаю - может, для Вас само упоминание Смоллтока уже машет красной тряпкой?
Все аргументы типа "я это всё в 67-м году отбил левой ногой на перфоленте, мне смешно глядеть на вас, наивные людишки, с высоты своего умученного нападками бестолковых неофитов опыта" я опускаю, с Вашего позволения ;)
Я рад, что всё больше и больше людей дошло до понимания и оценки красоты концепций. Теперь, раз уж вы это постигли, надо сделать усилие над собой и понять, что оптимизация идёт по многим факторам, и красота парадигмы в некоторые члены входит с минусом.
Несомненно. И я лично склонен скорее не доверять концептуальной простоте и красоте, зная, что мир сложен и безобразен. Поэтому тот факт, что наиболее убедительные (из тех, что я встречал) утверждения об эффективности их языков достигают моих глаз и ушей как раз со стороны поклонников Форта и Смоллтока, мне лично кажется подозрительным. Но и игнорировать этот факт я тоже не собираюсь.
(Я не очень сегодня злой? Извини, если что. Не имел в виду обидеть.)
Разговором по существу, пусть сколь угодно резким, меня тяжело обидеть. Всё нормально.
no subject
Date: 2004-12-21 08:27 pm (UTC)(Левая нога на перфоленте - да, звучит.:)
Языки более эффективные есть. Ява вытесняет ++ именно существенно более низкой ценой разработки. Правда, сравнению смоллтока и джавы это не помогает, так как С++ проигрывает не столько как язык, сколько как рантайм-среда. Тот же язык поверх той же JVM (см. C#) вполне приемлем.
С другой стороны - реально эффективные инструменты реально пробивают себе дорогу. Можно сколько угодно блевать над концепцией (оксиморон, да) перла, но он вписался в задачу и весьма популярен.
no subject
Date: 2004-12-22 06:50 am (UTC)я не знаю, почему перл так популярен, мне пришлось тут попарится с большой аппликухой на нем, так блевать - это не то слово. слава богу, апологеты перла из компании ушли, и мы теперь пишем на (bingo!) Питоне.
(no subject)
From:(no subject)
From:(no subject)
From: