[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: kylix 2





Dmitry Astapov wrote:

в принципе да, tcl функциональный язык - каждый оператор на самом деле
является функцией. Если не задумываться об этом, все таки синтаксис
у tcl и например Си похож

 AS> В С++ тоже каждый оператор является функцией... Но он все равно больше
 AS> "структурный", чем функциональный.

Мда? Какие аргументы у оператора for, например? Действительно ли это
функция? какие значения она возвращает? Можно ли передать ее в качестве
аргумента в другую функцию, например так:

void foo(void* fun) { (*fun)(i=0;i<10;i++) {...} };

main() { foo(for); }.

Эти операторы (for, while, switch...) я не учитывал. Я говорил о ++, --, +, -, +=, *=, new, ... Да, for тоже оператор, я это забыл.

 AS> Знаете, тут применима, в принципе, та же идея, что и в споре об
 AS> определении, что такое программа (помните? :-).
Нет. Можно напомнить?

Разница между файлом данных и программой какая? Абстрактная. То есть необходимо помнить, что понятие "программа" и "файл данных" (источник команд) - это абстрактные понятия. Спор тогда зашел именно о том, что же такое программа и что такое скрипт - файл данных для интерпретатора.

Если для текстового файла (скажем, письма, или веб-страницы на HTML), CGI-скрипт на Perl - это программа, то для CGI-скрипта - это файл данных (источник данных).

Для интерпретатора Perl CGI-скрипт - это файл данных, интерпретатор его использует как источник информации, "что ему делать". Фактическим исполнителем является на данном уровне интерпертатор Perl. Далее, интерпретатор Perl является файлом данных для программы более низкого порядка - ядра ОС (что необязательно, может быть еще один интерпретатор - это зависит от того, как выполнен интепретатор Perl).

Ядро ОС является источником команд более низкого уровня для процессорных микрокоманд, то есть условно является файлом данных для процессора. Так можно опускаться до самого низкого уровня - до различных контоллеров. В частности, для контроллера жесткого диска (или другого физического устройства) процессор является своеобразным "файлом данных", источником информации о том, что ему делать.

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


 AS> Функциональность или "структурность" языков программирования - это
 AS> чистые абстракции. Без функциональности (да-да, именно: я имею в виду
 AS> ориентированность на функциональное программирование) любой язык
 AS> программирования становится языком структуризации данных (как,
 AS> например, XML, SGML, HTML, TeX, ...). То есть, по крайней мере,
 AS> функциональными языками являются все языки программирования, как TCL,
 AS> Python, C, C++, Lisp, JavaScript: они включают в себе такую
 AS> возможность -
 AS> программирование функций.
У вас, простите, каша в голове :)
Вопрос - является ли, с вашей точки зрения, наличие first-class functions
характерной чертой функциональных языков программирования? А то, сдается,
нету единства в толковании терминов.

Может быть. :-) Я неясно выразился. И не до конца понял вопрос... :-)

 AS> Любой нормальный язык программирования также является структурным
 AS> языком, потому что так или иначе включает в себя определение структур
 AS> данных - переменных, массивов, структур, объектов... Это все структуры
 AS> данных.
Стуктурные (более верно, имхо, говорить все же "императивные") языки
называются так не потому, что позволяют описывать структуры данных.


functional programming

This style of programming proceeds by computing new values from existing values without changing any of the existing values.


imperative programming

This style of programming proceeds by altering values stored in variables.

Т.е. функциональное программирование - это вычисление новых значений без изменения существующих переменных, императивное - посредством изменения значений переменных. Вы имели в виду это?

 AS> Вероятно, вопрос заключается в том, на что данный язык более сильно
 AS> ориентирован, и тут уже можно долго и упорно спорить, ибо слишком
 AS> сложным оказывается сравнение, например, C++ и Python - который из них
 AS> "более структурный". Хотя, с другой стороны, мне кажется довольно
 AS> очевидным, что, например, C является более ориентированным (читай:
 AS> припособленным) на функциональное программирование, чем, скажем, C++
 AS> или Python.

И как на C правильно реализуется map и fold? А так, чтобы было type-safe? А
рекурсивные функции? А с tail-recursive оптимизацией?

Тут должно быть понятно, что я подменил значения терминов. Я имел в виду процедурное, структурное и объектно-ориентированное программирование (методы разработки программ). Совершенно разные вещи.

ЗЫ
Пост-фактум прошу прощения за то, что письмо состоит из одних "каверзных"
вопросов. Но я не ставил себе целью объяснить - скорее, зародить сомнение :)


Ничего, иногда полезно... :-)
--
Andrei Sosnin
http://zzx.ath.cx

 <!-- : it all depends on your vision : -->



Reply to: