Re: Сравнение по производительности Рефла с другими языкам


Subject: Re: Сравнение по производительности Рефла с другими языкам
crocodil@croco.net
Date: Sun Feb 22 2004 - 12:52:44 MSK


On Sat, 21 Feb 2004, Sergei M. Abramov wrote:

> > В частности: задачи построения событийно-управляемых приложений,
> > в т.ч. GUI - это однозначно объектно-ориентированная область,
>
> Однозначно? То есть, либо Tcl/Tk объектно-ориентированный, либо оно не для
> GUI?

Мммм... я бы сказал, что в моей фразе ключевым моментом была
событийно-ориентированность. Tcl/Tk позволяет построить GUI, но я
бы не сказал, что результат получается событийно-ориентированным.
Достаточно вспомнить ухищрения, к которым приходится там
прибегать, если нужно выполнить некую длинную (хотя бы несколько
секунд) операцию. Обычно на ухищрения идти не хочется, в
результате чего на время выполнения операции сам GUI "замирает",
перестает реагировать на внешние раздражители и даже не хочет
отрисовываться. Это само по себе вполне понятно, и ОО-программа,
если не предпринять специальных мер, поведет себя точно так же.
Просто в ОО-программе принятие соответствующих мер несколько
проще для осмысления (хотя бы потому, что "завершение длинной
операции" - это тоже событие, с точки зрения ОО ничем
принципиально не отличающееся от всяких keypress'ов и
mouseclick'ов).

Почему Tcl/Tk, тем не менее, действительно применяется для GUI --
imho, ответ тут в команде pack (ну ооооочень удобно диалоговые
окошки генерировать ;-) В остальном эта штука действительно для
построения GUI подходит очень условно. Или можно даже так
сказать: GUI на Tcl/Tk строится замечательно, а приложение с GUI
- едва-едва. Не более удобно, чем на практически любом не-ОО
языке. То есть можно, но противно.

> > Самая прелесть в том, что императивное программирование и ООП
> > оказываются наиболее универсальными, что бы тут ни говорилось. И
> > неприятие этого тезиса со стороны сторонников альтернативных
> > языков, в т.ч. и Рефала, приводит к совершенно неожиданным
> > последствиям - а именно, к появлению устойчивого мнения, что
> > альтернативные парадигмы программирования - это странная игрушка
> > для "сбрендивших ученых".
>
> Судьба языков (вспомним разные Ады, Оккамы, СмолТалки и сравним их с судьбой
> Фортрана или Бэйсика) и ярыли на языках ("странные игрушки...") определяются
> не только (и не столько) потребительскими свойствами языка (удобен/неудобен
> для тех или иных задач, ортоганален или "ярморочно пестр").

С этим я совершенно согласен. Говорю-то я не о том. Попробую
пояснить иначе.

Вот есть язык Лисп. Совершенно ясно, что существует множество
задач, на которых Лисп просто великолепен. Теперь посмотрим на
Common Lisp the Language, ed.2. 1029 страниц. Чего там только
нет, в язык проникли не только откровенно императивные элементы,
но даже ОО-составляющая (CLOS). Наличествуют массивы, структуры и
прочие совершенно нелисповские средства.

Откуда они там взялись? Возможно, кто-то из более опытных коллег
укажет иные причины, но мне основная причина видится в стремлении
писать на Лиспе целиком сложные программы. В том числе и
программы с пресловутыми GUI, и т.п. Т.е. позиционировать Лисп
как универсальный язык программирования. В итоге и язык
оказывается засорен непойми чем, и до роли универсального
средства он так и не дотягивает, ибо просто по закону больших
чисел в серьезном проекте не может оказаться достаточного
количества задач, на которых оный Lisp удобен.

Аналогия тут просматривается, пожалуй, с (извините) кухонной
утварью. Существуют, как известно, весьма хитрые и очень удобные
разновидности ножиков: для разделки рыбы, для чистки овощей, для
открывания консервов, для ... (etc.) Однако если рассматривать
каждый из существующих ножей не в контексте вопроса "удобен для",
а в контексте вопроса "удобен вообще", ничего удобнее самого
обычного (только качественного) ножа не найдется. Попытки же
приделать к какому-нибудь ножу для устриц еще и дополнительные
лезвия для осуществления остальных операций приведут к появлению
непонятной абракадабры, которая займет достойное место на полке
рядом с моделями вечных двигателей и прочих "изобретений".

> > На мой скромный взгляд, необходимо признать, что Lisp, Prolog,
> > Рефал и прочие "альтернативные" языки должны быть
> > _дополнительными_ (по-английски я бы сказал secondary) в
> > проектах, где основным языком является какой-либо индустриальный
> > объектно-императивный монстр типа C++.
>
> Фраза симпатичная, только я ее бы перефразировал, сохраняя смысл:
>
> <<Если Вы наблюдаете проект, где основным языком по некоторым причинам
> выбран какой-либо индустриальный объектно-императивный монстр типа C++, то
> должно быть предусмотрено в данном проекте и _дополнительные_
> "альтернативные" языки (Lisp, Prolog, Рефал), как противовес и как
> инструмент, в местах, где основной монстр будет буксовать.>>
>
> Нормальная фраза.

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

Это именно тот тезис, неприятие которого со стороны сторонников
соответствующих языков, с моей точки зрения, приводит к
неприятным последствиям для оных языков. Хотя бы потому, что в
итоге начинают _сравнивать_ Lisp и C++ (сам наблюдал на
студенческом форуме). Не в контексте конкретных задач, а
_вообще_. И такого сравнения Lisp, естественно, не выдерживает.
Потому что если рассматривать _все_ задачи, решаемые с помощью
языков программирования, C++ оказывается для подавляющего их
большинства более удобен, нежели тот же Lisp. Несмотря на все
(чуждые!) возможности, которые в этот язык воткнули.

Иначе говоря, на каждом языке следует решать те ПОДзадачи,
которые на нем удобно решать. Задача "быть головным языком
проекта" в подавляющем большинстве случаев не подходит для
альтернатывных языков, это ниша императивных и ОО-языков.
Стремление писать все на одном языке - это тоже, на самом деле,
идея из императивного мира; пытаясь играть по этим правилам,
альтернативные языки проигрывают. Что я хочу всем этим сказать -
так это то, что, по моему глубокому убеждению, играть по этим
правилам (пытаться из своего любимого языка сделать
универсальный) -- совершенно ни к чему и вредно для здоровья ;-)

> С.

С наилучшими,
Андрей Столяров



This archive was generated by hypermail 2b25 : Mon Oct 25 2004 - 21:24:59 MSD