Re[3]: Где собака зарыта???
От: LaptevVV Россия  
Дата: 20.10.04 05:35
Оценка:
Здравствуйте, prVovik, Вы писали:

V>Здравствуйте, Nick_, Вы писали:


N_>>Все просто. Популярность завоевал не Си, а UNIX. Если бы UNIX был написан на другом языке, то сейчас был бы популярен другой язык.

V>Ну дак почему же UNIX не был написан на паскале?
А Windows, между прочим — была!!!!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[8]: *
От: LaptevVV Россия  
Дата: 20.10.04 05:42
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Собственно, это-то и не нравится у Вирта. От него откровений ждали, а он "=" критикует. Ну не смешно ли?

Это все потому. что он — преподаватель. А Керниган и Ричи с Томсоном — профессиональные прогроаммисты. которые (скорее всего) преподаванием занимались ОЧЕНЬ МАЛО
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[4]: Где собака зарыта???
От: Дарней Россия  
Дата: 20.10.04 06:06
Оценка: :)
Здравствуйте, LaptevVV, Вы писали:

LVV>А Windows, между прочим — была!!!!

LVV>

Неудивительно, что она такая кривая получилась :-D
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[2]: Где собака зарыта???
От: Дарней Россия  
Дата: 20.10.04 06:12
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Керниган написал об этом статью "Почему паскаль не является моим любимым языком". Но от себя добавлю — все же в свое время главной целью паскаля было обучение. И демонстрация того, что язык может быть простой, и транслятор с него может быть простой.


Простота хуже воровства (С)

На самом деле это конечно шутка, но предел упрощению тоже должен быть.
И кстати говоря, упорный борец за простоту и понятность Вирт придумал такую замечательную вещь, как with. И не стыдно ему было других критиковать после этого?
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[5]: Где собака зарыта???
От: Евгений Коробко  
Дата: 20.10.04 06:16
Оценка:
А ты не сталкивался, когда какой-нибудь GTK с гномом чуть в версиях разошлись и у пары функций изменился набор параметров. А голый С это дело не проверяет, и всё падает в рантайме. Зашибись, как некоряво
Евгений Коробко
Re[3]: Где собака зарыта???
От: Евгений Коробко  
Дата: 20.10.04 06:26
Оценка: :)))
Д>На самом деле это конечно шутка, но предел упрощению тоже должен быть.
Д>И кстати говоря, упорный борец за простоту и понятность Вирт придумал такую замечательную вещь, как with. И не стыдно ему было других критиковать после этого?

Да вы что! Это же замечательная вещь. Можно работать с неименованной переменной без копирования в локальную переменную. Это и быстро (х.з. сможет компилятор ли соптимизировать лишее копирование), и красиво — не загромождаем код лишними переменными.

with conn.execute('select * from table') do
while not eof do
begin
next;
end

А если функция должна вернуть большой объём данных? На С++ нужно объявлять переменную (которая либо останется неинициализированной, либо вызовется как правило не нужны в данном месте конструктор), потом передавать её по ссылке.

string s;
getString(&s);
s.substr(...);

Или

with GetString do
substr(...);
Евгений Коробко
Re[8]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 20.10.04 06:43
Оценка: :))) :)
ГВ>>...Как-никак — пересобирается полная программа...

Д>... перед компиляцией любого файла в C++ сначала делается препроцессинг...


А еще тормоза компиляции происходят из-за того что в Си/Си++ можно влюбом месте программы написать:
{
  extern void XerZnaetKakayaFunkciyaFigZnaetGdeOnaOpredelena();
  XerZnaetKakayaFunkciyaFigZnaetGdeOnaOpredelena();
}

(Кстати, по смыслу это очень близко к инструкции goto) Компилятор замучается бегать по всем файлам проекта и искать где же определена эта функция (причем ему еще надо убедиться в том что эта функция определена не более одного раза). А в модульных языках программирования компилятор с самого начала знает из какого модуля какая функция вызывается и не тратит время на ее поиск.
MODULE MyModule;

IMPORT L := StdLog;

BEGIN
  L.String("Привет!"); (* Компилятору сразу видно что вызывается процедура String() из модуля L := StdLog *)
END MyModule.
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 20.10.04 06:47
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV> уверяю, вирт не написал ни строчки — сам такой руководитель, знаю


Вот за себя и отвечайте.

Кстати, мог ли человек не написавший ни строчки написать вот это:
http://www.uni-vologda.ac.ru/oberon/infoart/proj0.htm
Re[2]: Где собака зарыта???
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 20.10.04 07:06
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Керниган написал об этом статью "Почему паскаль не является моим любимым языком".


Той статьей он выставил себя на посмешище. Дело в том, что в то время когда он писал эту статью Виртом уже был создан язык Модула, в котором были исправлены недочеты старого Паскаля. То есть Керниган малость запоздал со своей критикой. С тем же успехом Керниган мог бы написать статью о своей нелюбви к любому другому устаревшему языку, например, к Алголу. В своей статье Керниган ни разу не упомянул о языке Модула (с чем интересно это связано?), неужели он не знал о Модуле? Ай-ай-ай, как нехорошо получилось. В научном мире это равноценно что сесть в лужу.


Вот некоторая часть дерева эволюции оберонов:
Алгол -> Паскаль* -> Модула -> Модула-2 -> Оберон -> Оберон-2 -> Component Pascal
                                             |
                                             +-----> Active Oberon

*Статья Кернигана была посвящена критике языка Паскаль, того который сразу после Алгол.

Более подробное генеалогическое дерево оберонов представлено сдесь: http://www.oberon.ethz.ch/genealogy.html
Re[17]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Kh_Oleg  
Дата: 20.10.04 07:10
Оценка:
Здравствуйте, vdimas, Вы писали:

K_O>>Е-мое, "и эти люди запрещают мне ковыряться в носу?!"

K_O>>И это все ради того, чтобы вместо Add писать +, опускать индексы у массивов и не писать явно оператор цикла?!

V>Есть такое правило проектирования — интерфейс важнее реализации.

V>Реализация однократна, а интерфейс может быть использован несчетное количество раз.

Иди ты! А я ж и не знал! Но, мил человек, есть и еще одно правило: интерфейс должен быть недвусмысленным и самодостаточным.
Сие означает, что, глядя на интерфейс, я должен абсолютно четко представлять, что и как данная функция делает; если она использует в интерфейсе структуры данных — то для чего они нужны и как внутри используются. И чтобы при этом никаких side-эффектов не было.

Что в реализации — меня не волнует, но для того чтобы понять как пользоваться интерфейсом я не должен читать исходники реализации.

И коль уж воскресили древнюю тему, то повторюсь: мне не нравится, что в вышеприведенном примере операции над элементами массива выглядят точно также как и над одиночными переменными. Более того, то выражение, выглядящее как обычное математическое выражение над несколькими переменными на самом деле мало того, что работает с эелементами массивов, так еще и внутри себя содержит цикл.
Re[9]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Dervish Россия http://www.dervish.ru
Дата: 20.10.04 07:24
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>А еще тормоза компиляции происходят из-за того что в Си/Си++ можно влюбом месте программы написать:

СГ>
СГ>{
СГ>  extern void XerZnaetKakayaFunkciyaFigZnaetGdeOnaOpredelena();
СГ>  XerZnaetKakayaFunkciyaFigZnaetGdeOnaOpredelena();
СГ>}
СГ>

СГ>(Кстати, по смыслу это очень близко к инструкции goto) Компилятор замучается бегать по всем файлам проекта и искать где же определена эта функция (причем ему еще надо убедиться в том что эта функция определена не более одного раза).

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

Так что, извините, никак не могу согласиться с вами в этом вопросе.
... << RSDN@Home 1.1.4 beta 3 rev. 194>>
Re[9]: *
От: WolfHound  
Дата: 20.10.04 07:27
Оценка: 3 (1) +2
Здравствуйте, LaptevVV, Вы писали:

S>>Собственно, это-то и не нравится у Вирта. От него откровений ждали, а он "=" критикует. Ну не смешно ли?

LVV>Это все потому. что он — преподаватель. А Керниган и Ричи с Томсоном — профессиональные прогроаммисты. которые (скорее всего) преподаванием занимались ОЧЕНЬ МАЛО
Так получилось что я тоже немного попредовал... дык вот с = у людей ВОБЩЕ НИКАКИХ ПРОБЛЕМ НЕ ВОЗНИКЛО. Тоесть абсолютно никаких. Все это надуманый бред!
А приципился Вирт к этому по тому что не может придумать нормальных аргументов проив С/С++. Теоретик блин. И еще других учить пытается.

ЗЫ Прочитай "Эффективное программирование на С++" Кёниг и Му... Оказывается и С++ можно преподовать не сложнее паскаля. Ну и кому после этого нужен Вирт со своими выкидонами?
... << RSDN@Home 1.1.4 rev. 185 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[10]: *
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 20.10.04 07:35
Оценка: -1
Здравствуйте, Sinclair, Вы писали:

S>Ну, на самом деле это не все. Паскаль — неизмеримо круче плюсов потому, что

S>

    S>
  1. := гораздо понятнее, чем =
    S>
  2. ^. гораздо понятнее, чем ->
    S>
  3. строковые константы ограничиваются одинарными, а не двойными кавычками (в ДВА раза меньше штрихов!)
    S>
  4. в If можно писать на одну пару скобок меньше
    S>
S>Хотя, конечно, главное — все-таки то, что преподавание языка, где присваивание выполняется при помощи "=" означает выставить себя посмешищем.
S>З.Ы. В самом популярном языке программирования для персоналок вообще оператор присваивания не отличается от оператора сравнения на равенство. Что не мешает миллионам людей осваивать его безо всяких Виртов.

Вы под словом Паскаль понимаете тот язык программирования который был сразу после Алгола. С тех пор много воды утекло. Вот некоторая часть дерева эволюции оберонов:
Алгол -> Паскаль* -> Модула -> Модула-2 -> Оберон -> Оберон-2 -> Component Pascal
                                                |
                                                +-----> Active Oberon

Звездочкой отмечен тот Паскаль о котором говорите Вы.

Ну а теперь развеем Ваше невежество.

1)
S>
  • ^. гораздо понятнее, чем ->
    В оберонах обращение к полям записей через указатель на запись не требует указывания знака "^" можно просто писать p.x := 0; а не p^.x := 0;

    2)
    S>
  • строковые константы ограничиваются одинарными, а не двойными кавычками (в ДВА раза меньше штрихов!)

    Да будет Вам известно, в оберонах строковые константы ограничиваются именно двойными кавычками!
    VAR str: ARRAY 80 OF CHAR;
    BEGIN
      str := "Привет!";


    3)
    S>
  • в If можно писать на одну пару скобок меньше

    Да будет Вам известно, что в оберонах используется конструкция IF ... THEN ... END — с явным END в конце (без BEGIN). Такая конструкция, в отличие от конструкции if then begin end или аналогичной ей if(){ } лишена неоднозначности возникающей при нескольких вложенных друг в друга if-ов и else.

    Все структурные операторы оберона лишены каких бы то ни было неоднозначностей:

    IF . THEN ............................ END
    IF . THEN ...ELSE ... ELSIF . THEN ... END
    WHILE . DO ........................... END
    LOOP ................................. END
    REPEAT ............................. UNTIL
    FOR . TO . DO ........................ END
    FOR . TO . BY . DO ................... END
    CASE . OF v1: ... | v2: ..... ELSE ... END
    WITH v: T1 DO ... | v: T2.... ELSE ....END


    4)
    S>
  • := гораздо понятнее, чем =
    Оператор "=" обозначает математическую операцию сравнения, если x = y, то y = x.

    Кстати, для выхода из процедуры в оберонах используется инструкция RETURN.


    Так что, вынужден констатировать, что Вы равно как и, в свое время, Керниган со своей статьей о нелюбви к Паскалю, сели в лужу — проявили свое невежество и некомпетентность в том вопросе о котором ведете речь.

    Подробнее о Кернигане там: http://www.rsdn.ru/Forum/Message.aspx?mid=859711&amp;only=1
    Автор: Сергей Губанов
    Дата: 20.10.04
  • Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Dervish Россия http://www.dervish.ru
    Дата: 20.10.04 07:38
    Оценка: +1
    Здравствуйте, LaptevVV, Вы писали:

    LVV>>>Уже оказал. Не было б паскаля — сидели бы мы сейчас на Алголе-68!


    Д>>а как же K&R?


    LVV>Транслятор С писали профессиональные программисты-системщики, а транслятор с паскаля написал СТУДЕНТ!


    Валерий Викторович, есть предложение: давайте отличать дизайн языка и его реализацию. Дизайн был сделан учёным, а первая реализация студентом (я не знаю достоверно, но думаю, что в этом вопросе вы знаете наверняка и не буду спорить). Но ведь первая реализация (компилятора) языка носила исключительно демонстрационный характер, а все современные компиляторы Паскаля, как я понимаю, тоже сделаны профессионалами, разве нет?

    Кроме того, вопрос Дарнея касался немного другого. Если я его правильно понял, он засомневался, что в отсутствие Паскаля мы работали на Алголе-68 и предположил, что мы все работали бы на С (С++).

    LVV>Под руководством Вирта (и уверяю, вирт не написал ни строчки — сам такой руководитель, знаю).


    А оно вам нужно, писать эти строчки? У вас, как я понимаю, другая задача. И (моё личное имхо), таких хороших преподавателей как вы, вообще ещё поискать нужно. Сам факт вашего постоянного участия в RSDN вызывает уважение.
    ... << RSDN@Home 1.1.4 beta 3 rev. 194>>
    Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
    От: Dervish Россия http://www.dervish.ru
    Дата: 20.10.04 07:38
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    LVV>> уверяю, вирт не написал ни строчки — сам такой руководитель, знаю


    СГ>Вот за себя и отвечайте.


    Грубовато.
    ... << RSDN@Home 1.1.4 beta 3 rev. 194>>
    Re[9]: *
    От: Kluev  
    Дата: 20.10.04 07:44
    Оценка: +2
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Поскольку шаблонов в обычном Обероне нет, то писанины будет больше. Надо будет расписать отдельно для 2D и отдельно для 3D.

    СГ>
    СГ>TYPE
    СГ>  NurbsCurve3D = RECORD
    СГ>    p : INTEGER;
    СГ>    Pw: PointVector3D;
    СГ>  END;
    
    
    
    СГ>PROCEDURE (IN Self: NurbsCurve3D) Point (OUT out: TPoint3D; u: REAL), NEW;
    СГ>VAR N: ARRAY OF REAL; 
    СГ>    h: THPoint3D;
    СГ>    span: INTEGER;
    СГ>BEGIN
    СГ>  NEW(N, Self.p + 1);
    СГ>  span := knot_span(u);
    СГ>  basis_functions(N, u, span);  
    СГ>  h.x := 0; h.y := 0; h.z := 0;
    СГ>  FOR i := 0 TO Self.p DO
    СГ>    h.x := h.x + N[i] * Self.Pw[span - Self.p + 1].x;
    СГ>    h.y := h.y + N[i] * Self.Pw[span - Self.p + 1].y; 
    СГ>    h.z := h.z + N[i] * Self.Pw[span - Self.p + 1].z
    СГ>  END;
    СГ>  out := h.euclid()
    СГ>END Point;
    СГ>


    СГ>И как Вы хотите это сравнивать?


    Очень просто. Получается что для вполне реальной задачи старый добрый С++ подошел очень хорошо: все строго типизированно, лаконично, кратко, ясно и понятно. А в модном обероне мне пришлось бы заюзать копи-псате и потом еще два раза отлаживать два разных класса. Между прочим недецких по обьему кода. А на плюсах получилось это делается по принципу выстрелил и забыл
    Re[10]: _
    От: _Obelisk_ Россия http://www.ibm.com
    Дата: 20.10.04 07:46
    Оценка: 19 (2)
    Здравствуйте, WolfHound, Вы писали:

    WH>Здравствуйте, Сергей Губанов, Вы писали:


    WH> Попробуй человеку который не умеет программировать объяснить что такое указатель. Поверь мне ты офигеешь. А ведь что может быть проще указателя? Уж не EBNF ли?


    На самом деле объяснить просто. Что такое домашний адрес человек знает. Если домашний адрес записать на бумажке, то эта бумажка и будет указателем . Если память описывать как многоквартирный дом, то аналогии совсем прямые возникают.



    Душа обязана трудиться! (с) Н.Заболоцкий.
    Re[3]: А Вы хоть знаете что такое WITH?
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 20.10.04 07:48
    Оценка:
    Здравствуйте, Дарней, Вы писали:

    Д>На самом деле это конечно шутка, но предел упрощению тоже должен быть.

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

    А Вы хоть знаете что такое оператор WITH? Или это Вы взяли with из того паскаля, который был сразу после Алгола?

    На всякий случай напишу что такое оператор WITH. В оберонах WITH — это оператор конкретизации типа.
    TYPE
      Base = EXTENSIBLE RECORD
        ...
      END;
    
      T1 = RECORD (Base)
        ...
      END;
    
      T2 = RECORD (Base)
        ...
      END;
    
    PROCEDURE MyProc(VAR x: Base);
    BEGIN
      WITH x: T1 DO S1 | x: T2 DO S2 ELSE S3 END
    END MyProc;


    S1 — последовательность действий при которых x имеет тип T1
    S2 — последовательность действий при которых x имеет тип T2
    S3 — последовательность действий при которых динамический тип x не установлен.

    Смысл: Если динамический тип полиморфной переменной x оказался T1, то выполняется S1 внутри которой x рассматривается как переменная типа T1; в противном случае если динамический тип полиморфной переменной x оказался T2, то выполняется S2 внутри которой x рассматривается как переменная типа T2; в противном случае выполняется S3.

    TYPE
      Base = EXTENSIBLE RECORD END;
    
      T1 = RECORD (Base)
        Str: ARRAY 80 OF CHAR;
      END;
    
      T2 = RECORD (Base)
        Value: INTEGER;
      END;
    
    PROCEDURE MyProc(VAR x: Base);
    BEGIN
      WITH x: T1 DO StdLog.String(x.Str) | x: T2 DO StdLog.Int(x.Value) ELSE StdLog.String("Не известный тип!") END
    END MyProc;
    Re[8]: *
    От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
    Дата: 20.10.04 07:50
    Оценка: -1
    Здравствуйте, FR, Вы писали:

    FR>А вот мне кажется что ему придется мучатся выражая предметную область на более бедном языке.


    Обероны являются достаточными языками. Весь необходимый для работы арсенал средств в них присутсвует. Они не бедные, а минимально достаточные.
    Re[4]: А Вы хоть знаете что такое WITH?
    От: Курилка Россия http://kirya.narod.ru/
    Дата: 20.10.04 07:52
    Оценка:
    Здравствуйте, Сергей Губанов, Вы писали:

    СГ>Здравствуйте, Дарней, Вы писали:


    Д>>На самом деле это конечно шутка, но предел упрощению тоже должен быть.

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

    СГ>А Вы хоть знаете что такое оператор WITH? Или это Вы взяли with из того паскаля, который был сразу после Алгола?


    <skipped/>

    Ну прикольное ключ. слово (разве это оператор???), но ты давай нормальный пример, где бы оно было полезно, логично и "делало" бы полиморфизм.
    Тогда можешь заслужить аплодисменты, а так пока — пустой трёп, извиняюсь за выражения...
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.