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

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

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

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

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

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

Date: 2004-12-21 02:38 pm (UTC)
nine_k: A stream of colors expanding from brain (Default)
From: [personal profile] nine_k
есть области применения, в которых некоторые языки подходят куда лучше других

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

в одной магической фразе: 'right tool for the job' :)

Конечно, чтобы выбрать right tool, надо иметь о разных инструментах представление, а лучше -- и практический опыт использования. Это не всегда легко достижимо: обычно от программиста требуют опыта, потому надо вкладываться в некоторый набор всерьёз, а остальные приходится оставлять в рамках хобби.

Date: 2004-12-21 02:46 pm (UTC)
From: [identity profile] kalvado.livejournal.com
Разрешите не согласиться с - не во много раз..
По крайней мере у меня очень хорошее впечатление от LabView (http://www.ni.com/labview/). Да, для конкретных задач - но для множества инженерно-технически-контрольных...
Я просто писал одно и тоже почти, в разные времена, на Pascal, Delphi i LV - там правда в разы разница ;)
Хотя не все верят что LV- язык программирования..

Date: 2004-12-21 02:56 pm (UTC)
From: [identity profile] potan.livejournal.com
Есть еще несколько аспектов, которые стоит расмотреть.
Во первых - защищенноть от ошибок. Даже прекрасные программист, трезвенник и тп может устать, простыть и сделать ошибку. Хорошо если язык позволяет ее найти. Примеры удачных языков в этом отношении есть - например на Haskell очень тяжело сделать ошибку, которую не заметит компилятор. Естественно, это дается не бесплатно - программировать на этом языке часто бывает тяжело.
Во вторых язык не только сам "амортизирует", но и может предоставить возможность добавить свой "амортизатор". В простейшем случае это ограничевается повторным использованием (здесь Смоллток и Форт очень хорошо смотрятся), в общем возможна разработка domain-specific language (здесь преуспели OCaml и Lisp/Scheme).

Кроме того в сравнении Джавы и Смоллтока надо вспомнить про шаблоны. IMHO, основанная на шаблонах система типов позволяет решать все осмысленные задачи, которые решаются динамической типизацией (включая гнилой reflection/RTTI).

Date: 2004-12-21 02:58 pm (UTC)
From: [identity profile] avnik.livejournal.com
Кстати -- а что есть domain-specific? А то на окамле пишу -- а про дмейн специфик впервые слышу ;)

Date: 2004-12-21 03:02 pm (UTC)
From: [identity profile] avnik.livejournal.com
Иногда бывает надежнее писать на том языке, в котором имеешь больше опыта, просто потому что это надежнее....

Я например уже давно хочу обкатать Ocaml в какой нибудь реальной задаче, но пока боюсь делать на нем что-то серьезное, просто потому что знаею его не досконально... Можно упереться в какую нибудь малознакомую мелочь. Хотя то что тривиально пишется на с/с++/перле я в состоянии написать и на окамле.

Date: 2004-12-21 03:05 pm (UTC)
From: [identity profile] potan.livejournal.com
Посмотри красивый пример DSL (http://www.venge.net/graydon/talks/mkc/html/index.html) на camlp4.

Date: 2004-12-21 03:11 pm (UTC)
From: [identity profile] pendelschwanz.livejournal.com
Трудно объяснить почему джава лучше, равно как трудно объяснить в России почему демократия лучше. Но попробую.
1. "Правильность" смолтока и форта - понятие чисто религиозное, и из правильности вовсе не следует что эти языки хороши.
2. Язык определяется не только его синтаксисом и грамматикой, но и определяемой этим языком культурой написания программ. так например, язык С(C++) сам по себе очень хороший, но будучи поставляем в комплекте с микрософтовской библиотекой, графомански написанной и омерзительно документированной, он становится плохим, ибо перед программистом встает дилемма - или сочинять АБСОЛЮТНО ВСЕ самому, или дружить с дурно пахнущим слоном. Промежуточного не дано, ибо модули микрософтовской библиотеки завязаны друг с другом как спагетти, и использование одного кусочка означает прмменение всего этого дерьма целиком.
3. Языки ФОРТ и Смоллток позволяют отдельно взятым талантливым хакерам определить свою среду (свою библиотеку, свои обозначения) с самого начала. Это хорошо когда ничего не создано, но отвратительно когда надо поддерживать крупную разработку длящуюся десятки лет. Ни у какого отдельно взятого хакера не хватит терпения изучать творения другого хакера - он скорее все перепишет сам. По сути дела каждая такая среда является Своим собственным языком программирования, а язык программирования - это нечто, что должно учиться не от формальных правил, а подсознательно - самое главное красота и естественность. Программист не может учить сотню языков - в какой-то момент он звереет и создает свой собственный.
4. Джава предлагает может быть и не самый оптимальный, но некоторый стиль программирования при котором наконец-то (!) программы могут жить долго, и одни программисты могут читать и пользоваться трудами других программистов. Преимущество состоит в "естественности стиля". В Джаве есть конечно тоже свои плюхи - например омерзительное EJB и J2EE и весьма сомнительная философия листенеров - но это все семечки по сравнению с тем количеством мерзости, которая налипла на другие языки за десятки лет насильственного внедрения графоманских идей крупными фирмами. Пока Джава пожалуй наилучший язык программирования, хотя и Джава рано или поздно умрет в конвульсиях, засорившись как C++, наносной дрянью.

Date: 2004-12-21 03:17 pm (UTC)
From: [identity profile] dz.livejournal.com
Отличный ответ. Спасибо за то, что я избавлен от необходимости это писать тут в сотый раз. :)

Date: 2004-12-21 03:21 pm (UTC)
From: [identity profile] avnik.livejournal.com
Интересно, а у тебя нет локальной копии исходников этой штуки?
Там к сожалению осталась только презентация

Date: 2004-12-21 03:23 pm (UTC)
From: [identity profile] potan.livejournal.com
Нет, набирать я поленился...

Date: 2004-12-21 03:24 pm (UTC)
From: [identity profile] avnik.livejournal.com
А есть ли для джавы какая-нибудь развитая библиотека позволяющая использовать элементы функционального программирования (функторы/curry/monads/arrows)?

Date: 2004-12-21 03:26 pm (UTC)
From: [identity profile] alexott.livejournal.com
индийские программисты не знают таких слов!

Date: 2004-12-21 03:29 pm (UTC)
From: [identity profile] avnik.livejournal.com
Я наверное таки подпишусь под высказыванием товарища [livejournal.com profile] potan о domain-specific языках. Но добавлю от себя про то, что апологетам императивных языков и идеологии ООП неплохо было бы ознакомиться и с концепциями функционального программирования.

Я вот гляжу на поделие наших джавадевелоперов и думаю, а фигли не рассматривать любой диалог с пользователем как функцию 'a -> 'a, где 'a это некий элемент или кортеж данных. Хотя наверное это придумал до меня.
From: (Anonymous)
Вот интересная парадигма Language Oriented Programming

http://www.onboard.jetbrains.com/articles/04/10/lop/

Date: 2004-12-21 03:34 pm (UTC)
From: [identity profile] etonei.livejournal.com
В данном слוучае я не уверен, что сравнение правомочно. [livejournal.com profile] avva, если я правильно понимаю, имеет в виду сравнение языков, в которых сильно отличается сама идея на которой язык построен. LabView - это, фактически, набор wrappers для удобного обращения к внешним устройствам + набор специфических controls для ввода-вывода информации (графики, там, тумблера и т.д.) + какие-то блоки, "клей", с помощью которого обеспечивается передача данных между первыми двумя. Так вот, если сравнивать именно языки, то этот самый "клей" ничего концептуально отличающегося по сравнению, например, с C не содержит - просто оформлен графически, а не текстом. Единственное, пожалуй, что выделяется - это что LabView, если ему по рукам вовремя не дать, все что угодно норовит сделать отдельным тредом, но я не думаю, что это может претендовать на звание концепции.

То есть, тут заслуга, скорее, оболочки, чем собственно языка.

Date: 2004-12-21 03:35 pm (UTC)
From: [identity profile] avnik.livejournal.com
Я уже нашел --- там рядом cvs есть ;)

Date: 2004-12-21 03:36 pm (UTC)
From: [identity profile] avnik.livejournal.com
А кто говорит про индийских то? ;)

Date: 2004-12-21 03:45 pm (UTC)
From: [identity profile] sobaker.livejournal.com
1. Обратного это тоже не доказывает.
2. Культура программирования на Смоллток действительно выше (в массе своей)
3. Второй пункт означает, что смоллтокерам не так уж сложно изучать и поддерживать чужой код. Мнение, что все библиотеки пишутся с нуля - ошибочно, есть мощные промышленные среды разработки на Смоллток (visual works от cincom, visual age от ibm).
4. Средний знаменатель - это хорошо. Но это средний знаменатель. Зачем отказываться от лучшего?

А вообще, я столько написал в комментариям к 4-м последним постингам [livejournal.com profile] dz, что мне тоже нет смысла повторять этого :)

Повторюсь, я не говорю, что Java - уж очень плохой язык. Но это - очень средненький язык.

Date: 2004-12-21 04:04 pm (UTC)
From: [identity profile] kalvado.livejournal.com
Razreshite chastichno ne poverit';)
dve veshi - pervaya -nabor bibliotek. Da, on specificheski optimizirovaqn - cho navernoe ne koncepciya. Hotya, ne uveren chto vstavka grafika v programmu v luboj drugoj srede budet proshe..
Vtoroe - i eto uje na koncepciyu tyanet - graficheskoe predstavlenie.
Svoi minusy tut est' - no est' i poleznye fichi: net imen peremennyh, kotorye mojno sputat', algorim viden glazu - men'she veroyanost' zaputat'sya v 3 sosnah.. A eto uje mojno nazvat' koncepciej, po-moemy...

Date: 2004-12-21 04:05 pm (UTC)
nine_k: A stream of colors expanding from brain (Default)
From: [personal profile] nine_k
Да. Расширение горизонта right tool-ов даётся нелегко, и чем дальше, тем труднее: привыкаешь быть "опытным рабработчиком" %)

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:11 pm (UTC)
nine_k: A stream of colors expanding from brain (Default)
From: [personal profile] nine_k
На inner / anonymous classes это вполне можно сделать, особенно на JDK1.5, где появилдись и generics.
Собственно, куча листенеров и итераторов (или там компараторов) сделана именно так.

Date: 2004-12-21 04:13 pm (UTC)
nine_k: A stream of colors expanding from brain (Default)
From: [personal profile] nine_k
Ага, штука с кортежами была стандартной фишкой древнего турбопаскалевсеого TurboVision, где всякий диалог можно было слить в record и гаполнять из него. Типы генерились, конечно, не динамически (не умеет этого паскаль), но тулза для рисования диалогов выдавала весь нужный исходник (определение типа, сливалка, заливалка).

Date: 2004-12-21 04:14 pm (UTC)
From: [identity profile] aristovich.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 во многих случаях. Да чего я объясняю :)
Page 1 of 5 << [1] [2] [3] [4] [5] >>

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 04:27 am
Powered by Dreamwidth Studios