ещё о Дейкстре; первая программа
Aug. 8th, 2002 12:03 am(контекст)
Я время от времени вспоминаю это его высказывание:
Первая нетривиальная программа в моей жизни была мной написана на Бейсике.
Ещё и какая забавная была программа: она вычисляла число пи до любого знака после запятой (это в теории; на практике больше тысячи было нереально, Бейсик начинал задыхаться). Делала она это, суммируя тригонометрический ряд, который сходился к пи с точностью до коэффициента. Притом самый естественный ряд такого рода -- а именно 1 + 1/3 - 1/5 + 1/7 - 1/9 + 1/11 .... = pi/4 -- использовать было нельзя, так как он сходится до невозможности медленно. Поэтому я пошёл в библиотеку, зарылся в справочники и нашёл быстро сходящуюся формулу. Это было разложение по арктангенсу: пользуемся тем, что pi = 16*arctan(1/5) - 4*arctan(1/239), а эти два арктангенса раскладываем в ряды по формуле arctan(x) = x - x3/3 + x5/5 - x7/7 + .... Такой метод давал больше одного значимого знака на каждую итерацию. Цифры я хранил в бейсиковском массиве, и ещё там были какие-то оптимизации, не помню.
Мне было, кажется, тринадцать лет. Я был безмерно горд и счастлив.
А афоризму Дейкстры этому я не верю, и никогда не верил. Он, несомненно -- забавен? остроумен? не знаю, какое слово подобрать взамен идеально подходящего здесь английского cute -- но одновременно глубоко неверен.
Я время от времени вспоминаю это его высказывание:
Практически невозможно научить хорошо программировать студентов, ориентированных первоначально на БЕЙСИК: как потенциальные программисты они умственно оболванены без надежды на исцеление.
Первая нетривиальная программа в моей жизни была мной написана на Бейсике.
Ещё и какая забавная была программа: она вычисляла число пи до любого знака после запятой (это в теории; на практике больше тысячи было нереально, Бейсик начинал задыхаться). Делала она это, суммируя тригонометрический ряд, который сходился к пи с точностью до коэффициента. Притом самый естественный ряд такого рода -- а именно 1 + 1/3 - 1/5 + 1/7 - 1/9 + 1/11 .... = pi/4 -- использовать было нельзя, так как он сходится до невозможности медленно. Поэтому я пошёл в библиотеку, зарылся в справочники и нашёл быстро сходящуюся формулу. Это было разложение по арктангенсу: пользуемся тем, что pi = 16*arctan(1/5) - 4*arctan(1/239), а эти два арктангенса раскладываем в ряды по формуле arctan(x) = x - x3/3 + x5/5 - x7/7 + .... Такой метод давал больше одного значимого знака на каждую итерацию. Цифры я хранил в бейсиковском массиве, и ещё там были какие-то оптимизации, не помню.
Мне было, кажется, тринадцать лет. Я был безмерно горд и счастлив.
А афоризму Дейкстры этому я не верю, и никогда не верил. Он, несомненно -- забавен? остроумен? не знаю, какое слово подобрать взамен идеально подходящего здесь английского cute -- но одновременно глубоко неверен.
no subject
Date: 2002-08-07 03:45 pm (UTC)А разве правильно считать Perl, в основе которого лежит сугубо-декларативный Regualar Expression, "процедурным" языком? Так и SQL процедурным можно назвать - "эвон, процедуры ж на нем пишем" :)
no subject
Date: 2002-08-07 04:18 pm (UTC)no subject
Date: 2002-08-07 04:46 pm (UTC)С этим согласен и благодарю за ссылку. Но много ли будет пользы от Perl без RegExp? :)
no subject
Date: 2002-08-07 08:04 pm (UTC)Не так много, это правда. Впрочем от C, если из него убрать арифметику, тоже толку было бы немного, но ведь это не делает его арифметическим языком.
Ладно, с этим мы вроде разобрались. А вот кто объяснит мне прелесть python'а?
Не пробовала, но
Date: 2002-08-09 12:43 pm (UTC)Re: Не пробовала, но
Date: 2002-08-09 06:09 pm (UTC)Re: Не пробовала, но
Date: 2002-08-09 10:57 pm (UTC)Принт то он конечно, дык как же без него:) Только вот мне кажется что принт принтом, а когда функции у тебя на ходу меняются на другие (и сами могут себя заменить), тогда принты все перепутаются. Молотком лучше:)
Интересно, а принт там тоже можно заменить?
no subject
Date: 2002-08-08 07:32 am (UTC)Вполне достаточно. Из личного опыта - весь http://www.belmusic.net написан на Перле, регэкспы там используются по минимуму.
Возьмите любой учебник основ программирования. Что на Паскале, что на Бейсике, что на C, что на Java, что на Рапире, что на РАЯ. Покажите мне хоть одно задание из такого учебника, которое нельзя написать на Перле - и без регэкспов.
no subject
Date: 2002-08-07 06:04 pm (UTC)(Потом, а что собственно PCRE? PCRE это просто какая-то нестандартная библиотека, а в любом Unix стандартная C library умеет обращаться с регулярными выражениями; иначе это просто не Unix. POSIX 1003.2 придумали очень давно.)
no subject
Date: 2002-08-07 08:01 pm (UTC)Насчёт библиотеки: во-первых, она более обширна, поскольку поддерживает regex'ы в стиле perl'а версии 5. Во-вторых, утверждается, что она заметно быстрее. Но я с ней не работал и личного опыта, соответственно, не имею.
no subject
Date: 2002-08-08 01:24 am (UTC)Насчёт библиотеки: во-первых, она более обширна, поскольку поддерживает regex'ы в стиле perl'а версии 5. Во-вторых, утверждается, что она заметно быстрее.
Это наверное, однако регэкспы -- довольно мощная программисткая идея, не имеющая никакого отношения к PCRE. Разница между PCRE и любой стандартной реализацией или между синтаксисом perl5 и синтаксисом POSIX 1003.2 -- всего лишь небольшой прогресс.
Я докажу взаимозаменяемость, за вами - доказать обратн
Date: 2002-08-08 07:35 am (UTC)>языками, тем же C например?
C:
#include
>языками, тем же C например?
C:
#include <stdio.h>
main()
{printf ("Hello World!\n");}
Perl:
print "Hello, World!\n";
Re: Я докажу взаимозаменяемость, за вами - доказать обра
Re: Я докажу взаимозаменяемость, за вами - доказать обра
Date: 2002-08-08 02:50 pm (UTC)Пару комментов назад я привёл пример оператора в perl (при всей свой тривиальности, этот оператор делает кое-что реально нужное, в отличие от hello world):
s,/\./,/,g;Я утверждаю, что делающий то же самое кусок программы на C (который, разумеется, написать несложно; да и на других языках программирования тоже) будет сильно отличаться от этого. Следовательно, вообще говоря программы на C пишутся не так, как программы на perl, и наоборот.
Re: Я докажу взаимозаменяемость, за вами - доказать обра
Date: 2002-08-08 08:38 pm (UTC)And the English sentences are written in a different way from Russian ones, however both are used to exchange ideas and are interchangeable. In the same way both Perl and C serve to be a tool to tell a computer what to do and are interchangeable - to a point, of course. Your example, although showing big difference between these two languages, doesn't prove that they can't be exchanged - in a same way as the word "overkill" (translated into Russian as "primenenie sredstv massovogo porazheniya izbytochnoy moshchnosti") doesn't prove that you can't express in Russian what you can in English, even though those expressions would look quite different.
Re: Я докажу взаимозаменяемость, за вами - доказать обра
Date: 2002-08-09 03:29 am (UTC)no subject
Date: 2002-08-08 08:36 am (UTC)Практически -- нет, конечно, а то бы на одном языке все и писали бы. (И это был бы C++...)
регэкспы -- довольно мощная программисткая идея, не имеющая никакого отношения к PCRE. Разница между PCRE и любой стандартной реализацией или между синтаксисом perl5 и синтаксисом POSIX 1003.2 -- всего лишь небольшой прогресс.
Regex я бы скорее отнёс к математике, ну да ладно. Разница же regex'ов в стиле Perl 5, допустим, и "обычных" всё же не сводится к синтаксису.