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


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