avva: (Default)
[personal profile] avva
(контекст)

Я время от времени вспоминаю это его высказывание:
Практически невозможно научить хорошо программировать студентов, ориентированных первоначально на БЕЙСИК: как потенциальные программисты они умственно оболванены без надежды на исцеление.


Первая нетривиальная программа в моей жизни была мной написана на Бейсике.

Ещё и какая забавная была программа: она вычисляла число пи до любого знака после запятой (это в теории; на практике больше тысячи было нереально, Бейсик начинал задыхаться). Делала она это, суммируя тригонометрический ряд, который сходился к пи с точностью до коэффициента. Притом самый естественный ряд такого рода -- а именно 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 -- но одновременно глубоко неверен.

Date: 2002-08-07 03:45 pm (UTC)
From: [identity profile] pingva.livejournal.com
Все процедурные языки - C[++], Перл, Джава, Бейсик, Паскаль, PL/1, Фортран, xBase - таки да, взаимозаменяемы

А разве правильно считать Perl, в основе которого лежит сугубо-декларативный Regualar Expression, "процедурным" языком? Так и SQL процедурным можно назвать - "эвон, процедуры ж на нем пишем" :)

Date: 2002-08-07 04:18 pm (UTC)
From: [identity profile] cema.livejournal.com
Неправильно считать, что в основе perl'а лежат regexp'ы. В основе таки процедурное описание действий, т.е. это процедурный язык. А regexp'ы он просто умеет хорошо обрабатывать, к структуре языка это не имеет отношения. (Эта часть языка выделена, например, в библиотеку PCRE, что не значит, что C вдруг изменил свою природу.)

Date: 2002-08-07 04:46 pm (UTC)
From: [identity profile] pingva.livejournal.com
Эта часть языка выделена, например, в библиотеку PCRE, что не значит, что C вдруг изменил свою природу

С этим согласен и благодарю за ссылку. Но много ли будет пользы от Perl без RegExp? :)

Date: 2002-08-07 08:04 pm (UTC)
From: [identity profile] cema.livejournal.com
Но много ли будет пользы от Perl без RegExp?

Не так много, это правда. Впрочем от C, если из него убрать арифметику, тоже толку было бы немного, но ведь это не делает его арифметическим языком.

Ладно, с этим мы вроде разобрались. А вот кто объяснит мне прелесть python'а?

Не пробовала, но

Date: 2002-08-09 12:43 pm (UTC)
From: [identity profile] myafa.livejournal.com
выглядит интересным то, что таблицу виртуальных функций там можно менять "на лету". Правда, наверное, дебагить это просто невозможно:)

Re: Не пробовала, но

Date: 2002-08-09 06:09 pm (UTC)
From: [identity profile] cema.livejournal.com
Дебагить или дебажить? А вообще-то, print наш большой друг.

Re: Не пробовала, но

Date: 2002-08-09 10:57 pm (UTC)
From: [identity profile] myafa.livejournal.com
Дебужить:)
Принт то он конечно, дык как же без него:) Только вот мне кажется что принт принтом, а когда функции у тебя на ходу меняются на другие (и сами могут себя заменить), тогда принты все перепутаются. Молотком лучше:)
Интересно, а принт там тоже можно заменить?

Date: 2002-08-08 07:32 am (UTC)
From: [identity profile] syarzhuk.livejournal.com
>Но много ли будет пользы от Perl без RegExp? :)

Вполне достаточно. Из личного опыта - весь http://www.belmusic.net написан на Перле, регэкспы там используются по минимуму.

Возьмите любой учебник основ программирования. Что на Паскале, что на Бейсике, что на C, что на Java, что на Рапире, что на РАЯ. Покажите мне хоть одно задание из такого учебника, которое нельзя написать на Перле - и без регэкспов.

Date: 2002-08-07 06:04 pm (UTC)
From: [identity profile] tejblum.livejournal.com
Я бы не сказал, что regexp'ы perl "просто хорошо обрабатывает". Одно дело -- писать вещи вроде s,/\./,/,g; другое -- куда более корявые вещи на C даже с PCRE.

(Потом, а что собственно PCRE? PCRE это просто какая-то нестандартная библиотека, а в любом Unix стандартная C library умеет обращаться с регулярными выражениями; иначе это просто не Unix. POSIX 1003.2 придумали очень давно.)

Date: 2002-08-07 08:01 pm (UTC)
From: [identity profile] cema.livejournal.com
Ну, в каком языке выражение корявее, это ещё большой вопрос... Синтаксис perl'а не сахар. Но это, несомненно, процедурный язык именно потому, что в его основе лежит процедурное описание программы. (Он ещё и объектно-ориентированный, при желании.) Так получилось, что в нём много операторов, удобных для работы с regex'ами; а в C специальных операторов для этого нету. Но если их туда ввести, то будут.

Насчёт библиотеки: во-первых, она более обширна, поскольку поддерживает regex'ы в стиле perl'а версии 5. Во-вторых, утверждается, что она заметно быстрее. Но я с ней не работал и личного опыта, соответственно, не имею.

Date: 2002-08-08 01:24 am (UTC)
From: [identity profile] tejblum.livejournal.com
Да, я нечетко выразился. На самом деле я хотел возразить на высказывания чуть выше по треду. Конечно, perl -- процедурный язык. Но такой ли уж он "взаимозаменяемый" с другими процедурными языками, тем же C например? Или C++ с темплейтами и STL разве "взаимозаменяемый" с каким-нибудь Фортаном? За день можно, конечно, запомнить, что в таком-то языке if пишется так, while сяк, функции определяются эдак и т.д., но разве это называется овладеть?

Насчёт библиотеки: во-первых, она более обширна, поскольку поддерживает regex'ы в стиле perl'а версии 5. Во-вторых, утверждается, что она заметно быстрее.

Это наверное, однако регэкспы -- довольно мощная программисткая идея, не имеющая никакого отношения к PCRE. Разница между PCRE и любой стандартной реализацией или между синтаксисом perl5 и синтаксисом POSIX 1003.2 -- всего лишь небольшой прогресс.
From: [identity profile] syarzhuk.livejournal.com
>Конечно, perl -- процедурный язык. Но такой ли уж он "взаимозаменяемый" с другими процедурными
>языками, тем же C например?

C:
#include
[Error: Irreparable invalid markup ('<stdio.h>') in entry. Owner must fix manually. Raw contents below.]

>Конечно, perl -- процедурный язык. Но такой ли уж он "взаимозаменяемый" с другими процедурными
>языками, тем же C например?

C:
#include <stdio.h>
main()
{printf ("Hello World!\n");}

Perl:
print "Hello, World!\n";



From: [identity profile] cema.livejournal.com
C и perl Вы выучили, а с html-то непорядок. ;-)
From: [identity profile] tejblum.livejournal.com
Тоже мне доказательство. Это в лучшем случае пример, который в общем случае ничего не доказывает. Потом, это не программы, а издевательство над языками программирования ;-)

Пару комментов назад я привёл пример оператора в perl (при всей свой тривиальности, этот оператор делает кое-что реально нужное, в отличие от hello world):
    s,/\./,/,g;

Я утверждаю, что делающий то же самое кусок программы на C (который, разумеется, написать несложно; да и на других языках программирования тоже) будет сильно отличаться от этого. Следовательно, вообще говоря программы на C пишутся не так, как программы на perl, и наоборот.
From: [identity profile] syarzhuk.livejournal.com
Следовательно, вообще говоря программы на C пишутся не так, как программы на perl, и наоборот.
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.
From: [identity profile] tejblum.livejournal.com
Конечно же, любую (законченную) программу можно написать на любом языке программирования, в том числе и на Лиспе или ассеиблере машины MIX. (С подпрограммами в широком смысле слова сложнее; например, в придуманном Виртом Паскале нельзя написать подпрограмму, позволяющую отсортировать любой массив любым способом; а в придуманном Ритчи C делающая это функция qsort() пишется элементарно.). При таком подходе все языки программирования, а не только процедурные C[++], Перл, Джава, Бейсик, Паскаль, PL/1, Фортран, xBase, являются взаимозаменяемыми. Конечно, какие-то языки более похожи, какие-то менее, можно их как-то классифицировать, называя одни процедурными, другие функциональными, третии еще как-то; тем не менее разница между серьезными языками достаточно велика, чтобы ею пренебрегать (два дня на овладение). Я, кстати, не так уж уверен, что Перл больше похож на Фортран, чем на Лисп, например.

Date: 2002-08-08 08:36 am (UTC)
From: [identity profile] cema.livejournal.com
Конечно, perl -- процедурный язык. Но такой ли уж он "взаимозаменяемый" с другими процедурными языками, тем же C например?

Практически -- нет, конечно, а то бы на одном языке все и писали бы. (И это был бы C++...)

регэкспы -- довольно мощная программисткая идея, не имеющая никакого отношения к PCRE. Разница между PCRE и любой стандартной реализацией или между синтаксисом perl5 и синтаксисом POSIX 1003.2 -- всего лишь небольшой прогресс.

Regex я бы скорее отнёс к математике, ну да ладно. Разница же regex'ов в стиле Perl 5, допустим, и "обычных" всё же не сводится к синтаксису.

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 28th, 2025 02:42 pm
Powered by Dreamwidth Studios