avva: (Default)
[personal profile] avva
«Смолток просто-напросто непрактичен» — пишет [livejournal.com profile] dz, наряду с другой ерундой, в своём сравнении Джавы и Смоллтока. Видно, что он просто не очень хорошо понимает, какая это качественная разница — действительное динамическое ООП — если думает, что «есть reflection API, который все ПРАКТИЧЕСКИЕ задачи - решает». Конечно, все практические задачи, которые могут возникнуть в системе, спроецированной статически, он решает, а другие задачи человеку, не понимающему Смоллток и динамическое ООП, и в голову не придут.

Мне это, впрочем, напомнило тему «супер-языков», о которой приходилось иногда размышлять. Под этим я понимаю вот что: иногда бывает так, что поклонники какого-то языка программирования утверждают, что использование их языка позволяет повысить эффективность написания тех или иных сложных программ в несколько раз (а то и больше). Вообще-то подобные утверждения то и дело высказывают поклонники чуть ли не любого языка программирования, но обычно их не стоит воспринимать всерьёз. Но это не значит, что такое в принципе невозможно, с другой стороны.

Как-то это сумбурно звучит, поэтому попробую зайти с другой стороны. Ясно, что есть области применения, в которых некоторые языки подходят куда лучше других. Ясно, что программисты разнятся по своим способностям, качеству и скорости работы, эффективности результата, и прямое сравнение тут невозможно. Если мы учтём все эти «ясно» и попытаемся всё же вынести из за скобки, останется ли внутри что-то объективное, зависящее от языка? И если останется, насколько оно влиятельно?

Во мне, когда я думаю об этом, борются два противоположных хода мысли. С одной стороны, мне хочется сказать, что язык и его особенности часто переоценивают. В конечном итоге всё решает сложность поставленной задачи, переходящая в сложность работы программиста, решающего эту задачу. Язык программирования как бы стоит посредине этого перехода, «амортизируя» часть сложности задачи и принимая её на себя; но использование разных языков хоть и меняет качество этой амортизации, но не слишком значительно, не во много раз. Использование очень разных языков программирования, основанных на разных подходах, может давать преимущество в тех или иных удобных для решения этими подходами задачах; но в случае, если таких удобств или специальных требований нет, их эффективность примерно одинакова, есть только иллюзия особенной эффективности того или иного языка, появляющаяся у программиста, который очень хорошо его знает, привык, притёрся к нему, и действительно для него лично он быстрее и эффективнее всего остального.

С другой стороны, мне хочется сказать, что всё наоборот. Метафора амортизации несостоятельна, т.к. не отражает тот факт, что, глядя на одну и ту же задачу с точки зрения очень разных языков и подходов к программированию, мы видим совершенно разные вещи, и исходная сложность поставленной задачи не является чем-то неизменным, она навязана нам тем взглядом, к которому мы привыкли; при смене языка/взгляда/подхода может оказаться, что всё стало во много раз легче, и это не какой-то особенный случай, вызванный специальными обстоятельствами исходной задачи, а самое обыденное дело. И может оказаться, что какие-то языки с этой точки зрения особенно эффективны, т.е. очень хорошо знающий такой язык программист сможет в среднем работать значительно эффективнее, чем очень хорошо знающий другой язык программист тех же способностей, при работе над той же не-специальной задачей общего направления (естественно, такая точка зрения должна опираться на предположение о возможности определить «задачу общего направления» и «примерно тех же способностей» так, чтобы не впасть в замкнутый круг, и, действительно, неочевидно, что можно это сделать).

В общем, я лично сохраняю скептицизм по этому поводу, и первая из вышеописанных точек зрения в целом побеждает во мне вторую. Ко второй, тем не менее (и вообще к теме разных подходов к программированию, и тому, насколько такие подходы влияют на результаты и эффективность работы программиста) сохраняется живой интерес. Так вот, наиболее убедительные и подтверждённые фактами претензии на особую эффективность любимого языка, которые мне приходилось встречать, проистекали из среды поклонников двух языков: Смоллток и Форт. Не знаю, почему именно эти два, возможно, это больше случайность моего личного знакомства с языками, программистами, и различными сетевыми обсуждениями этой темы, чем какая-то объективная реальность; и, как я написал выше, я вовсе не уверен в том, что такие претензии основаны на чём-то реальном. Но любопытно отметить, что общего в этих двух языках (вообще-то очень разных): именно концептуальная чистота языка («всё — объект» или «всё — макро») и ещё я бы отметил интеграцию языка внутри интерактивной системы, полностью написанной на этом же языке, что-то вроде мини-ОС для языка.

Date: 2004-12-21 04:07 pm (UTC)
From: [identity profile] dz.livejournal.com
0. Это ты правильно написал так, чтобы я не увидел. Но мне добрые люди сообщили. :)

1. Ну, начинается всё со стандартного наезда - обычно я его слышу из лагеря функциональщиков: dz типа не сечёт парадигмы, а если б сёк - пёрся бы, как всё круто.

Это всё офигенно, конечно, только я худо-бедно знаю, что такое смоллтоковская парадигма. Я вообще старый и с седыми яйцами, я языки программирования делаю на завтрак. Смолтокообразные в том числе. С абсолютной рефлексивностью в том числе.

"Если бы он втыкал в смолток, он бы придумал задачи для него".

Когда моя жизнь станет ТАК скучна, что мне придётся придумывать задачи - я повешусь. До сих пор задачи мне поставляет окружающий мир. И только это и есть задачи. А то, что ты придумал сам, называется УПРАЖНЕНИЕ или ЭТЮД. Языки Паскаль (оригинальный) и Смоллток (любой) для упражнений и этюдов очень хороши. Хоть и не для всех. (Типа наехал в ответ. Типа нефиг наезжать не по делу, это все умеют.)

Короче: на бочку задачу, для которой Смолток невероятно хорош. (Моя многолетняя практика общения на эти темы показывает, что задача или не появляется, или оказывается весьма академической.)

Конец пункта 1. Краткое содержание пункта 1: Люди, которые прутся от N, склонны считать, что только они по-настоящему понимают N. Они ошибаются.


2. В 1 сказано: есть такая тема - настоящие объектные языки. Завалишин не сечёт, как же они круты. А дальше сказано: правда, я сам не знаю, есть ли вообще между языками разница. Может и нет.

Бабка - ты определись. "dz не сечёт" или "я тут такой весь диалектический в душе, мудро размышляю, где ж истина.".

3. Right tool for the job, как тут уже сказано.

4. Товарищ. Коли ты уже добрался о мыслей о парадигмах и их применимости к конкретным задачам, различай и программистов.

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

Другим требуется полчаса на понимание, а потом пара дней и ЛЮБОЙ язык программирования, чтобы эту парадигму воплотить.

Ты меня извини, но так неудачно получилось, я тут ровно вчера как раз оживил интерпретатор байткода для языка, чем-то (не парадигмой ли?) напоминающего смолток. Я примерно раз в пару лет какой-нибудь язычок делаю, как показывает практика. Из них пара применяется примерно полмиллиона раз в день.

Я - очень неудачный слушатель для того, чтобы учить меня парадигмам. Я могу такую парадигму выкатить, от которой самые экстремалы почувствуют себя либерально. Толку-то.

Я, знаешь, когда мне говорят "ты не понимаешь" раньше смеялся, а теперь уже просто оторопь берёт: вы ПРАВДА считаете, что ЭТО (парадигма смолтока) - какое-то откровение господне?

3.14здец. Яду мне.

ДЕТИ! Если дедушка не назвал вашу игрушку лучшей, то это не потому, что он не умеет играть. Он умеет. Отличайте же академическое от практического. Если я говорю "по России надо ездить на Жигулях", то это не потому, что я не видел машин лучше. Это ИМЕННО потому, что я видел.

Нет, б..дь, яду мне. Ну вот он лежит - вот, интерфейсы, методы, код, класс, голимый интеджер на... - ВСЁ ОБЪЕКТ. И фигли? Что ж, блядь (тут уже без точек надо), за магия такая в этом? Ну - Я-ТО ХОТЬ ЗНАЮ, ЗАЧЕМ МНЕ ЭТО. Это исследовательский проект. Есть свои причины. НО ВАМ-ТО ЗАЧЕМ!?

И - КАК ТОЛЬКО Я ПОЙМУ, КАК ИМЕННО ЭТО СДЕЛАТЬ - Я ЛИШУ ЕГО ЭТОЙ КРАСОТЫ РАДИ ПРАКТИЧНОСТИ!

Форт ещё. А что ж не Рефал? А где Плэннер? А на unix sed писать не пробовали? Это невероятно красивый язык - всё - строка. Бляд. Сил моих нет.

Страдания юных вертеров - отчего противные людшки на красивые автобусы только смотрят, а ездят на мерзких, но быстрых. Потому что красота - это чтоб смотреть и восторгаться, товарищ. И - вы удивитесь, сантехник, который чинит вам унитаз, тоже может слушать Ренуара, читать Баха и глядеть на полотна Пушкина взглядом истинного эстета.

Я рад, что всё больше и больше людей дошло до понимания и оценки красоты концепций. Теперь, раз уж вы это постигли, надо сделать усилие над собой и понять, что оптимизация идёт по многим факторам, и красота парадигмы в некоторые члены входит с минусом.

(Я не очень сегодня злой? Извини, если что. Не имел в виду обидеть.)

Date: 2004-12-21 04:14 pm (UTC)
From: [identity profile] aristovich.livejournal.com
да, дядя дима! эк тебя вставило...

Date: 2004-12-21 05:09 pm (UTC)
From: [identity profile] dz.livejournal.com
Ага, сам удивляюсь.

Date: 2004-12-21 04:21 pm (UTC)
nine_k: A stream of colors expanding from brain (Default)
From: [personal profile] nine_k
Спасибо за 3 минуты здорового смеха, местами дл слёз ((;

на бочку задачу, для которой Смолток невероятно хорош

Мммм... продвинутй GUI? Вот, скажем, IDE какая-нибудь. Вроде на смоллтоке отлично выходит?

Форт ещё

На форте многие embedded-программеры пишут оч. эффективно (знаком с людьми). Он и придумывался для таких вещей (телескопом управлять, iirc). Не хуже C во многих случаях. Да чего я объясняю :)

Date: 2004-12-21 05:21 pm (UTC)
From: [identity profile] dz.livejournal.com
Слушай, ну побойся бога. Форт мог вставлять 20 лет назад, но сегодня интерпретёр класса форта пишется (с STL-ем-то!) за три дня с отладкой и юнит-тестами.

А продвинутый GUI вообще никто не пишет - его собирают, и язык для него - не си и не ява, язык для него - форм-конструктор. С генератором кода или без - не важно.

Провязка GUI с кодом - вообще отдельный и внеязыковой (!) разговор. Я лично делал бы сегодня, наверное, как-то так: сцеплял бы элементы GUI с точками в XML-дереве и давал бы программе его DOM-представление, которое с другой стороны редактирует оный GUI. Ну и события в программу по факту модификации того или иного поддерева.

Я не вижу никаких особых преимуществ реализации GUI на smalltalk/c++/java - разница будет в пределах 10%. Ты видишь? Изложи. Где тут абсолютная динамичность смолтока поможет? Да - реализация DOM-дерева в C++ - это почти реализация смолтока в нём, но это недорого стоит. Учитывая наличие библиотек - ничего.

Date: 2004-12-22 06:32 am (UTC)
From: [identity profile] rivig.livejournal.com
динамичность, конечно, помогает, но не впрямую. не буду говорить про smalltalk, опыта почти нет, но в Питоне она сильно облегчает переделку программы, да и написание тоже. мощные встроенные полиморфные (по определению - динамические) конструкции - список, словарь, тупл (как по-русски, энка?) снимают много головной боли по придумыванию специализированных структур данных и алгоритмов.

Ява - очень многословный язык. поскольку человеческое восприятие ограничено, то чем меньше не необходимых деталей украшают ваш текст - тем лучше. отсутствие необходимости продумывать до мельчайших деталей тип ваших переменных, описывать их и менять это описание и использование консистентным образом по всему тексту - большое облегчение.

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

заслуга Явы в том, что она легитимизировала в массовом сознании несколько правильных вещей - сборку мусора, защищенную модель исполнения, виртуальную машину. в основном, все это относится к Яве, как среде исполнения, а не к языку или библиотекам. картину портит язык Ява, который многословен и невыразителен. есть идитотизмы и в виртуальной машине: стек - на кой хер? 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."

это я к тому, что многие называют Питон "Лисп без скобок". да и вообще, могут ли ошибаться такие люди, как Питер Норвиг и Брюс Экел ;-)

Date: 2004-12-22 07:07 am (UTC)
From: [identity profile] dz.livejournal.com
На дворе 2004-й. Почти 2005-й. Словарь и список давно есть везде. Как и алгоритмы.

Объектное программирование - это когда обращение к переменной (полю класса) локализовано в одном исходнике, а лучше - в группе из 2-4 методов. Поэтому "согласованно менять по всему коду" - нонсенс.

Стрельба по памяти - это к тонким ценителям С++.

Язык невыразителен: пример кода в студию.

"Лучше без учёта" - это клёво. Без учёта некоторых факторов я - безусловно лучший гомо сапиенс на планете. (Тсс - с учётом - тоже, но это секрет.)

Я не знаком с десятыми законами, а мысль, в нём изложенная, банальна и очевидна. Я её в этой дискуссии раз пять написал, и один раз отдельно. Гринспун кроме bug ridden и slow (на его совести и вопрос умения программировать) забыл сказать, что оно будет ещё и заточено под конкретную задачу. Кроме того, как я уже раз 30 сказал, во времена всех этих невероятных восхищений лиспом не было STL.

Ошибаться могут все люди. В частности - те, кто пытается промышленно программировать на экспериментальном языке. Авторы которого не ошибальсь - они просто оттягивались в своё удовольствие и решали свои собственные задачи.

А те самые идиоты, которые не порезались и задница прикрыта - и есть люди, выпускающие 99% софта в мире. И ровно для них вся каша. И ровно потому Ява успешна, что её создатели понимают, где промышленное программирование, а где - маргиналы.

(no subject)

From: [identity profile] rivig.livejournal.com - Date: 2004-12-22 11:53 pm (UTC) - Expand

(no subject)

From: [identity profile] dz.livejournal.com - Date: 2004-12-23 08:04 am (UTC) - Expand

(no subject)

From: [identity profile] rivig.livejournal.com - Date: 2004-12-22 11:53 pm (UTC) - Expand

(no subject)

From: [identity profile] dz.livejournal.com - Date: 2004-12-23 07:54 am (UTC) - Expand

(no subject)

From: [identity profile] rivig.livejournal.com - Date: 2004-12-23 10:50 am (UTC) - Expand

(no subject)

From: [identity profile] dz.livejournal.com - Date: 2004-12-23 12:29 pm (UTC) - Expand

Date: 2004-12-21 04:32 pm (UTC)
From: [identity profile] sobaker.livejournal.com
Прости, приму бОльшую часть на свой счет, как заваривший бучу.

"Короче: на бочку задачу, для которой Смолток невероятно хорош"

(устало)
да для любой, в общем-то - в разумных, конечно, пределах.. Это язык общего применения От навигационных систем до текстовых редакторов (впрочем, и про embdedded я писал у тебя в комментариях).

ну скажем:
http://www.cincom.com/forms/profiles.html
http://www.whysmalltalk.com/production/

И не нужно про юного Вертера. Все, с чем я спорю - не нужно считать Смоллток академическим языком. Красота концепций - в каком-то смысле, побочный эффект. Или мысль о том, что практический язык может быть еще и красив концептуально - невозможна? Зачем к ней привязываться в духе "шашечки или ехать"? И шашечки, И ехать!

Да, он не в 50 раз лучше, чем Java и С++. Так что, я это где-то утверждал?

Date: 2004-12-21 04:48 pm (UTC)
From: [identity profile] another-felix.livejournal.com
А во сколько лучше? ;)

Date: 2004-12-21 04:51 pm (UTC)
From: [identity profile] sobaker.livejournal.com
Не подначивайте :)

Лучше попробуйте.

Date: 2004-12-22 10:27 am (UTC)
From: [identity profile] another-felix.livejournal.com
Честно скажу: пробовал. Да, красивое ООП. Но как-то пока не к чему прикрутить. Задачи поставляются такие, что вполне по силе Java.

Date: 2004-12-21 04:55 pm (UTC)
From: [identity profile] dz.livejournal.com
Это было не тебе, вне зависимости от того, кто заварил.

Для любой в общем задачи в разумных пределах хорош любой в общем язык.

Фраза "мы смогли ЭТО сделать на Смолтоке" не описывает свойства языка.

Прости, времени копаться в саксесс сториз софтверных компаний нет. :( Более того - у меня нет сомнений, что Я могу найти задачу, которая на смолтоке решается лучше, чем на си++.

Я бы хотел, чтобы именно ТЫ это сделал. Ибо это озадачен вопросом "почему никто не использует смолток". :)

Date: 2004-12-21 05:01 pm (UTC)
nine_k: A stream of colors expanding from brain (Default)
From: [personal profile] nine_k
>ля любой в общем задачи в разумных пределах хорош любой в общем язык.

В формулировке "достаточно хорош", aka "терпим" :)
Пишут же на чистом C OO-код для GUI (gtk), но это не от хорошей жизни %) Хотя, опять же, работает.

Date: 2004-12-21 06:10 pm (UTC)
From: [identity profile] sobaker.livejournal.com
Дело в том, что на Смоллтоке задача, безусловно решаемая на C++/Java, решается эффективнее - с точки зрения работы программиста. А уж под это попадает и скорость разработки, и выразительность/элегантность конструкций (а значит - лучшая читаемость кода и более простая поддержка), и удовольствие разработчика (что означает более высокую мотивацию).

Я не буду искать 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.

Date: 2004-12-21 07:21 pm (UTC)
From: [identity profile] dz.livejournal.com
Да, в меня уже не выйдет. Меня поздно учить тому, что я знал до того, как ты закончил школу. :( И тому, что я сам считаю правильной моделью.

Нет, блин, я офигеваю.

МУЖЧИНА. Это у вас ДЕТСКИЙ МАКСИМАЛИЗМ. От него надо избавляться.

Смоллток у меня стоял на машине ещё когда она была IBM PC AT с двумя мегабайтами.

Некоторые вещи, которые ты вчера узнал и которые кажутся тебе откровением и которыми хочется поделиться - тривиально другими людьми пройдены. Просто пройдены и всё. Я тоже бегал от него по потолку, да. Ну я уже отбегался.

Это неправда, что ему просто не повезло. То есть - да, могло больше повезти, могло. Но говорить "в сане сидят идиоты, вложили бы они свои бабки в Смолток - было бы круто" - это чистое детство в жопе. Если бы у тебя были таке деньги, ты бы знал, почему их надо вложить в яву, а не в смолток.

Коротко - потому что с Явой есть хоть какой-то шанс вернуть инвестиции, а со Смолтоком - почти никакого. Да, маркетинг - это сильный механизм, но (Я ЭТО ГОВОРИЛ, ТЫ ПРОСТО НЕ ХОЧЕШЬ СЛЫШАТЬ) - Микрософт вложил в маркетинг Бейсика вряд ли меньше денег, чем Сан в маркетинг Явы. И - однако - ява выплыла, а бейсик - нет.

Это язык красивый, но непрактичный. Я эту примитивную фазу сказал уже раз сто. Им можно поделиться, некоторое количество людей в мире с него пропрётся - а большинство на это способных уже и пропёрлись. И - ВСЁ.

Да - наверняка где-то он вполне применим практически. Просто не везде.

Да - у IBM есть для него инструментарий. Но ты же никогда не согласишься с мыслью, что они сделали его по ошибке и теперь просто волокут свой крест. :) Я этого не утверждаю, но и так бывает.

Я совсем забыл про статическую типизацию - нельзя без неё жить на практике, НЕЛЬЗЯ. Кстати, я ровно в данный момент рздумываю, как на VM Smalltalk-стиля аккуратрно на уровне компайлера привинтить статик тайпчек. Есть идеи? Чтоб и динамику не убить, и вообще.

(no subject)

From: [identity profile] sobaker.livejournal.com - Date: 2004-12-21 07:31 pm (UTC) - Expand

(no subject)

From: [identity profile] cmm.livejournal.com - Date: 2004-12-21 08:20 pm (UTC) - Expand

(no subject)

From: [identity profile] cmm.livejournal.com - Date: 2004-12-21 08:22 pm (UTC) - Expand

(no subject)

From: [identity profile] sobaker.livejournal.com - Date: 2004-12-22 06:23 am (UTC) - Expand

(no subject)

From: [identity profile] dz.livejournal.com - Date: 2004-12-21 08:47 pm (UTC) - Expand

(no subject)

From: [personal profile] nine_k - Date: 2004-12-22 01:01 am (UTC) - Expand

(no subject)

From: [identity profile] dz.livejournal.com - Date: 2004-12-22 08:03 am (UTC) - Expand

(no subject)

From: [personal profile] nine_k - Date: 2004-12-22 11:03 am (UTC) - Expand

(no subject)

From: [identity profile] rivig.livejournal.com - Date: 2004-12-23 11:25 am (UTC) - Expand

(no subject)

From: [personal profile] stas - Date: 2004-12-22 11:56 pm (UTC) - Expand

(no subject)

From: [personal profile] nine_k - Date: 2004-12-23 09:35 am (UTC) - Expand

(no subject)

From: [identity profile] sobaker.livejournal.com - Date: 2004-12-22 06:23 am (UTC) - Expand

(no subject)

From: [identity profile] dz.livejournal.com - Date: 2004-12-22 07:48 am (UTC) - Expand

(no subject)

From: [personal profile] nine_k - Date: 2004-12-22 02:36 pm (UTC) - Expand

(no subject)

From: [identity profile] sobaker.livejournal.com - Date: 2004-12-22 04:21 pm (UTC) - Expand

(если серьезно)

From: [identity profile] sobaker.livejournal.com - Date: 2004-12-21 07:37 pm (UTC) - Expand

(no subject)

From: [identity profile] sobaker.livejournal.com - Date: 2004-12-22 06:20 am (UTC) - Expand

(no subject)

From: [identity profile] rivig.livejournal.com - Date: 2004-12-23 11:17 am (UTC) - Expand

(no subject)

From: [identity profile] dz.livejournal.com - Date: 2004-12-23 12:21 pm (UTC) - Expand

И еще

Date: 2004-12-21 04:48 pm (UTC)
From: [identity profile] sobaker.livejournal.com
"ДЕТИ! Если дедушка не назвал вашу игрушку лучшей, то это не потому, что он не умеет играть. Он умеет."

Дмитрий, я прощу прощения, я не говорю, что "дедушка не умеет", но приведенная Вами ссылка - это Google's "I'm feeling lucky" по запросу "Smalltalk vs Java". Или она просто наиболее четко выражает Ваше отношение к языку?

Между прочим, I'm feeling lucky на "обратном" запросе дает куда более развернутый и интересный вариант..

Re: И еще

Date: 2004-12-21 05:00 pm (UTC)
From: [identity profile] dz.livejournal.com
Я привёл, вообще говоря, две ссылки. Противоположной ориентации - одна в защииту и одна "в нападение". Они обе показательны.

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

Я просто показываю, почему именно Смолток не стал тем, чем стала Ява.

Я просто в очередной раз отмечаю, что стать языком номер 1 только за счёт качества языка нельзя. Что из его отличий от Явы два несущественны, а одно - в минус.

Да, это ещё один хороший язык. Нет, он ничего по сравнению с Явой не даёт - во всяком случае, двое высказавшихся тут апологетов этого не смогли объяснить.

Нет, абстрактное "более красивый" (с которым я вполне соглашаюсь) не помогает.

Вот и всё.

Re: И еще

Date: 2004-12-21 06:59 pm (UTC)
From: [identity profile] sobaker.livejournal.com
Смоллток, кстати, старается вскочить на подножку .NET - S#.

Раз уж мир пришел к байткоду - надо этим воспользоваться :)

В каком-то смысле Microsoft можно сказать спасибо за новый общий знаменатель в виде .NET, не так ли?

О S#, кстати, говорят только хорошее. Увы, пока сам не смотрел.

Date: 2004-12-21 07:38 pm (UTC)
From: [identity profile] avva.livejournal.com
Это всё очень здорово, но немного не по адресу. Вы почему-то решили, наверное, что я такой матёрый фанат Смоллтока, который упорствует в своём сектантстве, и нужно открыть ему глаза на реальный мир. На самом же деле я вообще ничего не писал о том, какой язык номер 1 или должен быть номер 1 или лучше использовать на практике, и с многим из сказанного Вами по этому поводу вполне согласен. Речь вообще не об этом. Я использовал попавшееся мне на глаза сравнение Джавы со Смоллтоком, сравнение довольно нелепое, в качестве исходного толчка для каких-то своих абстрактных размышлений об эффективности языков, каковые размышления мне вообще-то в данном конктексте дороже конкретного спора "Smalltalk vs Java". В этих своих размышлениях я сознательно рассматриваю идеальную ситуацию, в частности умелых и талантливых программистов, которые очень хорошо знают данные языки. То, что в реальном мире такие тонут иголками в стогах программистов вообще, и что качество и наличие программистов является важнейшим, обычно решающим фактором при выборе языка - для меня не секрет. Мне не надо это объяснять.

Вашу запись я упоминаю в одном абзаце из шести. Пожалуйста, не надо воспринимать всю запись как один длинный наезд на себя, это даже черезчур самонадеянно как-то ;) Такого намерения у меня не было, в любом случае.

"Если бы он втыкал в смолток, он бы придумал задачи для него".

Не совсем так. Разные значения слова "задача". Задача в общем смысле поставлена одна, её надо решить. Специально придумывать её не надо. Однако если уж мы занимаемся ООП и строим иерархию классов для решения данной задачи, то у приверженца динамического ООП есть неизмеримо больше возможностей сделать её гораздо более гибкой и легко изменяемой как во время проектирования и написания, так и в runtime. Такие вещи, как, например, перестройка иерархии классов во время работы программы даже не придут в голову приверженцу статического ООП, он не понимает, как такое возможно (а если понимает, потому что знает динамические языки, то ему всё равно не придёт в голову это использовать во время проектирования системы на статическом языке). Он обойдёт это и сделает по-другому - с большим количеством вообще говоря ненужных абстрактных базовых классов, с внедрением разных методов на такие уровни абстракции, где они совсем не нужны, лишь бы все классы, которым они вдруг случайно могут когда-то понадобиться, их унаследовали, итд. итп. В том числе и рефлексию использует, где надо, и она действительно решит ему все задачи, которые возникнут перед ним в процессе проектирования и написания этой системы. В том узеньком пространстве для манипуляций классами и объектами, которое доступно ему, рефлексия действительно решает все "практические" задачи.

Сюда же относится эффективное использование DoesNotUnderstand и прочие динамические прелести.

Короче: на бочку задачу, для которой Смолток невероятно хорош. (Моя многолетняя практика общения на эти темы показывает, что задача или не появляется, или оказывается весьма академической.)

Сложные финансовые системы - одна из ниш, в которой Смоллток на практике оказывается очень эффективным и часто используется. Насчёт "невероятно хорош" я не знаю, я такого и не утверждал.

[окончание следует]

Date: 2004-12-21 08:12 pm (UTC)
From: [identity profile] dz.livejournal.com
Перестройка иерархии классов ПРОГРАММЫ действительно не приходит в голову нормальному программисту, который привык к статической типизации. Он просто в такой ситуации не выпендривается и ЛЕГКО и НЕЗАМЕТНО переходит к динамической типизации, которая, слава богу, делается очень и очень легко на любом языке. И в рамках оной динамической типизации иерархия классов ОБЪЕКТОВ, которыми программа манипулирует, перестраивается. Да - язык про это ничего не знает. Но он про это и в смоллтоке ничего не знает, строго говоря.

Например, Яндекс-Маркет написан на 4-х языках, из них два - статически типизованные Си++ и Ява, один - специальный функциональный однотиповый и один - специальный императивный с жёсткой системой типов, заточенной под задачу.

При этом сам Яндекс-Маркет использует несколько иерархий динамической типизации сущностей, с которыми работает. Что ж тут ТАКОГО?

Про сложные финансовые системы - пойдём смотреть. Какое свойство задачи делает Смоллток столь применимым?

Какое вообще его свойство не заменяется в языке Си (обычном, не ++) функцией malloc, структурой object и пойнтером?

Date: 2004-12-22 06:44 am (UTC)
From: [identity profile] sobaker.livejournal.com
"Какое вообще его свойство не заменяется в языке Си (обычном, не ++) функцией malloc, структурой object и пойнтером?"

Дим, мы сейчас к машине Тьюринга скатимся с таким подходом.

Date: 2004-12-22 07:30 am (UTC)
From: [identity profile] dz.livejournal.com
А ты не замечал, что большинство т.н. концептуальных или чистых языков от неё мало отличаются? Когда ты говоришь "концептуальный, чистый язык" ты говоришь - язык с компактным и ортогональным базисом, не так ли? Наиболее компактный и ортогональный базис - у машины тьюринга.

Тебе отчего-то кажется, что есть на свете нечто чистое и светлое, оно хорошее, но я его не люблю, а люблю вонючую и грязную Яву. А ты несёшь людям чистое и светлое.

Я им это всё носил, знаешь? Во-первых, они не прониклись, а во-вторых я как-то внезапно понял, что если двигаться до упора по пути концептуализации, хуйня выходит. Доводя ортогональность базиса до блеска приезжаешь ИМЕННО что в машину Тьюринга, и всё.

Ну или в Форт. Вот Патрышев выступил охуительно - ну это я ему просто на мозоль наступил, он Форт очень любит - типа, вообще язык надо строить каждый раз.

И отчасти он прав, это примерно то, что и я говорю - по сути, если задача велика, под неё надо строить язык. А если невелика - то пофиг, на чём её программировать.

Но как раз это окончательно нивелирует языки программирования, так как языки строить можно на чём угодно примерно с одинаковым успехом.

И всё это, увы, не имеет отношения к реальной жизни, так как в ней код делают индусы, да - см. пост про тупых и умных начальников, он очень правильный.

Date: 2004-12-21 07:56 pm (UTC)
From: [identity profile] avva.livejournal.com
В 1 сказано: есть такая тема - настоящие объектные языки. Завалишин не сечёт, как же они круты. А дальше сказано: правда, я сам не знаю, есть ли вообще между языками разница. Может и нет.

Бабка - ты определись. "dz не сечёт" или "я тут такой весь диалектический в душе, мудро размышляю, где ж истина.".


"[livejournal.com profile] dz не сечёт" в конкретных аргументах на тему того, почему динамика Смоллтока нафиг не нужна и всё практически нужное уже есть в Джаве. [livejournal.com profile] dz говорит: всё это красивые финтифлюшки, а на практике ерунда. Он не сечёт: это «парадигма» (ненавижу это слово, правда), качественным образом меняющая способы конструирования, прототипизации, воплощения ООП-решения данной задачи. С другой стороны, "я тут весь такой диалектический в душе" в вопросе о том, действительно ли такой качественно другой способ писать писать программы, каким является Смоллток по сравнению с Джавой, может быть в несколько раз более эффективным с объективной точки зрения, насколько до неё вообще можно добраться. Я считаю, что скорее не может, чем может, и что этот но аргументы обратной стороны продолжают меня интриговать. В частности, мне кажется любопытным тот факт, что я встречал много программистов, знающих оба языка и утверждающих, что на Смоллтоке у них получается писать намного быстрее и эффективнее, и ни одного - знающего оба языка и считаюшего то же самое по поводу Джавы. Зная на своей шкуре, однако, притягательность концептуально красивых схем вне зависимости от их эффективности, я не доверяю безоговорочно этому свидетельству.

Кстати, все уже высказанные и много невысказанных до сих пор конкретных аргументов на тему сравнения этих языков пережёвано было уже давно на JavaVsSmalltalk, стоит сходить почитать.

3. Right tool for the job, как тут уже сказано.

Да.

4. Товарищ. Коли ты уже добрался о мыслей о парадигмах и их применимости к конкретным задачам, различай и программистов.

Я различаю программистов. Просто я не об этом думал и не об этом написал. Квалификация программистов - тема повздыхать в другой раз, мне сейчас неинтересно. Мне интересно подумать, в совершенном отрыве от реальности, о том, можно ли сравнивать эффективность языков, и если да, есть ли языки, заметно более эффективные, чем другие, и если да, то почему. То, что в реальном мире существует ещё десять более важных факторов, как-то индусы, боссы, buzzword'ы, наличие рабсилы - всё это мне известно, но я ведь и не предлагаю всем сейчас начинать писать на Смоллтоке или Форте. Вы почему-то решили, что предлагаю - может, для Вас само упоминание Смоллтока уже машет красной тряпкой?

Все аргументы типа "я это всё в 67-м году отбил левой ногой на перфоленте, мне смешно глядеть на вас, наивные людишки, с высоты своего умученного нападками бестолковых неофитов опыта" я опускаю, с Вашего позволения ;)

Я рад, что всё больше и больше людей дошло до понимания и оценки красоты концепций. Теперь, раз уж вы это постигли, надо сделать усилие над собой и понять, что оптимизация идёт по многим факторам, и красота парадигмы в некоторые члены входит с минусом.

Несомненно. И я лично склонен скорее не доверять концептуальной простоте и красоте, зная, что мир сложен и безобразен. Поэтому тот факт, что наиболее убедительные (из тех, что я встречал) утверждения об эффективности их языков достигают моих глаз и ушей как раз со стороны поклонников Форта и Смоллтока, мне лично кажется подозрительным. Но и игнорировать этот факт я тоже не собираюсь.

(Я не очень сегодня злой? Извини, если что. Не имел в виду обидеть.)

Разговором по существу, пусть сколь угодно резким, меня тяжело обидеть. Всё нормально.

Date: 2004-12-21 08:27 pm (UTC)
From: [identity profile] dz.livejournal.com
Про динамику я уже написал. Вся волшебная динамика типов делается в статически типизованных языках одним пойнтером my_type. И в динамически - тоже, собственно. Просто волшебные слова "язык с динамической типизацией" немного застят внутреннюю простоту этого механизма.

(Левая нога на перфоленте - да, звучит.:)

Языки более эффективные есть. Ява вытесняет ++ именно существенно более низкой ценой разработки. Правда, сравнению смоллтока и джавы это не помогает, так как С++ проигрывает не столько как язык, сколько как рантайм-среда. Тот же язык поверх той же JVM (см. C#) вполне приемлем.

С другой стороны - реально эффективные инструменты реально пробивают себе дорогу. Можно сколько угодно блевать над концепцией (оксиморон, да) перла, но он вписался в задачу и весьма популярен.

Date: 2004-12-22 06:50 am (UTC)
From: [identity profile] rivig.livejournal.com
есть более эффективные языки. для меня - это (как вы уже может быть поняли) Питон. программируя на Питоне, я не борюсь с ним, а просто мыслю терминах, наиболее близких к задаче, а не к языку программирования. ява - рядом не лежала. про реализацию динамических структур в статических языках - не надо. я знаю чувака, так он пишет на ассемблере, и много и хорошо, из идейных соображений. вы, может тоже о нем слышали - grc.com. так он - боец, да и вы, судя по отношению ко всем этим ненужным деталям - тоже боец. всего софтвера все равно не напишешь, и реализовывать структуры, которые уже достаточно красиво и хорошо реализованы другими - сизифов труд.

я не знаю, почему перл так популярен, мне пришлось тут попарится с большой аппликухой на нем, так блевать - это не то слово. слава богу, апологеты перла из компании ушли, и мы теперь пишем на (bingo!) Питоне.

(no subject)

From: [identity profile] dz.livejournal.com - Date: 2004-12-22 07:19 am (UTC) - Expand

(no subject)

From: [identity profile] rivig.livejournal.com - Date: 2004-12-22 10:32 am (UTC) - Expand

(no subject)

From: [identity profile] dz.livejournal.com - Date: 2004-12-22 10:57 am (UTC) - Expand

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 29th, 2025 02:48 am
Powered by Dreamwidth Studios