Subject: Re: Сравнение по производительности Рефала другим языкам
From: A.A.Vladimirov (vladimi@mech.math.msu.su)
Date: Tue Feb 24 2004 - 13:04:25 MSK
Раз начался разбор идеологических вопросов, влезу.
>
> Мммм... я бы сказал, что в моей фразе ключевым моментом была
> событийно-ориентированность. Tcl/Tk позволяет построить GUI,
> но я бы не сказал, что результат получается
> событийно-ориентированным. Достаточно вспомнить ухищрения, к
> которым приходится там прибегать, если нужно выполнить некую
> длинную (хотя бы несколько секунд) операцию. Обычно на
> ухищрения идти не хочется, в результате чего на время
> выполнения операции сам GUI "замирает", перестает реагировать
> на внешние раздражители и даже не хочет отрисовываться. Это
> само по себе вполне понятно, и ОО-программа, если не
> предпринять специальных мер, поведет себя точно так же. Просто
> в ОО-программе принятие соответствующих мер несколько проще
> для осмысления (хотя бы потому, что "завершение длинной
> операции" - это тоже событие, с точки зрения ОО ничем
> принципиально не отличающееся от всяких keypress'ов и
> mouseclick'ов).
>
> Почему Tcl/Tk, тем не менее, действительно применяется для GUI
> -- imho, ответ тут в команде pack (ну ооооочень удобно
> диалоговые окошки генерировать ;-) В остальном эта штука
> действительно для построения GUI подходит очень условно. Или
> можно даже так сказать: GUI на Tcl/Tk строится замечательно, а
> приложение с GUI - едва-едва. Не более удобно, чем на
> практически любом не-ОО языке. То есть можно, но противно.
Объясните, пожалуйста, почему нельзя, скажем, ввести
в Рефале выражение e.spisok_sobytiev и интерпретировать
наличие/отсутствие события nechto как
сопоставимость/несопоставимость выражения e.spisok_sobytiev
с образцом e.1 ('nechto') e.2 ?
>
> Вот есть язык Лисп. Совершенно ясно, что существует множество
> задач, на которых Лисп просто великолепен. Теперь посмотрим на
> Common Lisp the Language, ed.2. 1029 страниц. Чего там только
> нет, в язык проникли не только откровенно императивные
> элементы, но даже ОО-составляющая (CLOS). Наличествуют
> массивы, структуры и прочие совершенно нелисповские средства.
>
> Откуда они там взялись? Возможно, кто-то из более опытных
> коллег укажет иные причины, но мне основная причина видится в
> стремлении писать на Лиспе целиком сложные программы. В том
> числе и программы с пресловутыми GUI, и т.п. Т.е.
> позиционировать Лисп как универсальный язык программирования.
> В итоге и язык оказывается засорен непойми чем, и до роли
> универсального средства он так и не дотягивает, ибо просто по
> закону больших чисел в серьезном проекте не может оказаться
> достаточного количества задач, на которых оный Lisp удобен.
>
> Аналогия тут просматривается, пожалуй, с (извините) кухонной
> утварью. Существуют, как известно, весьма хитрые и очень
> удобные разновидности ножиков: для разделки рыбы, для чистки
> овощей, для открывания консервов, для ... (etc.) Однако если
> рассматривать каждый из существующих ножей не в контексте
> вопроса "удобен для", а в контексте вопроса "удобен вообще",
> ничего удобнее самого обычного (только качественного) ножа не
> найдется. Попытки же приделать к какому-нибудь ножу для устриц
> еще и дополнительные лезвия для осуществления остальных
> операций приведут к появлению непонятной абракадабры, которая
> займет достойное место на полке рядом с моделями вечных
> двигателей и прочих "изобретений".
Встречный вопрос: а C++ описан на тетрадном листке?
Описанный вами пример Common Lisp'а, (от себя добавлю
Рефал-плюс, да простят меня его поклонники ) --- это не более чем
_извращение_, что Вы и сами признаёте. А в мире C, Pascal и т.д.
сие есть _правило_. В связи с этим предлагаю совершить
небольшой экскурс в историю математики. Когда сформировалось
в математике понятие рекурсивной функции (идеологическая
основа Pascal'ей)? Правильно - к концу 1930-х годов. Когда
появилось понятие нормального алгорифма? Тоже правильно -
к концу 1940-х, когда определение рекурсивных функций и машин
Тьюринга у всех уже в зубах навязло. Что - скажете, у Маркова
была мания величия, и ему патологически не хотелось
использовать чужие конструкции? Как известно, нет - просто
рекурсивные функции плохо справляются с _математическими_
задачами, да и определение у них корявое.
Засорение языков происходит, ИМХО, именно потому, что
использование C приучает к мысли, что тысячестраничные фолианты
спецификаций - это "типа круто".
> Это не совсем то, что я имел в виду. То есть и это тоже,
> разумеется. Но, на мой взгляд, следует также четко озвучить,
> что Лиспу, Рефалу и Прологу _не_подходит_ роль основного языка
> в подавляющем большинстве проектов (сразу скажу, что не имею в
> виду узкоспециальные проекты - такие, безусловно, бывают; но
> исключения лишь подтверждают общее правило). Вместе с тем, в
> роли дополнительного языка вся троица очень хорошо будет
> смотреться практически в любом проекте.
>
> Это именно тот тезис, неприятие которого со стороны
> сторонников соответствующих языков, с моей точки зрения,
> приводит к неприятным последствиям для оных языков. Хотя бы
> потому, что в итоге начинают _сравнивать_ Lisp и C++ (сам
> наблюдал на студенческом форуме). Не в контексте конкретных
> задач, а _вообще_. И такого сравнения Lisp, естественно, не
> выдерживает. Потому что если рассматривать _все_ задачи,
> решаемые с помощью языков программирования, C++ оказывается
> для подавляющего их большинства более удобен, нежели тот же
> Lisp. Несмотря на все (чуждые!) возможности, которые в этот
> язык воткнули.
Религия - от первого до последнего слова. Утверждение,
будто нормальные алгорифмы менее универсальны, чем
рекурсивные функции, отлично смотрелось бы на экзамене
по математической логике!
Далее - к чему ссылки на студенческий (!) форум? Многие
крестьяне, например, считали, что тракторы и комбайны в сельском
хозяйстве не нужны, так как "на лошадке оно способнее". Что этим
доказано, кроме отсталости самих крестьян?
> Иначе говоря, на каждом языке следует решать те ПОДзадачи,
> которые на нем удобно решать. Задача "быть головным языком
> проекта" в подавляющем большинстве случаев не подходит для
> альтернатывных языков, это ниша императивных и ОО-языков.
Только потому, что так _привыкли_.
> Стремление писать все на одном языке - это тоже, на самом
> деле, идея из императивного мира; пытаясь играть по этим
> правилам, альтернативные языки проигрывают. Что я хочу всем
> этим сказать - так это то, что, по моему глубокому убеждению,
> играть по этим правилам (пытаться из своего любимого языка
> сделать
> универсальный) -- совершенно ни к чему и вредно для здоровья
Да, это вредно для здоровья поклонников C++.
>
>
> С наилучшими,
> Андрей Столяров
И Вам того же.
Антон Владимиров.
This archive was generated by hypermail 2b25 : Mon Oct 25 2004 - 21:24:59 MSD