Стиль Дональда Эрвина Кнута
От: SergeCpp Россия http://zoozahita.ru
Дата: 09.08.05 04:47
Оценка: 2 (1) +2 :)))
Кнут — я благоговею перед его разумом...

Но, загрузив (свободно доступный)
генератор случайных чисел (написан ИМ)

http://www-cs-faculty.stanford.edu/~knuth/programs/rng.c

я был (и с тех пор нахожусь) в шоке от
"весьма необычного" стиля программирования
Великого Мастера.

Неужели это только я такой привереда ?

P.S. НИКОИМ образом не следует считать это
за критику (кто я такой, в самом то деле)

Но неужели такой стиль — ...
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re: Стиль Дональда Эрвина Кнута
От: all-x Россия http://treedl.sf.net
Дата: 09.08.05 05:47
Оценка:
Здравствуйте, SergeCpp, Вы писали:

SC>Но, загрузив (свободно доступный)

SC>генератор случайных чисел (написан ИМ)

SC>http://www-cs-faculty.stanford.edu/~knuth/programs/rng.c


SC>я был (и с тех пор нахожусь) в шоке от

SC>"весьма необычного" стиля программирования
SC>Великого Мастера.

А что не так со стилем? Я бы только в теле цикла присваивания не стал через запятую писать. А в остальном всё должно быть понятно, если прочитать текст, к которому это прилагается.
Re[2]: Стиль Дональда Эрвина Кнута
От: SergeCpp Россия http://zoozahita.ru
Дата: 09.08.05 06:02
Оценка:
Здравствуйте, all-x, Вы писали:

...

AX>А что не так со стилем? Я бы только в теле цикла присваивания не стал через запятую писать. А в остальном всё должно быть понятно, если прочитать текст, к которому это прилагается.

  for (ss=seed&(MM-1),t=TT-1; t; ) {       
    for (j=KK-1;j>0;j--) x[j+j]=x[j], x[j+j-1]=0; /* "square" */
    for (j=KK+KK-2;j>=KK;j--)
      x[j-(KK-LL)]=mod_diff(x[j-(KK-LL)],x[j]),
      x[j-KK]=mod_diff(x[j-KK],x[j]);
    if (is_odd(ss)) {              /* "multiply by z" */
      for (j=KK;j>0;j--)  x[j]=x[j-1];
      x[0]=x[KK];            /* shift the buffer cyclically */
      x[LL]=mod_diff(x[LL],x[KK]);
    }
    if (ss) ss>>=1; else t--;
  }
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re: Стиль Дональда Эрвина Кнута
От: Oyster Украина https://github.com/devoyster
Дата: 09.08.05 06:17
Оценка:
Здравствуйте, SergeCpp, Вы писали:

[... skipped ...]

SC>Но неужели такой стиль — ...


Имхо Кнут — "человек, измученный нарзаном" (с), т.е. ассемблером. В своей монографии "Искусство программирования" все примеры у него написаны на ассемблере для типа машины MIX (позже MMIX). Вот и на Си он, видимо, пишет в ассемблерном стиле минимализма.
Re: Стиль Дональда Эрвина Кнута
От: Kubyshev Andrey  
Дата: 09.08.05 06:25
Оценка:
Во первых благоговеть ни перед кем не надо.
Во вторых нормальный стиль 20 летней давности.
Re: Стиль Дональда Эрвина Кнута
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 09.08.05 06:44
Оценка: -1
Здравствуйте, SergeCpp, Вы писали:

SC> Кнут — я благоговею перед его разумом...


Не знаю, не знаю... Из более-менее разумного, наверное, можно выделить его книгу "Конкретная математика", но это учебник/справочник для студентов 1 курса. Да книжка хорошая, но для первокурсников. Если первокурсников назвать детьми, то Кнута тогда можно будет назвать хорошим детским писателем.

SC> Неужели это только я такой привереда?


Кнут и языки высокого уровня — взаимо исключающие друг друга вещи.
Re: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 09.08.05 06:46
Оценка: +2
Здравствуйте, SergeCpp, Вы писали:

SC>http://www-cs-faculty.stanford.edu/~knuth/programs/rng.c


SC>я был (и с тех пор нахожусь) в шоке от

SC>"весьма необычного" стиля программирования
SC>Великого Мастера.

SC>Неужели это только я такой привереда ?


А ты попробуй написать и привести здесь это пример так, как тебе хочется, чтобы он выглядел. Просто так, чтобы сравнить можно было.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Стиль Дональда Эрвина Кнута
От: Oyster Украина https://github.com/devoyster
Дата: 09.08.05 06:54
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Не знаю, не знаю... Из более-менее разумного, наверное, можно выделить его книгу "Конкретная математика", но это учебник/справочник для студентов 1 курса. Да книжка хорошая, но для первокурсников. Если первокурсников назвать детьми, то Кнута тогда можно будет назвать хорошим детским писателем.


А как же "Искусство программирования"? Тяжело переоценить ценность этой монографии, вошедшей в сотню лучших научных монографий 20 века. Это действительно полезный труд, в котором собрано множество также действительно полезных алгоритмов.

Достопочтенный дон с этим не согласен?

СГ>Кнут и языки высокого уровня — взаимо исключающие друг друга вещи.


+1
Re[2]: Стиль Дональда Эрвина Кнута
От: SergeCpp Россия http://zoozahita.ru
Дата: 09.08.05 06:58
Оценка: :))
Здравствуйте, Сергей Губанов, Вы писали:

SC>> Кнут — я благоговею перед его разумом...


СГ>Не знаю, не знаю... Из более-менее разумного...


Премию Тьюринга — ДЕТИ ему дали ?
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re[2]: Стиль Дональда Эрвина Кнута
От: SergeCpp Россия http://zoozahita.ru
Дата: 09.08.05 07:02
Оценка:
Здравствуйте, eao197, Вы писали:

SC>>Неужели это только я такой привереда ?


E>А ты попробуй написать и привести здесь это пример так, как тебе хочется, чтобы он выглядел. Просто так, чтобы сравнить можно было.


Можно, но это — ловля на "слабо"...
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re[3]: Стиль Дональда Эрвина Кнута
От: Трурль  
Дата: 09.08.05 07:26
Оценка:
Здравствуйте, SergeCpp, Вы писали:

E>>А ты попробуй написать и привести здесь это пример так, как тебе хочется, чтобы он выглядел. Просто так, чтобы сравнить можно было.


SC>Можно, но это — ловля на "слабо"...


Нет, это — попытка разобраться, что же именно не нравицца.
Re[4]: Стиль Дональда Эрвина Кнута
От: SergeCpp Россия http://zoozahita.ru
Дата: 09.08.05 07:32
Оценка:
Здравствуйте, Трурль, Вы писали:

...

Т>Нет, это — попытка разобраться, что же именно не нравицца.

  for (ss=seed&(MM-1),t=TT-1; t; ) {       
    for (j=KK-1;j>0;j--) x[j+j]=x[j], x[j+j-1]=0; /* "square" */
    for (j=KK+KK-2;j>=KK;j--)
      x[j-(KK-LL)]=mod_diff(x[j-(KK-LL)],x[j]),
      x[j-KK]=mod_diff(x[j-KK],x[j]);
    if (is_odd(ss)) {              /* "multiply by z" */
      for (j=KK;j>0;j--)  x[j]=x[j-1];
      x[0]=x[KK];            /* shift the buffer cyclically */
      x[LL]=mod_diff(x[LL],x[KK]);
    }
    if (ss) ss>>=1; else t--;
  }
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re[3]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 09.08.05 07:37
Оценка: +1 -1
Здравствуйте, SergeCpp, Вы писали:

SC>>>Неужели это только я такой привереда ?


E>>А ты попробуй написать и привести здесь это пример так, как тебе хочется, чтобы он выглядел. Просто так, чтобы сравнить можно было.


SC>Можно, но это — ловля на "слабо"...


Нет, не так.

Во-впервых, как уже сказал Трурль, хотелось бы увидеть, что именно ты считаешь нормальным стилем. Просто интересно.

Во-вторых, по моему опыту, попытка записать математический алгоритм с использованием красивых и распространненых нотаций приводит к коду, который выглядит красиво, но смысл алгоритма в нем теряется. Иногда гораздо проще записать операции с матрицами используя переменные i, j, k, Kk, Lm и т.п., чем row, column, median, lowest_index и пр. Может быть, когда ты сделаешь свой вариант, ты увидешь, что математический алгоритм в нем виден гораздо меньше, чем в реализации Кнута.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: Стиль Дональда Эрвина Кнута
От: Кодт Россия  
Дата: 09.08.05 07:53
Оценка:
Здравствуйте, SergeCpp, Вы писали:

SC>http://www-cs-faculty.stanford.edu/~knuth/programs/rng.c


Сдаётся мне, что это — результат трансляции с MIX-ассемблера на Си...
Перекуём баги на фичи!
Re[3]: Стиль Дональда Эрвина Кнута
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 09.08.05 08:03
Оценка: 2 (1) +3 :)
Здравствуйте, Oyster, Вы писали:

O>А как же "Искусство программирования"? Тяжело переоценить ценность этой монографии, вошедшей в сотню лучших научных монографий 20 века. Это действительно полезный труд, в котором собрано множество также действительно полезных алгоритмов.


O>Достопочтенный дон с этим не согласен?


Да, действительно, там собраны описания алгоритмов, но это не главная заслуга этих книг. Более ценно то что там собраны исторические справки и ссылки на оригинальные работы. Что же касается просто алгоритмов самих по себе, то думаю никто не будет спорить, что Кормен и д.р. в этом преуспели значительно сильнее и им потребовалось для этого всего одна книга. А однажды я был сильно удивлен купив тоненькую книжку по алгоритмам автора по фамилии Иванов, в которой были описаны практически все основные алгоритмы, и была она сильно меньше книги Кормена с сотоварищами и в несколько раз дешевле. То есть по соотношению цена/качество Кнут с Корменом сильно проиграли Иванову . Это даже не будет шуткой если исходить из того, что программирование — это все-таки наука, а не искусство.

Опять же просто на алгоритмах самих по себе мир клином не сошелся. Оказывается не менее важна еще и самая элементарная техника кодирования. То есть когда алгоритмы преподносятся не сами по себе, а уже безупречно реализованными на языке программирования высокого уровня.

Тут есть Шень с его бесплатно распространяемой книгой на русском языке "Программирование: теоремы и задачи". В некотором смысле эта книга "рвёт всяких Кнутов и Корменов, как Тузик грелку".

Опять же, не надо забывать об Algorithms and Data Structures (Oberon version: August 2004) — N. Wirth ( http://www.oberon.ethz.ch/WirthPubl/AD.pdf (1'241 KB))

Короче, на фоне того что есть, книги Кнута "Искусство программирования" представляют скорее литературный или даже культурный интерес больше чем чисто научный. Ну а собственно науки в них, как я уже говорил, как раз наскребется только для студентов первокурсников. То есть перед Кнутом можно преклоняться как перед писателем, но не как перед ученым — его книги более литературны, чем научны.
Re[4]: Стиль Дональда Эрвина Кнута
От: Oyster Украина https://github.com/devoyster
Дата: 09.08.05 08:36
Оценка: +5
Здравствуйте, Сергей Губанов, Вы писали:

O>>Достопочтенный дон с этим не согласен?


СГ>Да, действительно, там собраны описания алгоритмов, но это не главная заслуга этих книг. Более ценно то что там собраны исторические справки и ссылки на оригинальные работы.


Да, Кнут не всё придумал сам. Это же монография — именно основная его заслуга в том, что он собрал великое множество алгоритмов в одном месте — в своих книгах.

СГ>Что же касается просто алгоритмов самих по себе, то думаю никто не будет спорить, что Кормен и д.р. в этом преуспели значительно сильнее и им потребовалось для этого всего одна книга.


Ничего подобного. N-ое количество лет назад я участвовал в олимпиадах по программированию. Естественно, кроме задачек мы гоняли теорию. Тот же самый Кормен был настольной книгой (если про эту книгу можно так сказать ). Так вот — Кормен у трёхтомника Кнута и в подмётках не валялся. Конечно, всякие там алгоритмы на графах, алгоритмы сортировки, RSA и пр. у Кормена есть (и описано более понятным языком), но многие вещи просто напрочь отсутствуют.

Маленький пример — писал давеча класс для работы с длинными целыми. У товарищей Кормена, Лейзерсона и Ривеста на месте оптимизаций операций над длинными числами польшой жирный пробел. В то же время Кнут достаточно полно раскрывает эту тему — там вам и быстрое умножение несколькими методами (разделяй и властвуй, Карацубы, с использованием модулярной арифметики, с использованием БПФ etc) и быстрое деление за время, сравнимое с умножением. И это всего лишь небольшая часть второго тома — где-то 20 страниц.

Я уж молчу про любовь Кнута к доказательствам и раскладыванию всего алгоритма по полочкам и о замечательных упражнениях, в которых, пожалуй, ещё больше материала, чем в самой книге.

СГ>А однажды я был сильно удивлен купив тоненькую книжку по алгоритмам автора по фамилии Иванов, в которой были описаны практически все основные алгоритмы, и была она сильно меньше книги Кормена с сотоварищами и в несколько раз дешевле. То есть по соотношению цена/качество Кнут с Корменом сильно проиграли Иванову . Это даже не будет шуткой если исходить из того, что программирование — это все-таки наука, а не искусство.


Вот тут поподробнее. Что такое "основные алгоритмы" в вашем понятии? Просто очень интересно — может это очередная книженция о графах...

СГ>Опять же просто на алгоритмах самих по себе мир клином не сошелся. Оказывается не менее важна еще и самая элементарная техника кодирования. То есть когда алгоритмы преподносятся не сами по себе, а уже безупречно реализованными на языке программирования высокого уровня.


Почему именно высокого? Вот Кнут так не считает он не настаивает ни на каком языке высокого уровня — он описывает алгоритм.

А техника кодирования — это не из той оперы. Прежде всего надо, чтобы мозг работал — согласны?

СГ>Тут есть Шень с его бесплатно распространяемой книгой на русском языке "Программирование: теоремы и задачи". В некотором смысле эта книга "рвёт всяких Кнутов и Корменов, как Тузик грелку".


Читал (в олимпиадный период). Не был впечатлён.

СГ>Опять же, не надо забывать об Algorithms and Data Structures (Oberon version: August 2004) — N. Wirth ( http://www.oberon.ethz.ch/WirthPubl/AD.pdf (1'241 KB))


Вирт с его "Алгоритмами и структурами данных" — всё-таки немножко совсем не то по обхвату, что "Искусство программирования". Сами спросите у Вирта — он подтвердит

СГ>Короче, на фоне того что есть, книги Кнута "Искусство программирования" представляют скорее литературный или даже культурный интерес больше чем чисто научный. Ну а собственно науки в них, как я уже говорил, как раз наскребется только для студентов первокурсников.


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

СГ>То есть перед Кнутом можно преклоняться как перед писателем, но не как перед ученым — его книги более литературны, чем научны.


Литературны? Это скорее можно сказать про того же Кормена, но никак не про Кнута. Вы вообще Кнута читали? Или "просматривали"?
Re[5]: Стиль Дональда Эрвина Кнута
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 09.08.05 09:00
Оценка:
Здравствуйте, Oyster

Все что я хотел сказать о моем отношении к творчеству Кнута я сказал. Спорить на эту тему не хочу.



O>А техника кодирования — это не из той оперы. Прежде всего надо, чтобы мозг работал — согласны?

Согласен-то я согласен, но техника кодирования сама по себе тоже важна и с потолка просто так она не свалится, ей тоже нужно обучаться. Сравните пожалуйста два слайда:
http://www.inr.ac.ru/~info21/texts/2005-06-27-MGU/national.slides/slide13.html
http://www.inr.ac.ru/~info21/texts/2005-06-27-MGU/national.slides/slide14.html
Re: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.08.05 09:04
Оценка: 12 (1) +5 -5 :))) :)
Здравствуйте, SergeCpp, Вы писали:

SC>Кнут — я благоговею перед его разумом...


SC>Но, загрузив (свободно доступный)

SC>генератор случайных чисел (написан ИМ)

SC>http://www-cs-faculty.stanford.edu/~knuth/programs/rng.c


SC>я был (и с тех пор нахожусь) в шоке от

SC>"весьма необычного" стиля программирования
SC>Великого Мастера.

Он просто слишком рано родился. Если он в начале своей корьеры прочитал наши правила форматировния, то проблем бы не было.

Кстати, само форматирование это еще ерунада. Его можно автоматически изменить. А вот переменные с именами MM, aa и т.п. — это точно ужасный стиль.

Кстити, красотой его реализации алгоритмов то же не блещут. Тут как-то прибигал его реализация алгоритма быстрой сортировки. Это был саый грязный и неуклюжий код который можно только себе представить. Плюс к тому же он был и плох алгоритмически.

В общем, я вообще не понимаю почему многие молятся на Кнута. Надо отдать ему должное за полноту его работы и несколько алгоритвов введенных им литчно. Но как пособиям по изучению алгоритмов я бы его книгам поставил твредую двойку. Обяснения запутанные. Дурацкая вымышленная машина. Алгоритмы плохо сформулированные. Моря goto. И это при том, что есть тонны более достойных книг объясняющие все намного более доходчиво.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.08.05 09:04
Оценка: 23 (2) +4 -1
Здравствуйте, eao197, Вы писали:

E>Во-вторых, по моему опыту, попытка записать математический алгоритм с использованием красивых и распространненых нотаций приводит к коду, который выглядит красиво, но смысл алгоритма в нем теряется. Иногда гораздо проще записать операции с матрицами используя переменные i, j, k, Kk, Lm и т.п., чем row, column, median, lowest_index и пр. Может быть, когда ты сделаешь свой вариант, ты увидешь, что математический алгоритм в нем виден гораздо меньше, чем в реализации Кнута.


Да? Ну, просто век живи, век учись... все равно дураком помрешь.

Попробуй меня разубедить в обратной мысли на базе вот этих примеров.
Быстрая сортировка написаная господином Кнутом:
Q1:    if (N<=M) goto Q9; S=0; l=1; r=N;
Q2:    i=l; j=r+1; K=R[l]->K;
Q3:    i+=1; if (R[i]->K<K) goto Q3;
Q4:    j-=1; if (K<R[j]->K) goto Q4;
Q5:    if (j<=i) { swap(R[l],R[j],Rt); goto Q7; }
Q6:    swap(R[i],R[j],Rt); goto Q3;
Q7:    if (r-j>=j-l>M) { push(j+1,r); S+=1; r=j-1; goto Q2; }
       if (j-l>r-j>M) { push(l,j-1); S+=1; l=j+1; goto Q2; }
       if (r-j>M>=j-l) { l=j+1; goto Q2; }
       if (j-l>M>=r-j) { r=j-1; goto Q2; }
Q8:    if (S) { pop(l,r); S-=1; goto Q2; }
Q9:    for (j=2; j<=N; j+=1) {
           if (R[j-1]->K > R[j]->K) {
               K=R[j]->K; Rt=R[j]; i=j-1; R[i+1]=R[i];
                   while (R[i]->K>K && i>=1) i-=1;
                   R[i+1]=Rt; } }

Быстрая сортировка записанная по человечески (в соотвествии с правилами форматирования РСДН):
template <class T> 
void QuickSort(T & item, int left, int right)
{
    int i = left;
    int j = right;  
    typename T::value_type center = item[(left + right) / 2];

    while(i <= j)
    {
        while (less(item[i], center))
            i++;
        while (less(center, item[j]))
            j--;

        if (i <= j)
            Swap(item[i++], item[j--]);
    } 

    if(left < j)
        QuickSort(item, left, j);
    if(right > i)
        QuickSort(item, i, right);
}
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Стиль Дональда Эрвина Кнута
От: Oyster Украина https://github.com/devoyster
Дата: 09.08.05 09:05
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Все что я хотел сказать о моем отношении к творчеству Кнута я сказал. Спорить на эту тему не хочу.


O>>А техника кодирования — это не из той оперы. Прежде всего надо, чтобы мозг работал — согласны?


СГ>Согласен-то я согласен, но техника кодирования сама по себе тоже важна и с потолка просто так она не свалится, ей тоже нужно обучаться. Сравните пожалуйста два слайда:

СГ>http://www.inr.ac.ru/~info21/texts/2005-06-27-MGU/national.slides/slide13.html
СГ>http://www.inr.ac.ru/~info21/texts/2005-06-27-MGU/national.slides/slide14.html

Но она таки не из той оперы. Спорить тоже не хочу — аналогично вам высказал свою точку зрения на ваше отношение к Кнуту.
Re[2]: Стиль Дональда Эрвина Кнута
От: Oyster Украина https://github.com/devoyster
Дата: 09.08.05 09:19
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В общем, я вообще не понимаю почему многие молятся на Кнута. Надо отдать ему должное за полноту его работы и несколько алгоритвов введенных им литчно. Но как пособиям по изучению алгоритмов я бы его книгам поставил твредую двойку.


VD>Обяснения запутанные.


Почему же? По-моему, у него объяснения более чем подробные. Никаких двусмысленностей, всё чётко, с доказательствами. Конечно, написано суховато, но уж никак не запутанно.

VD>Дурацкая вымышленная машина.


Имхо в те времена, когда он начал работать над своей монографией, у него не было другого выбора — оптимальнее всего можно было реализовать алгоритм только на ассемблере, он не хотел привязываться к какой-либо из существовавших платформ и придумал "среднее" — свою собственную псевдо-платформу.

Сейчас это, конечно, недостаток.

VD>Алгоритмы плохо сформулированные.


Похоже на фразу "Обяснения запутанные.". Уж чем-чем, а плохой формулировкой алгоритмов Кнут не страдает. Когда читаешь его, то понимаешь, что он прекрасно знает, как работает алгоритм, и пытается донести его до читателя, не потеряв ни одной из деталей.

VD>Моря goto.


См. про "дурацкую вымышленную машину". Причины те же.

VD>И это при том, что есть тонны более достойных книг объясняющие все намного более доходчиво.


Почти согласен. Не согласен только со словом "всё" — найди хотя бы ещё один труд, в котором есть всё то, что есть в "Искусстве программирования".
Re[5]: Стиль Дональда Эрвина Кнута
От: SergeCpp Россия http://zoozahita.ru
Дата: 09.08.05 09:21
Оценка:
Здравствуйте, VladD2, Вы писали:

...по человечески... (дело НЕ в правилах XYZ, а в человечности)

Вот так — я Ваш единомышленник!
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re[5]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 09.08.05 10:00
Оценка: 37 (2) +3
Здравствуйте, VladD2, Вы писали:

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


E>>Во-вторых, по моему опыту, попытка записать математический алгоритм с использованием красивых и распространненых нотаций приводит к коду, который выглядит красиво, но смысл алгоритма в нем теряется. Иногда гораздо проще записать операции с матрицами используя переменные i, j, k, Kk, Lm и т.п., чем row, column, median, lowest_index и пр. Может быть, когда ты сделаешь свой вариант, ты увидешь, что математический алгоритм в нем виден гораздо меньше, чем в реализации Кнута.


VD>Да? Ну, просто век живи, век учись... все равно дураком помрешь.


VD>Попробуй меня разубедить в обратной мысли на базе вот этих примеров.

<...>

На базе этих примеров даже не буду пытаться. Я вообще не знаю, откуда взялся пример быстрой сортировки, если речь шла об этом: http://www-cs-faculty.stanford.edu/~knuth/programs/rng.c

Кроме того, насколько я понял код Кнута, его реализация, в отличии от твоей, не рекурсивная. Поэтому их вообще сравнивать вряд ли возможно.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[6]: Стиль Дональда Эрвина Кнута
От: Трурль  
Дата: 09.08.05 10:25
Оценка:
Здравствуйте, eao197, Вы писали:

E>Я вообще не знаю, откуда взялся пример быстрой сортировки,


Насколько, я понимаю это — трансляция из MIXAL в C и писал его не Кнут.

E>Кроме того, насколько я понял код Кнута, его реализация, в отличии от твоей, не рекурсивная. Поэтому их вообще сравнивать вряд ли возможно.


А еще он сортирует вставками короткие последовательности.
Re: Стиль Дональда Эрвина Кнута
От: Glоbus Украина  
Дата: 09.08.05 10:25
Оценка: +1 :)
Здравствуйте, SergeCpp, Вы писали:

SC>Но неужели такой стиль — ...


Да вообще-то на мой взгляд ничего криминального нету. Обычный сишный стиль.
Удачи тебе, браток!
Re[5]: Стиль Дональда Эрвина Кнута
От: Трурль  
Дата: 09.08.05 10:28
Оценка:
Здравствуйте, Oyster, Вы писали:

O>Литературны? Это скорее можно сказать про того же Кормена, но никак не про Кнута. Вы вообще Кнута читали? Или "просматривали"?


Со всем согласен, кроме этой фразы. Кнута действительно приятно читать.
Re[3]: Стиль Дональда Эрвина Кнута
От: Трурль  
Дата: 09.08.05 10:38
Оценка: 15 (3) +2
Здравствуйте, Oyster, Вы писали:


VD>>Дурацкая вымышленная машина.


O>Имхо в те времена, когда он начал работать над своей монографией, у него не было другого выбора — оптимальнее всего можно было реализовать алгоритм только на ассемблере, он не хотел привязываться к какой-либо из существовавших платформ и придумал "среднее" — свою собственную псевдо-платформу.


O>Сейчас это, конечно, недостаток.


Не знаю, не знаю.

But the reasons for machine language that I gave in the preface to Volume 1, written in the early 1960s, remain valid today:

Moreover, if I did use a high-level language, what language should it be? In the 1960s I would probably have chosen Algol W; in the 1970s, I would then have had to rewrite my books using Pascal; in the 1980s, I would surely have changed everything to C; in the 1990s, I would have had to switch to C++ and then probably to Java. In the 2000s, yet another language will no doubt be de rigueur. I cannot afford the time to rewrite my books as languages go in and out of fashion; languages aren't the point of my books, the point is rather what you can do in your favorite language. My books focus on timeless truths.

Therefore I will continue to use English as the high-level language in TAOCP, and I will continue to use a low-level language to indicate how machines actually compute. Readers who only want to see algorithms that are already packaged in a plug-in way, using a trendy language, should buy other people's books.

Re[4]: Стиль Дональда Эрвина Кнута
От: Oyster Украина https://github.com/devoyster
Дата: 09.08.05 10:46
Оценка: +2
Здравствуйте, Трурль, Вы писали:

O>>Сейчас это, конечно, недостаток.


Т>Не знаю, не знаю.


[... skipped ...]

Таки +1

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

Ты, конечно, прав в том, что Кнут таким образом абстрагируется от платформы/языка/etc. Но и реднеки тоже по своему правы — им надо зарабатывать деньги, и желательно прямо сейчас, а не разбираться в тонкостях деления длинных целых, например. В итоге книгу хают и меньше покупают — вот и недостаток

Но всё-таки +1, ибо это научная монография, даже не научно-популярная.
Re: Стиль Дональда Эрвина Кнута
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 10.08.05 09:02
Оценка: 23 (4)
Здравствуйте, SergeCpp, Вы писали:

SC>Кнут — я благоговею перед его разумом...


SC>Но, загрузив (свободно доступный)

SC>генератор случайных чисел (написан ИМ)

SC>http://www-cs-faculty.stanford.edu/~knuth/programs/rng.c


SC>я был (и с тех пор нахожусь) в шоке от

SC>"весьма необычного" стиля программирования
SC>Великого Мастера.

SC>Неужели это только я такой привереда ?


Не разделяю сарказма О стиле Д. Кнута, наверное, надо судить о его серьезных проектах, а не о фрагментах кода, неясно с какого языка транслированых и, возможно, отформатированых.

На самом деле стиль Д. Кнута это литературное программирование. В своих интервью Д. Кнут замечал, что при разработке он обычно использует системы webc, которая позволяет по единому исходнику получить как описание программы, так и скармливаемый компилятору нечитабельный код. Литературное программирование даже можно отнести к методологиям разработки ПО. Одна оно не прижилось.

Посмотрите, например, на исходники программы TeX. Это же целая поэма И по количеству багов в этой системе можно судить, что литературное программирование это вещь заслуживающая по крайней мере внимания.

Если быть более точным, то полученый pdf файл является результатом трансляции файла tex.web, который является самым исходным исходником приложения. Из него получается файл описания tex.tex и паскалевский файл нечитаемого вида:

{4:}{9:}{$C-,A+,D-}{[$C+,D+]}{:9}PROGRAM TEX;LABEL{6:}1,9998,9999;{:6}
CONST{11:}MEMMAX=30000;MEMMIN=0;BUFSIZE=500;ERRORLINE=72;
HALFERRORLIN=42;MAXPRINTLINE=79;STACKSIZE=200;MAXINOPEN=6;FONTMAX=75;
FONTMEMSIZE=20000;PARAMSIZE=60;NESTSIZE=40;MAXSTRINGS=3000;
STRINGVACANC=8000;POOLSIZE=32000;SAVESIZE=600;TRIESIZE=8000;
TRIEOPSIZE=500;DVIBUFSIZE=800;FILENAMESIZE=40;
POOLNAME='TeXformats:TEX.POOL                     ';{:11}TYPE{18:}
ASCIICODE=0..255;{:18}{25:}EIGHTBITS=0..255;
ALPHAFILE=PACKED FILE OF CHAR;BYTEFILE=PACKED FILE OF EIGHTBITS;{:25}
{38:}POOLPOINTER=0..POOLSIZE;STRNUMBER=0..MAXSTRINGS;
PACKEDASCIIC=0..255;{:38}{101:}SCALED=INTEGER;
NONNEGATIVEI=0..2147483647;SMALLNUMBER=0..63;{:101}{109:}GLUERATIO=REAL;
{:109}{113:}QUARTERWORD=0..255;HALFWORD=0..65535;TWOCHOICES=1..2;
FOURCHOICES=1..4;TWOHALVES=PACKED RECORD RH:HALFWORD;
CASE TWOCHOICES OF 1:(LH:HALFWORD);2:(B0:QUARTERWORD;B1:QUARTERWORD);
END;FOURQUARTERS=PACKED RECORD B0:QUARTERWORD;B1:QUARTERWORD;
B2:QUARTERWORD;B3:QUARTERWORD;END;


Да, в литературном программировании используется goto Есть даже статья Д. Кнута о структурном программировании с использованием goto. Однако то, что я видел на примере программы tangle не вызывает протеста. Никакого спагетти не получается. Более того, иногда сталкивался с тем, что требуются некоторые усилия, чтобы красиво переписать алгоритмический код без использования goto. Особенно раньше, когда паскаль не предоставлял Exit, Continue, Break. Вот примеры меток, описаных Д. Кнутом в программе tangle, причем необходимость использовать некоторые из меток сейас уже отпала в связи с расширением языка Pascal. А ведь раньше, когда апологеты структурного программирования боролись за удаление этого оператора, из управляющих конструкций были только if..then..else, while..do, repeat..until, for..to/downto..do, case..of.. end

define exit = 10 { go here to leave a procedure } 
define restart = 20 { go here to start a procedure again } 
define reswitch = 21 { go here to start a case statement again } 
define continue = 22 { go here to resume a loop } 
define done = 30 { go here to exit a loop } 
define found = 31 { go here when you’ve found it } 
define not found = 32 { go here when you’ve found something else }


Лично я пробовал следовать идеям литературного программирования. Достаточно интересно, но эта тема, наверное, выходит за рамки этого топика.
Re[2]: Стиль Дональда Эрвина Кнута
От: vdimas Россия  
Дата: 10.08.05 09:03
Оценка: 1 (1) +1
Здравствуйте, Glоbus, Вы писали:

G>Да вообще-то на мой взгляд ничего криминального нету. Обычный сишный стиль.


Ага, пока сидел под DOS-ом, примерно так же на С и писал. Логически одно выражение записывал в одну строку, типа такого:

if (ss) ss>>=1; else t--;


Это потом уже пришла мода каждое выражение писать с новой строки, а тогда, на 25-ти строках текстового экрана из коих видны максимум 15 при отладке, подобный стиль был обычным делом.

Насчет наименований переменных — так же. С длинными именами приведенное выше выражение может просто не влезть в одну строку целиком. Да и программы с короткими идентификаторами банально быстрее компилировались
Re[2]: Стиль Дональда Эрвина Кнута
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 10.08.05 09:18
Оценка: :))) :))) :)
Здравствуйте, VladD2, Вы писали:

VD>В общем, я вообще не понимаю почему многие молятся на Кнута. Надо отдать ему должное за полноту его работы и несколько алгоритвов введенных им литчно. Но как пособиям по изучению алгоритмов я бы его книгам поставил твредую двойку. Обяснения запутанные. Дурацкая вымышленная машина. Алгоритмы плохо сформулированные. Моря goto. И это при том, что есть тонны более достойных книг объясняющие все намного более доходчиво.


Да зачем эти алгоритмы вообще нужны? Стоящие давно реализованы в .NET Framework, а остальные и нафиг не нужны Тасовать байты не царское дело
Re[2]: Стиль Дональда Эрвина Кнута
От: SergeCpp Россия http://zoozahita.ru
Дата: 10.08.05 09:48
Оценка:
Здравствуйте, Mystic, Вы писали:

...

M>Однако то, что я видел на примере программы tangle не вызывает протеста...


TANGLE — это оттуда ?

ftp://ftp.cs.stanford.edu/pub/cweb/cweb.tar.gz

тогда как вам


/*:52*//*57:*/
#line 792 "ctangle.w"
{
int c;
for(c= 0;c<256;c++)ccode[c]= ignore;
ccode[' ']= ccode['\t']= ccode['\n']= ccode['\v']= ccode['\r']= ccode['\f']
= ccode['*']= new_section;
ccode['@']= '@';ccode['=']= string;
ccode['d']= ccode['D']= definition;
ccode['f']= ccode['F']= ccode['s']= ccode['S']= format_code;
...


Отступы — не нужны, да ?
"=" в начале строки — тоже "ok", да
...
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re[3]: Стиль Дональда Эрвина Кнута
От: sch  
Дата: 10.08.05 10:05
Оценка:
> Это потом уже пришла мода каждое выражение писать с новой строки, а тогда, на 25-ти строках текстового экрана из коих видны максимум 15 при отладке, подобный стиль был обычным делом.
>
> Насчет наименований переменных — так же. С длинными именами приведенное выше выражение может просто не влезть в одну строку целиком. Да и программы с короткими идентификаторами банально быстрее компилировались

У отдельных компиляторов даже было ограничение на максимальную длину идентификатора, хвост просто отбрасывался. Сначала эта цифра была равна 8 байтам
Posted via RSDN NNTP Server 1.9
Re[3]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 10.08.05 10:08
Оценка: +1
Здравствуйте, SergeCpp, Вы писали:

SC>
SC>/*:52*//*57:*/
SC>#line 792 "ctangle.w"
SC>{
SC>int c;
SC>for(c= 0;c<256;c++)ccode[c]= ignore;
SC>ccode[' ']= ccode['\t']= ccode['\n']= ccode['\v']= ccode['\r']= ccode['\f']
SC>= ccode['*']= new_section;
SC>ccode['@']= '@';ccode['=']= string;
SC>ccode['d']= ccode['D']= definition;
SC>ccode['f']= ccode['F']= ccode['s']= ccode['S']= format_code;
SC>...
SC>


SC>Отступы — не нужны, да ?

SC>"=" в начале строки — тоже "ok", да

Очень смахивает на автоматически сгенерированный код.

А по поводу "=", я где-то видел code convention, который рекомендовал при переносе продолжения длинного выражения переносить знак операции на новую строку -- так перенос делается заметнее. Например:
if( some_thing_with_long_name + something_else_with_long_name + yet_another_beast
    == not_very_short_name_too() + something_else )
    ...

Значит кто-то пользуется и кому-то это удобно.

К тому же никого не смущают такие штуки:
std::cout << some_thing_with_long_name << " + "
    << something_else_with_long_name << " + "
    << yet_another_beast << std::endl;
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[3]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.08.05 10:09
Оценка: -1
Здравствуйте, Mystic, Вы писали:

M>Да зачем эти алгоритмы вообще нужны? Стоящие давно реализованы в .NET Framework, а остальные и нафиг не нужны Тасовать байты не царское дело


Это демагогия.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.08.05 10:09
Оценка:
Здравствуйте, vdimas, Вы писали:

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


G>>Да вообще-то на мой взгляд ничего криминального нету. Обычный сишный стиль.


V>Ага, пока сидел под DOS-ом, примерно так же на С и писал. Логически одно выражение записывал в одну строку, типа такого:


V>if (ss) ss>>=1; else t--;


Ага. И главное, что все ясно. ss, t... очень информативные имена. А отсуствие пробелов между операторами и операндами резко повышает читаемость.

Ну, и для краткости еще удочным приемом является запись нескольких выражений в одной строке. Тиа:
if (ss) ss>>=1; t--;
if (ss) ss>>=1; else t--;

и пусть эти лохи что будут пытаться это читать сами разбираются где два предложения, а где одно.

V>Это потом уже пришла мода каждое выражение писать с новой строки, а тогда, на 25-ти строках текстового экрана из коих видны максимум 15 при отладке, подобный стиль был обычным делом.


Это не мода. Это вымученное решение. Лучше иметь чуть более длинный код, но леко читаемый и понятный, чем шифрограмму, но очень компактную. А разные goto вообще выдают в человеке ассемблерщика так и не научившегося думать структурно.

V>Насчет наименований переменных — так же. С длинными именами приведенное выше выражение может просто не влезть в одну строку целиком. Да и программы с короткими идентификаторами банально быстрее компилировались


Ага. Одно цепляется за другое. Если схалтурить в малом, то рано или поздно халтурным окажется все ПО.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Стиль Дональда Эрвина Кнута
От: SergeCpp Россия http://zoozahita.ru
Дата: 10.08.05 10:26
Оценка:
Здравствуйте, eao197, Вы писали:

...

E>А по поводу "=", я где-то видел code convention, который рекомендовал при переносе продолжения длинного выражения переносить знак операции на новую строку -- так перенос делается заметнее. Например:

E>
E>if( some_thing_with_long_name + something_else_with_long_name + yet_another_beast
E>    == not_very_short_name_too() + something_else )
E>    ...
E>

E>Значит кто-то пользуется и кому-то это удобно.

E>К тому же никого не смущают такие штуки:

E>
E>std::cout << some_thing_with_long_name << " + "
E>    << something_else_with_long_name << " + "
E>    << yet_another_beast << std::endl;
E>


Если есть

a = b + c
      + d;


то, при случайном удалении второй строки...

А если


a = b + c +
        d;


то ...

Но это — вопрос вкуса в большей степени...
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re[3]: Стиль Дональда Эрвина Кнута
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 10.08.05 10:28
Оценка:
Здравствуйте, SergeCpp, Вы писали:

SC>TANGLE — это оттуда ?

SC>ftp://ftp.cs.stanford.edu/pub/cweb/cweb.tar.gz

Примерно, только для языка C, я же использовал систему, работающую с паскалем. И примеры буду брать в дальнейшем из нее.

SC>тогда как вам


SC>
SC>/*:52*//*57:*/
SC>#line 792 "ctangle.w"
SC>{
SC>int c;
SC>for(c= 0;c<256;c++)ccode[c]= ignore;
SC>ccode[' ']= ccode['\t']= ccode['\n']= ccode['\v']= ccode['\r']= ccode['\f']
SC>= ccode['*']= new_section;
SC>ccode['@']= '@';ccode['=']= string;
SC>ccode['d']= ccode['D']= definition;
SC>ccode['f']= ccode['F']= ccode['s']= ccode['S']= format_code;
SC>...
SC>


SC>Отступы — не нужны, да ?

SC>"=" в начале строки — тоже "ok", да

Это код не предназначен для просмотра Он сгенерирован программой ctangle на основании файла ctangle.w. Более того, этот файл написан Д. Кнут в соавторстве

% This file is part of CWEB.
% This program by Silvio Levy and Donald E. Knuth
% is based on a program by Knuth.


и я не знаю, какую часть работы выполнил в этом Д. Кнут. Хотя, говоря по правде, файл tandle.web содержит в соответствующем месте примерно такой текст:

@ Important milestones are reached during the input phase when certain
control codes are sensed.

Control codes in \.{WEB} begin with `\.{@@}', and the next character
identifies the code. Some of these are of interest only to \.{WEAVE},
so \.{TANGLE} ignores them; the others are converted by \.{TANGLE} into
internal code numbers by the |control_code| function below. The ordering
of these internal code numbers has been chosen to simplify the program logic;
larger numbers are given to the control codes that denote more significant
milestones.

@d ignore=0 {control code of no interest to \.{TANGLE}}
@d control_text=@'203 {control code for `\.{@@t}', `\.{@@\^}', etc.}
@d format=@'204 {control code for `\.{@@f}'}
@d definition=@'205 {control code for `\.{@@d}'}
@d begin_Pascal=@'206 {control code for `\.{@@p}'}
@d module_name=@'207 {control code for `\.{@@<}'}
@d new_module=@'210 {control code for `\.{@@\ }' and `\.{@@*}'}

@p function control_code(@!c:ASCII_code):eight_bits; {convert |c| after \.{@@}}
begin case c of
"@@": control_code:="@@"; {`quoted' at sign}
"'": control_code:=octal; {precedes octal constant}
"""": control_code:=hex; {precedes hexadecimal constant}
"$": control_code:=check_sum; {string pool check sum}
" ",tab_mark: control_code:=new_module; {beginning of a new module}
"*": begin print('*',module_count+1:1);
  update_terminal; {print a progress report}
  control_code:=new_module; {beginning of a new module}
  end;
"D","d": control_code:=definition; {macro definition}
"F","f": control_code:=format; {format definition}
"{": control_code:=begin_comment; {begin-comment delimiter}
"}": control_code:=end_comment; {end-comment delimiter}
"P","p": control_code:=begin_Pascal; {\PASCAL\ text in unnamed module}
"T","t","^",".",":": control_code:=control_text; {control text to be ignored}
"&": control_code:=join; {concatenate two tokens}
"<": control_code:=module_name; {beginning of a module name}
"=": control_code:=verbatim; {beginning of \PASCAL\ verbatim mode}
"\": control_code:=force_line; {force a new line in \PASCAL\ output}
othercases control_code:=ignore {ignore all other cases}
endcases;
end;


и тоже не кажется достаточно хорошо отформатированым. А вот как он выглядил уже в dvi:



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



Если посмотреть на истории изменений программы tangle, то многое становится более понятным, потому как последнее изменение было сделано в феврале 1993 года, т. е. более 13 лет назад. Естественно, что программа ну никак не может отвечать современным требованиям форматирования кода

% This program by D. E. Knuth is not copyrighted and can be used freely.
% Version 0 was released in December, 1981.
% Version 1 was released in September, 1982, with version 0 of TeX.
% Slight changes were made in October, 1982, for version 0.6 of TeX.
% Version 1.2 introduced {:nnn} comments, added @@= and @@\ (December, 1982).
% Version 1.4 added "history" (February, 1983).
% Version 1.5 conformed to TeX version 0.96 and fixed @@\ (March, 1983).
% Version 1.7 introduced the new change file format (June, 1983).
% Version 2.0 was released in July, 1983, with version 0.999 of TeX.
% Version 2.5 was released in November, 1983, with version 1.0 of TeX.
% Version 2.6 fixed a bug: force-line-break after a constant (August, 1984).
% Version 2.7 fixed the definition of check_sum_prime (May, 1985).
% Version 2.8 fixed a bug in change_buffer movement (August, 1985).
% Version 2.9 allows nonnumeric macros before their def (December, 1988).
% Version 3, for Sewell's book, fixed long-line bug in input_ln (March, 1989).
% Version 4 was major change to allow 8-bit input (September, 1989).
% Version 4.1 conforms to ANSI standard for-loop rules (September, 1990).
% Version 4.2 fixes stat report if phase one dies (March, 1991).
% Version 4.3 fixes @@ bug in verbatim, catches extra } (September, 1991).
% Version 4.4 activates debug_help on errors as advertised (February, 1993).


Впрочем правилами форматирования кода (и текста) можно управлять либо изменяя подключаемый файл макросов webmac.tex, либо выборочно переопределяя в нем макросы, либо, в совсем крайних случаях, непосредственно внося извенения в программу weave.web (которая предназначена для генерации tex-файл). Да и используемая схема выравнивания большого отторжения не вызывает, к ней вполне можно привыкнуть
Re[4]: Стиль Дональда Эрвина Кнута
От: Mab Россия http://shade.msu.ru/~mab
Дата: 10.08.05 11:54
Оценка:
СГ>Тут есть Шень с его бесплатно распространяемой книгой на русском языке "Программирование: теоремы и задачи". В некотором смысле эта книга "рвёт всяких Кнутов и Корменов, как Тузик грелку".
Данная книжка действительно очень хорошая, но в первую очередь как начальный учебник программирования. По ней, в частности, мы обучали (и, вероятно, будем обучать) детей в 8 классе.

СГ>Короче, на фоне того что есть, книги Кнута "Искусство программирования" представляют скорее литературный или даже культурный интерес больше чем чисто научный. Ну а собственно науки в них, как я уже говорил, как раз наскребется только для студентов первокурсников.

Как человек, имеющий профессиональное матобразование (мехмат МГУ), не могу согласиться с этим тезизом. Интересно, что за первый курс имеется в виду?
Re[4]: Стиль Дональда Эрвина Кнута
От: vdimas Россия  
Дата: 10.08.05 16:40
Оценка: 62 (4) +3
Здравствуйте, VladD2, Вы писали:

VD>Ну, и для краткости еще удочным приемом является запись нескольких выражений в одной строке. Тиа:

VD>
VD>if (ss) ss>>=1; t--;
VD>if (ss) ss>>=1; else t--;
VD>

VD>и пусть эти лохи что будут пытаться это читать сами разбираются где два предложения, а где одно.

Некие простейшие (атомарные по смыслу) действия делаются иногда за несколько шагов. Например:
int tmp=a; a=b; b=tmp; // swap values


Именно так я и писал более 10 лет назад, и не только я.

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

V>>Это потом уже пришла мода каждое выражение писать с новой строки, а тогда, на 25-ти строках текстового экрана из коих видны максимум 15 при отладке, подобный стиль был обычным делом.


VD>Это не мода. Это вымученное решение. Лучше иметь чуть более длинный код, но леко читаемый и понятный, чем шифрограмму, но очень компактную.


Хорошо звучит, но без учета реалий тех лет. Компактная запись была именно более читабельной по тем временам, ибо позволяла окинуть взглядом больший кусок кода на экране. Если бы то самое выражение написать "по-современному", согласно некоторым стандартам некоторых контор, то это будет:
if (ss) 
{
    ss>>=1; 
}
else
{
    t--;
}


На экране в то время поместилось бы всего пару таких выражений, и разобраться в алгоритме было бы непросто.


VD>А разные goto вообще выдают в человеке ассемблерщика так и не научившегося думать структурно.


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


VD>Ага. Одно цепляется за другое. Если схалтурить в малом, то рано или поздно халтурным окажется все ПО.


Схалтурить — это, например, выполнить поиск в отсортированном массиве методом полного перебора. Тогда все ПО точно окажется халтурным.

Замечу, программы тех времен удивительно эффективны по современным реалиям. Понимаешь, техника не позволяла халтурить

Ты как-то говорил насчет кастовости... Знаешь, я кажется припоминаю подобные времена. Одни программисты были способны писать сложные программы, которые адекватно работали на технике тех времен. Другие были способны писать программы, которые еле пыхали. Сейчас все уравнялось, конечно... Но когда-то подобные моменты стояли весьма остро.

-----
Для примера. 1992-й год. Одному "грамотному" челу в нашей лаборатории дают задание разработать программный эмулятор 8051 проца. (Не было тогда еще fd51). Ну, разработал он на TurboVision... Красиво... В общем, один шаг выполнялся примерно 3 секунды на 8086-й. Помучавшись пару месяцев я накатал чуть попроще, без TurboVision и вообще все переделал с 0-ля. У меня выполнялось более 50 тактов в секунду. Откуда там была разница в 150 раз — непонятно до сих пор.

Так что, халтура халтуре рознь.

-------
Я ведь не против современных стилей оформления кода. Ради бога, от техники надо брать все. Я вообще уже давно недоумеваю, почему мы до сих пор редактируем плоские текстовые файлы с кодом, вместо того, чтобы хранить код в репозиториях вместе с его моделью, навигацией и редактированием самой модели и ее параметров. Вот уж где можно было бы получить настоящее повторное использование кода. Подобная модель для кодогенерации была бы шаблоном уже сама по своей сути. А мы тут спорим — шаблоны С++ vs генерики

Просто речь о том, что технику тех лет использовали адекватно ее возможностям и не более того. Сейчас, ИМХО, не используют и 10% от возможности железячек в плане организации труда разработчика ПО.

Да и сами разработчики ПО по большей части склады с бухгалтериями пишут или нечто похожее...
Re[5]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.08.05 18:55
Оценка: 60 (4) +1
Здравствуйте, vdimas, Вы писали:

V>Некие простейшие (атомарные по смыслу) действия делаются иногда за несколько шагов. Например:

V>
V>int tmp=a; a=b; b=tmp; // swap values
V>


Ну, то есть этим "великим" старцам самолюбие мешало использовать функции для инкамсуляции функциональности:
Swap(&a, &b);

...

void Swap(int * a, int * b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}



V>Именно так я и писал более 10 лет назад, и не только я.


Могу только посочувствовать тебе. Я конечно тоже впитывал традиции какие были, но вот почему-то многие из них мне не нравились и я прекрасно пониал почему.

Я считаю, что все намного банальнее. Это не традиции. Это анархия и постепенная борьба с ней. Просто со временм формировалась культура. Формировалась она под гнетом сложности все более больших проектов.

А началось все как это не прискорбно звучит с математиков. Которые описывали все формулы на 3-6 буквах. Чистая абстракция — мать их.

V>Но это не значит, что никто не придерживался никаких стилей. Запись в одну строчку совершенно несвязанных или неатомарных действий уже тогда считалась плохим тоном.


Ну, да конечно. Только вот логика связанности не очень то определена.

V>Хорошо звучит, но без учета реалий тех лет.


Реалии тех лет — это отсуствие понимания того что хорошо звучит. Мноие и до сих пор этого не понмают.

V> Компактная запись была именно более читабельной по тем временам, ибо позволяла окинуть взглядом больший кусок кода на экране.


Это миф. Опровергается он в два счета. Досточно просто компактно записать более менее приличный код и увидить, что он стал просто не читаем. Самая копактная запись у регулярных варажений. Но покажи мне человека который может их спокойно читать. А вот EBNF, хотя совсем не компактен, но читается очень и очень хорошо.

V> Если бы то самое выражение написать "по-современному", согласно некоторым стандартам некоторых контор, то это будет:

V>
V>if (ss) 
V>{
    ss>>>=1; 
V>}
V>else
V>{
V>    t--;
V>}
V>


V>На экране в то время поместилось бы всего пару таких выражений, и разобраться в алгоритме было бы непросто.


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

Что до приведенного кода, то начинать нужно не с разбиения на строки, а с отделения операторов от переменых и от задания осмысленных имен переменным.
if (someBits != 0)
    someBits >>= 1;
else
    counter--;

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

V>Это не имеет никакого отношения к сути базовых алгоритмов.


Конечно. Это имеет отношение всего лишь к пониманию этих алгоритмов другими.

V> Более того, одно время считалось, что необоснованное применение рекурсии — грубая ошибка.


Ну, да компиляторы были дохлые. Вот только чтобы решить проблему рекусии можно или вообще не использовать goto или использовать ровно один goto, как это сделано в том же MS CRT. Эффективность при этом будет та же даже не доисторических компиляторах, а вот читаемость намного выше.

V> В некоторых нишах такое положение вещей до сих пор.


Ну, да в нашей области мастодонты еще не вымерли.
И их даже можено поняить когда речь идет об оптимизации алгоритма дикой важноти на дохлой железке. Но вот как понять этого мэтра который таким обраом пытается донести суть алгоритма до читателей?

V>Схалтурить — это, например, выполнить поиск в отсортированном массиве методом полного перебора. Тогда все ПО точно окажется халтурным.


О, нет. В этом случае только его часть окажется медленее оптимального. Причем воможно это даже никак не скажется на все ПО в целом. А вот если начинать халтурить с имен переменных и форматирования кода, то код конечно заработает, и возможно даже будет работать оптимально быстро. Но вот развивать его уже будет невозможно. И рано или поздно будет глюкодром вроде МС Ворд.

V>Замечу, программы тех времен удивительно эффективны по современным реалиям. Понимаешь, техника не позволяла халтурить


Тех времен, тех времен... А кто научил все (ну, не всх, но многих) нормально форматировать код? Кто придумал все эти стили с понятными именами переменных и т.п.? Это что придумали студенты только что вышедщие из вузов?

V>Ты как-то говорил насчет кастовости... Знаешь, я кажется припоминаю подобные времена. Одни программисты были способны писать сложные программы, которые адекватно работали на технике тех времен. Другие были способны писать программы, которые еле пыхали. Сейчас все уравнялось, конечно... Но когда-то подобные моменты стояли весьма остро.


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

V>-----

V>Для примера. 1992-й год. Одному "грамотному" челу в нашей лаборатории дают задание разработать программный эмулятор 8051 проца. (Не было тогда еще fd51). Ну, разработал он на TurboVision... Красиво... В общем, один шаг выполнялся примерно 3 секунды на 8086-й. Помучавшись пару месяцев я накатал чуть попроще, без TurboVision и вообще все переделал с 0-ля. У меня выполнялось более 50 тактов в секунду. Откуда там была разница в 150 раз — непонятно до сих пор.

Уж не в TV ли? Это все таки ГУЕ-вая (вернее ТУЕ-вая) библиотека. Уж эмуляторам она никак не могла помочь.

V>Так что, халтура халтуре рознь.


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

V>-------

V>Я ведь не против современных стилей оформления кода. Ради бога, от техники надо брать все.

Ну, тогда просто согласись, с тем что это банальный прогресс. Я конечно понимаю, что раньше трава была голубее, а небо зеленее, но это просто скушно занудство. Когдм мне было 20 я терпеть не мог тридцатилетних "стриков" которые зудели о зелености травы. Вот сейчас периодически самому хочется позудеть, но я понимаю, что это в себе нужно давить. и давлю.

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


Ну, это отдельная тема. Тут я с тобой не согласен. Я как раз умудрился в 94-ом поработать с таким вот чудом техники. Называлось это Gupta SQL Windows. Эдакий первый RAD с GUI и зачатками комплит ворда. Не скрою это было забавно. Но сегодняшние текстовые IDE вроде VS 2003=2005 + ReSharper или Идея намного более удобны и круты. Если IDE будут развиваться в этом направлении, то никакие репозитории не понадобятся. К тому же современные системы контроля версий практически те же самые репозитории, только хранят текст. И как не странно очень удобно.

V> Вот уж где можно было бы получить настоящее повторное использование кода. Подобная модель для кодогенерации была бы шаблоном уже сама по своей сути. А мы тут спорим — шаблоны С++ vs генерики


Это всего лишь заблуждене. Код это персистентная форма программы удобная для восприятия как человеком, так и машиной. Машина обработывает код в АСТ, который прекрасно поддается модификации и т.п. Так что ты просто не верно смотрешь на код. Не смотри на него как на монолит. А смотри как всего лишь на форму хранения. Тогда поймешь, что репозиторий всего лишь еще одно представление, которое менее универсально, недопускает прямой чтения/модификации человеком и имеет кучу других проблем.

V>Просто речь о том, что технику тех лет использовали адекватно ее возможностям и не более того. Сейчас, ИМХО, не используют и 10% от возможности железячек в плане организации труда разработчика ПО.


Ну, да трава голубее...

V>Да и сами разработчики ПО по большей части склады с бухгалтериями пишут или нечто похожее...


Те времена — это всего лишь движение к настоящему. Настоящие это всего лишь движение к будущему. Все развивается по спирали. Но! Но, к лучшему! И это главное.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Стиль Дональда Эрвина Кнута
От: adontz Грузия http://adontz.wordpress.com/
Дата: 10.08.05 19:20
Оценка: -1 :))) :))
Здравствуйте, VladD2, Вы писали:

VD>В общем, я вообще не понимаю почему многие молятся на Кнута. Надо отдать ему должное за полноту его работы и несколько алгоритвов введенных им литчно. Но как пособиям по изучению алгоритмов я бы его книгам поставил твредую двойку. Обяснения запутанные. Дурацкая вымышленная машина. Алгоритмы плохо сформулированные. Моря goto. И это при том, что есть тонны более достойных книг объясняющие все намного более доходчиво.


Правильно! Книга по алгоритмам должна быть на Си Шарпе!
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[5]: Стиль Дональда Эрвина Кнута
От: adontz Грузия http://adontz.wordpress.com/
Дата: 10.08.05 19:22
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Быстрая сортировка написаная господином Кнутом:

VD>Быстрая сортировка записанная по человечески (в соотвествии с правилами форматирования РСДН):

Вообще-то это разные алгоритмы С рекурсией и без ней. А ещё есть с рекурсией в правой ветви и циклом в левой. Вобщем зачем ты привёл этот пример не ясно.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[6]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 10.08.05 20:34
Оценка:
Здравствуйте, VladD2, vdimas

Интересная баталия у вас образовалась. И, что радует, без взаимных оскорблений.

Просто решил вставить еще пять копеек.

V>>Некие простейшие (атомарные по смыслу) действия делаются иногда за несколько шагов. Например:

V>>
V>>int tmp=a; a=b; b=tmp; // swap values
V>>


VD>
VD>Swap(&a, &b);
VD>void Swap(int * a, int * b)
VD>{
VD>    int temp = *a;
VD>    *a = *b;
VD>    *b = temp;
VD>}
VD>

VD>

Вообще-то код, записанный по месту, гораздо проще сопровождается. Например, одним движением руки мы легко превращаем:
unsigned short tmp=a; a=b; b=tmp;


Однако, если бы я увидел такой код более чем в двух местах одного файла, то я бы обязательно заменил его на Swap.

V>> Компактная запись была именно более читабельной по тем временам, ибо позволяла окинуть взглядом больший кусок кода на экране.


VD>Это миф. Опровергается он в два счета. Досточно просто компактно записать более менее приличный код и увидить, что он стал просто не читаем. Самая копактная запись у регулярных варажений. Но покажи мне человека который может их спокойно читать. А вот EBNF, хотя совсем не компактен, но читается очень и очень хорошо.


Не всеми. Имхо, мне сейчас проще разобрать или записать regex, чем прочитать EBNF. Просто с regex мне приходится гораздо чаще сталкиваться.

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

VD>
VD>if (someBits != 0)
VD>    someBits >>= 1;
VD>else
VD>    counter--;
VD>

VD>если при этом не приписывать совершенно бещссмысленные, в данном случае, скобки, то размер кода не кажется уж таким огромным. Прибавь сюда еще выделение кода в функции и получишь очень хорошо читаемый результат.

Что интересно, никого ведь не смутило наличие '>>= 1' вместо банального деления на 2. А ведь современные оптимизирующие компиляторы должны запись (someBits=someBits/2) (или someBits/=2) заменять на эффективные ассемблерные инструкции на раз.

А что касается сопровождения, то, имхо, не каждый программист сможет понять, что someBits>>=1 эвивалентно someBits/=2.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[7]: Стиль Дональда Эрвина Кнута
От: adontz Грузия http://adontz.wordpress.com/
Дата: 10.08.05 20:38
Оценка:
Здравствуйте, eao197, Вы писали:

E>Интересная баталия у вас образовалась. И, что радует, без взаимных оскорблений.


Тc-c-c! Сглазишь ещё!
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[3]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.08.05 21:11
Оценка:
Здравствуйте, adontz, Вы писали:

A>Правильно! Книга по алгоритмам должна быть на Си Шарпе!


Будешь смеяться, но книжка с самым доходчивым описанием многих серьезных алгоритмов в качестве примеров имела код на VB. Причем не на VB.NET, а на старом ВБ.

Оказалось, что отсуствие разных шаблонов и т.п. и простой синтаксис позвляет описать алгорит очень просто и доступно. А главное...

В общем, можешь зе упражняться в зласловии. Качество кники зависит от автора. А языки и т.п. — это все вторично. И кулхацеры и серьезные ученые могут легко проиграть в области кникописательства просто учителю с 30-и летним стажем, так как они тратили свое время не на то. Ученый занимался исседованиями, кулхацкер кулхачил. А учитель учился объянять казалось бы банальные вещи. Алгоритмы описываемые в подобных книжках не стоят выеденного яйца. Но для того кто их еще не знает это темный лес. И главное в книге не дать наиболее быструю или выпендржную реализацию, а доходчиво донести до читателя суть алгоритма. Вот это у Кнута, ну, никак не получилось. А у менее именитых Ивановых получилось. Вот и все.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.08.05 21:11
Оценка: +1
Здравствуйте, adontz, Вы писали:

A>Вообще-то это разные алгоритмы С рекурсией и без ней. А ещё есть с рекурсией в правой ветви и циклом в левой. Вобщем зачем ты привёл этот пример не ясно.


Алгоритм тут один — быстрая сортировка. Придумал его господин Richard Hoare. Задача Кнута была не выпендрися как малолетний кулхацкер, а донести смысл алгоритма до читателей его книги. Задача ему эта удалась очень плохо. Это что касается твоих понятий об алгоритмах.

Теперь о реализацииях. Чтобы устранить рекурсию 9 goto уж точно не требуется. Ну, и названий переменны вроде N, M, S, l, r, K, R и т.п. никто не заставлял.

Все это вместе взятое назывется — халтура. И никакая именитость автора тут оправданием являться не может, по-моему.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Стиль Дональда Эрвина Кнута
От: adontz Грузия http://adontz.wordpress.com/
Дата: 10.08.05 21:23
Оценка: +1 -1
Здравствуйте, VladD2, Вы писали:

VD>Алгоритм тут один — быстрая сортировка. Придумал его господин Richard Hoare.


Алгоритм это квадратики и ромбики соединённые стрелочками. Есть ещё реализации алгоритма. Лично я знаю три, и ты сравнивал разные.

VD>Задача Кнута была не выпендрися как малолетний кулхацкер, а донести смысл алгоритма до читателей его книги. Задача ему эта удалась очень плохо. Это что касается твоих понятий об алгоритмах.


Нет, как тут уже установили,
Автор: Mystic
Дата: 10.08.05
это скорее всего автоматически сгенерированный код и к стилю Кнута он отношения не имеет. Так что данный код не выражает ничьих задач.

VD>Теперь о реализацииях. Чтобы устранить рекурсию 9 goto уж точно не требуется. Ну, и названий переменны вроде N, M, S, l, r, K, R и т.п. никто не заставлял.


См. про номенклатуру (ща запосчу).

VD>Все это вместе взятое назывется — халтура. И никакая именитость автора тут оправданием являться не может, по-моему.


Да, только это автоматически сгенерированный код. Давай я возьму assembly listing твоего кода и буду орать, что твой код халтура, потому что нету отступов и сплошные goto по неименованным меткам Это как — логично будет?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[2]: Стиль Дональда Эрвина Кнута
От: Ka3a4oK  
Дата: 10.08.05 21:28
Оценка:
>>Есть даже статья Д. Кнута о структурном программировании с использованием goto.
Никак не могу найти данную статью в электронном виде бесплатно. Не поделитесь ?
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[6]: Стиль Дональда Эрвина Кнута
От: adontz Грузия http://adontz.wordpress.com/
Дата: 10.08.05 21:45
Оценка: 51 (7) +2 :)
Здравствуйте, VladD2, Вы писали:

VD>Ну, то есть этим "великим" старцам самолюбие мешало использовать функции для инкамсуляции функциональности:

Swap(&a, &b);

...

void Swap(int * a, int * b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}

VD>

Однозначно мешало. Речь недвусмысленно шла о временах, когда время вызова функции было сопоставимо со временем работы алгоритма. Думаю ключевого слова inline тогда не было

VD>Могу только посочувствовать тебе. Я конечно тоже впитывал традиции какие были, но вот почему-то многие из них мне не нравились и я прекрасно понимал почему.


Нет-нет. Думать впереди времени способны только Водолеи (вот у IT спроси), а ты у нас Телец, так что не верю

VD>А началось все как это не прискорбно звучит с математиков. Которые описывали все формулы на 3-6 буквах. Чистая абстракция — мать их.


Нет. Номенклатура. Математики не просто всё описывали одной-двумя буквами, но и точно знали, что i, j, k — индексы, S — сумма, П (греческое заглавное пи) — произведение и так далее.
Точно так же можно и химиков обвинять, вместо сильная серная кислота и слабая серная кислота, они говорят серная, серноватая, сернистая, серноватистая. Вот ты вряд ли знаешь какая кислота сильнее злокуздроватая или злокуздроватистая, а химик сразу скажет, что злокуздроватая сильнее даже не зная формулы. Просто суффиксы названиям раздают по специальному правилу. Так что любое обозначение выдранное из среды всегда становится непонятным и удивлятся тут не следует.
Когда пишется программа — модель физического процесса то часто можно увидеть имена переменных rho, f2, m3 — весьма непонятные постороннему. Но программа это не вешь в себе, к ней прилагается рисуночек на котором ясно видно, что rho это вязкость раствора, сила f2 направленна вверх, а m3 масса нити.

V>>Но это не значит, что никто не придерживался никаких стилей. Запись в одну строчку совершенно несвязанных или неатомарных действий уже тогда считалась плохим тоном.


Другое дело, что считать атомарной операцией. Например обмен двух чисел не атомарная операция с точки зрения процессора, но для программиста атомарная. А вот сортировка массива это атомарная операция? Если это маленькая часть большого алгоритма, то да. Так что атомарность понятие относительное. Я сейчас пишу Logger.Log("message") и для меня это атомарная операция, а там внутри чёрт знает что может твориться (и творится на самом деле).

V>>Хорошо звучит, но без учета реалий тех лет.

VD>Реалии тех лет — это отсуствие понимания того что хорошо звучит. Многие и до сих пор этого не понимают.
Реалии тех лет, это 8086/80286 процессор Он стакой скорость работал, что его тики чуть ли не вслух можно было отсчитывать. Какие-нибудь 4MHz были крутейшей скоростью.

V>> Компактная запись была именно более читабельной по тем временам, ибо позволяла окинуть взглядом больший кусок кода на экране.

VD>Это миф. Опровергается он в два счета. Досточно просто компактно записать более менее приличный код и увидить, что он стал просто не читаем. Самая копактная запись у регулярных варажений. Но покажи мне человека который может их спокойно читать. А вот EBNF, хотя совсем не компактен, но читается очень и очень хорошо.

На LCD мониторе в 19" Влад, давай я тебе покажу кусок кода, каким бы он был виден на экране тех времён 80х25. Вернее всё таки 78х22 — редактор тоже место жрал. Вот мой код каким он был бы виден, через редактор тех времён. Вопрос — что он делает?


using System;
using System.Collections;

namespace MedicalForm
{
    public class DBHashElement
    {
        public int Key;
        public object Value;
        
        public DBHashElement()
        {
        }
        
        public DBHashElement(int key, object value)
        {
            Key = key;
            Value = value;
        }
    }
    
    public class DBHashEnumerator : IEnumerator

А вот он же, но ужатый
using System;
using System.Collections;

namespace MedicalForm
{
    public class DBHashElement
    {
        public int Key; public object Value;
        public DBHashElement(){}
        public DBHashElement(int key, object value){ Key = key; Value = value;|// <- граница экрана
    }
    public class DBHashEnumerator : IEnumerator
    {
        private IDictionaryEnumerator _enumerator = null;
        public DBHashEnumerator(Hashtable hashtable) { _enumerator = hashtable|// <- граница экрана
        public object Current { get { return new DBHashElement((int)_enumerato|// <- граница экрана
        public bool MoveNext() { return _enumerator.MoveNext(); }
        public void Reset() { _enumerator.Reset(); }
    }
    public class DBHash : IEnumerable
    {
        private Hashtable _hashtable = new Hashtable();


VD>Еще раз. Полная ерунда, что одинаковое количество кода впихнутое в один экран и разнесенное на два экрана чем то отличаются. Код должен быть структурирован и логичен. Вот тогда он будет читаться действительно нормально.


Тогда он на распечатке будет нормально читаться. Но необходимость постоянно скроллить (да, ты не забыл, что колёсика у мышек тогда не было и скролл был рывковый PgUp/PgDn) сомнительное удовольсвие и не повышает читаемость кода с экрана.

V>>Это не имеет никакого отношения к сути базовых алгоритмов.

VD>Конечно. Это имеет отношение всего лишь к пониманию этих алгоритмов другими.

А алгоритмы вообще-то не по коду понимают Код это так — довесок.

V>> Более того, одно время считалось, что необоснованное применение рекурсии — грубая ошибка.

VD>Ну, да компиляторы были дохлые. Вот только чтобы решить проблему рекусии можно или вообще не использовать goto или использовать ровно один goto, как это сделано в том же MS CRT. Эффективность при этом будет та же даже не доисторических компиляторах, а вот читаемость намного выше.

Это частные случаи. В общем случае нужен цикл + аналог стека, что мы и видим в коде из первого сообщения.

VD>И их даже можено поняить когда речь идет об оптимизации алгоритма дикой важноти на дохлой железке. Но вот как понять этого мэтра который таким обраом пытается донести суть алгоритма до читателей?


А с чего ты решил, что этим кодом пытались до кого-то что-то донести? Вообще почему ты думаешь, что что-то доносить надо кодом?

VD>И рано или поздно будет глюкодром вроде МС Ворд.


MSWord у меня замечательно работает Так что аргумент какой-то не такой

VD>Тех времен, тех времен... А кто научил все (ну, не всх, но многих) нормально форматировать код? Кто придумал все эти стили с понятными именами переменных и т.п.? Это что придумали студенты только что вышедщие из вузов?


Нет, это придумали архитекторы, для студентов вышедших из вузов — дешёвой рабочей силы. Стандарное форматирование и понятные имена переменных это не залог понимания кода вообще, это залог быстрого понимания кода не тем, кто его написал. Стандартное форматирование нужно не для того, что ты понимал то, что написал сам, а для того чтобы ты понимал то, что написали другие и не тратил на это много времени.

VD>Ну, а стили — это средство повысить свою эффективность и позволить другим понять твой код.


О! Да ты оказывается и сам всё знаешь! Именно другим!

VD>Да я не спорю, что в любом стиле можно написать относительно небольшую и эффективную программу. Даже плюя на стиль добиться эффективности легче. Но что будет потом? Ведь потом написанный в хреновом стиле эмулятор выбросят и возьмут тот что в 50 раз медленее, но с более понятным кодом. Ведь оптимизировать код намного проще чем разбираться в награмождениях.


А тогда 99% программ было велосипедами. Ни о какой поддержке без автора программы и речи не было Думаешь тот эмулятор опкоды через ADO читал?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[7]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.08.05 21:52
Оценка:
Здравствуйте, eao197, Вы писали:

E>Вообще-то код, записанный по месту, гораздо проще сопровождается. Например, одним движением руки мы легко превращаем:

E>
E>unsigned short tmp=a; a=b; b=tmp;
E>


Вообще, то как раз наоборот.

E>Однако, если бы я увидел такой код более чем в двух местах одного файла, то я бы обязательно заменил его на Swap.


Вот именно по этому. Но не только. Структурированный код проще понимат. Мне не потребовалось влеплять коментарий "swap values". Это понятно из названия фукнции. И не понадобилось изучать что это код делат то что нужно. Фнукцию ведь завсегда отладить проще чем разбросанный по всему проекту код.

Если уж эффективность важна, то можно было и макрос состяпать:
#define Swap(a, b) do { a ^= b; b ^= a; a ^= b; } while(0)

E>Не всеми. Имхо, мне сейчас проще разобрать или записать regex, чем прочитать EBNF. Просто с regex мне приходится гораздо чаще сталкиваться.


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

E>Что интересно, никого ведь не смутило наличие '>>= 1' вместо банального деления на 2.


А ты уверен, что это не был именно сдвиг? С именами переменных вроде ss и t по этому поводу ничего разумного сказать нельзя. Я ведь переменную не даром someBits назвал. Как раз рассчитывал, но то что в коде оператор сдвига применен осознанно, а не как оптимизация.

E> А ведь современные оптимизирующие компиляторы должны запись (someBits=someBits/2) (или someBits/=2) заменять на эффективные ассемблерные инструкции на раз.


Должен. Но тут говорилось о не современных. Да и не все современные это делают. Например, джит дотнета тупит по этому поводу.

E>А что касается сопровождения, то, имхо, не каждый программист сможет понять, что someBits>>=1 эвивалентно someBits/=2.


И к чему это? Это еще раз говорит, о том, что кулхацкерство на ровом месте больше создает проблемы, чем решает.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.08.05 22:34
Оценка:
Здравствуйте, Oyster, Вы писали:

O>...Кормен был настольной книгой (если про эту книгу можно так сказать ). Так вот — Кормен у трёхтомника Кнута и в подмётках не валялся. Конечно, всякие там алгоритмы на графах, алгоритмы сортировки, RSA и пр. у Кормена есть (и описано более понятным языком), но многие вещи просто напрочь отсутствуют.


Вот ответь на вопрос. Может ли широта охвата компенсировать низкое качество объяснения?

В том то и дело, что заслуга Кнута в том, что он собрал все вместе. До него это никто не делал. То есть он первопроходец. Так зачем же равняться на него как на икону? Сделал хорошее дело и за это мы его уважем. Но на дворе 2005-ый год. И изучать алгоритмы можно по куда более доходчивым книгам.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.08.05 22:34
Оценка: 9 (1) +1 -1 :)
Здравствуйте, adontz, Вы писали:

A>Однозначно мешало. Речь недвусмысленно шла о временах, когда время вызова функции было сопоставимо со временем работы алгоритма. Думаю ключевого слова inline тогда не было


Про макросы слышал?

A>Нет-нет. Думать впереди времени способны только Водолеи (вот у IT спроси), а ты у нас Телец, так что не верю


Суеверный?

A>Нет. Номенклатура. Математики не просто всё описывали одной-двумя буквами, но и точно знали, что i, j, k — индексы, S — сумма, П (греческое заглавное пи) — произведение и так далее.


Во, во. А далее было не мало. В итоге получаем описание:

Пусть M = (Q, T, D, q0, F) — НКА

И все дружо перелистывают на две странички назад, чтобы вспомнить, что же такое Q, T, D и F?

A>Точно так же можно и химиков обвинять,


Привычки химиков слава богу не отразились на програмировании. А вот дурные привычки математиков отразились.

A>На LCD мониторе в 19" Влад, давай я тебе покажу кусок кода, каким бы он был виден на экране тех времён 80х25.


Адонз, я несколько старше тебя. Так что ты лучше сам посмотри.

A> Вернее всё таки 78х22 — редактор тоже место жрал.

A> Вот мой код каким он был бы виден, через редактор тех времён. Вопрос — что он делает?

Иди почитай правила форматирования РСДН. Удивишся, но у нас и сейчас ограничение на 78 символов.

A>Тогда он на распечатке будет нормально читаться. Но необходимость постоянно скроллить (да, ты не забыл, что колёсика у мышек тогда не было и скролл был рывковый PgUp/PgDn) сомнительное удовольсвие и не повышает читаемость кода с экрана.


Я код в основном курсором скролирую. Но это тут не причем. Делай мельче функции. Это тоже полезно.

VD>>И их даже можено поняить когда речь идет об оптимизации алгоритма дикой важноти на дохлой железке. Но вот как понять этого мэтра который таким обраом пытается донести суть алгоритма до читателей?


A>А с чего ты решил, что этим кодом пытались до кого-то что-то донести? Вообще почему ты думаешь, что что-то доносить надо кодом?


Непонятливый? Сейчас пояснию. Цель книги донести некие знания. У Кнута книга об алгоритмах. Стало быть он хотел донести до читателей смысл этих алгоритмов. Чтобы сделать это он в том числе приводил код реализации этих клгоритмов. Если бы код бел написан в соотвествии с приличным стилем, то задача была бы решена. А так задача только усложнена, так как из такой реализации ничего понять нельзя. Разве что больше запутаться.

VD>>И рано или поздно будет глюкодром вроде МС Ворд.


A>MSWord у меня замечательно работает Так что аргумент какой-то не такой


Это потому, что ты его практически не используешь.

VD>>Тех времен, тех времен... А кто научил все (ну, не всх, но многих) нормально форматировать код? Кто придумал все эти стили с понятными именами переменных и т.п.? Это что придумали студенты только что вышедщие из вузов?


A>Нет, это придумали архитекторы, для студентов вышедших из вузов — дешёвой рабочей силы.


Ой, адонз, так забавно от тебя такие понты слышать. Ну, да это не по теме. А по теме... эти архитекторы откуда взялись? Появились?

A> Стандарное форматирование и понятные имена переменных это не залог понимания кода вообще, это залог быстрого понимания кода не тем, кто его написал. Стандартное форматирование нужно не для того, что ты понимал то, что написал сам, а для того чтобы ты понимал то, что написали другие и не тратил на это много времени.


Мне жаль тебя, если ты еще не понял, что в первую очередь это нужно именно для тебя. Или ты код пишешь на один раз и сразу же его выбрасывашь?

VD>>Ну, а стили — это средство повысить свою эффективность и позволить другим понять твой код.


A>О! Да ты оказывается и сам всё знаешь! Именно другим!


Да, нет. И другим.

A>А тогда 99% программ было велосипедами.


Давай, адонз, ты мне не будшь рассказывать что было тогда. А? А то ведь смешно ей богу. Это eao197 имеет право этим зниматься.

A> Ни о какой поддержке без автора программы и речи не было Думаешь тот эмулятор опкоды через ADO читал?


У уродов и ламеров несомненно. Но как бы всегда были люди решавшие серьезные задачи. И коллективы в сотни человек. И проекты на десятки человеколет. И их решали. Решали тогда, решают и сейчас.

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

Так вот. Сейчас не середина 20-го века. И изучать сегодня быструю сортировку по Кнуту — это просто безссмысленно проводить время и тратить силы. А плевать на принципы форматирования и именования — означает сгребать грабли давно обнаруженные и поисанные предыдущими поколениями.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.08.05 22:42
Оценка: 1 (1)
Здравствуйте, Трурль, Вы писали:

Т>Кнута действительно приятно читать.


Кому как.

Если доставляет удовольствие читать математические формулы и странный код, то конечно. А если предпочиташь неформальное обяснение, то вряд ли.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Стиль Дональда Эрвина Кнута
От: adontz Грузия http://adontz.wordpress.com/
Дата: 10.08.05 23:30
Оценка: :)))
Здравствуйте, VladD2, Вы писали:

VD>Про макросы слышал?


А переменную ты внутри макроcа объявишь?
#define swap(type, a, b) type temp = a; b = b; b = temp;

swap(int, a, b)
swap(int, a, b) <- очень непонятная ошибка компиляции.


VD>

Пусть M = (Q, T, D, q0, F) — НКА

VD>И все дружо перелистывают на две странички назад, чтобы вспомнить, что же такое Q, T, D и F?

Ага. А сейчас нажимают правую кнопку и выбирают "Go to Definition"

A>>На LCD мониторе в 19" Влад, давай я тебе покажу кусок кода, каким бы он был виден на экране тех времён 80х25.

VD>Адонз, я несколько старше тебя. Так что ты лучше сам посмотри.

Да я-то младше, но сам поcмотрtть успел, ты уж не сомневайся. Я больше года на 286х с 13.5" мониторами сидел.

VD>Иди почитай правила форматирования РСДН. Удивишся, но у нас и сейчас ограничение на 78 символов.

А я о высоте, а не о ширине

VD>Я код в основном курсором скролирую. Но это тут не причем.

На самом деле причём. Скроллить текст курсором было очень медленно

VD>Непонятливый? Сейчас пояснию. Цель книги донести некие знания. У Кнута книга об алгоритмах. Стало быть он хотел донести до читателей смысл этих алгоритмов. Чтобы сделать это он в том числе приводил код реализации этих клгоритмов. Если бы код бел написан в соотвествии с приличным стилем, то задача была бы решена. А так задача только усложнена, так как из такой реализации ничего понять нельзя. Разве что больше запутаться.


Единственное верное в твоих словах, это уточнение "в том числе". Кнут (и не только он) описывал алгоритм словами и кодом MIX'а. Что касается кода, то к ассемблеру форматирование мало применимо по определению. Так что же тебя не устраивает?

A>>MSWord у меня замечательно работает Так что аргумент какой-то не такой

VD>Это потому, что ты его практически не используешь.

С чего ты взял? И его использую и эксель Странный ты человек. У тебя Word глючит, но не просто так, а потому что при его написании якобы (исходников-то ты не видел) не использовали какие-то методы форматирования исходного кода, а если у кого-то не глючит, то это потому что не пользуются. Но мысли, что другие активно использующие Word люди могут, в отличие от тебя, не испытывать трудностей. Так же как и мысль, что Word глючит именно у тебя, по локальным причинам и к форматированию кода эта проблема вообще отношения не имеет тебе в голову не приходит

A>>Нет, это придумали архитекторы, для студентов вышедших из вузов — дешёвой рабочей силы.

VD>Ой, адонз, так забавно от тебя такие понты слышать.

И где ты понты увидал?
//--OFF Влад, если уж пишешь мой ник русскими буквами, то запомни, что на конце буква "Ц". адонц.

VD>Ну, да это не по теме. А по теме... эти архитекторы откуда взялись? Появились?


Вобщем-то да. Программистами раньше были математики. Знания передавались от учителя к ученику и были платформозависимы. Потом всё более-менее унифицировалось. Но первые архитекторы были самоучками и глагол "появились" тут, думаю, уместен. Да ты и сам должен всё помнить — сам ведь говорил, что старше.

VD>Мне жаль тебя


Не надо меня жалеть — себя пожалей. У меня всё ОК, а у тебя вон Word глючит

VD>если ты еще не понял, что в первую очередь это нужно именно для тебя. Или ты код пишешь на один раз и сразу же его выбрасывашь?


Я не говорил, что форматирование не нужно мне. Я говорил, для чего оно нужно и появилось и в первую очередь. Любая стандартизация это следствие производственной необходимости взаимозаменяемости. Не необходимости во взаимозаменяемости — не нужен и стандарт.

A>>А тогда 99% программ было велосипедами.

VD>Давай, адонз, ты мне не будшь рассказывать что было тогда. А? А то ведь смешно ей богу. Это eao197 имеет право этим зниматься.

Хм. А извини с какой стати ты мне запрещаешь? Нечем крыть решил заткнуть? или К даже если и так, всё равно какая-то нелепая манера дискутировать.

VD>У уродов и ламеров несомненно. Но как бы всегда были люди решавшие серьезные задачи. И коллективы в сотни человек. И проекты на десятки человеколет. И их решали. Решали тогда, решают и сейчас.


Да, только тогда и сейчас за десять человеколет решались задачи разного объёма. Раньше для каждой бухгалтерии писалась чуть ли не своя БД, сейчас берут готову. Нужен интерфейс — своя библиотека! Сейчас же берут готовую. Так что было очень много велосипедов на написание которых тратилось очень много времени. И велосипед, как ты его не оформь, без автора долго не живёт — его переписывают.

VD>А плевать на принципы форматирования и именования


А кто говорил плевать? Я просто утверждаю, что они были внедрены, не как светлый душевный порыв отдельных гениев, а как производственная необходимость.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[6]: Стиль Дональда Эрвина Кнута
От: vdimas Россия  
Дата: 11.08.05 01:31
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ну, то есть этим "великим" старцам самолюбие мешало использовать функции для инкамсуляции функциональности:

VD>
VD>Swap(&a, &b);

VD>...

VD>void Swap(int * a, int * b)
VD>{
VD>    int temp = *a;
VD>    *a = *b;
VD>    *b = temp;
VD>}
VD>

VD>


Не было ведь inline, а вызов процедуры языка высокого уровня дорогого стоил. На это никто не шел, тем более по каждому такому чиху типа swap. В С активно использовались макросы именно как разновидность inline-процедур. Однако в описании алгоритма макросам (скрывающим функциональность), разумеется, не место.


V>>Именно так я и писал более 10 лет назад, и не только я.


VD>Могу только посочувствовать тебе. Я конечно тоже впитывал традиции какие были, но вот почему-то многие из них мне не нравились и я прекрасно пониал почему.


А что не так в коде Кнута? Насколько "громко" ты сейчас обзываешь локальные переменные внутри алгоритмов. У меня до сих пор популярны всякие i, j, k, tmp, t1, p1 и т.д. Да взять тот же дотнет и посмотреть сигнатуры типа
int IComparer::Compare(object x, object y);

Я думаю, что и тогда и сейчас людьми в большей степени руководил здравый смысл, чем мода. В те времена исходники программ предназначались или для себя, или для коллеги-профессионала. Это сейчас исходники предназначены кому угодно, в первую очередь группе поддержки и работы над багами. Потому здравый смысл и дикктует потребность в большем автодокументировании.

VD>Я считаю, что все намного банальнее. Это не традиции. Это анархия и постепенная борьба с ней. Просто со временм формировалась культура. Формировалась она под гнетом сложности все более больших проектов.


Почему такие страшные слова "гнет"? Обычный набор требований — в данном случае коллективной работы многих людей, и обычная реакция на это.

V>>Но это не значит, что никто не придерживался никаких стилей. Запись в одну строчку совершенно несвязанных или неатомарных действий уже тогда считалась плохим тоном.


VD>Ну, да конечно. Только вот логика связанности не очень то определена.


Ты в соседней ветке спрашивал про интуитивную понятность операторов +.
Все равно мы имеем в виду человеческую логику в данном случае, так что стараемся руководствоваться здравым смыслом. Главное, чтобы проблем не возникало при прочтении, не так ли?

V>>Хорошо звучит, но без учета реалий тех лет.


VD>Реалии тех лет — это отсуствие понимания того что хорошо звучит. Мноие и до сих пор этого не понмают.




V>> Компактная запись была именно более читабельной по тем временам, ибо позволяла окинуть взглядом больший кусок кода на экране.


VD>Это миф. Опровергается он в два счета. Досточно просто компактно записать более менее приличный код и увидить, что он стал просто не читаем. Самая копактная запись у регулярных варажений. Но покажи мне человека который может их спокойно читать. А вот EBNF, хотя совсем не компактен, но читается очень и очень хорошо.


Очередной спор теории с практикой. Мне лично трудно читать алгоритм, если одновременно я могу окинуть взглядом не более пары его шагов. На своем мониторе сейчас я могу окинуть взглядом приличное число шагов даже при "нежадном" форматировании, так что отнюдь не против совремменных правил, скорее за. Единственно что, так это не могу побороть привычку писать в таком полу-компактном стиле:
if(...) {
   ...
   ...
} else {
   ...
   ...
}

Опять же из стремления иметь возможность окидывать как можно больший объем информации одним взглядом.

V>> Если бы то самое выражение написать "по-современному", согласно некоторым стандартам некоторых контор, то это будет:

V>>
V>>if (ss) 
V>>{
    ss>>>>=1; 
V>>}
V>>else
V>>{
V>>    t--;
V>>}
V>>


V>>На экране в то время поместилось бы всего пару таких выражений, и разобраться в алгоритме было бы непросто.


VD>Еще раз. Полная ерунда, что одинаковое количество кода впихнутое в один экран и разнесенное на два экрана чем то отличаются. Код должен быть структурирован и логичен. Вот тогда он будет читаться действительно нормально.


О разном говорим. Сейчас я бы написал так:
if (ss)
   ss >>= 1;
else
   t--;


Аргументы целесообразности прежние.

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

VD>
VD>if (someBits != 0)
VD>    someBits >>= 1;
VD>else
VD>    counter--;
VD>

VD>если при этом не приписывать совершенно бещссмысленные, в данном случае, скобки, то размер кода не кажется уж таким огромным. Прибавь сюда еще выделение кода в функции и получишь очень хорошо читаемый результат.

Это тебе скобки кажутся бессмысленными, а в одной из фирм мне когда-то регулярно били по рукам, за "нарушение стиля", там требовали писать именно как я показал. Вот и решай, какой стиль более нечитабельный

Хотя именно я согласен, кроме предложения о выделении кода в ф-ии. Это сейчас оптимизирующие компиляторы, да и просто жутко быстрые железки не бьют по рукам за такие "выделения". А в 60-х очень даже били. Основная задача того времени была — не просто написать нечто, а заставить это нечто работать адекватно на имеющейся технике. Ты постоянно игнорируешь этот момент, по непонятной причине

V>>Это не имеет никакого отношения к сути базовых алгоритмов.


VD>Конечно. Это имеет отношение всего лишь к пониманию этих алгоритмов другими.


Алгоритмы Кнут подробно описывал словами и доказывал кадый шаг в них. Ну а пример реализации — это пособие для копипейщиков, не более. В реальном применении у тебя и типы данных могут быть другими, и сигнатуры методов и т.д. и т.п.

V>> Более того, одно время считалось, что необоснованное применение рекурсии — грубая ошибка.


VD>Ну, да компиляторы были дохлые. Вот только чтобы решить проблему рекусии можно или вообще не использовать goto или использовать ровно один goto, как это сделано в том же MS CRT. Эффективность при этом будет та же даже не доисторических компиляторах, а вот читаемость намного выше.


Вообще-то, goto — не единственный оператор безусловного перехода. Всякие break, continue, return — суть тоже операторы безусловного перехода, и тоже позволяют выкручиваться, так что почти всегда можно и без goto. Но принципиально это ничего не меняет — мы вынуждены использовать операторы безусловного перехода. Просто в случае с goto мы дополнительно озабочены управлением метками.

Да и не стоит забывать, что популярные процедурные языки того времени не имели других безусловных операторов перехода, кроме goto, т.е. просто не было выбора. К тому же, популярность блок-диаграмм алгоритмов в те времена играла не самую последнюю роль. Эти диаграммы переносятся один-водин в код именно с помощью goto. Т.е., если мы в учебнике описали некий алгоритм с помощью блок-диаграммы, то, если хотим, чтобы пример реализации на ЯП именно точно соответствовал диаграмме, мы используем goto.

V>> В некоторых нишах такое положение вещей до сих пор.


VD>Ну, да в нашей области мастодонты еще не вымерли.

VD>И их даже можено поняить когда речь идет об оптимизации алгоритма дикой важноти на дохлой железке. Но вот как понять этого мэтра который таким обраом пытается донести суть алгоритма до читателей?

О, как раз выше ответил. Кстати, обрати внимание, что новичкам, делающим первые шаги в программировании, код с goto легче поддается пониманию, чем процедурный стиль (да, именно так). Это чуть позже они научаться обобщать и понимать красоту абстракций, равно как и мощь повторного использования. А при первом изучении алгоритмов им надо просто-напросто пальчиком по строкам водить, как раз по тем местам, куда goto указывает. Его твой break или continue только запутают. А рекурсия вообще введет в полный ступор.

V>>Схалтурить — это, например, выполнить поиск в отсортированном массиве методом полного перебора. Тогда все ПО точно окажется халтурным.


VD>О, нет. В этом случае только его часть окажется медленее оптимального. Причем воможно это даже никак не скажется на все ПО в целом. А вот если начинать халтурить с имен переменных и форматирования кода, то код конечно заработает, и возможно даже будет работать оптимально быстро. Но вот развивать его уже будет невозможно. И рано или поздно будет глюкодром вроде МС Ворд.


Я в таких случаях придерживаюсь принципа — интерфейс важнее реализации. т.е. надо точно определиться с ролью и способом взаимодействия частей системы. А как именно внутри каждой системы/подсистемы/подсистемочки реализованы простейшие вещи, типа A+B — это не влияет на возможности развития продукта. Ведь в любой момент, мы должны иметь возможность любую часть системы переписать хоть заново, не трогая остальные. (Вообще-то не хочу эти банальные темы мусолить, но моя любовь к коротким именованиями локальных переменных еще ни разу ни на чем не сказалась... Да в эти манипуляции байт вообще никто не заглядывает, гораздо важнее логически полный публичный интерфейс)

V>>Замечу, программы тех времен удивительно эффективны по современным реалиям. Понимаешь, техника не позволяла халтурить


VD>Тех времен, тех времен... А кто научил все (ну, не всх, но многих) нормально форматировать код? Кто придумал все эти стили с понятными именами переменных и т.п.? Это что придумали студенты только что вышедщие из вузов?


А кто придумал Mc'Donalds? Намек ясен?
Хотя, утрирую, конечно. Еще раз повторю постулат о банальной эволюции требований к процессу разработки ПО. Ну не могли себе разработчики позволить идентификаторы длиннее 6-ти символов в FORTRAN-е. Это же целая эпоха на этом держалась.

V>>Ты как-то говорил насчет кастовости... Знаешь, я кажется припоминаю подобные времена. Одни программисты были способны писать сложные программы, которые адекватно работали на технике тех времен. Другие были способны писать программы, которые еле пыхали. Сейчас все уравнялось, конечно... Но когда-то подобные моменты стояли весьма остро.


VD>А по мне так ничего не изменилось. Только кастовость тут не причем. Тут дело в отношении к делу и таланте. Если есть талант и желание, то можно своротить горы. Ну, а стили — это средство повысить свою эффективность и позволить другим понять твой код.


Да понимали "другие" этот код, ибо сами так писали. Не было проблем. Да и размеры исходных кодов не провоцировали их наличие. Тогда исходили из актуальных реалий тех времен, сейчас мы исходим из наших реалий. Я ведь не против стилей и т.д. Более того, считаю, что мы как-то уж подзастряли на этих стилях и вообще на плоских файлах исходных кодов.


V>>-----

V>>Для примера. 1992-й год. Одному "грамотному" челу в нашей лаборатории дают задание разработать программный эмулятор 8051 проца. (Не было тогда еще fd51). Ну, разработал он на TurboVision... Красиво... В общем, один шаг выполнялся примерно 3 секунды на 8086-й. Помучавшись пару месяцев я накатал чуть попроще, без TurboVision и вообще все переделал с 0-ля. У меня выполнялось более 50 тактов в секунду. Откуда там была разница в 150 раз — непонятно до сих пор.

VD>Уж не в TV ли? Это все таки ГУЕ-вая (вернее ТУЕ-вая) библиотека. Уж эмуляторам она никак не могла помочь.


Да нет, TV замедлял раза в 2, не больше (из субъективного сравнения с собственной оконной системой тех времен на других проектах). Там основные проблемы были в построении самого эмулятора, в выборе внутреннего представления и в способах оперирования им. Ну а так же отсутствие вразумительной системы сигналов требовало полной перерисовки на каждом шаге, ибо тот вариант эмулятора понятия не имел, что внутри него же происходило.

VD>Да я не спорю, что в любом стиле можно написать относительно небольшую и эффективную программу. Даже плюя на стиль добиться эффективности легче. Но что будет потом? Ведь потом написанный в хреновом стиле эмулятор выбросят и возьмут тот что в 50 раз медленее, но с более понятным кодом. Ведь оптимизировать код намного проще чем разбираться в награмождениях.


И с чего ты взял, что стиль был плох? Я этот пример приводил не к теме о стилях, а к теме о расставлении акцентов. Т.е. суть в том, что хорошее оформление кода не означает его хорошую работу. И опять же, если код хорошо работает, то необязательно он написан в плохом стиле

V>>-------

V>>Я ведь не против современных стилей оформления кода. Ради бога, от техники надо брать все.

VD>Ну, тогда просто согласись, с тем что это банальный прогресс. Я конечно понимаю, что раньше трава была голубее, а небо зеленее, но это просто скушно занудство. Когдм мне было 20 я терпеть не мог тридцатилетних "стриков" которые зудели о зелености травы. Вот сейчас периодически самому хочется позудеть, но я понимаю, что это в себе нужно давить. и давлю.


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


VD>Ну, это отдельная тема. Тут я с тобой не согласен. Я как раз умудрился в 94-ом поработать с таким вот чудом техники. Называлось это Gupta SQL Windows. Эдакий первый RAD с GUI и зачатками комплит ворда. Не скрою это было забавно. Но сегодняшние текстовые IDE вроде VS 2003=2005 + ReSharper или Идея намного более удобны и круты. Если IDE будут развиваться в этом направлении, то никакие репозитории не понадобятся. К тому же современные системы контроля версий практически те же самые репозитории, только хранят текст. И как не странно очень удобно.


V>> Вот уж где можно было бы получить настоящее повторное использование кода. Подобная модель для кодогенерации была бы шаблоном уже сама по своей сути. А мы тут спорим — шаблоны С++ vs генерики


VD>Это всего лишь заблуждене. Код это персистентная форма программы удобная для восприятия как человеком, так и машиной. Машина обработывает код в АСТ, который прекрасно поддается модификации и т.п. Так что ты просто не верно смотрешь на код. Не смотри на него как на монолит. А смотри как всего лишь на форму хранения. Тогда поймешь, что репозиторий всего лишь еще одно представление, которое менее универсально, недопускает прямой чтения/модификации человеком и имеет кучу других проблем.


Проблема на самом деле в типизированности конкретной реализации алгоритма. Т.е., мы берем из справочника некий алгоримт, а потом пишем его частный случай. Мне бы хотелось записывать алгоритмы именно в самом общем виде. Вводить параметры алгоритмов, или даже исключения и подветки для разных по характеру используемых типов. Мне представляется, что подобный подход сделал бы код куда как управляемым, по сравнению с текстовым представлением, которое надо править вручную.

V>>Просто речь о том, что технику тех лет использовали адекватно ее возможностям и не более того. Сейчас, ИМХО, не используют и 10% от возможности железячек в плане организации труда разработчика ПО.



VD>Те времена — это всего лишь движение к настоящему. Настоящие это всего лишь движение к будущему. Все развивается по спирали. Но! Но, к лучшему! И это главное.


А для тебя сейчас трава голубее Именно сейчас оно развивается к бизнесу и бытовой электронике (т.е. все равно по направлению к бизнесу, как ни крути). Практически перестало быть наукой, и, такое ощущение, что развитие приостановилось. Вернее, оно пошло по экстенсивному пути. Библиотеки, фреймворки, сервисная модель ПО... Пока я вижу откровенную количественную накачку. Хотя, я тоже оптимист, и надеюсь дожить до тех времен, кодга это все даст качественный скачек. Почему я упомянул о железках. Да просто железки уже давно готовы со своими мощщами, электронщики оказались на высоте. А вот ПО безбожно отстает.
Re[8]: Стиль Дональда Эрвина Кнута
От: SergeCpp Россия http://zoozahita.ru
Дата: 11.08.05 02:51
Оценка:
Здравствуйте, adontz, Вы писали:

A>...уже установили, это скорее всего...


УСТАНОВИЛИ и СКОРЕЕ ВСЕГО — смысл РАЗНЫЙ

A>...только это автоматически сгенерированный код...


ТОЛЬКО ЭТО

А тут Вы опираетесь на НЕДОКАЗАННОЕ

"скорее всего, я прав..."
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re[6]: Стиль Дональда Эрвина Кнута
От: SergeCpp Россия http://zoozahita.ru
Дата: 11.08.05 03:00
Оценка:
Здравствуйте, VladD2!

Согласен с Вами

P.S. 8080 и Радио-86РК Вам не знаком ?
Было время и очень хорошее время...
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re[6]: Стиль Дональда Эрвина Кнута
От: SergeCpp Россия http://zoozahita.ru
Дата: 11.08.05 03:08
Оценка:
Здравствуйте, VladD2!

Извините за "двойной ответ", но, действительно,
модификатор 'X' в регулярных выражениях Perl
был введён ИМЕННО для ОБЛЕГЧЕНИЯ ЧИТАЕМОСТИ

Вы — молодец!
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re[7]: Стиль Дональда Эрвина Кнута
От: SergeCpp Россия http://zoozahita.ru
Дата: 11.08.05 03:12
Оценка:
Здравствуйте, eao197, Вы писали:

E>А что касается сопровождения, то, имхо, не каждый программист сможет понять, что someBits>>=1 эвивалентно someBits/=2.


Программист ? Нет — это НЕ программист!
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re[7]: Стиль Дональда Эрвина Кнута
От: SergeCpp Россия http://zoozahita.ru
Дата: 11.08.05 03:19
Оценка:
Здравствуйте, adontz, Вы писали:

A>...


4.76 мегагерц — точно...

A>...и скролл был рывковый PgUp/PgDn...


Не передёргивайте!

У Multi-Edit, например CtrlUp / CtrlDn был (сдвиг экрана на ОДНУ строку)!
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re[8]: Стиль Дональда Эрвина Кнута
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 11.08.05 03:29
Оценка: +1 -2
Здравствуйте, adontz, Вы писали:

A>Да, только это автоматически сгенерированный код. Давай я возьму assembly listing твоего кода и буду орать, что твой код халтура, потому что нету отступов и сплошные goto по неименованным меткам Это как — логично будет?


В данном случае по барабану — написал он это сам или счел возможным привести эту лапшу в банке в качестве примера реализации алгоритма в книге(!), объясняющей эти самые алгоритмы. Вывод один — этот стиль его ни сколько не смущает.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[8]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 11.08.05 05:11
Оценка: +2
Здравствуйте, VladD2, Вы писали:

VD>Во, во. А далее было не мало. В итоге получаем описание:

VD>

Пусть M = (Q, T, D, q0, F) — НКА

VD>И все дружо перелистывают на две странички назад, чтобы вспомнить, что же такое Q, T, D и F?

A>>Точно так же можно и химиков обвинять,


VD>Привычки химиков слава богу не отразились на програмировании. А вот дурные привычки математиков отразились.


Ну тут не так однозначно. Особенно когда работаешь в паре с математиком. Он тебе выкатывает алгоритм, нет, даже не столько алгоритм, сколько набор адаптированных к программированию формул. В которых t, k, L, Ll, Lm, Ln, Lk, C, Ct и т.п. на каждом шагу. Я, конечно, могу выяснить у него весь смысл этих названий и преобразовать в коде t в strobe_time, k в strobe_number и т.д. Только в полученной программе этот математик будет разбираться гораздо дольше. А вот если код будет содержать исходные обозначения (или близкие к ним), то и мне это будет понятно и моему коллеге-математику.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[4]: Стиль Дональда Эрвина Кнута
От: TK Лес кывт.рф
Дата: 11.08.05 06:12
Оценка: 1 (1) +4 :))
Здравствуйте, VladD2, Вы писали:

VD>И главное в книге не дать наиболее быструю или выпендржную реализацию, а доходчиво донести до читателя суть алгоритма. Вот это у Кнута, ну, никак не получилось. А у менее именитых Ивановых получилось. Вот и все.


Если не ошибаюсь, то работа Кнута называлась "Искусство программирования". В данном случае прямая аналогия с кино. Есть ширпотреб который понятен и, наравится большинству. А есть, истинное искусство которое, по настоящему, могут понять и оценить лишь избранные критики
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[6]: Стиль Дональда Эрвина Кнута
От: Oyster Украина https://github.com/devoyster
Дата: 11.08.05 06:14
Оценка: 12 (3)
Здравствуйте, VladD2, Вы писали:

O>>...Кормен был настольной книгой (если про эту книгу можно так сказать ). Так вот — Кормен у трёхтомника Кнута и в подмётках не валялся. Конечно, всякие там алгоритмы на графах, алгоритмы сортировки, RSA и пр. у Кормена есть (и описано более понятным языком), но многие вещи просто напрочь отсутствуют.


VD>Вот ответь на вопрос. Может ли широта охвата компенсировать низкое качество объяснения?


Нет. Но как раз у Кнута качество объяснения ни капельки не страдает. Он не упускает ни детали, всегда всё раскладывает по полочкам. Так что о чём вы?

VD>В том то и дело, что заслуга Кнута в том, что он собрал все вместе. До него это никто не делал. То есть он первопроходец. Так зачем же равняться на него как на икону? Сделал хорошее дело и за это мы его уважем. Но на дворе 2005-ый год. И изучать алгоритмы можно по куда более доходчивым книгам.


К сожалению, даже в 2005-м году дела обстоят не так хорошо. До сих пор некоторые алгоритмы, описанные у Кнута (особенно те, которые в упражнениях), тяжело (читай — невозможно) найти в других книгах (они, как правило, из докладов на конференциях, из научных статей, — в общем, из источников, недоступных широкой публике).

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

В общем, Кнут до сих пор не съехал на обочину — даже сейчас, когда на дворе 2005-й год, он в "струе" и может предложить то, чего, кроме него, никто не предлагает.

PS: Кому-то он может не нравиться, да, и я не собираюсь никого переубеждать.
Re[7]: Стиль Дональда Эрвина Кнута
От: Oyster Украина https://github.com/devoyster
Дата: 11.08.05 06:21
Оценка: +2
Здравствуйте, VladD2, Вы писали:

Т>>Кнута действительно приятно читать.


VD>Кому как.


VD>Если доставляет удовольствие читать математические формулы и странный код, то конечно. А если предпочиташь неформальное обяснение, то вряд ли.


Какое может быть неформальное объяснение, когда речь идёт об алгоритмах? Наоборот, не должно быть никаких неясностей, никаких метафор. Есть вполне конкретный алгоритм, который должен правильно работать (читай — выполнять свою функцию) на заданном наробе входных данных. Какие тут могут быть неформальные объяснения?

По-моему, только сухой язык теории поможет описать доказательство корректности алгоритма. А если некий автор использует только "неформальный" язык, то, боюсь, его читателям прийдётся верить тому на слово, т.к. без формул, теорем и прочего математического бреда тяжело будет что-то доказать (т.к. сухой язык математики формализован гораздо лучше, чем тот же литературный английский/русский) — разве что доходчиво объяснить без доказательств...
Re[8]: Стиль Дональда Эрвина Кнута
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 11.08.05 07:21
Оценка: 193 (11) +5 -1
Здравствуйте, VladD2, Вы писали:

VD>Во, во. А далее было не мало. В итоге получаем описание:

VD>

Пусть M = (Q, T, D, q0, F) — НКА

VD>И все дружо перелистывают на две странички назад, чтобы вспомнить, что же такое Q, T, D и F?

Сила математических обозначений в их компактности. Возьмем не самую сложную математическую формулу.



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

  for(int t=T; i+T<size; i++)
  {
    float f1 = 2 * (x[t+T/4] - x[t-T/4]);
    float f2 = -x[t+T/2] + 2*x[t] - x[t-T/2];
    env[t] := sqrt(f1*f1 + f2*f2);
    phi[t] := atan2(f2,f1);
  }


а вот несколько утрированый пример с точными названиями

  for(int Frame=Period; Frame+Period<FrameCount; Frame++)
  {
    float FirstFilterFunctionInHylbertTransform = 2 * (Pinhole[Frame+Period/4] - Pinhole[Frame-Period/4]);
    float SecondFilterFunctionInHylbertTransform = -Pinhole[Frame+Period/2] + 2*Pinhole[Frame] - Pinhole[Frame-Period/2];
    Envelope[Frame] := sqrt(sqr(FirstFilterFunctionInHylbertTransform) + sqr(SecondFilterFunctionInHylbertTransform));
    TotalPhase[Frame] := atan2(SecondFilterFunctionInHylbertTransform,FirstFilterFunctionInHylbertTransform);
  }


Есть такое понятие, как энтимема. Это то, о чем не упоминается прямо, но о чем подразумевается. Например, в диалоге:

-- Вы будете кофе.
-- Если я выпью кофе, я не смогу уснуть.

Тут энтимемой является утверждение "Я хочу уснуть". Любое наше общение наполнено энтимемами. Без них изложение материала сделалось бы скучно. Особенно это проявляется в математических трудах. Некоторые условия оговариваются в начале изложения и не дублируются всякий раз, а полагаются на ясность из контекста. В програмировании возникает примерно такая же ситуация. Хороший читабельный код это баланс на грани подчеркивания существенных деталей и умалчивания о несущественных.

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

 cC:= +(Poly(U, [-0.0007927,  0.0002548,  0.0000091]))*sin(V)
      +(Poly(U, [ 0.0013381,  0.0001226, -0.0000253]))*cos(V)
      +(Poly(U, [ 0.0000248, -0.0000121]))*sin(2*V)
      -(Poly(U, [ 0.0000305,  0.0000091]))*cos(2*V)
      + 0.0000412*sin(2*zeta)
      + 0.0012415*sin(    Q)
      +(Poly(U, [ 0.0000390,- 0.0000617]))*sin(  zeta)*sin(Q)
      +(Poly(U, [ 0.0000165,- 0.0000204]))*sin(2*zeta)*sin(Q)
      + 0.0026599*cos(  zeta)*sin(  Q)
      - 0.0004687*cos(2*zeta)*sin(  Q)
      - 0.0001870*cos(3*zeta)*sin(  Q)
      - 0.0000821*cos(4*zeta)*sin(  Q)
      - 0.0000377*cos(5*zeta)*sin(  Q)
      + 0.0000497*cos(2* psi)*sin(  Q)
      +(Poly(U, [ 0.0000163,- 0.0000611]))*cos(  Q)
      - 0.0012696*sin(  zeta)*cos(  Q)
      - 0.0004200*sin(2*zeta)*cos(  Q)
      - 0.0001503*sin(3*zeta)*cos(  Q)
      - 0.0000619*sin(4*zeta)*cos(  Q)
      - 0.0000268*sin(5*zeta)*cos(  Q)
      -(Poly(U, [ 0.0000282, 0.0001306]))*cos(  zeta)*cos(  Q)
      +(Poly(U, [-0.0000086, 0.0000230]))*cos(2*zeta)*cos(  Q)
      + 0.0000461*sin(2* psi)*cos(  Q)
      - 0.0000350*sin(2*  Q)
      +(Poly(U, [ 0.0002211, -0.0000286]))*sin( zeta)*sin(2*Q)
      - 0.0002208*sin(2*zeta)*sin(2*Q)
      - 0.0000568*sin(3*zeta)*sin(2*Q)
      - 0.0000346*sin(4*zeta)*sin(2*Q)
      -(Poly(U, [ 0.0002780, 0.0000222]))*cos(  zeta)*sin(2*Q)
      +(Poly(U, [ 0.0002022, 0.0000263]))*cos(2*zeta)*sin(2*Q)
      + 0.0000248*cos(3*zeta)*sin(2*Q)
      + 0.0000242*sin(3* psi)*sin(2*Q)
      + 0.0000467*cos(3* psi)*sin(2*Q)
      - 0.0000490*cos(2*  Q)
      -(Poly(U, [ 0.0002842, 0.0000279]))*sin(  zeta)*cos(2*Q)
      +(Poly(U, [ 0.0000128, 0.0000226]))*sin(2*zeta)*cos(2*Q)
      + 0.0000224*sin(3*zeta)*cos(2*Q)
      +(Poly(U, [-0.0001594, 0.0000282]))*cos(  zeta)*cos(2*Q)
      +(Poly(U, [ 0.0002162,-0.0000207]))*cos(2*zeta)*cos(2*Q)
      + 0.0000561*cos(3*zeta)*cos(2*Q)
      + 0.0000343*cos(4*zeta)*cos(2*Q)
      + 0.0000469*sin(3* psi)*cos(2*Q)
      - 0.0000242*cos(3* psi)*cos(2*Q)
      - 0.0000205*sin(  zeta)*sin(3*Q)
      + 0.0000262*sin(3*zeta)*sin(3*Q)
      + 0.0000208*cos(  zeta)*cos(3*Q)
      - 0.0000271*cos(3*zeta)*cos(3*Q)
      - 0.0000382*cos(3*zeta)*sin(4*Q)
      - 0.0000376*sin(3*zeta)*cos(4*Q);


Например, в таком пособии как "Numerical Recipes in C" исходники оформлены в приведенном ниже веде, что хорошо сочетаются с предшествующими страницами объяснения работы и как по мне протеста не вызывает:

void twofft(float data1[], float data2[], float fft1[], float fft2[], unsigned long n)
{
  void four1(float data[], unsigned long nn, int isign);
  unsigned long nn3,nn2,jj,j;
  float rep,rem,aip,aim;
  nn3=1+(nn2=2+n+n);
  for (j=1,jj=2;j<=n;j++,jj+=2) { //Pack the two real arrays into one complex
    array. fft1[jj-1]=data1[j];
    fft1[jj]=data2[j];
  }
  four1(fft1,n,1); //Transform the complex array.
  fft2[1]=fft1[2];
  fft1[2]=fft2[2]=0.0;
  for (j=3;j<=n+1;j+=2) {
    rep=0.5*(fft1[j]+fft1[nn2-j]); //Use symmetries to separate the two transforms.
    rem=0.5*(fft1[j]-fft1[nn2-j]);
    aip=0.5*(fft1[j+1]+fft1[nn3-j]);
    aim=0.5*(fft1[j+1]-fft1[nn3-j]);
    fft1[j]=rep; //Ship them out in two complex arrays.
    fft1[j+1]=aim;
    fft1[nn2-j]=rep;
    fft1[nn3-j] = -aim;
    fft2[j]=aip;
    fft2[j+1] = -rem;
    fft2[nn2-j]=aip;
    fft2[nn3-j]=rem;
  }
}



VD>Непонятливый? Сейчас пояснию. Цель книги донести некие знания. У Кнута книга об алгоритмах. Стало быть он хотел донести до читателей смысл этих алгоритмов. Чтобы сделать это он в том числе приводил код реализации этих клгоритмов. Если бы код бел написан в соотвествии с приличным стилем, то задача была бы решена. А так задача только усложнена, так как из такой реализации ничего понять нельзя. Разве что больше запутаться.


Не совсем. Задача Д. Кунута была не только в описании алгоритмов. Другой задачей был анализ алгоритмов, третьей их эффективная реализация, которую можно было бы без особых сложностей перевести на существующие языки ассемблера. Личное мое впечатление --- Д. Кнута читать интересно. Задачи у него не усложнены, но обобщены. Именно идеи, описаные в первом томе Д. Кнута помошли мне, например, лучше понять то или иное решение в реализации менеджера памяти Delphi. А вот когда я полистал "Фундаментальные алгоритмы на С++", то был разачарован. Ничего нового Как мне показалось, пособие для начальной школы
Re[3]: Стиль Дональда Эрвина Кнута
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 11.08.05 07:36
Оценка:
Здравствуйте, Ka3a4oK, Вы писали:

>>>Есть даже статья Д. Кнута о структурном программировании с использованием goto.

KK>Никак не могу найти данную статью в электронном виде бесплатно. Не поделитесь ?

Увы... Ссылку на эту статью я нашел в статье Literate Programming Самой статьи у меня нет. Есть только название

D. E. Knuth, Structured programming with go to statements. Computing Surveys 6, 261–301 (1974).
Re[9]: Стиль Дональда Эрвина Кнута
От: little_alex  
Дата: 11.08.05 07:42
Оценка:
Здравствуйте, adontz, Вы писали:

A>А переменную ты внутри макроcа объявишь?

A>
A>#define swap(type, a, b) type temp = a; b = b; b = temp;

A>swap(int, a, b)
A>swap(int, a, b) <- очень непонятная ошибка компиляции.
A>


А вот так
A>
A>#define swap(type, a, b) {type temp = a; b = b; b = temp;}

A>swap(int, a, b)
A>swap(int, a, b) <- ok
A>
Re[7]: Стиль Дональда Эрвина Кнута
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 11.08.05 07:42
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Алгоритм тут один — быстрая сортировка. Придумал его господин Richard Hoare. Задача Кнута была не выпендрися как малолетний кулхацкер, а донести смысл алгоритма до читателей его книги. Задача ему эта удалась очень плохо.


А по моему неплохо Но задачу Д. Кнута ты понимаешь очень узко. Его задачи были:
1. Объяснить алгоритм
2. Дать эффективную реализацию на ассемблере, который можно было бы спортировать на существующие архитектуры
3. Провести анализ алгоритма
4. Показать, какие методы используются при анализе алгоритма, чтобы читатель в случае необходимости мог их использовать в похожих случаях (например, когда необходимо объединить быструю сортировку с другой сортировкой или дополнительно при сортировке выполнить ряд действий, ...)
Re[8]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.08.05 09:54
Оценка: +4
Здравствуйте, Oyster, Вы писали:

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


Т>>>Кнута действительно приятно читать.


VD>>Кому как.


VD>>Если доставляет удовольствие читать математические формулы и странный код, то конечно. А если предпочиташь неформальное обяснение, то вряд ли.


O>Какое может быть неформальное объяснение, когда речь идёт об алгоритмах?


Да, легко.

O> Наоборот, не должно быть никаких неясностей, никаких метафор.


А кто тебе сказал про неясности? Неформальное просто означает популярное разжовывание. Можно даже давать формальное определение и неформальный анализ. На сегодня большинство толковых кониг та делают.

O>По-моему, только сухой язык теории поможет описать доказательство корректности алгоритма.


Никому не нужно на стадии обучения доказательства корректности. Все читатели и так верят автору. Читателям нужно понятное объяснение. И каким образом это будет достигнуто уже не важно.

O> А если некий автор использует только "неформальный" язык,


А "только" и не нужно. Хотя можно обойтись и вообще без формализмов, но в принципе они не мешают. Есть люди который понимают язык математики лучше чем свой родной. Но для остальных нужно толковое популярное объяснение.

O> то, боюсь, его читателям прийдётся верить тому на слово, т.к. без формул, теорем и прочего математического бреда


Боюсь — это может показаться плохим только тем кто слишком любит формализмы.

O> тяжело будет что-то доказать (т.к. сухой язык математики формализован гораздо лучше, чем тот же литературный английский/русский) — разве что доходчиво объяснить без доказательств...


Да нет цели что-то доказать. Есть цель научить и объяснить. Пойми ты это! Если кому-то потребуются доказательства, то пусть и читает серьезные научные труды по этой теме.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.08.05 09:54
Оценка: 1 (1)
Здравствуйте, Oyster, Вы писали:

O>Нет. Но как раз у Кнута качество объяснения ни капельки не страдает. Он не упускает ни детали, всегда всё раскладывает по полочкам. Так что о чём вы?


Это ты себе внушил. А я слишком часто видел как люди не понимают его объяснений. И видел множество других трудов где объясенения были намного более доходчивые.

Кстати, Кнут не полный формалист. Полный формалист остановился бы на мат. формулах, а Кнут пытается объянять популярно и приводеть примеры кода демонстрирующие идеи и дающие реальный код который как минимум проще перевести на свой любимый язык чем мат. формулу.

Но вот проблема. Вместо использования максимально высокоуровневого языка позволяющего абстрагироваться от его деталей, он использует какую-то выдуманную машину. И приводя алгоритмы на С почему-то делает их мало понятными ужасным стилем форматирования и именования переменных. Вот об этом собсвтенно и речь. Это и называется плохое качество изложения.

O>К сожалению, даже в 2005-м году дела обстоят не так хорошо. До сих пор некоторые алгоритмы, описанные у Кнута (особенно те, которые в упражнениях), тяжело (читай — невозможно) найти в других книгах (они, как правило, из докладов на конференциях, из научных статей, — в общем, из источников, недоступных широкой публике).


Ну, если не описанно, то и речи о чем вести нельзя. Кстати, не приведешь пример таких алгоритмов? Но вот та же быстрая сортировка описана в тысячи мест и есть, ну, очень простые и доходчивые реализации.


Могу привести пример реализации быстрой сортировки передранная на C# с ФЯ. Это не сталь эффективный вариант как классическая раелизация, но по-моему, он отлично передает суть алгоритма.
static List<T> QuickSort<T>(List<T> list) where T : IComparable<T>
{
    if (list.Count <= 1)
        return list;
    
    // Принимаем значение элемента из середины массива за значение делящее список
    // на два таких, что в первом находятся элементы большие чем этот, а вдругм
    // меньшие.
    T mid = list[list.Count / 2];
    
    // Отбираем элементы которые...
    
    // Меьше чем mid
    List<T> ltList = list.FindAll(delegate(T elem) { return elem.CompareTo(mid) < 0; });
    // ровны mid
    List<T> eqList = list.FindAll(delegate(T elem) { return elem.CompareTo(mid) == 0; });
    // больше чем mid
    List<T> gtList = list.FindAll(delegate(T elem) { return elem.CompareTo(mid) > 0; });
    
    // сортируем полученные подсписки и конкатенируем их в результирующий список.
    return Concatenate(QuickSort(ltList), eqList, QuickSort(gtList));
}

static List<T> Concatenate<T>(params List<T>[] lists)
{
    List<T> result = new List<T>();
    foreach (List<T> list in lists)
        result.AddRange(list);
    return result;
}


Собственно пример, по-моему, отлично описывает суть клгоритма. На нем же можно продемонстрировать узкие места алгоритма.

Далее остается описать

O>Плюс повторюсь — такого количества информации, сконцентрированного в одной книге ("Искусство программирования" — всё же одна книга, пусть и в трёх томах), я больше нигде не видел.


Еще раз повторюсь, мы все отдаем Кнту должное за комплекность и широту охвата его труда. Тут он был пионером. Объяснения от этого у Кнута понятнее не становястся.

O>В общем, Кнут до сих пор не съехал на обочину — даже сейчас, когда на дворе 2005-й год, он в "струе" и может предложить то, чего, кроме него, никто не предлагает.


Хорошо бы все же подкрепить это утверждение примерами. По-моему, на сегодня можно изучать алгоритмы без Кнута. Причем получится это быстрее и качественее. Ну, а когда понимание клгоритмов уже будет, то не грех прочесть и его. Если от этго понимание углубится, то замечательно. Если нет, ну, и не страшно.

O>PS: Кому-то он может не нравиться, да, и я не собираюсь никого переубеждать.


Уже переубеждашь.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.08.05 09:54
Оценка:
Здравствуйте, Mystic, Вы писали:

M>1. Объяснить алгоритм


Задача удалась плохо.

M>2. Дать эффективную реализацию на ассемблере, который можно было бы спортировать на существующие архитектуры


Просто не нужная задача. Все равно эффективной реализации для абстрактного ассемблера создать нельзя. У ассемблеров слишком много особенностей.

M>3. Провести анализ алгоритма


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

M>4. Показать, какие методы используются при анализе алгоритма, чтобы читатель в случае необходимости мог их использовать в похожих случаях (например, когда необходимо объединить быструю сортировку с другой сортировкой или дополнительно при сортировке выполнить ряд действий, ...)


Опять таки у конкурентов получилось как минимум не хуже.
Вот к примеру объяснение тех же алгоритмов сортировки от одного из конкуретнов http://www.optim.ru/cs/2000/4/bintree_htm/sort.asp оно явно не идеально, но по сравнению с Кнутовским очень и очень неплохо. Все те же задачи, кроме реализации на ассемблере оно решает.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Стиль Дональда Эрвина Кнута
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 11.08.05 10:18
Оценка:
Здравствуйте, VladD2, Вы писали:

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


M>>1. Объяснить алгоритм


VD>Задача удалась плохо.


Это субьективно.

M>>2. Дать эффективную реализацию на ассемблере, который можно было бы спортировать на существующие архитектуры


VD>Просто не нужная задача. Все равно эффективной реализации для абстрактного ассемблера создать нельзя. У ассемблеров слишком много особенностей.


Не переносил, не знаю. Однако полагаю, что для создания эффективной реализации на ассемблере эффективная реализация на другом ассемблере может пригодится.

M>>4. Показать, какие методы используются при анализе алгоритма, чтобы читатель в случае необходимости мог их использовать в похожих случаях (например, когда необходимо объединить быструю сортировку с другой сортировкой или дополнительно при сортировке выполнить ряд действий, ...)


VD>Опять таки у конкурентов получилось как минимум не хуже.


Читаем у конкурентов:

Общий анализ эффективности «быстрой сортировки» достаточно труден.


Как из этой информации вывести, например, время работы быстрой сортировке при некоторых ограничениях на расположение элементов в массиве?
Re[8]: Стиль Дональда Эрвина Кнута
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 11.08.05 10:27
Оценка: 12 (1) +1
Здравствуйте, VladD2, Вы писали:

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


O>>Нет. Но как раз у Кнута качество объяснения ни капельки не страдает. Он не упускает ни детали, всегда всё раскладывает по полочкам. Так что о чём вы?


VD>Это ты себе внушил. А я слишком часто видел как люди не понимают его объяснений. И видел множество других трудов где объясенения были намного более доходчивые.


Не стоить путать научно-популярную литературу и научные монографии. Одному надо читать книжки Перельмана, а другому Ландау
Re[8]: Стиль Дональда Эрвина Кнута
От: Oyster Украина https://github.com/devoyster
Дата: 11.08.05 10:29
Оценка: +1
Здравствуйте, VladD2, Вы писали:

O>>Нет. Но как раз у Кнута качество объяснения ни капельки не страдает. Он не упускает ни детали, всегда всё раскладывает по полочкам. Так что о чём вы?


VD>Это ты себе внушил. А я слишком часто видел как люди не понимают его объяснений.


Всё субъективно под луной.

VD> И видел множество других трудов где объясенения были намного более доходчивые.


Ссылки в студию.

VD>Кстати, Кнут не полный формалист. Полный формалист остановился бы на мат. формулах, а Кнут пытается объянять популярно и приводеть примеры кода демонстрирующие идеи и дающие реальный код который как минимум проще перевести на свой любимый язык чем мат. формулу.


Одними мат. формулами более-менее сложный алгоритм ну никак не опишешь. Или не согласен?

VD>Но вот проблема. Вместо использования максимально высокоуровневого языка позволяющего абстрагироваться от его деталей, он использует какую-то выдуманную машину.


Re[3]: Стиль Дональда Эрвина Кнута
Автор: Трурль
Дата: 09.08.05


VD>И приводя алгоритмы на С почему-то делает их мало понятными ужасным стилем форматирования и именования переменных. Вот об этом собсвтенно и речь. Это и называется плохое качество изложения.


В книге нет ни одного текста на Си. В этой ветке, я так понял, разговор о книге исключительно.

O>>К сожалению, даже в 2005-м году дела обстоят не так хорошо. До сих пор некоторые алгоритмы, описанные у Кнута (особенно те, которые в упражнениях), тяжело (читай — невозможно) найти в других книгах (они, как правило, из докладов на конференциях, из научных статей, — в общем, из источников, недоступных широкой публике).


VD>Ну, если не описанно, то и речи о чем вести нельзя. Кстати, не приведешь пример таких алгоритмов?


Быстрый перевод длинных чисел из одной системы счисления в другую с использованием "деления пополам" (вместо классического последовательного деления/взятия остатка, например). Смотри чуть более подробное описание тут ([не претендую на точность). Казалось бы, ничего сложного, но эту идею я встретил только у Кнута в упражнениях.

VD>Но вот та же быстрая сортировка описана в тысячи мест и есть, ну, очень простые и доходчивые реализации.


На быстрой сортировке свет клином не сошёлся — это лишь один алгоритм из великого множества.

VD>Могу привести пример реализации быстрой сортировки передранная на C# с ФЯ. Это не сталь эффективный вариант как классическая раелизация, но по-моему, он отлично передает суть алгоритма.


[... code skipped ...]

VD>Собственно пример, по-моему, отлично описывает суть клгоритма. На нем же можно продемонстрировать узкие места алгоритма.


VD>Далее остается описать


Это ты к тому, что Кнуту стоило бы приводить примеры на C#? Или, может, на Java? Нет, лучше на Lisp, Smalltalk или Haskell. Фу ты, нет, лучше уж на ML. Ну или хотя бы на Фортране или Алголе...

Опять же отсылаю к сообщению: Re[3]: Стиль Дональда Эрвина Кнута
Автор: Трурль
Дата: 09.08.05


O>>Плюс повторюсь — такого количества информации, сконцентрированного в одной книге ("Искусство программирования" — всё же одна книга, пусть и в трёх томах), я больше нигде не видел.


VD>Еще раз повторюсь, мы все отдаем Кнту должное за комплекность и широту охвата его труда. Тут он был пионером.


"Был пионером" говорят про тех, кто уже не нужен. Кнут до сих пор актуален.

VD>Объяснения от этого у Кнута понятнее не становястся.


Менее понятными они от этого также не становятся. Я это к тому, что Кнут очень и очень понятно излагает — просто стоит чуть больше времени потратить на него, возможно, а не бежать, сломя голову, за жирным куском, хватая алгоритмы на ходу.

O>>В общем, Кнут до сих пор не съехал на обочину — даже сейчас, когда на дворе 2005-й год, он в "струе" и может предложить то, чего, кроме него, никто не предлагает.


VD>Хорошо бы все же подкрепить это утверждение примерами.


Того, что я писал выше, мало? Какие примеры ещё нужны?

VD>По-моему, на сегодня можно изучать алгоритмы без Кнута. Причем получится это быстрее и качественее.


Всё зависит от того, что ты вкладываешь в понятие "изучать алгоритмы". Если я захочу изучить ту же сортировку Хоара, мне хватит и того же Кормена, согласен.

VD>Ну, а когда понимание клгоритмов уже будет, то не грех прочесть и его. Если от этго понимание углубится, то замечательно. Если нет, ну, и не страшно.


А я и не говорю, что нужно начинать с Кнута. Я говорю, что Кнут и сейчас остаётся замечательной книгой.

O>>PS: Кому-то он может не нравиться, да, и я не собираюсь никого переубеждать.


VD>Уже переубеждашь.
Re[9]: Стиль Дональда Эрвина Кнута
От: Oyster Украина https://github.com/devoyster
Дата: 11.08.05 10:29
Оценка: +1
Здравствуйте, VladD2, Вы писали:

O>>Какое может быть неформальное объяснение, когда речь идёт об алгоритмах?


VD>Да, легко.


O>> Наоборот, не должно быть никаких неясностей, никаких метафор.


VD>А кто тебе сказал про неясности? Неформальное просто означает популярное разжовывание. Можно даже давать формальное определение и неформальный анализ. На сегодня большинство толковых кониг та делают.


По-моему, я тебя не совсем понял. Пожалуйста, дай определение термину "неформальное объяснение".

O>>По-моему, только сухой язык теории поможет описать доказательство корректности алгоритма.


VD>Никому не нужно на стадии обучения доказательства корректности. Все читатели и так верят автору. Читателям нужно понятное объяснение. И каким образом это будет достигнуто уже не важно.


Уважаемый камрад Влад, не съезжай в сторону "обучения". Никто не утверждает, что начинать надо с Кнута (для начинающих он тяжеловат, полностью согласен). Утверждается, что Кнута приятно читать и что он доходчиво пишет. И мне, например, как читателю, сейчас Кнута читать приятнее, чем того же Кормена.

Повторяю: я не утверждаю, что начинать знакомиться с алгоритмами надо с Кнута. Скорее даже наоборот — иначе ученики могут испугаться и убежать

O>> А если некий автор использует только "неформальный" язык,


VD>А "только" и не нужно. Хотя можно обойтись и вообще без формализмов, но в принципе они не мешают. Есть люди который понимают язык математики лучше чем свой родной. Но для остальных нужно толковое популярное объяснение.


См. ответ выше.

O>> то, боюсь, его читателям прийдётся верить тому на слово, т.к. без формул, теорем и прочего математического бреда


VD>Боюсь — это может показаться плохим только тем кто слишком любит формализмы.


Опять же — см. выше. Формальное описание бывает очень полезно. Например, если тебе требуется кому-то что-то доказать

O>> тяжело будет что-то доказать (т.к. сухой язык математики формализован гораздо лучше, чем тот же литературный английский/русский) — разве что доходчиво объяснить без доказательств...


VD>Да нет цели что-то доказать. Есть цель научить и объяснить. Пойми ты это! Если кому-то потребуются доказательства, то пусть и читает серьезные научные труды по этой теме.


См. выше ещё раз Насчёт "научить" я и не спорю. Я прежде всего отвечал на такие твои слова:

Вот ответь на вопрос. Может ли широта охвата компенсировать низкое качество объяснения?


Я пытаюсь всего лишь отстоять такую точку зрения — у Кнута не низкое качество объяснения. Я не говорю, что начинать изучать алгоритмы надо непременно с Кнута.
Re[9]: Стиль Дональда Эрвина Кнута
От: Quintanar Россия  
Дата: 11.08.05 10:48
Оценка: 1 (1) +1
Здравствуйте, Odi$$ey, Вы писали:

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


A>>Да, только это автоматически сгенерированный код. Давай я возьму assembly listing твоего кода и буду орать, что твой код халтура, потому что нету отступов и сплошные goto по неименованным меткам Это как — логично будет?


OE>В данном случае по барабану — написал он это сам или счел возможным привести эту лапшу в банке в качестве примера реализации алгоритма в книге(!), объясняющей эти самые алгоритмы. Вывод один — этот стиль его ни сколько не смущает.


Кнут не приводил в своей книге реализации на языках высокого уровня. Сколько можно повторять.
Re[9]: Стиль Дональда Эрвина Кнута
От: adontz Грузия http://adontz.wordpress.com/
Дата: 11.08.05 10:51
Оценка:
Здравствуйте, SergeCpp, Вы писали:

SC>А тут Вы опираетесь на НЕДОКАЗАННОЕ


А что, кто-то доказал, что это НЕ сгенерироанный код?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[9]: Стиль Дональда Эрвина Кнута
От: adontz Грузия http://adontz.wordpress.com/
Дата: 11.08.05 10:56
Оценка: 1 (1) +1
Здравствуйте, Odi$$ey, Вы писали:

OE>В данном случае по барабану — написал он это сам или счел возможным привести эту лапшу в банке в качестве примера реализации алгоритма в книге(!), объясняющей эти самые алгоритмы. Вывод один — этот стиль его ни сколько не смущает.


Единственный логичный вывод который я лично могу сделать, это то что ты не читал Кнута В книге Кнута НЕТ ПРОГРАММ НА СИ.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[5]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.08.05 10:56
Оценка:
Здравствуйте, TK, Вы писали:

TK>Если не ошибаюсь, то работа Кнута называлась "Искусство программирования". В данном случае прямая аналогия с кино. Есть ширпотреб который понятен и, наравится большинству. А есть, истинное искусство которое, по настоящему, могут понять и оценить лишь избранные критики


Ага. Я художник, я так вижу. (с) Ильф и Петров, "12 стульев".
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.08.05 10:56
Оценка:
Здравствуйте, adontz, Вы писали:

A>А переменную ты внутри макроcа объявишь?

A>
A>#define swap(type, a, b) type temp = a; b = b; b = temp;

A>swap(int, a, b)
A>swap(int, a, b) <- очень непонятная ошибка компиляции.
A>


И этот человек рассказывал мне про прошлые времена.

Я ка бы даже без переменной могу:
#define Swap(a, b) do { a ^= b; b ^= a; a ^= b; } while(0)


Хотя и с переменной будет не хуже:
#define Swap(a, b) do { int x = a; a = b; b = x; } while(0)

но первая версия еще и дженерик.

VD>>

Пусть M = (Q, T, D, q0, F) — НКА

VD>>И все дружо перелистывают на две странички назад, чтобы вспомнить, что же такое Q, T, D и F?

A>Ага. А сейчас нажимают правую кнопку и выбирают "Go to Definition"


В книге? Ну, ты крут. Снимаю шляпу.

A>Да я-то младше, но сам поcмотрtть успел, ты уж не сомневайся. Я больше года на 286х с 13.5" мониторами сидел.


Померяемся?
Если серьезно, то если ты пожил в те времена, то должен знать, что для оптимизации тогда во всю использовались макросы. Проблем они создавали не мало, но были неплохим выходом из положения.

VD>>Иди почитай правила форматирования РСДН. Удивишся, но у нас и сейчас ограничение на 78 символов.

A>А я о высоте, а не о ширине

А выстоа определяется размером функции. Маленьгие функции и сейчас очено приветсвтуются. А тогда еще больше приветсвовались. Вот только почему-то не многие так делали (не смотря на размер экрана).

Кстати, на 13.5 дюймовом монитрое можно было спокойно включить какие-нибудь 80*40 (или сколько тогда было можно).

A>Единственное верное в твоих словах, это уточнение "в том числе". Кнут (и не только он) описывал алгоритм словами и кодом MIX'а. Что касается кода, то к ассемблеру форматирование мало применимо по определению. Так что же тебя не устраивает?


Приведенный код явно на С. Выбор же ассемблера был такой же ошибкой.

A>>>MSWord у меня замечательно работает Так что аргумент какой-то не такой

VD>>Это потому, что ты его практически не используешь.

A>С чего ты взял?


С твоих слов. Если бы ты его использовал хотя бы в том объеме, что и я, то такого не сказал бы.

A>>>Нет, это придумали архитекторы, для студентов вышедших из вузов — дешёвой рабочей силы.

VD>>Ой, адонз, так забавно от тебя такие понты слышать.

A>И где ты понты увидал?


Выделенно выше.

A>//--OFF Влад, если уж пишешь мой ник русскими буквами, то запомни, что на конце буква "Ц". адонц.


Ты его по-немецки пишешь?

A>Хм. А извини с какой стати ты мне запрещаешь? Нечем крыть решил заткнуть? или К даже если и так, всё равно какая-то нелепая манера дискутировать.


Извини, если хочешь позориться, то никто тебе запретить конечно не может. Но най, что из твоих уст рассуждения о прошлом выглядит довольно смешно.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.08.05 10:56
Оценка: -2 :))) :)
Здравствуйте, eao197, Вы писали:

E>Ну тут не так однозначно. Особенно когда работаешь в паре с математиком. Он тебе выкатывает алгоритм, нет, даже не столько алгоритм, сколько набор адаптированных к программированию формул. В которых t, k, L, Ll, Lm, Ln, Lk, C, Ct и т.п. на каждом шагу. Я, конечно, могу выяснить у него весь смысл этих названий и преобразовать в коде t в strobe_time, k в strobe_number и т.д. Только в полученной программе этот математик будет разбираться гораздо дольше. А вот если код будет содержать исходные обозначения (или близкие к ним), то и мне это будет понятно и моему коллеге-математику.


А может лучше математика научить в своих формулах использовать осмысленные имена переменных?
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.08.05 10:56
Оценка:
Здравствуйте, Mystic, Вы писали:

for(int t=T; i+T<size; i++)
{
    float f1 = 2 * (x[t+T/4] - x[t-T/4]);
    float f2 = -x[t+T/2] + 2*x[t] - x[t-T/2];
    env[t] := sqrt(f1*f1 + f2*f2);
    phi[t] := atan2(f2,f1);
}


> а вот несколько утрированый пример с точными названиями...


Не, это специльно подстроенная грязь цель которой доказать ошибочные предпосылки.

А вот как бы это следовало бы записать:
for (int frame = period; frame + period < frameCount; frame++)
{
    float filter1 = FirstFilterInHylbertTransform(period, frame);
    float filter2 = SecondFilterInHylbertTransform(period, frame);

    Envelope[frame] = sqrt(sqr(filter1) + sqr(filter2));
    TotalPhase[frame] = atan2(filter2, filter1);
}

...

float SecondFilterInHylbertTransform(int period, int frame)
{
    return -Pinhole[frame + period / 2]
        + 2 * Pinhole[frame] - Pinhole[frame - period / 2];
}

float FirstFilterInHylbertTransform(int period, int frame)
{
    return 2 * (Pinhole[frame + period / 4] - Pinhole[frame - period / 4]);
}


И если мой вариант не более поняте, то разговаривать нам больше не очем. У нас слишком разное понимение понятности кода.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.08.05 10:56
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Не было ведь inline, а вызов процедуры языка высокого уровня дорогого стоил. На это никто не шел,


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

V>А что не так в коде Кнута? Насколько "громко" ты сейчас обзываешь локальные переменные внутри алгоритмов.


Я кажется привел удовлетворяющий меня вариант кода. Можешь срванить.

V> У меня до сих пор популярны всякие i, j, k, tmp,


i, j, k в качестве индексов в циклах допустимо. tmp в приципе тоже если перменая использвется в двух строках. А вот:

V> t1, p1 и т.д. Да взять тот же дотнет и посмотреть сигнатуры типа


Идут в лес.

V>int IComparer::Compare(object x, object y);


Тоже нормально. Принцип ведь не в доведении до маразма, а в том, что бы читающий код человек мог понимать о чем идет речь.

V>Я думаю, что и тогда и сейчас людьми в большей степени руководил здравый смысл, чем мода.


+1
Но тода зравого смысла было меньше. Он был у отдетльныз личностей. А сейчас это уже превращается в культуру.

V> В те времена исходники программ предназначались или для себя, или для коллеги-профессионала.


Ламера, а не профессионала. Проффесионал за KLk, MM и т.п. морду бы набил. Ему ведь деньги нужно заработывать, а не тратить время на расшифровку.

V>Ты в соседней ветке спрашивал про интуитивную понятность операторов +.

V>Все равно мы имеем в виду человеческую логику в данном случае, так что стараемся руководствоваться здравым смыслом. Главное, чтобы проблем не возникало при прочтении, не так ли?

И что, здравым смыслом можно объяснить названия переменных MM, KK, ss?

V>Очередной спор теории с практикой.


И кто из нас тиортик?

V> Мне лично трудно читать алгоритм, если одновременно я могу окинуть взглядом не более пары его шагов.


Я что заставляю писать 100-килобайные функции? Я призываю писать понятный код. Какая разница влез код в экран или нет, если понять его нельзя? А разбить код не так уж и сложно. Процедурную и ОО декомпозицию еще никто не отменял.

V>Это тебе скобки кажутся бессмысленными, а в одной из фирм мне когда-то регулярно били по рукам, за "нарушение стиля", там требовали писать именно как я показал. Вот и решай, какой стиль более нечитабельный


Требования контры есть требования. Они не обсуждаются. Мы же говорим, о понятности.

V>Хотя именно я согласен, кроме предложения о выделении кода в ф-ии. Это сейчас оптимизирующие компиляторы, да и просто жутко быстрые железки не бьют по рукам за такие "выделения". А в 60-х очень даже били. Основная задача того времени была — не просто написать нечто, а заставить это нечто работать адекватно на имеющейся технике. Ты постоянно игнорируешь этот момент, по непонятной причине


Снова вспоминаем, о том, что Кнут должен был объяснить алгоритм, а не привести его оптимальную реализацию. Этот же аргумент анулирует аргументы о влезании в в 80*25.


V>Вообще-то, goto — не единственный оператор безусловного перехода. Всякие break, continue, return


Хочешь поговрить об этом? Подобный флэйм уже давно был закрыт. Вроде слошлись на том, что есть структурное пограммирование, а есть goto.

V>Да и не стоит забывать, что популярные процедурные языки того времени не имели других безусловных операторов перехода, кроме goto, т.е.


Изумительно. Вот только код на С. Думашь я не в курсе возможнотей этого языка?

V> просто не было выбора. К тому же, популярность блок-диаграмм алгоритмов в те времена играла не самую последнюю роль. Эти диаграммы переносятся один-водин в код именно с помощью goto. Т.е., если мы в учебнике описали некий алгоритм с помощью блок-диаграммы, то, если хотим, чтобы пример реализации на ЯП именно точно соответствовал диаграмме, мы используем goto.


О каких, кстати, тех временах ты все время упоминашь? Ты знашь когда было последнее переиздание Кнутовского трехтомника?

VD>>И их даже можено поняить когда речь идет об оптимизации алгоритма дикой важноти на дохлой железке. Но вот как понять этого мэтра который таким обраом пытается донести суть алгоритма до читателей?


V>О, как раз выше ответил.


Ничего ты не ответил. Все кивал на страшные времена.

V> Кстати, обрати внимание, что новичкам, делающим первые шаги в программировании, код с goto легче поддается пониманию, чем процедурный стиль (да, именно так).


Агащазблин. Найди мне новичка который сможет понять бред приведенный выше по ветке.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.08.05 10:56
Оценка:
Здравствуйте, SergeCpp, Вы писали:

SC>P.S. 8080 и Радио-86РК Вам не знаком ?

SC>Было время и очень хорошее время...

Знакомы, но в основном по картинкам. Читал исходники в журнале Радио. Уже тогда дико веселился. У отца на работе в это время уже были Wang-и, а может и PC-шки.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Стиль Дональда Эрвина Кнута
От: adontz Грузия http://adontz.wordpress.com/
Дата: 11.08.05 10:59
Оценка:
Здравствуйте, SergeCpp, Вы писали:

SC>Не передёргивайте!

SC>У Multi-Edit, например CtrlUp / CtrlDn был (сдвиг экрана на ОДНУ строку)!

А я про TurboPascal 5 (он кстати до сих пор у меня есть)
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[10]: Стиль Дональда Эрвина Кнута
От: adontz Грузия http://adontz.wordpress.com/
Дата: 11.08.05 11:33
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Померяемся?

VD>Если серьезно, то если ты пожил в те времена, то должен знать, что для оптимизации тогда во всю использовались макросы. Проблем они создавали не мало, но были неплохим выходом из положения.

Вообще-то в те времена всё писалось на Паскале Во-всяком случае всё то о чём я знаю и слышал. Макросов в паскале нету Нет — вру. Паскаль появился потом, сперва был ассемблер. А ещё я IBM ROM Basic видел и писал на нём — незабываемыя вешь

VD>Кстати, на 13.5 дюймовом монитрое можно было спокойно включить какие-нибудь 80*40 (или сколько тогда было можно).


По разному. 80х40 или 80х50. Но не все видеокарты поддерживали.

VD>Приведенный код явно на С. Выбор же ассемблера был такой же ошибкой.


Значит этого кода явно не было в книге что касается выбора ассемблера, тут уже приводили цитату, почему Кнут его выбрал.

VD>С твоих слов. Если бы ты его использовал хотя бы в том объеме, что и я, то такого не сказал бы.


Интересно какой это объём Если ты о просто наборе текста, но он в этом смысле вообще никогда не глючит. Бывает повиснет модуль проверки ОРФО, но это не MS-разработка и его можно просто отключить. А в чём глюки тогда? Форматирование? Оно нередко неочевидное — это правда. Бывает хочешь удалить линию, а это оказывается рамка абзаца Но именно глюков я не замечал

A>>>>Нет, это придумали архитекторы, для студентов вышедших из вузов — дешёвой рабочей силы.

VD>Выделенно выше.

Прости, а разве не так? Студенты это и тогда и сейчас именно дешёвая рабочая сила. И не только в программировании. Что-то я не видел, чтоб студентам давали место за 1200 $, зато на 200-300 $ зовут. Это как называется?

VD>Ты его по-немецки пишешь?

a = А; d = Д; o = О; n = Н; tz = Ц. АФАИК ts/tz и в английском звук Ц обозначают. Но даже если не так, читать надо всё равно Ц. Если угодно, это я так выпендрился

VD>Извини, если хочешь позориться, то никто тебе запретить конечно не может. Но най, что из твоих уст рассуждения о прошлом выглядит довольно смешно.


Ну если тебе смешно — смейся, но более-менее программировать я начал ещё в школе и на довольно устаревшей технике, так что как бы смешно тебе не было, всё таки много чего лично помню. За огромными шкафами с терминалками не реботал — что правда, то правда. Но зато наслышался про них много "хорошего". Так что, в целом, представление о том как жилось тогда имею. И практика написать программу в тетрадке за 2-3 дня, набрать за пол-часа, увидеть что не работает и пойди домой думать (никакой отладки ) мне знакома.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[10]: Стиль Дональда Эрвина Кнута
От: Privalov  
Дата: 11.08.05 11:52
Оценка: 50 (5) +5 :)
Здравствуйте, VladD2, Вы писали:


VD>А может лучше математика научить в своих формулах использовать осмысленные имена переменных?


Уже представляю себе очередное издание Фихтенгольца, в котором вместо y=f(x) написано:
SomeValue = SomeFunction(SomeArgument).

В математике своя нотация. Она существует уже сотни лет, посему переучивать математиков никто не будет. К тому же программу, реализующую математический алгоритм, гораздо легче прочитать в привычной для математика записи.В конце концов по стилю написания бухгалтерская программа отличается от математической примерно так же, как фантастический роман от монографии "Теория относительности" Паули.
Re[11]: Стиль Дональда Эрвина Кнута
От: Кодт Россия  
Дата: 11.08.05 12:12
Оценка: +1
Здравствуйте, Privalov, Вы писали:

VD>>А может лучше математика научить в своих формулах использовать осмысленные имена переменных?


P>Уже представляю себе очередное издание Фихтенгольца, в котором вместо y=f(x) написано:

P>SomeValue = SomeFunction(SomeArgument).

А в книге по ФП — вполне может быть.

P>В математике своя нотация. Она существует уже сотни лет, посему переучивать математиков никто не будет. К тому же программу, реализующую математический алгоритм, гораздо легче прочитать в привычной для математика записи.В конце концов по стилю написания бухгалтерская программа отличается от математической примерно так же, как фантастический роман от монографии "Теория относительности" Паули.


К тому же, математическая нотация вовсю пользуется форматированием (субскрипты, диакритические знаки, шрифты).
Например, готические заглавные буквы зачастую обозначают абстракции (группы, алгебры и т.п.), заглавные буквы с вертикальным штрихованием — множества, просто заглавные — матрицы, жирные строчные — векторы, просто строчные — скаляры.

В простом тексте приходится вводить буквенную нотацию — начиная от венгерской и кончая длинными_мнемоническими_идентификаторами.
Перекуём баги на фичи!
Re[8]: Стиль Дональда Эрвина Кнута
От: adontz Грузия http://adontz.wordpress.com/
Дата: 11.08.05 12:17
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ты не забыл, что речь идет о коде поясняющем алгоритм в книге?


Ты не забыл, что это неправда, потому что СИ в книге Кнута нету

V>> В те времена исходники программ предназначались или для себя, или для коллеги-профессионала.

VD>Ламера, а не профессионала. Проффесионал за KLk, MM и т.п. морду бы набил. Ему ведь деньги нужно заработывать, а не тратить время на расшифровку.

Нет. Деньги он тогда и так получал, как научный работник НИИ высоких технологий и больших достижений

VD>И что, здравым смыслом можно объяснить названия переменных MM, KK, ss?


Если они соответствуют принятой в среде номенклатуре, то да. Ни одному физику не придёт в голову обозначить силу чем-то длинее буквы F с индексом. Но на понимании между фиpиками это не отражается.

VD>Я что заставляю писать 100-килобайные функции? Я призываю писать понятный код. Какая разница влез код в экран или нет, если понять его нельзя? А разбить код не так уж и сложно. Процедурную и ОО декомпозицию еще никто не отменял.


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

VD>Снова вспоминаем, о том, что Кнут должен был объяснить алгоритм, а не привести его оптимальную реализацию.


Да, только код который мы обсудаем ничего объяснить не болжен был. Это СИ-код, а Кнут им в книге не пользовался.

VD>Хочешь поговрить об этом? Подобный флэйм уже давно был закрыт. Вроде слошлись на том, что есть структурное пограммирование, а есть goto.


Вроде бы одно-другого не исключает

VD>О каких, кстати, тех временах ты все время упоминашь? Ты знашь когда было последнее переиздание Кнутовского трехтомника?


А что, в стихах Пушкина при переиздании устаревшие слова заменяют их современными аналогами? Какая разница когда издаётся книга? Её издают так как она написана!

V>> Кстати, обрати внимание, что новичкам, делающим первые шаги в программировании, код с goto легче поддается пониманию, чем процедурный стиль (да, именно так).

VD>Агащазблин. Найди мне новичка который сможет понять бред приведенный выше по ветке.

Новичок не сможет. но этот "бред" и не предназначался новичкам. Он вообще людям не предназначался. И в книге его не было.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[10]: Стиль Дональда Эрвина Кнута
От: Andy Panda США  
Дата: 11.08.05 12:33
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, Odi$$ey, Вы писали:


OE>>В данном случае по барабану — написал он это сам или счел возможным привести эту лапшу в банке в качестве примера реализации алгоритма в книге(!), объясняющей эти самые алгоритмы. Вывод один — этот стиль его ни сколько не смущает.


A>Единственный логичный вывод который я лично могу сделать, это то что ты не читал Кнута В книге Кнута НЕТ ПРОГРАММ НА СИ.


Давно читал, но, когда приду сегодня домой, просмотрю еще раз. По моему во втором томе — в разделе, связанном с случайными числами, есть пример исходника на C.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: Стиль Дональда Эрвина Кнута
От: mefrill Россия  
Дата: 11.08.05 12:34
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Если доставляет удовольствие читать математические формулы и странный код, то конечно. А если предпочиташь неформальное обяснение, то вряд ли.


А мне кажется, зря ты на Кнута наговариваешь. Неформальных объяснений у него предостаточно. Хотя, конечно, на вкус и цвет, как говорится, товарищей нет.
Re[12]: Стиль Дональда Эрвина Кнута
От: Privalov  
Дата: 11.08.05 12:35
Оценка: +1
Здравствуйте, Кодт, Вы писали:

К>К тому же, математическая нотация вовсю пользуется форматированием (субскрипты, диакритические знаки, шрифты).

К>Например, готические заглавные буквы зачастую обозначают абстракции (группы, алгебры и т.п.), заглавные буквы с вертикальным штрихованием — множества, просто заглавные — матрицы, жирные строчные — векторы, просто строчные — скаляры.

К>В простом тексте приходится вводить буквенную нотацию — начиная от венгерской и кончая длинными_мнемоническими_идентификаторами.


Математики (особенно старшего поколения) практически не используют в своих программах имен длиннее 6 символов (ограничение еще с Фортрана 4). Они, как правило, записывауйт греческие буквы согласно их названиям (ALPHA, PI) и как-нибудь обозначают векторы (XV) и матрицы (MX). Отсутствие длинных имен никак не ухудшает читабельности программ, тем более что большинство программистов получают в вузах основательную подготовку по математике.
Re[8]: Стиль Дональда Эрвина Кнута
От: mefrill Россия  
Дата: 11.08.05 12:41
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Но вот проблема. Вместо использования максимально высокоуровневого языка позволяющего абстрагироваться от его деталей, он использует какую-то выдуманную машину. И приводя алгоритмы на С почему-то делает их мало понятными ужасным стилем форматирования и именования переменных. Вот об этом собсвтенно и речь. Это и называется плохое качество изложения.


Это как раз неверно. У Кнута используется два описания алгоритма, словесное и на ассемблере. Ведь ты не будешь утверждать, что си шарп более высокоуровневый язык чем английский? Конечно, язык кнута специфичен и преднзначен скорее для математиков нежели коммерческих программистов. Но, для меня например, это как раз и есть главное преимущество.
Re[10]: Стиль Дональда Эрвина Кнута
От: SergeCpp Россия http://zoozahita.ru
Дата: 11.08.05 13:03
Оценка:
Здравствуйте, adontz, Вы писали:

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


SC>>А тут Вы опираетесь на НЕДОКАЗАННОЕ


A>А что, кто-то доказал, что это НЕ сгенерироанный код?


А ЭТОГО я НЕ утверждал...
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re[11]: Стиль Дональда Эрвина Кнута
От: SergeCpp Россия http://zoozahita.ru
Дата: 11.08.05 13:04
Оценка:
Здравствуйте, Andy Panda, Вы писали:

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


A>>Здравствуйте, Odi$$ey, Вы писали:


OE>>>В данном случае по барабану — написал он это сам или счел возможным привести эту лапшу в банке в качестве примера реализации алгоритма в книге(!), объясняющей эти самые алгоритмы. Вывод один — этот стиль его ни сколько не смущает.


A>>Единственный логичный вывод который я лично могу сделать, это то что ты не читал Кнута В книге Кнута НЕТ ПРОГРАММ НА СИ.


AP>Давно читал, но, когда приду сегодня домой, просмотрю еще раз. По моему во втором томе — в разделе, связанном с случайными числами, есть пример исходника на C.


Есть, есть...
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re[10]: Стиль Дональда Эрвина Кнута
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 11.08.05 13:06
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Не, это специльно подстроенная грязь цель которой доказать ошибочные предпосылки.


...

VD>И если мой вариант не более поняте, то разговаривать нам больше не очем. У нас слишком разное понимение понятности кода.


Конечно специально подстроенная. И, надо сказать, что в ряде приложений я бы предпочел действительно Ваш вариант. Скажем, если бы рассчитывал, что сопровождать код будет не специалист в области обработки сигналов. Но это не тот случай. Тут желательно иметь больше информации формул перед глазами, может понадобится переписать фрагмент с использованием SSE, ... Да и формула специалисту скажет больше, чем словосочетание FilterFunctionInHylbertTransform.
Re[11]: Стиль Дональда Эрвина Кнута
От: Павел Кузнецов  
Дата: 11.08.05 13:32
Оценка: +1
adontz,

> VD>Кстати, на 13.5 дюймовом монитрое можно было спокойно включить какие-нибудь 80*40 (или сколько тогда было можно).

>
> По разному. 80х40 или 80х50. Но не все видеокарты поддерживали.

80 x 43. И еще был режим что-то около (здесь точно не помню) 80 x 60, но его стандартными средствами получить было нельзя, нужно было свой "переключатель" на ASM делать.
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[8]: Стиль Дональда Эрвина Кнута
От: vdimas Россия  
Дата: 11.08.05 13:48
Оценка:
Здравствуйте, VladD2, Вы писали:


V>>Да и не стоит забывать, что популярные процедурные языки того времени не имели других безусловных операторов перехода, кроме goto, т.е.


VD>Изумительно. Вот только код на С. Думашь я не в курсе возможнотей этого языка?


Это пример был портирован на С без изменений.

V>> просто не было выбора. К тому же, популярность блок-диаграмм алгоритмов в те времена играла не самую последнюю роль. Эти диаграммы переносятся один-водин в код именно с помощью goto. Т.е., если мы в учебнике описали некий алгоритм с помощью блок-диаграммы, то, если хотим, чтобы пример реализации на ЯП именно точно соответствовал диаграмме, мы используем goto.


VD>О каких, кстати, тех временах ты все время упоминашь? Ты знашь когда было последнее переиздание Кнутовского трехтомника?


Очевидно имеется в виду времена его написания. Сейчас блок-диаграммы алгоритмов не столь популярны.

VD>>>И их даже можено поняить когда речь идет об оптимизации алгоритма дикой важноти на дохлой железке. Но вот как понять этого мэтра который таким обраом пытается донести суть алгоритма до читателей?


V>>О, как раз выше ответил.


VD>Ничего ты не ответил. Все кивал на страшные времена.


Я кивал на блок-диаграммы и перенос их в код один-в-один. Когда я начинал в старших классах, у меня не было произвольного доступа к технике, да и та поддерживала только Basic. Свои программки я разрабатывал именно в виде блок-алгоритмов, а потом быстро переводил их в код, кодга был доступ к технике. Так что очень хорошо представляю себе процесс отображения блок-диаграмм на исходный код.

V>> Кстати, обрати внимание, что новичкам, делающим первые шаги в программировании, код с goto легче поддается пониманию, чем процедурный стиль (да, именно так).


VD>Агащазблин. Найди мне новичка который сможет понять бред приведенный выше по ветке.


Наверно, я был таким новичком. Имено по таким книгам и учились. Прекрасно помню, что особенно в первый период изучения меньше всего обращал внимание на идентификаторы. Я считал программирование разделом математики. А в математических предметах в школе оперировал переменными весьма немногословного вида: a, b, c... Давно последний раз справочник по вышле пролистывал?
Re[8]: Стиль Дональда Эрвина Кнута
От: SergeCpp Россия http://zoozahita.ru
Дата: 11.08.05 13:49
Оценка:
Здравствуйте, VladD2, Вы писали:

...

SC>>P.S. 8080 и Радио-86РК Вам не знаком ?

SC>>Было время и очень хорошее время...

VD>Знакомы, но в основном по картинкам.

Читал исходники в журнале Радио.
Уже тогда дико веселился.
У отца на работе в это время уже были Wang-и, а может и PC-шки.

Посмотрите

Радио 1992 № 8 стр. 18..24
Радио 1992 № 9 стр. 24..26
Радио 1993 № 5 стр. 20..23

ftp://ftp.radio.ru/pub/arhiv/

Уважьте, пожалуйста, старика...
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re[9]: Стиль Дональда Эрвина Кнута
От: vdimas Россия  
Дата: 11.08.05 14:04
Оценка: +1
Здравствуйте, adontz, Вы писали:


A>С чего ты взял? И его использую и эксель Странный ты человек. У тебя Word глючит, но не просто так, а потому что при его написании якобы (исходников-то ты не видел) не использовали какие-то методы форматирования исходного кода, а если у кого-то не глючит, то это потому что не пользуются. Но мысли, что другие активно использующие Word люди могут, в отличие от тебя, не испытывать трудностей. Так же как и мысль, что Word глючит именно у тебя, по локальным причинам и к форматированию кода эта проблема вообще отношения не имеет тебе в голову не приходит




A>>>Нет, это придумали архитекторы, для студентов вышедших из вузов — дешёвой рабочей силы.

VD>>Ой, адонз, так забавно от тебя такие понты слышать.

A>И где ты понты увидал?

A>//--OFF Влад, если уж пишешь мой ник русскими буквами, то запомни, что на конце буква "Ц". адонц.

VD>>Ну, да это не по теме. А по теме... эти архитекторы откуда взялись? Появились?


Они взялись из менеджеров и программистов-самоучек. Раньше я сплошь и рядом наблюдал ситуацию, когда руководителем проекта был человек, не хватавший звезд с неба в плане программирования (да и сейчас это частенько). Разумеется, проблема читабельности могла быть замечена ими раньше самих программистов.
Re[10]: Стиль Дональда Эрвина Кнута
От: vdimas Россия  
Дата: 11.08.05 14:11
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Я ка бы даже без переменной могу:

VD>
VD>#define Swap(a, b) do { a ^= b; b ^= a; a ^= b; } while(0)
VD>

VD>
VD>Хотя и с переменной будет не хуже:
VD>
VD>#define Swap(a, b) do { int x = a; a = b; b = x; } while(0)
VD>

VD>но первая версия еще и дженерик.

только для целых


VD>Если серьезно, то если ты пожил в те времена, то должен знать, что для оптимизации тогда во всю использовались макросы. Проблем они создавали не мало, но были неплохим выходом из положения.


В С активно использовались макросы именно как разновидность inline-процедур. Однако в описании алгоритма макросам (скрывающим функциональность), разумеется, не место.


VD>А выстоа определяется размером функции. Маленьгие функции и сейчас очено приветсвтуются. А тогда еще больше приветсвовались. Вот только почему-то не многие так делали (не смотря на размер экрана).


При определенных правилах форматирования даже маленькие ф-ии не влезают на эран. Пример я приводил, это вполне реальная контора.

VD>Кстати, на 13.5 дюймовом монитрое можно было спокойно включить какие-нибудь 80*40 (или сколько тогда было можно).


80*30 было ничего так, остальное портило глаза.

VD>Приведенный код явно на С. Выбор же ассемблера был такой же ошибкой.


Не было С еще тогда. А выбор FROTRANA был бы еще большей ошибкой.
Re[8]: Стиль Дональда Эрвина Кнута
От: vdimas Россия  
Дата: 11.08.05 14:14
Оценка:
Здравствуйте, VladD2, Вы писали:

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


SC>>P.S. 8080 и Радио-86РК Вам не знаком ?

SC>>Было время и очень хорошее время...

VD>Знакомы, но в основном по картинкам. Читал исходники в журнале Радио. Уже тогда дико веселился. У отца на работе в это время уже были Wang-и, а может и PC-шки.


Угу, у моего знакомого стояла PC 8086 дома. И стоила она около 6000 советских рублей. Отчего не повеселиться дико?
Re[10]: Стиль Дональда Эрвина Кнута
От: Трурль  
Дата: 11.08.05 14:17
Оценка: :)
Здравствуйте, VladD2, Вы писали:

VD>А может лучше математика научить в своих формулах использовать осмысленные имена переменных?


Как говаривал Шалтай-Болтай "Вопрос в том, кто здесь хозяин".

Хотя математики использовали осмысленные имена, веке в XIV.
Re[10]: Стиль Дональда Эрвина Кнута
От: vdimas Россия  
Дата: 11.08.05 14:22
Оценка: 5 (3) +4
Здравствуйте, VladD2, Вы писали:

VD>И если мой вариант не более поняте, то разговаривать нам больше не очем. У нас слишком разное понимение понятности кода.


Влад, ты тоже перегибаешь. Похоже, ты не занимался всерьез моделированием или там обработкой сигналов. Если каждую формулу расписывать в 100 мелких ф-ий, то такая программа просто не будет никогда написана. Как поступает программист в таких случаях? Он берет предметный справочник и загоняет формулу 1-в-1, стараясь максимально соответствовать обозначениям в книге. В качестве комментариев дает ссылку на тему из предметной области или главы справочника, откуда взята формула.

Понимаешь, ну как ты не разбивай эти формулы на подформулы, как не обзывай переменные, от этого эти куски кода читабельнее не станут. Ты все-равно нихрена не поймешь, пока не возьмешь в руки справочник. А когда возмешь, то будешь костерить программиста, если он при переносе формул из справочника сделал эти фрмулы неузнаваемыми, а значит неверифицируемыми.
Re[7]: Стиль Дональда Эрвина Кнута
От: vdimas Россия  
Дата: 11.08.05 15:37
Оценка: 58 (2) -1
Здравствуйте, VladD2, Вы писали:

Т>>Кнута действительно приятно читать.


VD>Кому как.


VD>Если доставляет удовольствие читать математические формулы и странный код, то конечно. А если предпочиташь неформальное обяснение, то вряд ли.


Ты задел, кстати, наболевший мозоль. Я ненавижу большинство америкосовских книг по программированию, именно из-за "неформального" подхода. Когда перелистываю 3-ю подряд СТРАНИЦУ неформальной воды — у меня к этому времени уже начинает болеть голова. Мне больше по душе книги типа справочников, одна из идеальных книг на мой вкус — автора Болски по С.
Re[6]: Стиль Дональда Эрвина Кнута
От: vdimas Россия  
Дата: 11.08.05 15:41
Оценка: +3
Здравствуйте, VladD2, Вы писали:

VD>В том то и дело, что заслуга Кнута в том, что он собрал все вместе. До него это никто не делал. То есть он первопроходец. Так зачем же равняться на него как на икону? Сделал хорошее дело и за это мы его уважем. Но на дворе 2005-ый год. И изучать алгоритмы можно по куда более доходчивым книгам.


Вполне доходчиво он пишет. Очень многим нравится именно сухое изложение материала. Собсвенно на них книга и ориентирована. Если же читатель далек от программирования, то ему следует начинать с книг, описывающих азы, а не с Кнута.
Re[9]: Стиль Дональда Эрвина Кнута
От: xvost Германия http://www.jetbrains.com/company/people/Pasynkov_Eugene.html
Дата: 11.08.05 16:33
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Угу, у моего знакомого стояла PC 8086 дома. И стоила она около 6000 советских рублей. Отчего не повеселиться дико?


А чего веселиться? Мы сами вместе с моим отцом покупали в Березке в конце 89 года 286 комп за 2400$. При этом 86 там же рядом стоил 2100$
С уважением, Евгений
JetBrains, Inc. "Develop with pleasure!"
Re[10]: Стиль Дональда Эрвина Кнута
От: vofka21 Россия  
Дата: 11.08.05 16:45
Оценка: 54 (4) +3
Здравствуйте, VladD2, Вы писали:

VD>#define Swap(a, b) do { a ^= b; b ^= a; a ^= b; } while(0)



В быстрой сортировке при Swap(a[i], a[j]) это бага(сам сталкивался).

что будет при Swap(a, a)? — a станет равно 0.
Re[10]: Стиль Дональда Эрвина Кнута
От: adontz Грузия http://adontz.wordpress.com/
Дата: 11.08.05 16:54
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Я ка бы даже без переменной могу:

VD>
VD>#define Swap(a, b) do { a ^= b; b ^= a; a ^= b; } while(0)
VD>

VD>
VD>Хотя и с переменной будет не хуже:
VD>
VD>#define Swap(a, b) do { int x = a; a = b; b = x; } while(0)
VD>

VD>но первая версия еще и дженерик.

Скажу тебе по секрету, только ты никому! Компилятор тех времён while(0) не викинул бы Да и сейчас встречаются такие экземпляры
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[11]: Стиль Дональда Эрвина Кнута
От: adontz Грузия http://adontz.wordpress.com/
Дата: 11.08.05 16:57
Оценка:
Здравствуйте, vofka21, Вы писали:

V>что будет при Swap(a, a)? — a станет равно 0.


Почему?
          | a | b |
----------|---|---|-
a = b = 3 | 3 | 3 |
a ^= b    | 0 | 3 |
b ^= a    | 0 | 3 |
a ^= b    | 3 | 3 |
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[11]: Стиль Дональда Эрвина Кнута
От: vdimas Россия  
Дата: 11.08.05 17:04
Оценка:
Здравствуйте, vofka21, Вы писали:


VD>>#define Swap(a, b) do { a ^= b; b ^= a; a ^= b; } while(0)



V>В быстрой сортировке при Swap(a[i], a[j]) это бага(сам сталкивался).


V>что будет при Swap(a, a)? — a станет равно 0.


a = 1
b = 1
a ^= b; (a = 0)
b ^= a; (b = 1)
a ^= b; (a = 1)
Re[12]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 11.08.05 17:15
Оценка: +1
Здравствуйте, vdimas, Вы писали:

VD>>>#define Swap(a, b) do { a ^= b; b ^= a; a ^= b; } while(0)


V>>В быстрой сортировке при Swap(a[i], a[j]) это бага(сам сталкивался).


V>>что будет при Swap(a, a)? — a станет равно 0.


V>a = 1

V>b = 1
V>a ^= b; (a = 0)
V>b ^= a; (b = 1)
V>a ^= b; (a = 1)

Ребята, вы чего, тормозите что ли? Какие a и b? Есть a и a -- после a ^= a будет 0!
Тоже самое произойдет, когда в Swap(a[i],a[j]) дело дойдет до i==j.

Все-таки оказывается, что int tmp=a; a=b; b=tmp; гораздо проще, надежнее и сопровождаемее
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[4]: Стиль Дональда Эрвина Кнута
От: Ka3a4oK  
Дата: 11.08.05 17:21
Оценка:
>>Есть только название

Название и у меня есть. А где достать все остальное ?
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[13]: Стиль Дональда Эрвина Кнута
От: adontz Грузия http://adontz.wordpress.com/
Дата: 11.08.05 17:26
Оценка:
Здравствуйте, eao197, Вы писали:

E>Ребята, вы чего, тормозите что ли?


Да Мы подумали что ресь идёт о равных переменных, а речь идёт об одной и той же переменной. Вот такие мы тормоза
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[8]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.08.05 18:20
Оценка: +2
Здравствуйте, mefrill, Вы писали:

M>А мне кажется, зря ты на Кнута наговариваешь. Неформальных объяснений у него предостаточно. Хотя, конечно, на вкус и цвет, как говорится, товарищей нет.


Я просто сравниваю его с другими работами. Помню как читал у Кнута (ох давно это было) объяснение хэширования и удивлялся, так как ничего не мог понять при том, что вроде бы как уже понимал принципы хэширования и работы хэш-таблицы.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.08.05 18:20
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Ты задел, кстати, наболевший мозоль. Я ненавижу большинство америкосовских книг по программированию, именно из-за "неформального" подхода. Когда перелистываю 3-ю подряд СТРАНИЦУ неформальной воды — у меня к этому времени уже начинает болеть голова. Мне больше по душе книги типа справочников, одна из идеальных книг на мой вкус — автора Болски по С.


Мло уметь неформально что-то объснить. Нужно еще сделать это доходчиво и относительно кратко. Тут уже кто-то упоминал, что книги Кнута по объему больше аналогичных. Что темболее странно.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.08.05 18:20
Оценка:
Здравствуйте, Oyster, Вы писали:

O>Уважаемый камрад Влад, не съезжай в сторону "обучения". Никто не утверждает, что начинать надо с Кнута


А какой смысл читать книку посвященную алогоритмам если ты сам не хуже автора их понимашь? По-моему, работа Кнута предназначена именно для обучения.

O>И мне, например, как читателю, сейчас Кнута читать приятнее, чем того же Кормена.


А зачем тебе его сейчас читать?

O>Повторяю: я не утверждаю, что начинать знакомиться с алгоритмами надо с Кнута. Скорее даже наоборот — иначе ученики могут испугаться и убежать


Но, к сожалению именно Кнута зачастую советуют начинающим. А я бы как раз наоборот предотеригал.

O>Опять же — см. выше. Формальное описание бывает очень полезно. Например, если тебе требуется кому-то что-то доказать


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

O>См. выше ещё раз Насчёт "научить" я и не спорю. Я прежде всего отвечал на такие твои слова:


O>

O>Вот ответь на вопрос. Может ли широта охвата компенсировать низкое качество объяснения?


Ды научить == объяснить так чтобы поняли.

O>Я пытаюсь всего лишь отстоять такую точку зрения — у Кнута не низкое качество объяснения. Я не говорю, что начинать изучать алгоритмы надо непременно с Кнута.


Чесно говоря никогда не расценивал "Искуство программирования" как научный труд. Большинство алгоритмов все же не его. А раз так, то может если хочешь сероезно разобраться в тонкостях, то лучше читать работы специальноп освященные этим повросам?
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.08.05 18:20
Оценка:
Здравствуйте, Mystic, Вы писали:

M>Не стоить путать научно-популярную литературу и научные монографии. Одному надо читать книжки Перельмана, а другому Ландау


Можно узнать в чем заключается научная новизна в его трудах? И почему ты считаешь его книги не научно-популярными?
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.08.05 18:20
Оценка:
Здравствуйте, Oyster, Вы писали:

O>Всё субъективно под луной.


+1

O>Ссылки в студию.


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

O>Одними мат. формулами более-менее сложный алгоритм ну никак не опишешь. Или не согласен?


Согласен. Но когда объяснения перенасыщены формулами, это тоже излишне формализовано. Кнут как раз пытался объяснять неформально. Но получалось у него как-то слишком сложно. Согласен, что это может быть субъективно и другому может показаться, что все ОК. Но я и выражаю свое мнение, а не собираю улики для процесса против Кнута.

O>В книге нет ни одного текста на Си. В этой ветке, я так понял, разговор о книге исключительно.


Кники у меня под рукой нет. Код
Автор: McSeem2
Дата: 27.04.05
приводил McSeem2.

Я только помню, что тже фигел с непонтности алгоритмвов в Кнутовской книге.

O>На быстрой сортировке свет клином не сошёлся — это лишь один алгоритм из великого множества.


Другие вещи тоже описаны во многи местах. По край мере важные для программиста.

O>Это ты к тому, что Кнуту стоило бы приводить примеры на C#?


Нет, это я к тому, что Кнуту стоило приводить примеры которые наиболее просто объясняют суть алгоритма.

O> Или, может, на Java? Нет, лучше на Lisp, Smalltalk или Haskell. Фу ты, нет, лучше уж на ML. Ну или хотя бы на Фортране или Алголе...


Да без разницы на чем. Важно отразить суть. Например, на Паскале было бы в самый раз. Да и на С потянуло бы. Вот только не на вымышленной виртуальной машине.

O>"Был пионером" говорят про тех, кто уже не нужен. Кнут до сих пор актуален.


Как сказать, как сказать...

O>Всё зависит от того, что ты вкладываешь в понятие "изучать алгоритмы". Если я захочу изучить ту же сортировку Хоара, мне хватит и того же Кормена, согласен.


Не просто хватит. Ты скорее вникнеш в суть.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.08.05 18:20
Оценка:
Здравствуйте, mefrill, Вы писали:

M>Это как раз неверно. У Кнута используется два описания алгоритма, словесное и на ассемблере. Ведь ты не будешь утверждать, что си шарп более высокоуровневый язык чем английский?


Конечно нет. Но в естественно язые слишком многое остается "за бортом". Столько подразумевается, а сколько можно просто по другому понять... По этому лучше всего иметь и описание на естесвенном языке, и добротную реализацию на высокоуровневом языке (причем с исчерпывающими коментариями). Это позволит сопоставляя описание с реализацией понять суть.

M> Конечно, язык кнута специфичен и преднзначен скорее для математиков нежели коммерческих программистов. Но, для меня например, это как раз и есть главное преимущество.


+1 Но люди бываю разные.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.08.05 18:20
Оценка: +1
Здравствуйте, vdimas, Вы писали:

V>Вполне доходчиво он пишет. Очень многим нравится именно сухое изложение материала. Собсвенно на них книга и ориентирована. Если же читатель далек от программирования, то ему следует начинать с книг, описывающих азы, а не с Кнута.


Понты, понты. Есть масса очень близких к программированию людей (уж не более далеких чем ты) которым кнут не кажется доходчивым писателем. Эта тема тому подтверждение.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.08.05 18:20
Оценка:
Здравствуйте, adontz, Вы писали:

A>Вообще-то в те времена всё писалось на Паскале Во-всяком случае всё то о чём я знаю и слышал. Макросов в паскале нету Нет — вру. Паскаль появился потом, сперва был ассемблер. А ещё я IBM ROM Basic видел и писал на нём — незабываемыя вешь


Вообще-то Паскаль и С появились практически параллельно и за долго до появления IBM PC.

A>По разному. 80х40 или 80х50. Но не все видеокарты поддерживали


Точно помню, что числа были не кратные 10. По крайне мере 40 точно не было. Ну, да без разницы.

VD>>С твоих слов. Если бы ты его использовал хотя бы в том объеме, что и я, то такого не сказал бы.


A>Интересно какой это объём


Подумай.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.08.05 18:20
Оценка:
Здравствуйте, Privalov, Вы писали:

P>Уже представляю себе очередное издание Фихтенгольца, в котором вместо y=f(x) написано:

P>SomeValue = SomeFunction(SomeArgument).

Было бы здорово.

P>В математике своя нотация. Она существует уже сотни лет, посему переучивать математиков никто не будет.


Согласен. Скорее земля сойдет на небо.

P> К тому же программу, реализующую математический алгоритм, гораздо легче прочитать в привычной для математика записи.В конце концов по стилю написания бухгалтерская программа отличается от математической примерно так же, как фантастический роман от монографии "Теория относительности" Паули.


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

Слава богу программирование не имеет сотен лет дурных традиций. Хотя они тоже появляются. Вот разные CDR-ы в Лиспе многие воспринимают как вполне приемлемые названия.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.08.05 18:20
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Влад, ты тоже перегибаешь. Похоже, ты не занимался всерьез моделированием или там обработкой сигналов. Если каждую формулу расписывать в 100 мелких ф-ий, то такая программа просто не будет никогда написана.


Да халтура это. Только и всего. В лом, есть в лом. Понять это можно. Простить... я бы не стал.

V> Как поступает программист в таких случаях? Он берет предметный справочник и загоняет формулу 1-в-1, стараясь максимально соответствовать обозначениям в книге.


Зря. Ну, да если хотя бы сделает разумное название у функции и даст ссылку на описание формулы, то еще куда не шло. Но опять же более менее осмысленные имена, а не ss, MM, KK никому бы не помешали.

V> В качестве комментариев дает ссылку на тему из предметной области или главы справочника, откуда взята формула.


Вот в примере выше компентариями и не пахнет. И думаю, что это не еденичный случай.

V>Понимаешь, ну как ты не разбивай эти формулы на подформулы, как не обзывай переменные, от этого эти куски кода читабельнее не станут.


Да, станут, станут. Скажи често, что прост влом это делать. А на изменяемость плевать. Если кто-то не поймет, что в формуле ошибка перепишет ее еще раз целиком.

V> Ты все-равно нихрена не поймешь, пока не возьмешь в руки справочник. А когда возмешь, то будешь костерить программиста, если он при переносе формул из справочника сделал эти фрмулы неузнаваемыми, а значит неверифицируемыми.


Да все равно буедешь. Ведь в его коде есть один фатальный недостаток... его пысал не ты.

Ну, и главное. Как я уже сказал, если это действительно формула со сылкой на источнкик, или что еще лучше, с описанием алгоритма рядом в комментарии, то на это еще можно закрыть глаза. Но когда в таком стиле описывают примеры в книгах или коммерческий/открытый софт, вот тут я уже буду не просто против, а очень сильно злой.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.08.05 18:20
Оценка:
Здравствуйте, SergeCpp, Вы писали:

SC>Радио 1992 № 8 стр. 18..24

SC>Радио 1992 № 9 стр. 24..26
SC>Радио 1993 № 5 стр. 20..23

SC>ftp://ftp.radio.ru/pub/arhiv/


SC>Уважьте, пожалуйста, старика...


О нет, пока что это мне не доступно. Я сейчас на диалапе и качать все это проблематично. Добирусь до Москвы постораюсь глянуть. Но кое что я все же смутно помню. Исходники какой-то ОС... Интересно что делали люди когда опечатывались при вводе?
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.08.05 18:20
Оценка:
Здравствуйте, xvost, Вы писали:

X>А чего веселиться? Мы сами вместе с моим отцом покупали в Березке в конце 89 года 286 комп за 2400$. При этом 86 там же рядом стоил 2100$


Нда. У меня в те времена на мышку от нее денег не хватило бы.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.08.05 18:27
Оценка:
Здравствуйте, SergeCpp, Вы писали:

A>>...и скролл был рывковый PgUp/PgDn...


SC>Не передёргивайте!


У меня на XT-шке листалось все влет. Пользовался QC 1.0, WD и Лексиконом. Вот последний подтормаживал, но только в графическом режиме.

SC>У Multi-Edit, например CtrlUp / CtrlDn был (сдвиг экрана на ОДНУ строку)!


А я что-то ME сразу не взлюбил. Уж больно у него по умолчанию раскладка была причюдливая.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Стиль Дональда Эрвина Кнута
От: adontz Грузия http://adontz.wordpress.com/
Дата: 11.08.05 18:27
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>>>С твоих слов. Если бы ты его использовал хотя бы в том объеме, что и я, то такого не сказал бы.

A>>Интересно какой это объём
VD>Подумай.

Не думаю, что больше 10 страниц в день.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[12]: Стиль Дональда Эрвина Кнута
От: vdimas Россия  
Дата: 11.08.05 19:17
Оценка:
Здравствуйте, VladD2, Вы писали:

V>> Как поступает программист в таких случаях? Он берет предметный справочник и загоняет формулу 1-в-1, стараясь максимально соответствовать обозначениям в книге.


VD>Зря. Ну, да если хотя бы сделает разумное название у функции и даст ссылку на описание формулы, то еще куда не шло. Но опять же более менее осмысленные имена, а не ss, MM, KK никому бы не помешали.


Именно. Достаточно дать разумное название самой ф-ии.

V>> Ты все-равно нихрена не поймешь, пока не возьмешь в руки справочник. А когда возмешь, то будешь костерить программиста, если он при переносе формул из справочника сделал эти фрмулы неузнаваемыми, а значит неверифицируемыми.


VD>Да все равно буедешь. Ведь в его коде есть один фатальный недостаток... его пысал не ты.


Этот недостаток не всегда является фатальным. Иногда я очень рад, что кто-то уже сделал много полезного ДЛЯ меня (опен сорс).

VD>Ну, и главное. Как я уже сказал, если это действительно формула со сылкой на источнкик, или что еще лучше, с описанием алгоритма рядом в комментарии, то на это еще можно закрыть глаза. Но когда в таком стиле описывают примеры в книгах или коммерческий/открытый софт, вот тут я уже буду не просто против, а очень сильно злой.


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

--------
К стати, в своем бизнес-софте у меня с наименованием идентификаторов примерно так же, как ты ратуешь, оно и понятно, мы оперируем прикладными сущностями и даем приближенные к ним имена. Когда мы оперируем формулами (математика, физика, химия и т.д.), то мы тоже даем приближенные к прикладной области имена. Просто короткие эти имена там, и эти обозначения устаканивались десятилетиями (а некоторые наверняка столетиями).
Re[8]: Стиль Дональда Эрвина Кнута
От: adontz Грузия http://adontz.wordpress.com/
Дата: 11.08.05 19:54
Оценка: 1 (1) +2 :))) :))) :))
Здравствуйте, VladD2, Вы писали:

VD>Понты, понты. Есть масса очень близких к программированию людей (уж не более далеких чем ты) которым кнут не кажется доходчивым писателем. Эта тема тому подтверждение.


Понты, понты. Есть масса людей, которые думают что они могут быть близки к программированию и далеки от математики. Эта тема тому подтверждение.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re: Стиль Дональда Эрвина Кнута
От: Anton Batenev Россия https://github.com/abbat
Дата: 12.08.05 03:27
Оценка: 14 (1)
Здравствуйте, SergeCpp, Вы писали:

SC>я был (и с тех пор нахожусь) в шоке от

SC>"весьма необычного" стиля программирования
SC>Великого Мастера.
SC>Неужели это только я такой привереда ?

Может, не по теме, но когда-то пытался выработать или свой стиль оформления кода, или принять один из существующих стандартов. По сути, из существующих стандартов, чего-то более менее фундаментального удалось в то время найти следующее:

Соглашения по оформлению кода команды RSDN — собственно на эту ссылку выводила большая часть запросов яндекса. Вероятно, это единственный русскоязычный документ подобного плана. Если кто знает другие ссылочки на русскоязычные работы / переводы — хотелось бы услышать.

GNU coding standards — достаточно запутанный документ, в котором говорится много и обо всем в попытках объять необъятное. В частности, форматированию кода посвящена глава 5. Making The Best Use of C.

Programming in C++, Rules and Recommendations, Recommended C Style and Coding Standards — хорошо систематизированные документы, множество наглядных примеров офрмления кода.

Все остальные ссылки являются вариациями с незначительными отклонениями от стилей:

1TBS (K&R)

void foo(int arg) {
    if(arg==0) {
        printf("Hello, World");
    }
}


Алмена (BSD)

void foo(int arg)
{
    if(arg==0)
    {
        printf("Hello, World");
    }
}


Whitesmith

void foo(int arg)
    {
    if(arg==0)
        {
        printf("Hello, World");
        }
    }


и незначительными стандартами именований:

lowercase,
lower_case_with_underscores,
lowerCaseFirstLetterWithMixedCase,
MixedCase,
UPPERCASE,
UPPERCASE_WITH_UNDESCORES,
lpszHungarian


Если же подходить к проблеме форматирования кода не как следованию к.л. стандартам, а как к созданию максимального удобства для читающего впоследствии исходный код, то, скорее всего, необходимо обращаться к психологии восприятия текста мозгом человека. На сколько позволяет судить поиск, в общем случае, психология восприятия текста давно изучается и существует множество трудов на данную тему. Что касается восприятия текста с экрана монитора, то тут немного поменьше и в основном дизайнерско-рекламного направления. Что же касается восприятия текста программного кода, то двухчасовой поиск вывел всего на одну публикацию хотя бы чуть-чуть претендующую на обсуждение данного вопроса — Вячеслав Всеволодович Иванов. Чет и нечет. Асимметрия мозга и знаковых систем. Вероятно, либо проблема еще не изучалась, либо слишком незначительна для изучения, либо я плохо (не там) ищу.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[8]: Стиль Дональда Эрвина Кнута
От: SergeCpp Россия http://zoozahita.ru
Дата: 12.08.05 03:29
Оценка:
Здравствуйте, vdimas, Вы писали:

"...одна из идеальных книг на мой вкус — автора Болски по С..."

Ура! У меня она есть!

Мало кто знает — она умещается в карман РУБАШКИ...

В ней около 80 страниц...
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re[9]: Стиль Дональда Эрвина Кнута
От: SergeCpp Россия http://zoozahita.ru
Дата: 12.08.05 03:39
Оценка:
Здравствуйте, VladD2, Вы писали:

SC>>У Multi-Edit, например CtrlUp / CtrlDn был (сдвиг экрана на ОДНУ строку)!


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


В ME ВСЁ настраивается! И Top-Menu и можно свою реализацию всего написать!
С ним же — исходники! (файлы SRC или S)
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re[10]: Стиль Дональда Эрвина Кнута
От: SergeCpp Россия http://zoozahita.ru
Дата: 12.08.05 03:51
Оценка:
Здравствуйте, VladD2, Вы писали:

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


SC>>Радио 1992 № 8 стр. 18..24

SC>>Радио 1992 № 9 стр. 24..26
SC>>Радио 1993 № 5 стр. 20..23

SC>>ftp://ftp.radio.ru/pub/arhiv/


SC>>Уважьте, пожалуйста, старика...


VD>О нет, пока что это мне не доступно. Я сейчас на диалапе и качать все это проблематично. Добирусь до Москвы постораюсь глянуть. Но кое что я все же смутно помню. Исходники какой-то ОС... Интересно что делали люди когда опечатывались при вводе?


Это — текстовый редактор WEL и Ассембрер M & S
(кстати — нескромность — это творчество некоего SergeCpp...)

А в Радио 1993 № 5 стр. 23 строка

0AD0 44 00 4B 4E 55 54 48 00 : 56 33 C6 50 34 38 34 97

есть не что иное, как

D KNUTH V3 P484...

P.S. А против опечаток была контрольная сумма...
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re[2]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 12.08.05 03:51
Оценка:
Здравствуйте, Anton Batenev, Вы писали:

AB>Может, не по теме, но когда-то пытался выработать или свой стиль оформления кода, или принять один из существующих стандартов. По сути, из существующих стандартов, чего-то более менее фундаментального удалось в то время найти следующее:


AB>Соглашения по оформлению кода команды RSDN — собственно на эту ссылку выводила большая часть запросов яндекса. Вероятно, это единственный русскоязычный документ подобного плана. Если кто знает другие ссылочки на русскоязычные работы / переводы — хотелось бы услышать.


Да легко: C++ нотация с использованием только маленьких букв

AB>GNU coding standards — достаточно запутанный документ, в котором говорится много и обо всем в попытках объять необъятное. В частности, форматированию кода посвящена глава 5. Making The Best Use of C.


AB>Programming in C++, Rules and Recommendations, Recommended C Style and Coding Standards — хорошо систематизированные документы, множество наглядных примеров офрмления кода.


А еще можно глянуть вот эту тему: coding convention
Автор: kvas
Дата: 13.05.05
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Стиль Дональда Эрвина Кнута
От: SergeCpp Россия http://zoozahita.ru
Дата: 12.08.05 03:56
Оценка:
Здравствуйте, Anton Batenev!


Indian Hill Style Guide...
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re[3]: Стиль Дональда Эрвина Кнута
От: Anton Batenev Россия https://github.com/abbat
Дата: 12.08.05 04:25
Оценка:
Здравствуйте, eao197, Вы писали:

E>А еще можно глянуть вот эту тему: coding convention
Автор: kvas
Дата: 13.05.05


Взять бы все эти ссылочки, да подцепить снизу к соглашению по оформлению кода RSDN для сравнения. Впрочем, что-либо кардинально мало меняется от одной ссылке к другой. Да и програм форматирования исходников все больше и больше...
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[11]: Стиль Дональда Эрвина Кнута
От: Oyster Украина https://github.com/devoyster
Дата: 12.08.05 06:32
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А какой смысл читать книку посвященную алогоритмам если ты сам не хуже автора их понимашь? По-моему, работа Кнута предназначена именно для обучения.


Конечно. Но Кнут предполагает, что ты потратишь на него больше времени, чем на того же Кормена. Кроме того, желательно читать материал последовательно, иначе можно потеряться.

Кнут, скорее, учит тех, кто уже что-то умеет. Если ты никогда не слышал про Дейкстру и Канзас-сортировочную, то тебе лучше почитать Кормена, а вот если ты озаботился оптимизацией умножения длинных чисел (да, длинные числа — это моё больное место ), то тебе мало кто поможет, кроме Кнута. Как-то раз я специально выбирался на Балку (местный книжный рынок) с целью найти книженцию с описанием алгоритмов работы с целыми неограниченной точности. Ни нашёл не одной, даже специализированной. А тот же Кнут замечательно подаёт этот материал.

VD>А зачем тебе его сейчас читать?


К счастью, иногда попадаются чисто алгоритмические задачи. К счастью потому, что мне такие задачи нравятся (наверное, не вырос я ещё из того возраста...).

Да и расслабиться иногда приятно... полежать, почитать, подумать пока мозги ещё способны воспринимать Кнута

VD>Но, к сожалению именно Кнута зачастую советуют начинающим. А я бы как раз наоборот предотеригал.


Хмм... Ну что я могe сказать — зря советуют. Я начинал с Кормена и др. Кнута купил уже потом, с первых серьёзных денег, целенаправленно (мечтал о покупке с полгода ).

Так что имхо Кнут — не книга для начинающих. Детям в 7-м классе, например, интегралы и квантовую физику не преподают (ну нам точно не преподавали).

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


Ну, допустим, литературное описание у Кнута есть для каждого алгоритма. Я так и не понял, что ты понимаешь под "неформальным описанием", но в Кнуте не только формулы.

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

VD>Ды научить == объяснить так чтобы поняли.


Влад, мне у него всё понятно

VD>Чесно говоря никогда не расценивал "Искуство программирования" как научный труд. Большинство алгоритмов все же не его.


И так со всеми людьми. Один человек не может быть генератором всех идей своего времени (Да Винчи не в счёт).

Или что, по-твоему, в научных трудах публикуют только изобретения самого автора? Ггы, а ты не задумывался, зачем там в конце перечень ссылок?

VD>А раз так, то может если хочешь сероезно разобраться в тонкостях, то лучше читать работы специальноп освященные этим повросам?


Знаешь, для начала надо эти работы хотя бы найти, согласен? Конечно, Кнут не мог описать всё, но он описал достаточно. Мне часто хватает его материала, а если не хватает (например, с полтора года назад решал задачу поиска N кратчайших путей на графе за минимальное время), то он, по крайней мере, даст ссылки.
Re[10]: Стиль Дональда Эрвина Кнута
От: Oyster Украина https://github.com/devoyster
Дата: 12.08.05 06:32
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ксожалению, я коллекций не собирал и авторов не запоминал. Добирусь до Москвы... и если не забуду, попробую поглядеть что у меня сохранилось.


На самом деле, конечно, есть авторы, которые также неплохо излагают. Но с Кнутом я их в один ряд всё равно не поставлю.

VD>Согласен. Но когда объяснения перенасыщены формулами, это тоже излишне формализовано. Кнут как раз пытался объяснять неформально. Но получалось у него как-то слишком сложно. Согласен, что это может быть субъективно и другому может показаться, что все ОК. Но я и выражаю свое мнение, а не собираю улики для процесса против Кнута.




Да, именно субъективно. И очень даже может быть, что "Библия VB" разошлась большим тиражом, чем "Искусство программирования"...

VD>Кники у меня под рукой нет. Код
Автор: McSeem2
Дата: 27.04.05
приводил McSeem2.


VD>Я только помню, что тже фигел с непонтности алгоритмвов в Кнутовской книге.


Ну нету у него листингов на Си в книге, нету. А почему нету тут вроде уже рассказывали...

VD>Другие вещи тоже описаны во многи местах. По край мере важные для программиста.


Важные для -среднестатистического- программиста, ты имеешь в виду? Помнишь, я в предыдущем сообщении приводил пример простого как дубовая доска алгоритма, описание которого я, тем не менее, обнаружил только у Кнута.

Давай так — многие авторы предлагают алгоритмы, важные для -среднестатистического- программиста. Кнут предлагает это же и ещё намного больше.

VD>Нет, это я к тому, что Кнуту стоило приводить примеры которые наиболее просто объясняют суть алгоритма.


Когда я читаю Кнута, я читаю описание алгоритма, и мне всё становится понятно. Если честно, на MIX-код я даже не смотрю.

VD>Да без разницы на чем. Важно отразить суть. Например, на Паскале было бы в самый раз. Да и на С потянуло бы. Вот только не на вымышленной виртуальной машине.


А был ли тогда (вспоминаем — 60-е) Паскаль? Или Си? Тут кто-то уже высказывал идею, как бы было "здорово", если бы он выбрал Фортран...

В общем, тебе уже столько раз отвечали, почему у него нет кода на языках высокого уровня, что отвечать ещё раз уже просто не хочется.

VD>Как сказать, как сказать...


Опять же — мир субъективен. Ты видишь лишь проекцию объективного мира на твоё подсознание. И, проходя через призму сознания, эта картинка искажается. У каждого она своя. Кто-то читает Кнута, а кто-то Кормена. So let it be.

VD>Не просто хватит. Ты скорее вникнеш в суть.


В случае с быстрой сортировкой — да. Если ты её ещё не знал до этого. Как раз про неё, родимую, я прочитал ещё до Кормена — слишком уж алгоритм популярный.


PS: Всегда интересовало, а на станции Канзас-сортировочная есть мемориальная доска?
Re[10]: Стиль Дональда Эрвина Кнута
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 12.08.05 06:34
Оценка: :))
Здравствуйте, VladD2, Вы писали:

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


M>>Не стоить путать научно-популярную литературу и научные монографии. Одному надо читать книжки Перельмана, а другому Ландау


VD>Можно узнать в чем заключается научная новизна в его трудах? И почему ты считаешь его книги не научно-популярными?


Потому что всякий раз перечитывая Д. Кнута я нахожу что-то новое, ранее упущеное. А другие книги навевают скуку и мыслю, не пора ли такую белетристику писать самому.
Re[10]: Стиль Дональда Эрвина Кнута
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 12.08.05 06:36
Оценка:
Здравствуйте, VladD2, Вы писали:

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


M>>Это как раз неверно. У Кнута используется два описания алгоритма, словесное и на ассемблере. Ведь ты не будешь утверждать, что си шарп более высокоуровневый язык чем английский?


VD>Конечно нет. Но в естественно язые слишком многое остается "за бортом". Столько подразумевается, а сколько можно просто по другому понять... По этому лучше всего иметь и описание на естесвенном языке, и добротную реализацию на высокоуровневом языке (причем с исчерпывающими коментариями). Это позволит сопоставляя описание с реализацией понять суть.


В этом суть литературного программирования, предложеного, кстати, Д. Кнутом
Re[10]: Стиль Дональда Эрвина Кнута
От: Oyster Украина https://github.com/devoyster
Дата: 12.08.05 06:39
Оценка:
Здравствуйте, xvost, Вы писали:

X>А чего веселиться? Мы сами вместе с моим отцом покупали в Березке в конце 89 года 286 комп за 2400$. При этом 86 там же рядом стоил 2100$


Вау! Круто...

Мы в том же 89-м купили мегакомпьютер ZX Spectrum сборки завода "Электрон". Zilog Z80 4MHz, 48k RAM, 16k ROM, кассетный магнитофон как носитель... я как-то считал — на 90-минутку вроде аж метр влазил

В общем, многие, мабуть, прошли через ZX Spectrum BASIC, а кто-то даже и через машинные коды Z80 (программа bold-инга шрифта на 23 байта... эхх...)
Re[11]: Стиль Дональда Эрвина Кнута
От: Трурль  
Дата: 12.08.05 06:57
Оценка:
Здравствуйте, Oyster, Вы писали:

O>В общем, многие, мабуть, прошли через ZX Spectrum BASIC, а кто-то даже и через машинные коды Z80 (программа bold-инга шрифта на 23 байта... эхх...)


А я на Спектруме даже на Лиспе попрограммировал.
Re[12]: Стиль Дональда Эрвина Кнута
От: Oyster Украина https://github.com/devoyster
Дата: 12.08.05 07:02
Оценка:
Здравствуйте, Трурль, Вы писали:

Т>А я на Спектруме даже на Лиспе попрограммировал.


Уважаю!

Я тогда и не знал, что такое Лисп... пробовал запускать Паскаль на Спекки — ничего у меня тогда не получилось. Помню, там ещё был какой-то Си для Спектрума даже — но Си я тогда тоже не знал... молодость, знаете ли

Зато помню замечательную тулзу LaserBasic — мне тогда очень понравилось
Re[9]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.08.05 08:02
Оценка: :)
Здравствуйте, adontz, Вы писали:

VD>>Понты, понты. Есть масса очень близких к программированию людей (уж не более далеких чем ты) которым кнут не кажется доходчивым писателем. Эта тема тому подтверждение.


A>Понты, понты. Есть масса людей, которые думают что они могут быть близки к программированию и далеки от математики. Эта тема тому подтверждение.


И? Где ты понты увидел? Я ни далекостью, ни близкостью не горжусь.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.08.05 08:02
Оценка: :)
Здравствуйте, vdimas, Вы писали:

V>В общем, дабы разговаривать более предметно, рекомендую посмотреть на исходники любых опен-сорсовых видео и аудио енкодеров-декодеров. А после этого просто поверь на слово, что код коммерчесских выглядит абсолютно аналогично.


Ты что? Я же потом спокойно фильмы смотреть не смогу.

V>--------

V>К стати, в своем бизнес-софте у меня с наименованием идентификаторов примерно так же, как ты ратуешь, оно и понятно, мы оперируем прикладными сущностями и даем приближенные к ним имена. Когда мы оперируем формулами (математика, физика, химия и т.д.), то мы тоже даем приближенные к прикладной области имена. Просто короткие эти имена там, и эти обозначения устаканивались десятилетиями (а некоторые наверняка столетиями).

Я давича разбирался с алгоритмом преобразования АСТ в ДКА. Надо признать испытал не мало эмоций постоянно заглядывая на 2-4 страницы назад чтобы вспомнить, что же за хрень эти F и Q. Q вот даже запомнил — состояния. А вот F...
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Стиль Дональда Эрвина Кнута
От: vdimas Россия  
Дата: 12.08.05 08:24
Оценка:
Здравствуйте, VladD2, Вы писали:

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


V>>В общем, дабы разговаривать более предметно, рекомендую посмотреть на исходники любых опен-сорсовых видео и аудио енкодеров-декодеров. А после этого просто поверь на слово, что код коммерчесских выглядит абсолютно аналогично.


VD>Ты что? Я же потом спокойно фильмы смотреть не смогу.


V>>--------

V>>К стати, в своем бизнес-софте у меня с наименованием идентификаторов примерно так же, как ты ратуешь, оно и понятно, мы оперируем прикладными сущностями и даем приближенные к ним имена. Когда мы оперируем формулами (математика, физика, химия и т.д.), то мы тоже даем приближенные к прикладной области имена. Просто короткие эти имена там, и эти обозначения устаканивались десятилетиями (а некоторые наверняка столетиями).

VD>Я давича разбирался с алгоритмом преобразования АСТ в ДКА. Надо признать испытал не мало эмоций постоянно заглядывая на 2-4 страницы назад чтобы вспомнить, что же за хрень эти F и Q. Q вот даже запомнил — состояния. А вот F...


Кстати, ACT чего именно преобразовывалось в ДКА? (опечатка?)

И ты привел самый неудачный пример. Эти обозначения как бы давно уже зафиксированы в этой области. Примерно так же как F в физике означает силу, q — заряд и т.д. Если бы я писал моделирующую прогу для физики, то не постеснялся бы назвать время — t, ток — I, а работу — A. Соответственно t0, t1 — начальный и конечный момент времени и т.д. Любой физик бы с ходу узнавал бы воих "старых знакомых", то бишь формулы, только мельком взглянув на код.
Re[13]: Стиль Дональда Эрвина Кнута
От: vdimas Россия  
Дата: 12.08.05 08:28
Оценка: :)
Здравствуйте, eao197, Вы писали:

E>Ребята, вы чего, тормозите что ли? Какие a и b? Есть a и a -- после a ^= a будет 0!


упс...
Re[8]: Стиль Дональда Эрвина Кнута
От: vdimas Россия  
Дата: 12.08.05 08:37
Оценка:
Здравствуйте, VladD2, Вы писали:

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


V>>Вполне доходчиво он пишет. Очень многим нравится именно сухое изложение материала. Собсвенно на них книга и ориентирована. Если же читатель далек от программирования, то ему следует начинать с книг, описывающих азы, а не с Кнута.


VD>Понты, понты. Есть масса очень близких к программированию людей (уж не более далеких чем ты) которым кнут не кажется доходчивым писателем. Эта тема тому подтверждение.


Ну нет, все-таки программирование — это еще где-то и раздел математики. Т.н. бизнес-софт — это единственная ниша, где математика требуется на уровне 5-го класса средней школы. В любой другой нише — требуется гораздо больше. А раз так, то подобный стиль изложения должен быть программисту очень даже привычен. (БД, 2В и 3D графика, расчетные утилиты, "физические" движки для современных игр, трансляторы и т.д. и т.п.) Даже такая простая с виду игруха как бильярд требует дохрена чего, начиная от Ньютоновской механики, заканчивая трением и угловыми моментами. (Столкновение вращающихся в произвольных плоскостях шаров — весьма сложная ситуация для расчетов, она была бы простая в случае отсутствия трения и бесконечной твердсти материала шара)
Re[9]: Стиль Дональда Эрвина Кнута
От: vdimas Россия  
Дата: 12.08.05 09:18
Оценка: +1
Здравствуйте, VladD2, Вы писали:

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


V>>Ты задел, кстати, наболевший мозоль. Я ненавижу большинство америкосовских книг по программированию, именно из-за "неформального" подхода. Когда перелистываю 3-ю подряд СТРАНИЦУ неформальной воды — у меня к этому времени уже начинает болеть голова. Мне больше по душе книги типа справочников, одна из идеальных книг на мой вкус — автора Болски по С.


VD>Мло уметь неформально что-то объснить. Нужно еще сделать это доходчиво и относительно кратко. Тут уже кто-то упоминал, что книги Кнута по объему больше аналогичных. Что темболее странно.




Там материала, очевидно, больше. К тому же упражнения. К тому же пояснения + доказательства + пример и так по каждому вопросу. Читатель вправе выбирать, что из этого он намерен читать, но, что бы он не выбрал — он получит весьма сухое и краткое изложение. Если бы Кнут писал в "неформальной" манере, то мне даже трудно было бы преставить объем его Книг.

Опять же, его 3-х томник напоминает скорее справочник — четкая классификация, формулы, доказательства, минимум словесного описания. Загляни в любой справочник по вышке. Там сверхсжатое представление информации, но блин, какие они порой толстые.
Re[11]: Стиль Дональда Эрвина Кнута
От: vdimas Россия  
Дата: 12.08.05 09:28
Оценка:
Здравствуйте, Oyster, Вы писали:

O>Мы в том же 89-м купили мегакомпьютер ZX Spectrum сборки завода "Электрон". Zilog Z80 4MHz, 48k RAM, 16k ROM, кассетный магнитофон как носитель... я как-то считал — на 90-минутку вроде аж метр влазил


Богатенький буратино
У меня наскреблось денег только на детали для версии "Леннград-1", обошлось около 150 баксов в том же 89-м. Пришлось паять... А он не заработал, гад. Пришлось изучить электронику и наладить... Потом поставил это дело на конвеер... Вот так и отдал электронике + ASM-у прилично лет жизни. И все, блин, от нехватки средств.
Re[12]: Стиль Дональда Эрвина Кнута
От: Oyster Украина https://github.com/devoyster
Дата: 12.08.05 10:00
Оценка:
Здравствуйте, vdimas, Вы писали:

O>>Мы в том же 89-м купили мегакомпьютер ZX Spectrum сборки завода "Электрон". Zilog Z80 4MHz, 48k RAM, 16k ROM, кассетный магнитофон как носитель... я как-то считал — на 90-минутку вроде аж метр влазил


V>Богатенький буратино


Отец снял с книжки (чувствовал, видать, что всё погорит). А мне тогда было 6 лет...
Еще примеры
От: mibe  
Дата: 12.08.05 13:39
Оценка:
http://www.xprogramming.ru/Articles/CodeRulesExamples.html
--
Far.Net
Re[11]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.08.05 07:54
Оценка:
Здравствуйте, SergeCpp, Вы писали:

SC>Это — текстовый редактор WEL и Ассембрер M & S

SC>(кстати — нескромность — это творчество некоего SergeCpp...)

SC>А в Радио 1993 № 5 стр. 23 строка


SC>0AD0 44 00 4B 4E 55 54 48 00 : 56 33 C6 50 34 38 34 97


SC>есть не что иное, как


SC>D KNUTH V3 P484...


Ясно.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.08.05 07:54
Оценка:
Здравствуйте, SergeCpp, Вы писали:

SC>В ME ВСЁ настраивается! И Top-Menu и можно свою реализацию всего написать!


Это понятно. Вот только чтобы начать настраивать сначала нужно к этому делу привкнуть.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.08.05 12:28
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Кстати, ACT чего именно преобразовывалось в ДКА? (опечатка?)


Регулярной граматики.

V>И ты привел самый неудачный пример. Эти обозначения как бы давно уже зафиксированы в этой области.


Это никого не колышит. Нет никакого смысла запоминать назначения букв.

V> Примерно так же как F в физике означает силу, q — заряд и т.д.


Я привел реальный пример из классических трудов. Там эти буквы тоже почти стандартом стали.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Стиль Дональда Эрвина Кнута
От: Ka3a4oK  
Дата: 14.08.05 15:58
Оценка: :))) :))) :))) :)))
У меня такая же драмма приключилась. Вокруг твердили: "Вы Кнута читали? А у Кнута написано...
Смотрите 2-ой том Кнута. Кнут — это классика. Каждый Программист должен прочесть Кнута... и.д. и т.п." Вот еще и Билл Гейтс про Кнута положительно отзывался. Ни и решился почитать.
Пошел в субботу на книжный рынок и приобрел все три тома. Пока я их до дому дотащил, автор мне уже стал не нравиться, ... — такая тяжесть.
Пришел, значит, домой, пожрал и думаю: "почитаю-ка я перед футболом". Налил пивка и сосредоточился. Предисловие прочитал легко — без запинки. Складно брешет, мерзавец. А потом началось: кошмарный ассемблер, математика, трехэтажные формулы (интеграл на интеграле сидит и радикалом погоняет). Короче, ничего не понял. "Наверное пиво в башню шибануло", — решил я. Закрыл книгу, открыл вторую бутылку, и включил телевизор.
На следующий день, пришел с работы, похарчевался и только захотелось пивасика ...,
но вспомнил про Кнута и закрыл холодильник. Начал читать. Организм хоть и трезвый, а голова будто пьяная.
Не пойму — хоть ты тресни. Через неделю закинул фолианты в шкаф.
И тоже начали закрадываться сомнения: "Епта, может я дурак. Может программировани — это не моё. Может мне чем попроще заняться — улицы подметать, например." За малым комплекс неполноценности не развился. Дошло до того, что чуть учебник по вышке не купил. Но пацаны из конторы, с которыми мы по пятницам пиво дуем, успокоили меня: "Да забей ты, Валентиныч! Нашел о чем беспокоиться. Мы тоже это "искусство" не понимаем."
"И правда", — думаю я, -"искусство, ведь, должно быть ближе к народу". С тех пор и успокоился. Самомнение восстановилось.
И знаете, работаю не хуже других. Может, даже лучше. Программу написал, а никто в ней, кроме меня, разобраться не может. Я этим умникам говорю: "Хоть Кнута не читал, а кое-что кое в чем соображаю." А про себя думаю: "дурачье".
Одно обидно: столько денег пропало. Вот все мечтаю каким-нибудь дуракам продать чертовы книги.

P.S.: А что Билл Гейтс? Ну Билл Гейтс. Не зря же его все так не любят за Windows мастдайный. С тех пор и я стал к Биллу скептически относиться.
P.S.S.: Ксати, вам Кнут не нужен ? Отдам недорого.
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[3]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.08.05 18:41
Оценка:
Мат удален. В следующий раз без прудупреждений прямо в баню.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 14.08.05 20:16
Оценка: 2 (2) +4
Здравствуйте, Ka3a4oK, Вы писали:

KK> И знаете, работаю не хуже других. Может, даже лучше. Программу написал, а никто в ней, кроме меня, разобраться не может. Я этим умникам говорю: "Хоть Кнута не читал, а кое-что кое в чем соображаю." А про себя думаю: "дурачье".


Да уж, есть чем гордится.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[11]: Стиль Дональда Эрвина Кнута
От: SergeCpp Россия http://zoozahita.ru
Дата: 15.08.05 03:46
Оценка:
Здравствуйте, VladD2, Вы писали:

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


SC>>В ME ВСЁ настраивается! И Top-Menu и можно свою реализацию всего написать!


VD>Это понятно. Вот только чтобы начать настраивать сначала нужно к этому делу привкнуть.


Я с Вами согласен. Но вот после того, как привыкнешь — такие возможности!

Кроме EMACS — не знаю ничего подобного.

Да и в EMACS — больше тысячи файлов...

А в ME 7 — намного меньше...
(к нему я — полностью привык до такой степени,
что на ME 9.10.04 — никогда не перейду...)
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re[12]: Стиль Дональда Эрвина Кнута
От: Privalov  
Дата: 15.08.05 05:02
Оценка: 8 (2)
Здравствуйте, VladD2, Вы писали:

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


P>>Уже представляю себе очередное издание Фихтенгольца, в котором вместо y=f(x) написано:

P>>SomeValue = SomeFunction(SomeArgument).

VD>Было бы здорово.


Что именно здорово? Получить вместо трех томов около трехсот? А ведь существует еще великое множество учебников, монографий, статей в журналах. Если перейти от y=f(x) к SomeValue = SomeFunction(SomeArgument), такая литература просто перестанет выпускаться по техническим ограничениям и из-за нехватки бумаги.

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


А для чего нужны изменения? Вот нам пришлось однажды читать математическую статью, написанную на японском языке. Оказалось, у японцев те же обозначения, что и в СССР. Поэтому мы смогли понять, о чем речь, даже не пытаясь разобрать сопровождающий текст.
Re[3]: Стиль Дональда Эрвина Кнута
От: Lloyd Россия  
Дата: 15.08.05 07:31
Оценка:
Здравствуйте, Ka3a4oK, Вы писали:

KK>У меня такая же драмма приключилась. Вокруг твердили: "Вы Кнута читали? А у Кнута написано...

KK>[skipped]
KK>P.S.S.: Ксати, вам Кнут не нужен ? Отдам недорого.

Складно брешешь, мерзавец.
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[13]: Стиль Дональда Эрвина Кнута
От: Quintanar Россия  
Дата: 15.08.05 10:45
Оценка: +1
Здравствуйте, Privalov, Вы писали:

P>Что именно здорово? Получить вместо трех томов около трехсот? А ведь существует еще великое множество учебников, монографий, статей в журналах. Если перейти от y=f(x) к SomeValue = SomeFunction(SomeArgument), такая литература просто перестанет выпускаться по техническим ограничениям и из-за нехватки бумаги.


Да и вообще, в математике самое сложное — это помнить и понимать многочисленные определения, которые выстраиваются в длинные иерархические цепочки, обозначения — лишь способ сократить длину формул и упростить запись. Запомнить обозначения ничего не стоит.
Re[9]: Стиль Дональда Эрвина Кнута
От: vdimas Россия  
Дата: 15.08.05 10:57
Оценка:
Здравствуйте, SergeCpp, Вы писали:

SC>"...одна из идеальных книг на мой вкус — автора Болски по С..."


SC>Ура! У меня она есть!


SC>Мало кто знает — она умещается в карман РУБАШКИ...


SC>В ней около 80 страниц...


Есть в аналогичном стиле книжка по С++ (там на обложке два игрушечных рыцаря). Авторы так и заявили, что выбрали стиль Болски для подражания. Жаль, что эта книжка давно устарела, а переизданий я не видел. Вот и получается, что либо читай стандарт, либо прилично разбавленные водой книжки.

Кстати, с работой Александреску я впервые познакомился по исходникам Loki когда-то. Я просматривал наличие либ общего плана. Сначала не очень обратил внимание (ну там очередные смарт-поинтеры и синглтоны...), потом прозрел и афигел малость от увиденного. Чуть погодя читал его "modern ..." и было уже немного скучно.
Re[11]: Стиль Дональда Эрвина Кнута
От: vdimas Россия  
Дата: 15.08.05 11:01
Оценка: 1 (1) +4
Здравствуйте, Mystic, Вы писали:

M>>>Не стоить путать научно-популярную литературу и научные монографии. Одному надо читать книжки Перельмана, а другому Ландау


VD>>Можно узнать в чем заключается научная новизна в его трудах? И почему ты считаешь его книги не научно-популярными?


M>Потому что всякий раз перечитывая Д. Кнута я нахожу что-то новое, ранее упущеное. А другие книги навевают скуку и мыслю, не пора ли такую белетристику писать самому.


Не стоит... Обилие биллетристики само по себе навевает скуку. Блин, уже много лет не испытаваю жгучего интереса (и даже где-то внутреннего трепета), подходя к огромным полкам с современной литераторой по программингу.
Re[13]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.08.05 11:03
Оценка:
Здравствуйте, Privalov, Вы писали:

P>Что именно здорово?


Иметь внятные имена в формулах.

P> Получить вместо трех томов около трехсот?


С чего бы это?

P> А ведь существует еще великое множество учебников, монографий, статей в журналах. Если перейти от y=f(x) к SomeValue = SomeFunction(SomeArgument), такая литература просто перестанет выпускаться по техническим ограничениям и из-за нехватки бумаги.


Сдается мне, что этот выдумка. Не будет никакого огромного увеличения. Во-первых, формулы выростут приемущественно в длинну. А в научной литературе как-то не принята компантная верстка. Во-вторых, все же формулы занимают не все место. Осовной объем занимает банальный текст на естественном языке.

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

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


P>А для чего нужны изменения?


Выделенно жирным.

В общем, ты уж извини, но ты как раз один их этих многих и пока ты не отбросишь свои стереотипы разговаривать о чем-то будет невозможно.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.08.05 11:03
Оценка:
Здравствуйте, SergeCpp, Вы писали:

SC>Кроме EMACS — не знаю ничего подобного.

SC>Да и в EMACS — больше тысячи файлов...

Ага. Вот только что-то EMACS сильно сдал позиции современным IDE.
Проблема сложности изучения и неинтуитивности отбивает желание просто связываться с ним.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.08.05 11:03
Оценка:
Здравствуйте, eao197, Вы писали:

KK>> И знаете, работаю не хуже других. Может, даже лучше. Программу написал, а никто в ней, кроме меня, разобраться не может. Я этим умникам говорю: "Хоть Кнута не читал, а кое-что кое в чем соображаю." А про себя думаю: "дурачье".


E>Да уж, есть чем гордится.


Сдается мне — это вообще стеб.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 15.08.05 11:17
Оценка:
Здравствуйте, VladD2, Вы писали:

KK>>> И знаете, работаю не хуже других. Может, даже лучше. Программу написал, а никто в ней, кроме меня, разобраться не может. Я этим умникам говорю: "Хоть Кнута не читал, а кое-что кое в чем соображаю." А про себя думаю: "дурачье".


E>>Да уж, есть чем гордится.


VD>Сдается мне — это вообще стеб.


Тогда действительно гордиться не чем.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[13]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 15.08.05 11:17
Оценка:
Здравствуйте, VladD2, Вы писали:

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


SC>>Кроме EMACS — не знаю ничего подобного.

SC>>Да и в EMACS — больше тысячи файлов...

VD>Ага. Вот только что-то EMACS сильно сдал позиции современным IDE.

VD>Проблема сложности изучения и неинтуитивности отбивает желание просто связываться с ним.

Ага, как раз на эту тему сейчас в Unix-форуме обсуждение Emacs в качестве IDE идет: Xemacs &mdash; помойка
Автор: Cyberax
Дата: 08.08.05
. Мне кажется, что завзятым Unix-оидам современные IDE нафиг не упали, как пользовались Emacs-ом, так и пользуются
А некоторые маргинальные личности вообще IDE не пользуются.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[14]: Стиль Дональда Эрвина Кнута
От: Privalov  
Дата: 15.08.05 11:32
Оценка: +1
Здравствуйте, VladD2, Вы писали:

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


P>>Что именно здорово?


VD>Иметь внятные имена в формулах.


То есть, запись:
  SomeCoefficient1 * Variable^2 + SomeCoefficient2 * Variable + SomeCoefficient3 = 0


по-твоему, более понятна, чем
  a * x^2 + b * x + c = 0.


P>> Получить вместо трех томов около трехсот?


VD>С чего бы это?


Сравни размеры первой и второй формул, учти, что это простейший случай. К тому же, существуют полиграфические стандарты.

P>> А ведь существует еще великое множество учебников, монографий, статей в журналах. Если перейти от y=f(x) к SomeValue = SomeFunction(SomeArgument), такая литература просто перестанет выпускаться по техническим ограничениям и из-за нехватки бумаги.


VD>Сдается мне, что этот выдумка. Не будет никакого огромного увеличения. Во-первых, формулы выростут приемущественно в длинну. А в научной литературе как-то не принята компантная верстка. Во-вторых, все же формулы занимают не все место. Осовной объем занимает банальный текст на естественном языке.


См. выше. Кроме того, рекомендую послушать как-нибудь, как математики обсуждают свои вопросы.

VD>Да и многие авторы напичканых формулами статей были бы только рады если бы их труды стали толще. Более тог они всячески стремятся раздуть размер своих трудов, чем сильно ухудшают их читаемость.


Как правило, это не имеет прямого отношения к науке. Это издательские проблемы. Скажут, что объем монографии должен быть 20 (число с потолка) условных печатных листов, вот и вертится автор, разбавляет водой свои творения.

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


P>>А для чего нужны изменения?


VD>Выделенно жирным.


А кто сказал, что именно длинные имена понятнее? Все, imho, от ситуации зависит. У любого студента есть своя система сокращений, которую он использует при конспектировании. Однако, некоторые устоявшиеся приемы передаются из поколения в поколение.

VD>В общем, ты уж извини, но ты как раз один их этих многих и пока ты не отбросишь свои стереотипы разговаривать о чем-то будет невозможно.


Да, я самый обыкновенный человек. Математику изучал как все. В лаборатории матмоделирования работал. Над публикациями работал. Так что мои стереотипы — совсем не плод кабинетных размышлений.

Чтобы эти самые стереотипы разрушить, может, попытаешься пару-другую примеров привести, когда такая замена будет эффективной? На языке формул. Пока такая замена, imho, сильно увеличивает то, что называется русским емким словом: overhead.
Re[13]: Стиль Дональда Эрвина Кнута
От: Quintanar Россия  
Дата: 15.08.05 11:58
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ага. Вот только что-то EMACS сильно сдал позиции современным IDE.

VD>Проблема сложности изучения и неинтуитивности отбивает желание просто связываться с ним.

Каким еще современным IDE? Популярность Emacs не падает, по крайней мере.
Re[10]: Стиль Дональда Эрвина Кнута
От: SergeCpp Россия http://zoozahita.ru
Дата: 15.08.05 13:50
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Кстати, с работой Александреску я впервые познакомился по исходникам Loki когда-то. Я просматривал наличие либ общего плана. Сначала не очень обратил внимание (ну там очередные смарт-поинтеры и синглтоны...), потом прозрел и афигел малость от увиденного. Чуть погодя читал его "modern ..." и было уже немного скучно.


Уточните, пожалуйста — "modern..." — это то же, что и в Loki Вы увидели ?

(для справки — хочу почитать)
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re[14]: Стиль Дональда Эрвина Кнута
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 15.08.05 14:03
Оценка: +1 :))
Здравствуйте, eao197, Вы писали:

E>А некоторые маргинальные личности вообще IDE не пользуются.


# COPY CON my_cool_src.h

и поехал...
... << RSDN@Home 1.1.4 stable rev. 510>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[11]: Стиль Дональда Эрвина Кнута
От: vdimas Россия  
Дата: 15.08.05 16:57
Оценка:
Здравствуйте, SergeCpp, Вы писали:

Modern C++ Design
Современное проектирование на С++ http://www.rsdn.ru/res/book/cpp/alex.xml
Автор(ы): Андрей Александреску

В книге изложена новая технология программирования, представляющая собой сплав обобщенного программирования, метапрограммирования шаблонов и объектно- ориентированного программирования на С++. Настраиваемые компоненты, созданные автором, высоко подняли уровень абстракции, наделив язык С++ чертами языка спецификации проектирования, сохранив всю его мощь и выразительность. В книге изложены способы реализации основных шаблонов проектирования. Разработанные компоненты воплощены в библиотеке Loki, которую можно загрузить с Web-страницы автора. Книга предназначена для опытных программистов на С++.
Re[15]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.08.05 17:51
Оценка:
Здравствуйте, Privalov, Вы писали:

P>То есть, запись:

P>
P>  SomeCoefficient1 * Variable^2 + SomeCoefficient2 * Variable + SomeCoefficient3 = 0 
P>


P>по-твоему, более понятна, чем

P>
P>  a * x^2 + b * x + c = 0.
P>


Идентификаторы должны быть не просто длинными, а осмысленными. Так что не нужно доводить все до маразма.

P>Сравни размеры первой и второй формул, учти, что это простейший случай. К тому же, существуют полиграфические стандарты.


Тут нечего сравнивать. Ни там, ни там смысла нет.

P>Как правило, это не имеет прямого отношения к науке. Это издательские проблемы. Скажут, что объем монографии должен быть 20 (число с потолка) условных печатных листов, вот и вертится автор, разбавляет водой свои творения.


Это по-твоему хорошо? Может лучше все же более внятно записать материал на том же объеме?

P>А кто сказал, что именно длинные имена понятнее?


Блин. Не длинные, а осмысленные. Если идентификатор отражает просто индекс, то никакого смысла называть его myCoolIndex нет. Но если "Q" — это событие, то лучше назвать его "Event".

P>Да, я самый обыкновенный человек. Математику изучал как все. В лаборатории матмоделирования работал. Над публикациями работал. Так что мои стереотипы — совсем не плод кабинетных размышлений.


Привыкнуть можно к чему угодно. Вот только это порочная практика.

P>Чтобы эти самые стереотипы разрушить, может, попытаешься пару-другую примеров привести, когда такая замена будет эффективной? На языке формул. Пока такая замена, imho, сильно увеличивает то, что называется русским емким словом: overhead.


Нет во внятных идентификаторвх оверхэда для человека. Он все равно понятиями мыслит. А если формула вместо строчки займет 2 ничего ровным счетом не изменится.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.08.05 17:51
Оценка: :)
Здравствуйте, eao197, Вы писали:

E>Ага, как раз на эту тему сейчас в Unix-форуме обсуждение Emacs в качестве IDE идет: Xemacs &mdash; помойка
Автор: Cyberax
Дата: 08.08.05
. Мне кажется, что завзятым Unix-оидам современные IDE нафиг не упали, как пользовались Emacs-ом, так и пользуются

E>А некоторые маргинальные личности вообще IDE не пользуются.

Это их личные проблемы. Люди которые используют только "Юниксы" вообще довольно странные на мой взгляд. Я же предпочитаю современную IDE с рефакторингом и интергированным отладчиком.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.08.05 17:51
Оценка:
Здравствуйте, Quintanar, Вы писали:

Q>Каким еще современным IDE? Популярность Emacs не падает, по крайней мере.


Ну, да некуда вот и не падает. Хочешь эксперемент проведем какой редактор/IDE предпочитают посетители этого сайта? Уверен, что Emacs будет в атсайдерах.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Стиль Дональда Эрвина Кнута
От: adontz Грузия http://adontz.wordpress.com/
Дата: 15.08.05 18:51
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Ну, да некуда вот и не падает. Хочешь эксперемент проведем какой редактор/IDE предпочитают посетители этого сайта? Уверен, что Emacs будет в атсайдерах.


Потому что сюда в основном заходят MS-ориентированые программисты Ты ещё спроси что у вас стоит на работе Win или Lin, а потом подели результаты одного голосования на другое. Тогда и будет что-то похожее на правду.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[15]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 15.08.05 18:56
Оценка: +1
Здравствуйте, VladD2, Вы писали:

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


Q>>Каким еще современным IDE? Популярность Emacs не падает, по крайней мере.


VD>Ну, да некуда вот и не падает. Хочешь эксперемент проведем какой редактор/IDE предпочитают посетители этого сайта? Уверен, что Emacs будет в атсайдерах.


Ага, только нужно спрашивать, сколько из программирующих под Unix используют Emacs. А то ведь понятно, что Windows-разработчики вряд ли его применяют.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[12]: Стиль Дональда Эрвина Кнута
От: SergeCpp Россия http://zoozahita.ru
Дата: 16.08.05 03:15
Оценка:
Здравствуйте, vdimas

Спасибо!
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re[16]: Стиль Дональда Эрвина Кнута
От: Privalov  
Дата: 16.08.05 04:51
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Идентификаторы должны быть не просто длинными, а осмысленными. Так что не нужно доводить все до маразма.


Дак покажи на примере хотя бы квадратного трехчлена идентификаторы, более осмысленные, чем a, b, c, x.

P>>Сравни размеры первой и второй формул, учти, что это простейший случай. К тому же, существуют полиграфические стандарты.


VD>Тут нечего сравнивать. Ни там, ни там смысла нет.


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


P>>Как правило, это не имеет прямого отношения к науке. Это издательские проблемы. Скажут, что объем монографии должен быть 20 (число с потолка) условных печатных листов, вот и вертится автор, разбавляет водой свои творения.


VD>Это по-твоему хорошо? Может лучше все же более внятно записать материал на том же объеме?


По-моему, это очень плохо. Однако раздувать объем за счет удлинения имен переменных — ненамного лучше. Да ты и сам постоянно в своих постах используешь обозначения такие как LL(1)-грамматика или лямбда-исчисление. Почему бы не вставлять что-нибудь подлиннее, поосмысленнее?

P>>А кто сказал, что именно длинные имена понятнее?


VD>Блин. Не длинные, а осмысленные. Если идентификатор отражает просто индекс, то никакого смысла называть его myCoolIndex нет. Но если "Q" — это событие, то лучше назвать его "Event".


Разумеется. Только причем здесь Event? Изначально речь шла о математической нотации. Программа, реализующая математические расчеты, пусть даже и вычисление квадратного трехчлена, всегда тем понятнее, чем ее запись ближе к записи оригинальных терминов и обозначений. А идентификаторы типа Event, Section, Thread естественно применять в сервисных модулях программы.

VD>Нет во внятных идентификаторвх оверхэда для человека. Он все равно понятиями мыслит. А если формула вместо строчки займет 2 ничего ровным счетом не изменится.


Дак начерти пару формул ((c) Ю. Семенов), будет гораздо проще видеть, что изменится, а что нет.
Re[15]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 16.08.05 05:07
Оценка: 6 (1)
Здравствуйте, VladD2, Вы писали:

E>>Ага, как раз на эту тему сейчас в Unix-форуме обсуждение Emacs в качестве IDE идет: Xemacs &mdash; помойка
Автор: Cyberax
Дата: 08.08.05
. Мне кажется, что завзятым Unix-оидам современные IDE нафиг не упали, как пользовались Emacs-ом, так и пользуются

E>>А некоторые маргинальные личности вообще IDE не пользуются.

VD>Это их личные проблемы. Люди которые используют только "Юниксы" вообще довольно странные на мой взгляд. Я же предпочитаю современную IDE с рефакторингом и интергированным отладчиком.


Уж не знаю, как на счет отладчика, а вот по поводу рефакторинга и других фигшек современных IDE... Может иногда проще вместо упрощенного ввода простыней кода (с помощью автодополнения и прочего) писать меньше кода на другом языке? В последнее время несколько раз видел примеры сравнения кода на Java и аналогичного на Ruby -- Java требует в несколько раз больше строк. Вот фрагменты из книги Ruby Developer's Guide (примеры взяты один к одному, так что за что купил, за то и продаю):

Here’s the Ruby code for creating 1000 threads that sleep:

print "Create 1000 Threads..."
1000.times do
    Thread.new { sleep }
end
puts "done"
# do some calculations


And here is the same in Java:

public class Test implements Runnable {
    public static void main(String[] args) {
        System.out.print("Create 1000 Threads...");
        for (int i=0; i<=1000; i++) {
            Thread th = new Thread(new Test());
            th.start();
        }
        System.out.println("done");
        // do some calculations
    }
    
    public void run() {
        try {
            Thread.currentThread().sleep(100000);
        } catch (InterruptedException e) {}
    }
}


и еще один:

Let’s take a simple example in which Ruby beats Java hands-down. Being
strongly influenced by Perl, Ruby excels at regular expressions.The
StringReplace program (Figure 1.13) takes a search word, a replacement word,
and the document for replacement.

Figure 1.13 The Java Version of StringReplace

import java.io.*;

public class StringReplace {
    static void searchAndReplace( Reader in, Writer out, String search,
        String replace ) throws IOException
        {
            int si = 0;
            for ( int c = in.read(); c >= 0; c = in.read() ) {
                if ( c == search.charAt( si ) ) {
                    si++;
                    if ( si >= search.length() ) {
                        out.write( replace );
                        si = 0;
                    }
                } else {
                    if ( si > 0 ) {
                        for ( int i = 0; i < si; i++ ) {
                            out.write( search.charAt( i ) );
                        }
                        si = 0;
                    }

                    out.write( (char) c );
                }
            }
        }
        
    public static void main( String[] args ) {
        int ai = 0;
        String search = args[ ai++ ];
        String replace = args[ ai++ ];
        for ( ; ai < args.length; ai++ ) {
            try {
                String fileName = args[ ai ];
                FileReader in = new FileReader( fileName );
                StringWriter buf = new StringWriter();
                
                try {
                    searchAndReplace( in, buf, search, replace );
                } finally {
                    in.close();
                }
                
                FileWriter out = null ;
                try {
                    out = new FileWriter( fileName );
                    out.write( buf.toString() );
                } finally {
                    if ( out != null )
                    out.close();
                }
            } catch ( Exception e ) {
                e.printStackTrace();
            }
        }
    }
}


The Java version of StringReplace requires 50 lines of code.There are a
couple ways to write the Ruby version (see Figure 1.14).

def stringReplace(searchString, replaceString, fileName)
    # read the file content
    aFile = File.open(fileName, "r")
    aString = aFile.read
    aFile.close
    
    # replace/substitute ...
    aString.gsub!(searchString, replaceString)
    
    # write string back to file
    File.open(fileName, "w") { |file| file << aString }
end

stringReplace(*ARGV)


You may compact this even further:

def stringReplace(searchString, replaceString, fileName)
    # read file content
    aString = File.readlines(fileName).to_s
    
    # replace/substitute ...
    aString.gsub!(searchString, replaceString)
    
    # write string back to file
    File.open(fileName, "w") { |file| file << aString }
end

stringReplace(*ARGV)

...
The Perl version of the StringReplace program (see Figure 1.15) maintains
Ruby’s brevity, but you’ll notice that while the syntax is similar, it’s a bit more
confusing.

foreach $file (glob($ARGV[2])) {
    open (FILE, "+<$file"), @contents = <FILE>, seek(FILE, 0, 0);
    foreach $line (@contents) {
        $line =~ s/\Q$ARGV[0]\E/$ARGV[1]/g, print FILE $line;
    }
}


Я это к тому, что, вполне возможно, Unix больше способствует повторному использованию уже готовых инструментов (т.к. grep, find, xagrs, wc, awk, sed, ...) и скриптовых языков (shell, Python, Perl, Ruby, Tcl/Tk, ...), поэтому надобность в супер-пупер IDE в Unix-е просто-напросто поменьше?
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[17]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.08.05 11:38
Оценка:
Здравствуйте, Privalov, Вы писали:

P>Дак покажи на примере хотя бы квадратного трехчлена идентификаторы, более осмысленные, чем a, b, c, x.


----------------
— Разложите, пожалуйста, трехчлен на многочлен.
— Да что Вы, професор, такое говорите?! Я его и преставить то боюсь, а вы говрите разложить.


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

VD>>Блин. Не длинные, а осмысленные. Если идентификатор отражает просто индекс, то никакого смысла называть его myCoolIndex нет. Но если "Q" — это событие, то лучше назвать его "Event".


P>Разумеется. Только причем здесь Event? Изначально речь шла о математической нотации.


Нет. Речь шало о применении одно-двух буквенных идентификаторов в формулах, функциях и коде. Есть пагубная традиция давать имена переменным и константам в виде 1-2 букв. Вот это и является не верным. В корне.

P> Программа, реализующая математические расчеты, пусть даже и вычисление квадратного трехчлена, всегда тем понятнее, чем ее запись ближе к записи оригинальных терминов и обозначений.


Нет. Понятна она будет если эти самые формулы будут вынесены в отдельные функции имеющие осмысленные имена.

P> А идентификаторы типа Event, Section, Thread естественно применять в сервисных модулях программы.


Посмотри на примеры программ на ФЯ. Там просто исключительно однобуквенные модификаторы.

VD>>Нет во внятных идентификаторвх оверхэда для человека. Он все равно понятиями мыслит. А если формула вместо строчки займет 2 ничего ровным счетом не изменится.


P>Дак начерти пару формул ((c) Ю. Семенов), будет гораздо проще видеть, что изменится, а что нет.


Чертил. Вернее перечерчивал однобуквенные когда разбирался с ними. После переписывания размеры изменялись не сильно, а вот восприятие улучшалось резко.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.08.05 11:38
Оценка:
Здравствуйте, eao197, Вы писали:

E>Уж не знаю, как на счет отладчика, а вот по поводу рефакторинга и других фигшек современных IDE... Может иногда проще вместо упрощенного ввода простыней кода (с помощью автодополнения и прочего) писать меньше кода на другом языке?



Одно другого не отменяет. Всегда найдутся объемы кода которые потребуют качественной IDE и рефактринга.

E> В последнее время несколько раз видел примеры сравнения кода на Java и аналогичного на Ruby -- Java требует в несколько раз больше строк. Вот фрагменты из книги Ruby Developer's Guide (примеры взяты один к одному, так что за что купил, за то и продаю):

E>[q]
E>Here’s the Ruby code for creating 1000 threads that sleep:

E>
E>print "Create 1000 Threads..."
E>1000.times do
E>    Thread.new { sleep }
E>end
E>puts "done"
E># do some calculations
E>



Этот код бессмысленне, так как ничего не делает. Рабочий код уже был бы значительно более объемным. Ну, и пример на Яве просто подтасован. Какие-то лишние обработчики ошибок и другие лишние телодвижения. Вот тебе тоже самое на Шарпе:
Console.WriteLine("Create 1000 Threads...");
for (int i = 0; i < 1000; i++)
    new Thread(delegate { Thread.Sleep(10000); });
Console.WriteLine("Done...");
Console.ReadLine();
// do some calculations

И не нужно сюда приплетать описание функции Main. Во-первых, она пишется ровно один раз. Во-вторых, создается автоматически. В рельном приложении ты точно так же будешь создавать функции и выносить в них код.

Как вилишь пример не практически аналогичен Рубивскому. И так будет везеде. Чуть длинее, за то присутствует статическа типизиция и поддержка IDE. Например, цикл "for" я написал в писав "for" и нажав табуляцию. Далее мне пришлось только заменить "length" на 1000. Console.WriteLine, Thread и т.п. тоже пишется в пару нажатий так как далее работает комплит-ворд. Так что реально я написал этот код быстрее чем ты. А вот читается "Console.ReadLine" куад лучше чем "puts".

E>The Java version of StringReplace requires 50 lines of code.There are a

E>couple ways to write the Ruby version (see Figure 1.14).

И не стыдно тебе такими подтасовками заниматься? Это просто чистейшей воды подлог. Сранвнение полной реализации с использвоанием встроеных или библиотечнх функций. Переписываем твой пример:

E>[code]

E>def stringReplace(searchString, replaceString, fileName)
E> # read the file content
E> aFile = File.open(fileName, "r")
E> aString = aFile.read
E> aFile.close

E> # replace/substitute ...

E> aString.gsub!(searchString, replaceString)

E> # write string back to file

E> File.open(fileName, "w") { |file| file << aString }
E>end

На Шарпе:
void StringReplace(string oldValue, string newValue, string fileName)
{
    File.WriteAllText(fileName,
        File.ReadAllText(fileName).Replace(oldValue, newValue));
}

Ой! Пример на Руби оказался значительно больше и неуклюжее? Вывод — дерьмо ваш Руби... Так что ли?

Это обман!

Если ты хочешь сравнивать мощь языка, то и сравнивай именно ее. Если синтаксический оверхэд, то его. Но не нужно сравинвать встроенную или библиотечную функциональность с лобовой реализацией. Это просто бесчесный подлог!

E>Я это к тому, что, вполне возможно, Unix больше способствует повторному использованию уже готовых инструментов (т.к. grep, find, xagrs, wc, awk, sed, ...) и скриптовых языков (shell, Python, Perl, Ruby, Tcl/Tk, ...), поэтому надобность в супер-пупер IDE в Unix-е просто-напросто поменьше?


Это просто не правда. Все эти grep, find, xagrs, wc, awk, sed без спроблем можно иметь ина Виндвс машине. Просто они на фиг не упали большинству людей. Ну, зачем мне возиться с grep и find в консоли когда я могу нажать Ctrl + Shiht + F и получить поиск с регекспами в своей IDE?

Ну, а что до языков программирования. То библиотеки Явы или дотнета датуд очень большую фору всем этим выпендрежам вмонтированым в скрптовые языки. Так что не нужно песен. Нет никаких приемуществ в "Юникс лайк стайл". Путь как путь. Более тяжелый разве что. Да и разные Руби не имеют какого-то невероятного приемущества над более менее современными языками.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.08.05 11:38
Оценка:
Здравствуйте, adontz, Вы писали:

A>Потому что сюда в основном заходят MS-ориентированые программисты Ты ещё спроси что у вас стоит на работе Win или Lin, а потом подели результаты одного голосования на другое. Тогда и будет что-то похожее на правду.


Сюда заходят те кто есть. То что в нашей стране 80% программистов не ориентированны на Юникс — это всего лишь реалии жизни.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.08.05 11:38
Оценка:
Здравствуйте, eao197, Вы писали:

E>Ага, только нужно спрашивать, сколько из программирующих под Unix используют Emacs. А то ведь понятно, что Windows-разработчики вряд ли его применяют.


Ага. А почему? Неужели они все мазохистя и не понимают тех приемуществ которые сулии им применение Emacs-а?
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Стиль Дональда Эрвина Кнута
От: adontz Грузия http://adontz.wordpress.com/
Дата: 16.08.05 11:55
Оценка: 1 (1) +1 -1
Здравствуйте, VladD2, Вы писали:

VD>Сюда заходят те кто есть. То что в нашей стране 80% программистов не ориентированны на Юникс — это всего лишь реалии жизни.


Сайт РСДН при всех его достоинствах не покрывает всех российских (русскоязычных) программистов. Сюда заходит лишь малая часть тех, кто есть. Причём не равномерная выборка, а с уклоном в сторону Windows. А число 80% кстати откуда взялось? Есть какая-то статистика?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[17]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 16.08.05 12:07
Оценка:
Здравствуйте, VladD2, Вы писали:

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


E>>Уж не знаю, как на счет отладчика, а вот по поводу рефакторинга и других фигшек современных IDE... Может иногда проще вместо упрощенного ввода простыней кода (с помощью автодополнения и прочего) писать меньше кода на другом языке?


VD>Одно другого не отменяет. Всегда найдутся объемы кода которые потребуют качественной IDE и рефактринга.


В общем да, но для динамических языков автоматизированный рефакторинг может оказаться не таким простым, как в статически типизированных языках вроде Java или C#.

VD>Этот код бессмысленне, так как ничего не делает. Рабочий код уже был бы значительно более объемным. Ну, и пример на Яве просто подтасован. Какие-то лишние обработчики ошибок и другие лишние телодвижения.


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

VD> Вот тебе тоже самое на Шарпе:

VD>
VD>Console.WriteLine("Create 1000 Threads...");
VD>for (int i = 0; i < 1000; i++)
VD>    new Thread(delegate { Thread.Sleep(10000); });
VD>Console.WriteLine("Done...");
VD>Console.ReadLine();
VD>// do some calculations
VD>

VD>И не нужно сюда приплетать описание функции Main. Во-первых, она пишется ровно один раз. Во-вторых, создается автоматически. В рельном приложении ты точно так же будешь создавать функции и выносить в них код.

Нет, функция Main нужна т.к. без нее пример не запустится.

VD>Как вилишь пример не практически аналогичен Рубивскому. И так будет везеде. Чуть длинее, за то присутствует статическа типизиция и поддержка IDE. Например, цикл "for" я написал в писав "for" и нажав табуляцию. Далее мне пришлось только заменить "length" на 1000. Console.WriteLine, Thread и т.п. тоже пишется в пару нажатий так как далее работает комплит-ворд. Так что реально я написал этот код быстрее чем ты. А вот читается "Console.ReadLine" куад лучше чем "puts".


Я его не писал -- взял из книги

Кстати, твой пример показывает, что на C# можно писать короче, чем на Java. Что есть хорошо

E>>The Java version of StringReplace requires 50 lines of code.There are a

E>>couple ways to write the Ruby version (see Figure 1.14).

VD>И не стыдно тебе такими подтасовками заниматься? Это просто чистейшей воды подлог. Сранвнение полной реализации с использвоанием встроеных или библиотечнх функций. Переписываем твой пример:


VD>На Шарпе:

VD>
VD>void StringReplace(string oldValue, string newValue, string fileName)
VD>{
VD>    File.WriteAllText(fileName,
VD>        File.ReadAllText(fileName).Replace(oldValue, newValue));
VD>}
VD>

VD>Ой! Пример на Руби оказался значительно больше и неуклюжее? Вывод — дерьмо ваш Руби... Так что ли?

Причем здесь дерьмо или навоз? Речь шла о том, чтобы программы короче были.
А твою реализацию правильнее было бы сравнивать с таким фрагментом:
def stringReplace(searchString, replaceString, fileName)
    aString = File.readlines(fileName).to_s.gsub!(searchString, replaceString)
    File.open(fileName, "w") { |file| file << aString }
end


Не такой уж рулез этот C#

VD>Но не нужно сравинвать встроенную или библиотечную функциональность с лобовой реализацией. Это просто бесчесный подлог!


Ну вообще-то речь шла о том, что некий фреймворк в купе с неким языком позволяют писать программы короче, чем с использованием другой фреймворк в купе с другим языком.

К тому же это не я подлогами занимаюсь, а Robert Feldt и Lyle Johnson, авторы Ruby Developer's Guide

E>>Я это к тому, что, вполне возможно, Unix больше способствует повторному использованию уже готовых инструментов (т.к. grep, find, xagrs, wc, awk, sed, ...) и скриптовых языков (shell, Python, Perl, Ruby, Tcl/Tk, ...), поэтому надобность в супер-пупер IDE в Unix-е просто-напросто поменьше?


VD>Это просто не правда. Все эти grep, find, xagrs, wc, awk, sed без спроблем можно иметь ина Виндвс машине. Просто они на фиг не упали большинству людей. Ну, зачем мне возиться с grep и find в консоли когда я могу нажать Ctrl + Shiht + F и получить поиск с регекспами в своей IDE?


Нет, речь шла о другом. О том, что эти утилиты можно использовать для создания решений конкретных программистских задач. Вот мне, например, время от времени нужно выполнить разовые работы по анализу лог-файлов. Вместо того, чтобы брать IDE и клепать что-то на C# (Java) гораздо проще бывает сделать пару sh-скриптов, в которых тот же grep/wc/sort по нескольку раз дергается с перенаправлением ввода/вывода). Ну, и если это уж очень нужно, то в конце, какой-нибудь маленький ruby-скриптик запускается.

А по поводу того, что Ruby (сюда же можно и Python приплести) не имеет никаких преимуществ над совеременными языками... Честно говоря, я начинаю приходить к противоположному мнению. Еще полгода назад я был убежденным сторонником статической типизации. Теперь я все больше склоняюсь к мысли, что иногда Ruby с его динамической типизацией действительно рулит.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[17]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 16.08.05 12:07
Оценка:
Здравствуйте, VladD2, Вы писали:

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


E>>Ага, только нужно спрашивать, сколько из программирующих под Unix используют Emacs. А то ведь понятно, что Windows-разработчики вряд ли его применяют.


VD>Ага. А почему? Неужели они все мазохистя и не понимают тех приемуществ которые сулии им применение Emacs-а?


Нет. Воспитание другое. И привычки сильны, которые нет смысла перебарывать, если только под Windows работаешь.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[18]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 16.08.05 12:16
Оценка:
Здравствуйте, adontz, Вы писали:

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


VD>>Сюда заходят те кто есть. То что в нашей стране 80% программистов не ориентированны на Юникс — это всего лишь реалии жизни.


A>Сайт РСДН при всех его достоинствах не покрывает всех российских (русскоязычных) программистов. Сюда заходит лишь малая часть тех, кто есть. Причём не равномерная выборка, а с уклоном в сторону Windows. А число 80% кстати откуда взялось? Есть какая-то статистика?


Более того, я бы добавил, что высказывается здесь вообще небольшая часть из тех, кто заходит.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[18]: Стиль Дональда Эрвина Кнута
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 16.08.05 12:21
Оценка:
Здравствуйте, eao197, Вы писали:

E>Нет, функция Main нужна т.к. без нее пример не запустится.


И это называется сравнением языков?

E>Кстати, твой пример показывает, что на C# можно писать короче, чем на Java. Что есть хорошо


В Java тоже есть анонимные классы.

E>Нет, речь шла о другом. О том, что эти утилиты можно использовать для создания решений конкретных программистских задач. Вот мне, например, время от времени нужно выполнить разовые работы по анализу лог-файлов. Вместо того, чтобы брать IDE и клепать что-то на C# (Java) гораздо проще бывает сделать пару sh-скриптов, в которых тот же grep/wc/sort по нескольку раз дергается с перенаправлением ввода/вывода).


А еще проще открыть Excel и загрузить лог туда.
... << RSDN@Home 1.2.0 alpha rev. 599>>
AVK Blog
Re[18]: Стиль Дональда Эрвина Кнута
От: Privalov  
Дата: 16.08.05 12:32
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Если серьезно, то я уже много раз повторял. Идентификаторы должны быть осмысленными. Если это абстрактные переменные, то конечно осмысленными их сделать тяжело.


Правильно. Фишка в том, что в фундаментальной математике других я не видел. Соответственно, когда математик пишет себе программу, он автоматически дает идентификаторам соответствующие имена.

P>>Разумеется. Только причем здесь Event? Изначально речь шла о математической нотации.


VD>Нет. Речь шало о применении одно-двух буквенных идентификаторов в формулах, функциях и коде. Есть пагубная традиция давать имена переменным и константам в виде 1-2 букв. Вот это и является не верным. В корне.


Пусть так. Тем не менее я склонен принять точку зрения, высказанную
Автор: eao197
Дата: 11.08.05
eao197. Во всяком случае к "в корне неверно" я бы добавил маленькое imho. Короткие обозначения в формулах играют роль ссылок на их определения. Вот например M — число обусловленности матрицы. И везде, в любой литературе оно M. Спрашивается, зачем его называть как-то иначе? Всем же понятно, что оно означает. Другое дело, что функция, в которой такие обозначения применяются, должна быть разумных размеров.

P>> Программа, реализующая математические расчеты, пусть даже и вычисление квадратного трехчлена, всегда тем понятнее, чем ее запись ближе к записи оригинальных терминов и обозначений.


VD>Нет. Понятна она будет если эти самые формулы будут вынесены в отдельные функции имеющие осмысленные имена.


Сами функции — да. А внутри этих функций может быть что угодно, главное — чтобы читалось легко.

VD>>>Нет во внятных идентификаторвх оверхэда для человека. Он все равно понятиями мыслит. А если формула вместо строчки займет 2 ничего ровным счетом не изменится.


P>>Дак начерти пару формул ((c) Ю. Семенов), будет гораздо проще видеть, что изменится, а что нет.


VD>Чертил. Вернее перечерчивал однобуквенные когда разбирался с ними. После переписывания размеры изменялись не сильно, а вот восприятие улучшалось резко.


Я как-то рассказывал, что мне приходилось работать с системой, где одним из ограничений были двухсимвольные имена, второй из которых — цифра. Было такое чудо инженерной мысли — "Искра-226". Пакет программ назывался "Учет заработной платы", и это был один из лучших проектов, с которым мне пришлось работать. Поэтому для меня не вопрос, что имена дольны быть осмысленными. Имена типа A0$, B2% напрягали не по-детски, это при том, что проект был весьма и весьма неплохо документирован. Но в математике короткие имена вполне допустимы (назови число Пи как-нибудь иначе) и не менее осмысленны, чем длинные. Просто все должно быть в разумных пределах.
Re[19]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 16.08.05 12:46
Оценка:
Здравствуйте, AndrewVK, Вы писали:

E>>Нет, функция Main нужна т.к. без нее пример не запустится.


AVK>И это называется сравнением языков?


Ну не совсем так. Есть такой сайт: Pragmatic Programmer, на котором пропагандируется (или правильнее будет сказать, рекламируется) подход к программированию, когда для решения задач используются простые и удобные средства. Так что это было, скорее всего, попыткой привести пример того, как на более удобном (с точки зрения авторов книги) языке+библиотеке задача решается меньшим количеством строк, чем на другом языке+библиотеке. Понятно, что это весьма провокационное сравнение, т.к. отражает всего лишь точку зрения его авторов.

Но мне показалось, что в чем-то они правы.

E>>Кстати, твой пример показывает, что на C# можно писать короче, чем на Java. Что есть хорошо


AVK>В Java тоже есть анонимные классы.


Да, только их запись будет длинее, чем делегат в C# и уж тем более чем блок в Ruby.

E>>Нет, речь шла о другом. О том, что эти утилиты можно использовать для создания решений конкретных программистских задач. Вот мне, например, время от времени нужно выполнить разовые работы по анализу лог-файлов. Вместо того, чтобы брать IDE и клепать что-то на C# (Java) гораздо проще бывает сделать пару sh-скриптов, в которых тот же grep/wc/sort по нескольку раз дергается с перенаправлением ввода/вывода).


AVK>А еще проще открыть Excel и загрузить лог туда.


Угу, который несколько сот мегабайт занимает и сотни тысяч строк внутри. И на удаленном сервере находится.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[20]: Стиль Дональда Эрвина Кнута
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 16.08.05 13:03
Оценка:
Здравствуйте, eao197, Вы писали:

E> Так что это было, скорее всего, попыткой привести пример того, как на более удобном (с точки зрения авторов книги) языке+библиотеке задача решается меньшим количеством строк, чем на другом языке+библиотеке.


Хороша задачка — создание 1000 спящих потоков. Демагогия это натуральнейшая. Я готов поверить, что, в целом, Руби может и компактнее Java. Но вот приведенные примеры никуда не годятся.
... << RSDN@Home 1.2.0 alpha rev. 599>>
AVK Blog
Re[18]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.08.05 13:11
Оценка:
Здравствуйте, eao197, Вы писали:

E>В общем да, но для динамических языков автоматизированный рефакторинг может оказаться не таким простым, как в статически типизированных языках вроде Java или C#.


Имено по этому, хотя мне и нравятся некоторые фичи из Руби и Питона, но я все же отдаю предпочтение несколько более многословному Шарпу.

E>Мне кажется, что там нет ничего лишнего.


Тебе кажется. Я в яве не силен. Так что привел пример на шарпе.

E>Нет, функция Main нужна т.к. без нее пример не запустится.


Вынеси пример вотдельную функцию. Main — это постоянный аверхэд который просто смешен если смотреть на более менее работающее приложение.

E>Я его не писал -- взял из книги


Первый пример тоже из ниги? Можно озвучить ее название и автора, чтобы все знали имя машеника?

E>Кстати, твой пример показывает, что на C# можно писать короче, чем на Java. Что есть хорошо


Я просто в Яве не спец. Но думаю, что рельный код на ней будет не сильно длиннее. Хотя конечно если бы они в свое время полушали Хегельберга и МС, то писать не ней был бы удобнее. Ну, да что не делается, все к лучшему. Так как теперь мы имеем и пример минимализма (малось попорченый в Ява 1.5) и пример сбалансированности (в C# 2.0).

E>Причем здесь дерьмо или навоз? Речь шла о том, чтобы программы короче были.


Ну, и сравнивай хотя бы идентичный код. А ты взял готовые процедуры и сравнил их с закатом солнца вручную. А ну как и на Руби написать весь код без использования процедур и встроеных фич которые могут быть заменены процедурами?

E>Не такой уж рулез этот C#


Как минимум не хуже.

Я правильно понял, что примеры из все той же книги?




Я как бы не спорю, что за счет отсуствия типов, а еще больше за счет наличия некоторых действительно очень любопытных синтаксических кострукций Руби и Питон позволяют достигать большей краткости. Вот только если не пользоваться такими вот подложными примерами, то можно заметить, что:
1. В общем, разница не стольк существенна и вряд ли она стоит отсуствия типизации и потерь производительности связанных с вариантностью переменных.
2. Рельная большая краткость получается не за счет каких-то магических свойств, а за счет того, что безтиповость позволяет проще создатьвать обобщенный код. И за счет тог, что в язык вмонтированы такие фичи как работа со списками/строками и разные там континюэшоны.

Вот встроенные фичи и паттены действительно полезны. Те же итераторы в C# резко повышают и читабельность и простоту реализации в некоторых случаях. Континюеэшоны в Руби это еще более мощьный инструмент, но более сложный в использовании. Вот про них бы и говорил. А эти примеры ни что иное как обман не сведующих.

E>Ну вообще-то речь шла о том, что некий фреймворк в купе с неким языком позволяют писать программы короче, чем с использованием другой фреймворк в купе с другим языком.


Да даже если в Яве нет пдобных функций (во что я лично сильно сомневаюсь, уж Replace то точно в ней есть), то сколько нужно времени, чтобы написат стольк примитивные вещи?

Я уже говорил, что в Яве есть огроное количество встроенных классов и море часных разраоток. На том же сорсфордже количество открытых проектов на Яве приблизительно равно оному на С++ и сильно привышает Руби и Питоны. Так что делай выводы для чего больше готового кода.

E>К тому же это не я подлогами занимаюсь, а Robert Feldt и Lyle Johnson, авторы Ruby Developer's Guide


Мошейник он. И зря он позорит довольно достойный язык.

E>Нет, речь шла о другом. О том, что эти утилиты можно использовать для создания решений конкретных программистских задач.


Это это тоже не правда. Вернее не полная правда. Я точно так же имею все что мне нужно в составе того же дотнет-фрэймвора.

E> Вот мне, например, время от времени нужно выполнить разовые работы по анализу лог-файлов. Вместо того, чтобы брать IDE и клепать что-то на C# (Java) гораздо проще бывает сделать пару sh-скриптов, в которых тот же grep/wc/sort по нескольку раз дергается с перенаправлением ввода/вывода).


Вот фиг тебе это гораздо проще. Если скрпт примитивный то просто по фигу на чем его делать. А вот если он по сложнее и требует отладки, то извини подвинься. Хорошая IDE с отладчиком сократит не один час работы.

E> Ну, и если это уж очень нужно, то в конце, какой-нибудь маленький ruby-скриптик запускается.


Вово. А зачем мне совмещать ежа с ужем когда можно все это в одном флаконе?

Может быть это просто косность мышления и незнание других технолоигий?

Я много раз слышал/видел потнующих юниксойдов с большим снобизмом рассуждающих о Виндвс и ее убогости. Но все они нихрена в виндовс не понимли и их понты базировлись всего лишь на том что они могут решать свои задачи на их любимой ОС. А вот когда человек знает обе ОС, то почему-то он довольно спокойно смотрит на таки понны, понимая что задачи решаются и там и там. И и там, и там есть свои приемущества и недостатки. Причем почему-то массы все же выбирают Виндвс.

E>А по поводу того, что Ruby (сюда же можно и Python приплести) не имеет никаких преимуществ над совеременными языками... Честно говоря, я начинаю приходить к противоположному мнению. Еще полгода назад я был убежденным сторонником статической типизации. Теперь я все больше склоняюсь к мысли, что иногда Ruby с его динамической типизацией действительно рулит.


Я тебе уже гворил, что есть миры впитавшие приемущества обоих миров.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.08.05 13:11
Оценка:
Здравствуйте, eao197, Вы писали:

E>Нет. Воспитание другое. И привычки сильны, которые нет смысла перебарывать, если только под Windows работаешь.


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

Погляди на тех кто его использует. Это или немолодые люди подсевшие на него очень давно. Или разные "неформалы" которые выбрали разные экзотические языки для которых только и есть что Емакс.

Ну, и далее конечно привыкнув к Емаксу и пнаучившись его использовать как следует, человек действитльно не имеет желания смотреть что-то другоя. А посему начинает снобить на тему "эти ламеры работает на черти чем".
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.08.05 13:11
Оценка:
Здравствуйте, Privalov, Вы писали:

P>Правильно. Фишка в том, что в фундаментальной математике других я не видел. Соответственно, когда математик пишет себе программу, он автоматически дает идентификаторам соответствующие имена.


Эээ. А много ли людей занимаются "фундаментальной математикой"? Я вот все больше сталкиваюсь с прикладными ее аспектами. Иной раз даже не с самой математикой, а с ее ужасным стилем.

Ну, скажи мне, ради чего при объяснении алгоритма сортировки прменять имена MM, KK и ss? А закаким чертом нужно называть переменные в алгоритме построения ДКА именами Q, F, M, D... ?

Вот эта вся хрень и прет из Кнута.

P>Вот например M — число обусловленности матрицы.


Да? А вот в поределении ДКА этой буквой назвали сам ДКА. И зачем?

P> И везде, в любой литературе оно M. Спрашивается, зачем его называть как-то иначе?


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

P>Сами функции — да. А внутри этих функций может быть что угодно, главное — чтобы читалось легко.


Вот последнее верно. И если осмысленный идентификатор повышает читаемость, пусть даже только для начинающих — это уже хоршо. А стало быть так и нужно поступать.

P>Я как-то рассказывал, что мне приходилось работать с системой, где одним из ограничений были двухсимвольные имена, второй из которых — цифра. Было такое чудо инженерной мысли — "Искра-226". Пакет программ назывался "Учет заработной платы", и это был один из лучших проектов, с которым мне пришлось работать. Поэтому для меня не вопрос, что имена дольны быть осмысленными. Имена типа A0$, B2% напрягали не по-детски, это при том, что проект был весьма и весьма неплохо документирован. Но в математике короткие имена вполне допустимы (назови число Пи как-нибудь иначе) и не менее осмысленны, чем длинные. Просто все должно быть в разумных пределах.


С разумными пределами согласен. Длинна идентификаторов н должна быть самоцелью. Но когда ММ и КК встречашь в коде объясныющем алгоритм сортировки — это полный лам и не простительно ни для кого. А для Кнута в превую очередь.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 16.08.05 13:24
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


E>> Так что это было, скорее всего, попыткой привести пример того, как на более удобном (с точки зрения авторов книги) языке+библиотеке задача решается меньшим количеством строк, чем на другом языке+библиотеке.


AVK>Хороша задачка — создание 1000 спящих потоков. Демагогия это натуральнейшая.


+/-
Вообще-то там можно было и одним потоком обойтись. Главная мысль, имхо, была в том, что для простейшего действия -- спящего потока, в Руби нужно было написать всего лишь Thread.new { ... }, а в Java обязательно try{}catch(InterruptedException e){}, т.к. метод run() не должен выпускать исключений.

На счет демагогии -- да в той же мере, как любое сравнение двух совершенно разных языков

AVK> Я готов поверить, что, в целом, Руби может и компактнее Java. Но вот приведенные примеры никуда не годятся.


Здесь авторы балансировали на грани того, что может быть понятно не сведующему читателю. Ну и им нужно было привести примеры, где Ruby однозначно бы выигрывал

Я бы не стал вообще эти примеры приводить, да совпало просто -- только прочитал эту главу в книге, как мне на C++ пришлось писать что-то типа:
class    updated_pair_maker
    :    public std::unary_function<
            const channel_mbox_map_t::value_type &,
            channel_mbox_map_t::value_type >
    {
        const name_set_t &    m_content;
    public :
        updated_pair_maker( const name_set_t & content )
            : m_content( content )
            {}
            
        result_type
        operator()( argument_type a )
            {
                return result_type( a.first, m_content );
            }
    };

...
std::transform(
        m_last_published_content.begin(), m_last_published_content.end(),
        std::inserter(
                updated_last_published_content,
                updated_last_published_content.begin() ),
        updated_pair_maker( localhost_mboxes ) );


Можно было бы вместо класса updated_pair_maker сделать функцию с двумя аргументами и использовать разные bind1st, но для меня тогда код гораздо запутанее получается (хоть и компактнее). А boost с его binder-ами я не использую вообще.

После этого аналогичные действия на Ruby выглядят гораздо привлекательнее:
@last_published_content.each do |k,v|
    updated_last_published_content[ k ] = localhost_mboxes
end


Причем даже динамическая типизация Ruby здесь ничуть не помеха -- код очень далеко сидит в недрах библиотеки, никто снаружи его не видит, и вероятность того, что в updated_last_published_content кто-то засунет объект неподабающего типа практически нулевая.

Я не удивлюсь, что аналогичный код на C# будет гораздо короче C++ного варианта. Но всеже вряд ли короче и понятнее, чем Ruby.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[20]: Стиль Дональда Эрвина Кнута
От: adontz Грузия http://adontz.wordpress.com/
Дата: 16.08.05 13:27
Оценка: -1
Здравствуйте, VladD2, Вы писали:

P>> И везде, в любой литературе оно M. Спрашивается, зачем его называть как-то иначе?

VD>Да, чтобы человек еще не прочевший всю эту "любую литературу" не путался, и мог проще разобраться в сути происходящего.

Вообще-то высшая математика (со всеми её обозначениями) АФАИК изучается на первом курсе любого технического ВУЗа. Остаётся спросить — Влад, ты хотя бы первый курс технического вуза закончил, что тебе так всё непонятно? Или ты работаешь с людьми которые не закончили даже первый курс ВТУЗа?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[19]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 16.08.05 13:40
Оценка: +1
Здравствуйте, VladD2, Вы писали:

E>>Нет. Воспитание другое. И привычки сильны, которые нет смысла перебарывать, если только под Windows работаешь.


VD>Не, не, не. Не нужно про привычки. Все те кто сегодня привык к IDE или там скажем Мультиэдиту, все они когда-то стояли перед выбором и скорее всего пробовали разные варианты. Но почему-то Емакс выбрали только те в чьем распораяжении попросту небыло достойной IDE.


Здесь есть большая доля правды. Я выбирал между Emacs и vim когда мне пришлось переходить на систему, где GUI не было в принципе. Пришлось осваивать инструменты, которые были чужды мне по-определению (т.к. я 99% времени провожу под Windows). По началу я пытался работать в Emacs, но он, гад, под Windows имел проблемы с cp1251 (GNU Emacs). Зато в vim все без сучка и задоринки.

Но вот интересно. Привыкнув к vim переходить обратно в Windows-like редакторы нет желания. И знаешь почему? Оказалось, что передвигаться по тексту, используюя вместо клавиш управления курсором клавиши h, j, k, l _гораздо_ удобнее. Сказал бы мне кто-то еще год назад, что я буду так думать -- не поверил бы ни в жисть.

Вообще в Unix и Unix-инструментах есть какая-то магическая притягательность. По началу думаешь, что все неудобно, через одно место и т.д. А потом втягиваешься и все остальное начинаешь считать неправильным и неудобным. Опять же из личного опыта.

VD>Погляди на тех кто его использует. Это или немолодые люди подсевшие на него очень давно. Или разные "неформалы" которые выбрали разные экзотические языки для которых только и есть что Емакс.


А ты зайди в ветку Xemacs &mdash; помойка
Автор: Cyberax
Дата: 08.08.05
-- там emacs защищают совсем не старики. Например, MaximE или aka50 -- они еще не скоро выйдут из категории молодых людей.

VD>Ну, и далее конечно привыкнув к Емаксу и пнаучившись его использовать как следует, человек действитльно не имеет желания смотреть что-то другоя. А посему начинает снобить на тему "эти ламеры работает на черти чем".


Имхо, это не снобизм. Это такая же привычка, как и привычка использовать редакторы с Windows-key-binding-ом.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[19]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 16.08.05 14:03
Оценка:
Здравствуйте, VladD2, Вы писали:

E>>Я его не писал -- взял из книги


VD>Первый пример тоже из ниги? Можно озвучить ее название и автора, чтобы все знали имя машеника?


Robert Feldt, Lyle Johnson, Michael Neumann, Ruby Developer's Guide

VD>Я как бы не спорю, что за счет отсуствия типов, а еще больше за счет наличия некоторых действительно очень любопытных синтаксических кострукций Руби и Питон позволяют достигать большей краткости. Вот только если не пользоваться такими вот подложными примерами, то можно заметить, что:

VD>1. В общем, разница не стольк существенна и вряд ли она стоит отсуствия типизации и потерь производительности связанных с вариантностью переменных.
VD>2. Рельная большая краткость получается не за счет каких-то магических свойств, а за счет того, что безтиповость позволяет проще создатьвать обобщенный код. И за счет тог, что в язык вмонтированы такие фичи как работа со списками/строками и разные там континюэшоны.

+1

VD>Вот встроенные фичи и паттены действительно полезны. Те же итераторы в C# резко повышают и читабельность и простоту реализации в некоторых случаях. Континюеэшоны в Руби это еще более мощьный инструмент, но более сложный в использовании. Вот про них бы и говорил. А эти примеры ни что иное как обман не сведующих.


Да дело в том, что блоки кода (которые в Руби и как итераторы и как континуэшоны используются) там как раз и показаны. Например: Thread.new { sleep }. То, что в фигурных скобках и есть блок кода.

E>>Ну вообще-то речь шла о том, что некий фреймворк в купе с неким языком позволяют писать программы короче, чем с использованием другой фреймворк в купе с другим языком.


VD>Да даже если в Яве нет пдобных функций (во что я лично сильно сомневаюсь, уж Replace то точно в ней есть), то сколько нужно времени, чтобы написат стольк примитивные вещи?


E>>К тому же это не я подлогами занимаюсь, а Robert Feldt и Lyle Johnson, авторы Ruby Developer's Guide


VD>Мошейник он. И зря он позорит довольно достойный язык.


Да, чего-то они с Java намудрили. Т.к. есть http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html#replaceAll(java.lang.String, java.lang.String). Но я же сказал, что за что купил, за то и продаю.
Может они пытались замену "по месту" производить, т.к. String.replaceAll требует двух копий строки. А String.gsub! в Ruby как раз "по месту" модификацию производит.

В общем, мошеничают, гады.

E>> Вот мне, например, время от времени нужно выполнить разовые работы по анализу лог-файлов. Вместо того, чтобы брать IDE и клепать что-то на C# (Java) гораздо проще бывает сделать пару sh-скриптов, в которых тот же grep/wc/sort по нескольку раз дергается с перенаправлением ввода/вывода).


VD>Вот фиг тебе это гораздо проще. Если скрпт примитивный то просто по фигу на чем его делать. А вот если он по сложнее и требует отладки, то извини подвинься. Хорошая IDE с отладчиком сократит не один час работы.


А использование утилит и конвейера ввода-вывода избавит от необходимости IDE с отладчиком вовсе

E>> Ну, и если это уж очень нужно, то в конце, какой-нибудь маленький ruby-скриптик запускается.


VD>Вово. А зачем мне совмещать ежа с ужем когда можно все это в одном флаконе?


Потому что программировать лень. А если уж приходится, то хочется сделать что-нибудь попроще и поменьше.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[20]: Стиль Дональда Эрвина Кнута
От: Privalov  
Дата: 16.08.05 14:04
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Эээ. А много ли людей занимаются "фундаментальной математикой"? Я вот все больше сталкиваюсь с прикладными ее аспектами. Иной раз даже не с самой математикой, а с ее ужасным стилем.


VD>Ну, скажи мне, ради чего при объяснении алгоритма сортировки прменять имена MM, KK и ss? А закаким чертом нужно называть переменные в алгоритме построения ДКА именами Q, F, M, D... ?


Почему в сортировке — не знаю. А в ДКА, AFAIK, как написали: S=(F, M, Q, Q0), так оно и идет. К сожалению, в данный момент под рукой нет ни одной книги по дискретной математике, поэтому не ручаюсь за правильность переменных. Это идиома, если ее записать как-то иначе, кого-то это обязательно напряжет.

P>>Вот например M — число обусловленности матрицы.


VD>Да? А вот в поределении ДКА этой буквой назвали сам ДКА. И зачем?


Действительно. Если не ошибаюсь, ДКА обозначается буквой S.

P>> И везде, в любой литературе оно M. Спрашивается, зачем его называть как-то иначе?


VD>Да, чтобы человек еще не прочевший всю эту "любую литературу" не путался, и мог проще разобраться в сути происходящего.


А как можно работать в предметной области, не читая специальную литературу? В любой книге (статье) по математике вводится понятие, дается ему определение, и дальше автор книги (статьи) использует это понятие, практически никогда не возвращаясь к его определению. Практически — потому что иногда можно встретить выражения "по определению понятия N...".
Кстати, хорошим тоном при написании подобных программ считается дать в шапке искодника ссылку на источник. Эту информацию не ленились набивать и на перфокартах.
Re[21]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.08.05 20:19
Оценка: +1
Здравствуйте, Privalov, Вы писали:

P>Почему в сортировке — не знаю. А в ДКА, AFAIK, как написали: S=(F, M, Q, Q0), так оно и идет.


Ну, и на фиг так написали? Зачем эти бредовые M, Q, T, D, q0, F?
Почему не: DFA, StatesStack, Lang, State0 и т.п.?

P>Действительно. Если не ошибаюсь, ДКА обозначается буквой S.


Вот точная цитата:

Выход. ДКА M = (Q, T, D, q0, F), такой что L(M) = L(r)...


P>А как можно работать в предметной области, не читая специальную литературу?


Всегда бывает вервый раз. И нет никакой необходимости запоминать всю эту криптографию там где можно использовать внятные идентификаторы.

P> В любой книге (статье) по математике вводится понятие, дается ему определение


Ну, вот тебе пример выше. Обяснение алгоритмов связанны с ДКА занимает дцать страниц. Определения для всех этих Q, T, D, q0, F даются один раз черт знает где. Ну, и какого рожна я должен их зазубривать, выписывать или делать закладки вместо того чтобы просто дать им осмысленные имена. Ну, что кто-то выиграет от этой криптокграфии?

P>Кстати, хорошим тоном при написании подобных программ считается дать в шапке искодника ссылку на источник. Эту информацию не ленились набивать и на перфокартах.


Хорошим тоном было бы не давать одно-двух-буквенных имен для сущьностей имеющий конкретный смысл. Это все же не a и b в простенких мат.формулах. Это конкретный алгоритм оперирующий с конкретными слущьностями вроде остояний, переходов и т.п.

Вот и получается, что в итоге привчки математиков переходят на совершенно конкретные аспекты программирования и првносят в них совершенно не нужную сложность.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.08.05 20:19
Оценка:
Здравствуйте, eao197, Вы писали:

E>Да дело в том, что блоки кода (которые в Руби и как итераторы и как континуэшоны используются) там как раз и показаны. Например: Thread.new { sleep }. То, что в фигурных скобках и есть блок кода.


Ну, как ты наверно догадался блоки кода из Руби мало чем отличаются от анонимных методов в C# 2.0. Так что тут фактического приемущества нет.

E>Но я же сказал, что за что купил, за то и продаю.


По этому поводу хорошо сказал проффесор Преображенский "вот и не читатйте советских газет перед едой".

E>Может они пытались замену "по месту" производить, т.к. String.replaceAll требует двух копий строки.


Строки в Яве неизменяемые. Так что как не крути, но копию создавать прийдется. К тому же это эффективнее чем возиться со стрингБуфером.

E> А String.gsub! в Ruby как раз "по месту" модификацию производит.


А разница? Только ошибок будет больше.

E>В общем, мошеничают, гады.


Во-во.

E>А использование утилит и конвейера ввода-вывода избавит от необходимости IDE с отладчиком вовсе


Отладчик никогда лишним не бывает.

E>Потому что программировать лень. А если уж приходится, то хочется сделать что-нибудь попроще и поменьше.


Дык и получается проще.

Не, я согласен, что если сравнивать написание идентичного кода на Яве/Шарпе и Руби в Нотпэде и без отладчика, то наврено на Руби это получилось бы куда проще. Но в хорошей IDE...
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.08.05 20:19
Оценка: 1 (1) +2
Здравствуйте, eao197, Вы писали:

E>Имхо, это не снобизм. Это такая же привычка, как и привычка использовать редакторы с Windows-key-binding-ом.


ОК, пусть будет так. Но по-моему глупо спорить, что изучение Windows-ориентированных редакторов проходит в разы проще. А этого более чем достаточно, чтобы они вытеснели даже более удобные "редакторы со странностями" на задворки (что и происходит). Ну, а так как современные IDE вряд ли уступают всем этим Вимам и Емаксам, то результат просто таки предпределен.

Еще, кстати, унжно учитывать то факт, что когда человек впервые выбирает редактор он еще не умет ни писат в слепую, ни клавой шурудить со скоростью ветра. И тут виндовые редакторы предоставляют ему очень приличный вышевозильный интерфейс. Незнащь шорткат чтобы открыть то-то окошко? Не беда, мышкой вызовешь. А когда задолбашся, то потратишь некоторое время и найдешь (сделашь) шорткат.

ЗЫ

В общем, я не спорю, что Емаскы круты и удобны для тех кто к ним привык. Я видел как люди (например, тот же Дон Бокс) с их помощью долбили код со скоростью ракеты. Но я так же видел как тоже самое делают и на виндовозных редакторах. Я и сам долблю код довольно шустро на VS. Так что все это привычка. И проигрышь Емакса как раз в том, что слишком болшой порог вхождения. Ну, слишком много нужно париться чтобы эту привычку выроботать.

Объективными же сравнения стольк разных вещей никогда не будут. Лиспори всегда будут хвалить Емакс, Явшики Идею, а я скорее студия и РеШарпер.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.08.05 21:20
Оценка:
Здравствуйте, eao197, Вы писали:

E>На счет демагогии -- да в той же мере, как любое сравнение двух совершенно разных языков


Два императивных языка. Сравнивать боле чем можно. Вот сравнивать. А это демогогическая попытка возвысить один из языков. Причем эта демогогия была совсем не нужна, так как у Руби хватило бы средств доказать свою краткость и элегантность. Вот только она не оказалось бы такой поразительной. А именно этого товаришь добивался.

Я тут на досуге читаю "Майн камф". Очень похожий стиль. Только еще невероятный цинизм помешанный на нацизме. Выпячиваем мелкие недостатки. Раздуваем из мухи слона. Навешиваем ярлыки... и... Вот уже готова картина убогого народа пытающего всеми силами уничтожить великий немецкий народ. Тут та же фигня. Только менее талантливо. Тоже подтасовывание примеров. То же раздувание из мухи слона. То же навешивание ярлыков. И все только для того чтобы поселить в человеке веру о ничтожности одного и невероятном превосходстве другого.

Если бы мне пришлось писать рекламу руби, то я бы продемонстрировал в превю очередь действительно выдающиеся вещи. Ну, например привел бы код на Яве позволяющий сравнить два дерева. А потом такой зе на Руби с использованием континюэшонов. Потом продемонстрировал бы работу со списками. На конец создал бы пару обобщенных функций и продемонстрировал бы насколько это проще и гибче чем на яве с дженириками.

E>Здесь авторы балансировали на грани того, что может быть понятно не сведующему читателю. Ну и им нужно было привести примеры, где Ruby однозначно бы выигрывал


Нет. Здесь автор рассчитывает на то, что его читатель не сведушь, а стало быть не будет вникать в код и поверит в то, что код действительно идентичен. Формально ведь он действительно делает одно и то же. Так вот исползуя особенность аудитории (его не компетентность) автор пыается поразить читателей громадной разницей в объемах кода. Именно для этого контекстная замена реализована не методом, а в лоб.

Другими словами это был демагогический прием. Попытка путем обмана поразить и захватить аудиторию. Это может и прокатит для студентов или других начинающих. Но на этом форуме все же это не прокатит.


E>Я не удивлюсь, что аналогичный код на C# будет гораздо короче C++ного варианта. Но всеже вряд ли короче и понятнее, чем Ruby.


Я не очень понимаю суть кода по этому повтрять не буду. Но не думаю, что код на шарпе будет сильно сложнее.

Сдается мне, что и на С++ можно было короче.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: Стиль Дональда Эрвина Кнута
От: Privalov  
Дата: 17.08.05 04:55
Оценка: :)
Здравствуйте, VladD2, Вы писали:

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


P>>Почему в сортировке — не знаю. А в ДКА, AFAIK, как написали: S=(F, M, Q, Q0), так оно и идет.


VD>Ну, и на фиг так написали? Зачем эти бредовые M, Q, T, D, q0, F?

VD>Почему не: DFA, StatesStack, Lang, State0 и т.п.?


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

P>>Действительно. Если не ошибаюсь, ДКА обозначается буквой S.


VD>Вот точная цитата:

VD>

Выход. ДКА M = (Q, T, D, q0, F), такой что L(M) = L(r)...


А может быть, в таком прочтении ДКА означает Доминиканстая Консервативная Арганизация?

P>>А как можно работать в предметной области, не читая специальную литературу?


VD>Всегда бывает вервый раз. И нет никакой необходимости запоминать всю эту криптографию там где можно использовать внятные идентификаторы.


Ни разу не втречал человека, который берется за работу, не имея о ней ни малейшего понятия. Особенно в первый раз. Тем более, в каком-нибудь разделе математики. Приступая к такой работе, человек обязан знать основные определения и теоремы. Это значит, что он и увидит обозначения, и разберется с используемой терминологией.
А если дать человеку, не знакомому с предметной областью, почитать такую программу, то идентификаторы его не спасут, как их не называй, потому что они отражают понятия и определения, которых этот человек не знает. Тогда он окажется в ситуации, похожей на эту
Автор: Сергей Губанов
Дата: 16.08.05
. В народе это называется: угадал все буквы, но не смог назвать слово.


P>> В любой книге (статье) по математике вводится понятие, дается ему определение


VD>Ну, вот тебе пример выше. Обяснение алгоритмов связанны с ДКА занимает дцать страниц. Определения для всех этих Q, T, D, q0, F даются один раз черт знает где. Ну, и какого рожна я должен их зазубривать, выписывать или делать закладки вместо того чтобы просто дать им осмысленные имена. Ну, что кто-то выиграет от этой криптокграфии?


А я зачем должен все время помнить, что такое ДКА? Ты же ни разу не дал его определение, однако уверен, что у читателей не возникнет проблем с пониманием.


P>>Кстати, хорошим тоном при написании подобных программ считается дать в шапке искодника ссылку на источник. Эту информацию не ленились набивать и на перфокартах.


VD>Хорошим тоном было бы не давать одно-двух-буквенных имен для сущьностей имеющий конкретный смысл. Это все же не a и b в простенких мат.формулах. Это конкретный алгоритм оперирующий с конкретными слущьностями вроде остояний, переходов и т.п.


VD>Вот и получается, что в итоге привчки математиков переходят на совершенно конкретные аспекты программирования и првносят в них совершенно не нужную сложность.


Для того, чтобы читать специальную литературу, необходимы навыки. Ты свободно, лежа на диване, сможешь читать Петцольда или Рихтера, но возьми какую-нибудь монографию по медицине или химии. Специальная литература на то и специальная, что рассчитана на людей подготовленных. А подготовку такую в вузах получают и у более опытных коллег.
Re[19]: Стиль Дональда Эрвина Кнута
От: ЯпонИц Россия www.yaponiz.com
Дата: 17.08.05 05:42
Оценка: +1
Здравствуйте, VladD2, Вы писали:

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


E>>Нет. Воспитание другое. И привычки сильны, которые нет смысла перебарывать, если только под Windows работаешь.


VD>Не, не, не. Не нужно про привычки. Все те кто сегодня привык к IDE или там скажем Мультиэдиту, все они когда-то стояли перед выбором и скорее всего пробовали разные варианты. Но почему-то Емакс выбрали только те в чьем распораяжении попросту небыло достойной IDE.


А как же студенты, которых на первом же курсе посадили за дельфи/билдер/VC? Разве у них был выбор в чем писать? Среди них конечно есть несколько человек, пробовавших другие среды, но вот только слишком мал процент таких студентов.
Я не волшебник, я только учусь.
Posted by RSDN@HOME.
Re[23]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.08.05 06:46
Оценка:
Здравствуйте, VladD2, Вы писали:

E>>Здесь авторы балансировали на грани того, что может быть понятно не сведующему читателю. Ну и им нужно было привести примеры, где Ruby однозначно бы выигрывал


VD>Нет. Здесь автор рассчитывает на то, что его читатель не сведушь, а стало быть не будет вникать в код и поверит в то, что код действительно идентичен. Формально ведь он действительно делает одно и то же. Так вот исползуя особенность аудитории (его не компетентность) автор пыается поразить читателей громадной разницей в объемах кода. Именно для этого контекстная замена реализована не методом, а в лоб.


VD>Другими словами это был демагогический прием. Попытка путем обмана поразить и захватить аудиторию. Это может и прокатит для студентов или других начинающих. Но на этом форуме все же это не прокатит.


Не совсем так. Если бы контекстная замена делалась в Java методом, то Java-программа хранила бы содержимое обрабатываемого файла в памяти в двух копиях. Согласись, что если речь идет о файлах в десятки мегабайт, это существенно, даже если на борту гиг оперативки. Поэтому приведены две программы, разумно потребляющие память. И показывающие, что в таких условиях Ruby-код короче.

Имхо, приведенный тобой код на C# так же хранит содержимое файла в ОП в двух копиях.

E>>Я не удивлюсь, что аналогичный код на C# будет гораздо короче C++ного варианта. Но всеже вряд ли короче и понятнее, чем Ruby.


VD>Я не очень понимаю суть кода по этому повтрять не буду. Но не думаю, что код на шарпе будет сильно сложнее.


Вот видишь -- пример не большой, но даже с твоей широкой эрудицией он не сразу понятен. А что уже говорить об адитории, которой только-только собираются разсказать про новый классный язык.

А пример простой -- есть map из которого нужно построить новый map, оставив первый элемент (ключ) и заменив второй. Это делается с помощью стандартного алгоритма std::transform и объекта-функтора (который производен от стандартного класса std::unary_function).

VD>Сдается мне, что и на С++ можно было короче.


Можно было. С какими-нибудь std::bind1st (тогда в качестве функтора можно было бы свободную функцию использовать) или boost::bind (тогда можно было бы вообще попробовать по месту все сделать). Но лично для меня такой более компактный код оказался бы значительно менее читабельным (как для тебя в случае математических формул).
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[21]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.08.05 06:46
Оценка:
Здравствуйте, VladD2, Вы писали:

E>>Да дело в том, что блоки кода (которые в Руби и как итераторы и как континуэшоны используются) там как раз и показаны. Например: Thread.new { sleep }. То, что в фигурных скобках и есть блок кода.


VD>Ну, как ты наверно догадался блоки кода из Руби мало чем отличаются от анонимных методов в C# 2.0. Так что тут фактического приемущества нет.


А анонимные методы в C# 2.0 являются замыканиями?

E>>Может они пытались замену "по месту" производить, т.к. String.replaceAll требует двух копий строки.


VD>Строки в Яве неизменяемые. Так что как не крути, но копию создавать прийдется. К тому же это эффективнее чем возиться со стрингБуфером.


E>> А String.gsub! в Ruby как раз "по месту" модификацию производит.


VD>А разница? Только ошибок будет больше.


На файлах в 200-500Mb разница проявится

E>>А использование утилит и конвейера ввода-вывода избавит от необходимости IDE с отладчиком вовсе


VD>Отладчик никогда лишним не бывает.


В многопоточных и распределенных приложениях. Особенно написаных с использованием событийно-ориентированных фреймворков. И под нагрузкой в десятки транзакций в секунду. Польза бывает только если Access Violation нужно отловить. И то, только для того, чтобы место слома узнать. А вот как туда попали... Тут уж самому курить приходится.

E>>Потому что программировать лень. А если уж приходится, то хочется сделать что-нибудь попроще и поменьше.


VD>Не, я согласен, что если сравнивать написание идентичного кода на Яве/Шарпе и Руби в Нотпэде и без отладчика, то наврено на Руби это получилось бы куда проще. Но в хорошей IDE...


С эти я не смогу спорить. Просто читая Programming Ruby от Pragmatic Programmer я начинаю приходить к мнению, что есть два подхода к быстрому и эффективному программированию:
1) быстро писать на "многословном" языке (C++/C#/Java) с помощью IDE. Т.е. труд по написанию лишних конструкций берет на себя IDE, ты сам пишешь мало, но размер программы от этого меньше _не становится_;
2) быстро писать на "малословных" языках (Ruby/Python/Smalltalk). Даже без продвинутых IDE ты пишешь столько же кода, сколько в IDE, но в результате размер программы оказывается _меньше_ (при той же функциональности, однако).

И, если оталкиваться от тезиса, что в 1000 строк кода содержится приблизительно одинаковое количество ошибок, вне зависимости от языка программирования, то, имхо, действительно лучше писать более короткие программы.

Disclaimer: речь идет о программах с одинаковой функциональностью. Во многих случаях аналогичный код на Java/C# будет короче, чем на C/C++ (а иногда с точностью наоборот). Поэтому и получается, что при одинаковой плотности ошибок в 1000 строк, общее количество ошибок в программе на одном языке может быть больше, чем на другом.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[22]: Стиль Дональда Эрвина Кнута
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 17.08.05 08:35
Оценка:
Здравствуйте, eao197, Вы писали:

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


E>>>Да дело в том, что блоки кода (которые в Руби и как итераторы и как континуэшоны используются) там как раз и показаны. Например: Thread.new { sleep }. То, что в фигурных скобках и есть блок кода.


VD>>Ну, как ты наверно догадался блоки кода из Руби мало чем отличаются от анонимных методов в C# 2.0. Так что тут фактического приемущества нет.


E>А анонимные методы в C# 2.0 являются замыканиями?


Являются. Вся разница в степени использования в стандартной библиотеке.
... << RSDN@Home 1.1.4 stable rev. 510>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[24]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.08.05 10:52
Оценка:
Здравствуйте, eao197, Вы писали:

E>Не совсем так. Если бы контекстная замена делалась в Java методом, то Java-программа хранила бы содержимое обрабатываемого файла в памяти в двух копиях. Согласись, что если речь идет о файлах в десятки мегабайт, это существенно, даже если на борту гиг оперативки. Поэтому приведены две программы, разумно потребляющие память. И показывающие, что в таких условиях Ruby-код короче.


-1

Не нужно рассуждаь о памяти. Во-вервых ее хватит. А во-вирпых подлог в противопоставлении лобового кода и библиотеки. Библиотеки у Явы больше, так что примеров в которых Руби будет отдыахть можно придумать куда больше.

E>А пример простой -- есть map из которого нужно построить новый map, оставив первый элемент (ключ) и заменив второй. Это делается с помощью стандартного алгоритма std::transform и объекта-функтора (который производен от стандартного класса std::unary_function).


Что то я не пойму... А зачем тут вообще фанкторы и т.п.?
По-моему, все просто до не приличия:
Dictionari<X, Y> map = new Dictionari<X, Y>(sourceMap);
map[Key1] = val1;
map[Key2] = val2;

В общем, или ты не верно объяснил задачу, или я вобще не пойму зачем тут перебор.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.08.05 10:52
Оценка:
Здравствуйте, eao197, Вы писали:

E>А анонимные методы в C# 2.0 являются замыканиями?


"замыкание" никудышное понятип. Ими являются любые методы. Выражайся более понятно.

E>На файлах в 200-500Mb разница проявится


Текстовый файл в 200 мег? Акстись. Да и опять таки на современной ОС с виртуалкой проблем много не будет.

VD>>Отладчик никогда лишним не бывает.


E>В многопоточных и распределенных приложениях. Особенно написаных с использованием событийно-ориентированных фреймворков. И под нагрузкой в десятки транзакций в секунду. Польза бывает только если Access Violation нужно отловить. И то, только для того, чтобы место слома узнать. А вот как туда попали... Тут уж самому курить приходится.


Смешно.

E>1) быстро писать на "многословном" языке (C++/C#/Java) с помощью IDE. Т.е. труд по написанию лишних конструкций берет на себя IDE, ты сам пишешь мало, но размер программы от этого меньше _не становится_;


А он и так не сильно то больше.

E>2) быстро писать на "малословных" языках (Ruby/Python/Smalltalk). Даже без продвинутых IDE ты пишешь столько же кода, сколько в IDE, но в результате размер программы оказывается _меньше_ (при той же функциональности, однако).


А что толку то? Читать такой код сложнее, так как он не содержит многих подробностей, а многие вещи моно интерпретировать по разному. Объем, как мы вияснили, сильно меньше не становится. Если сравнить такие программы по количеству узлво в AST, то оверхэд будет процентов 10-20. Для чтения он проблемы не составляет. Писать получается даже быстрее. Плюс отладчик, плюс рефакторин, плюс более быстрый поиск документации и подсказки по шарткамам, плюс возможность создания высокопроизводительного коад на том же языке. Ну, и зачем мне все это менять на уменьшение 10 оверхэда который к тому же еще помогает мне понимать программу?

E>И, если оталкиваться от тезиса, что в 1000 строк кода содержится приблизительно одинаковое количество ошибок, вне зависимости от языка программирования, то, имхо, действительно лучше писать более короткие программы.


Этот миф никто не доказал. А вот обосновать обратное утверждение можно. Вае же языки имеют разную сопротивляемость к ошибокам. С++ совсем плохую. C# значительно более выскую. Пожалуй выше чем в Руби. Как минимум обязательная декларация переменных и жесткий контроль типов.

E>Disclaimer: речь идет о программах с одинаковой функциональностью. Во многих случаях аналогичный код на Java/C# будет короче, чем на C/C++ (а иногда с точностью наоборот).


Вот такого я еще не встречал. Код на С++ может быть короче только при применении того же приема — сравнении использования библиотеки с лобовым решением.

E> Поэтому и получается, что при одинаковой плотности ошибок в 1000 строк, общее количество ошибок в программе на одном языке может быть больше, чем на другом.


С С++ ты потеряешь время на одной отладке. А про ошибки в 1000 строках — это миф.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.08.05 10:52
Оценка:
Здравствуйте, ЯпонИц, Вы писали:

ЯИ>А как же студенты, которых на первом же курсе посадили за дельфи/билдер/VC? Разве у них был выбор в чем писать? Среди них конечно есть несколько человек, пробовавших другие среды, но вот только слишком мал процент таких студентов.


Если посадили, то посадили. Но есть море народа который провобавл разные вещи.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.08.05 12:13
Оценка:
Здравствуйте, VladD2, Вы писали:

E>>А пример простой -- есть map из которого нужно построить новый map, оставив первый элемент (ключ) и заменив второй. Это делается с помощью стандартного алгоритма std::transform и объекта-функтора (который производен от стандартного класса std::unary_function).


VD>Что то я не пойму... А зачем тут вообще фанкторы и т.п.?

VD>По-моему, все просто до не приличия:
VD>
VD>Dictionari<X, Y> map = new Dictionari<X, Y>(sourceMap);
VD>map[Key1] = val1;
VD>map[Key2] = val2;
VD>

VD>В общем, или ты не верно объяснил задачу, или я вобще не пойму зачем тут перебор.

Я не однозначно выразился в определении задачи. Есть map<X, Y>, нужно из него получить map2, где все X сохраняют свое значение, а все Y меняют.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[23]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.08.05 12:13
Оценка:
Здравствуйте, VladD2, Вы писали:

E>>А анонимные методы в C# 2.0 являются замыканиями?


VD>"замыкание" никудышное понятип. Ими являются любые методы. Выражайся более понятно.


Я вот об этом http://en.wikipedia.org/wiki/Closure_(computer_science)

E>>На файлах в 200-500Mb разница проявится


VD>Текстовый файл в 200 мег? Акстись. Да и опять таки на современной ОС с виртуалкой проблем много не будет.


А ты никогда суточных логов по 500Mb не видел?

E>>В многопоточных и распределенных приложениях. Особенно написаных с использованием событийно-ориентированных фреймворков. И под нагрузкой в десятки транзакций в секунду. Польза бывает только если Access Violation нужно отловить. И то, только для того, чтобы место слома узнать. А вот как туда попали... Тут уж самому курить приходится.


VD>Смешно.


Ага. Когда комплекс состоит из пяти процессов, которые работают на двух машинах (это пока, планируется еще большая распределенность), то просто обхахатываешься.

E>>2) быстро писать на "малословных" языках (Ruby/Python/Smalltalk). Даже без продвинутых IDE ты пишешь столько же кода, сколько в IDE, но в результате размер программы оказывается _меньше_ (при той же функциональности, однако).


VD>А что толку то? Читать такой код сложнее, так как он не содержит многих подробностей, а многие вещи моно интерпретировать по разному. Объем, как мы вияснили, сильно меньше не становится.


Не верю. Имхо, все же становится.
И понимать короткий код все же проще.

E>>Disclaimer: речь идет о программах с одинаковой функциональностью. Во многих случаях аналогичный код на Java/C# будет короче, чем на C/C++ (а иногда с точностью наоборот).


VD>Вот такого я еще не встречал. Код на С++ может быть короче только при применении того же приема — сравнении использования библиотеки с лобовым решением.


А ведь большинство прикладных задач как раз строятся на основе использования готовых библиотек.

А вот пример ситуации, когда C++ может быть короче, чем Java или C#, или Ruby. Представь, что нужно прочитать оглавление каталога в контейнер чтобы затем уметь обращаться к этому контейнеру по трем индексам: по именам файлов, по дате их изменения и по имени их фладельца. Причем вставка или удаление элемента в/из контейнера должна приводить к автоматическому обновлению индексов.

Вот в C++ для этого можно boost::multi_index применить.

E>> Поэтому и получается, что при одинаковой плотности ошибок в 1000 строк, общее количество ошибок в программе на одном языке может быть больше, чем на другом.


VD>С С++ ты потеряешь время на одной отладке. А про ошибки в 1000 строках — это миф.


Вот, нашел, кто запустил сюда эту информацию: http://www.rsdn.ru/Forum/?mid=588736
Автор: Gaperton
Дата: 30.03.04

Кстати, я в этот миф верю.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[24]: Стиль Дональда Эрвина Кнута
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.08.05 12:33
Оценка:
Здравствуйте, eao197, Вы писали:

E>Вот в C++ для этого можно boost::multi_index применить.


А в C# DataView.
... << RSDN@Home 1.2.0 alpha rev. 599>>
AVK Blog
Re[25]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.08.05 12:42
Оценка: +1
Здравствуйте, AndrewVK, Вы писали:

E>>Вот в C++ для этого можно boost::multi_index применить.


AVK>А в C# DataView.


Глянул DataView и DataTable и не понял: DataView без DataTable можно использовать?
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[25]: Стиль Дональда Эрвина Кнута
От: Павел Кузнецов  
Дата: 17.08.05 12:49
Оценка: +3 -1
AndrewVK,

> E>Вот в C++ для этого можно boost::multi_index применить.

>
> А в C# DataView.

Это несколько другое. boost::multi_index -- контейнер, аналог map (Dictionary в C#), но со многими ключами. DataView -- компонент "легкой" базы данных. Ну и, естественно, все проверки типизации в случае последнего динамические. Ну и, опять-таки, это был пример "ситуации, когда C++ может быть короче, чем Java или C#, или Ruby". Использование DataView в данном случае получится значительно длиннее (закрывая глаза на эффективность, выразительность и т.п.).
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[26]: Стиль Дональда Эрвина Кнута
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.08.05 12:56
Оценка:
Здравствуйте, eao197, Вы писали:

E>Глянул DataView и DataTable и не понял: DataView без DataTable можно использовать?


Нет, а зачем?
... << RSDN@Home 1.2.0 alpha rev. 599>>
AVK Blog
Re[27]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.08.05 13:04
Оценка:
Здравствуйте, AndrewVK, Вы писали:

E>>Глянул DataView и DataTable и не понял: DataView без DataTable можно использовать?


AVK>Нет, а зачем?


Да так, интересный поворот просто. Для задачи, где требуется контейнер с упорядочением по разным полям делать, применять ADO.NET.

Вообще Паша Кузнецов хорошо высказался: Re[25]: Стиль Дональда Эрвина Кнута
Автор: Павел Кузнецов
Дата: 17.08.05
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[28]: Стиль Дональда Эрвина Кнута
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.08.05 13:28
Оценка:
Здравствуйте, eao197, Вы писали:

E>Да так, интересный поворот просто. Для задачи, где требуется контейнер с упорядочением по разным полям делать, применять ADO.NET.


А что не так?
... << RSDN@Home 1.2.0 alpha rev. 599>>
AVK Blog
Re[29]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.08.05 13:31
Оценка: -1
Здравствуйте, AndrewVK, Вы писали:

E>>Да так, интересный поворот просто. Для задачи, где требуется контейнер с упорядочением по разным полям делать, применять ADO.NET.


AVK>А что не так?


Не привычно.
Все же ADO.NET -- это для работы с БД.

Но я не возражаю -- возможно. Хотя, боюсь, будет больше кода, чем с boost::multi_index.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[26]: Стиль Дональда Эрвина Кнута
От: Павел Кузнецов  
Дата: 17.08.05 13:44
Оценка: -1
P.S.

>> E>Вот в C++ для этого можно boost::multi_index применить.


>> А в C# DataView.


> Это несколько другое. boost::multi_index -- контейнер, аналог map (Dictionary в C#), но со многими ключами. DataView -- компонент "легкой" базы данных. <...>


Посмотрел на последнее еще чуть поближе... Похоже, DataView/DataTable работают в терминах предустановленных типов данных, на которые придется "раскладывать" объекты своих типов, и, похоже, не позволяют задавать свои отношения порядка и т.п. В общем, если это так, то это не "несколько другое", а "совсем другое".
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[22]: Стиль Дональда Эрвина Кнута
От: _Obelisk_ Россия http://www.ibm.com
Дата: 17.08.05 13:44
Оценка: 7 (2) +2
Здравствуйте, VladD2, Вы писали:

VD>Вот и получается, что в итоге привчки математиков переходят на совершенно конкретные аспекты программирования и првносят в них совершенно не нужную сложность.


Если бы программисты не забывали совсем про математику, то сложностей никаких бы не возникало.



Душа обязана трудиться! (с) Н.Заболоцкий.
Re[30]: Стиль Дональда Эрвина Кнута
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.08.05 13:49
Оценка: +1
Здравствуйте, eao197, Вы писали:

E>Не привычно.

E>Все же ADO.NET -- это для работы с БД.

Это для работы с данными, а не с БД (неймспейс называется System.Data, а не System.Database). Да и использование библиотеки в шарпе не сопряжено с таким же оверхедом, как в С++.

E>Но я не возражаю -- возможно. Хотя, боюсь, будет больше кода, чем с boost::multi_index.


В принципе есть еще BindingList<T>, но он, в текущей реализации, не поддерживает индексы. В любом случае никто не мешает нам написать на шарпе близкий аналог boost::multi_index. К языкам это имеет весьма опосредованное отношение.
... << RSDN@Home 1.2.0 alpha rev. 599>>
AVK Blog
Re[31]: Стиль Дональда Эрвина Кнута
От: Павел Кузнецов  
Дата: 17.08.05 13:55
Оценка: +1 -1
AndrewVK,

> В любом случае никто не мешает нам написать на шарпе близкий аналог boost::multi_index. К языкам это имеет весьма опосредованное отношение.


В данном случае значение будет иметь степень поддержки языком обобщенного программирования.
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[32]: Стиль Дональда Эрвина Кнута
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.08.05 14:11
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

>> В любом случае никто не мешает нам написать на шарпе близкий аналог boost::multi_index. К языкам это имеет весьма опосредованное отношение.


ПК>В данном случае значение будет иметь степень поддержки языком обобщенного программирования.


Да, но вот для обобщенных коллекций нетовских дженериков достаточно. А кодогенерации для такой коллекции не нужно.
... << RSDN@Home 1.2.0 alpha rev. 599>>
AVK Blog
Re[23]: Стиль Дональда Эрвина Кнута
От: xBlackCat Россия  
Дата: 17.08.05 14:18
Оценка: 51 (2)
Здравствуйте, _Obelisk_, Вы писали:

_O_>Если бы программисты не забывали совсем про математику, то сложностей никаких бы не возникало.


Можно сказать немного по-другому:

Если бы все программисты знали математику, то сложностей никаких бы не возникало.

... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Rojac &mdash; Rsdn Offline JAva Client
Анонсы и обсуждение здесь
Автор: xBlackCat
Дата: 08.02.10
Re[26]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.08.05 17:51
Оценка:
Здравствуйте, eao197, Вы писали:

E>Я не однозначно выразился в определении задачи. Есть map<X, Y>, нужно из него получить map2, где все X сохраняют свое значение, а все Y меняют.


А по какому принципу они это делают? Ну, зачем они меняют значения? Каков алгоритм?
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.08.05 17:51
Оценка:
Здравствуйте, eao197, Вы писали:

E>Я вот об этом http://en.wikipedia.org/wiki/Closure_(computer_science)


Еще раз повторюсь — это плохой термин. Он сильно перегружен и воспринимается по разному.

Есть функции высшего порядка. Это функция принимющая ссылку на другую функцию. Есть ссылка на метод (упрощенно — это то же самое что делегат или указатель на функцию). Есть лябда-функции. Они же (опять же упрощенно) анонимные методы. Вот этими терминами лучше и пользоваться. А клозюр просто забудь. Тут уже задолбались спорить по поводу значения этого слова.

E>А ты никогда суточных логов по 500Mb не видел?


Месячных... годовых... но чтобы суточных. Это если только милисекунды в лог писать.

В любом случае это отдельная проблеа которую можно решить не намного сложнее.
Логи обычно содержат строки, так что можно читать и изменять файл по строкам.

E>Ага. Когда комплекс состоит из пяти процессов, которые работают на двух машинах (это пока, планируется еще большая распределенность), то просто обхахатываешься.


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

E>Не верю. Имхо, все же становится.


Верю, не верю. Что переть против фактов то?

E>И понимать короткий код все же проще.


А вот это не факт.

E>А ведь большинство прикладных задач как раз строятся на основе использования готовых библиотек.


Тогда нужно сравнивать библиотеки, а не языки.

E>А вот пример ситуации, когда C++ может быть короче, чем Java или C#, или Ruby. Представь, что нужно прочитать оглавление каталога в контейнер чтобы затем уметь обращаться к этому контейнеру по трем индексам: по именам файлов, по дате их изменения и по имени их фладельца. Причем вставка или удаление элемента в/из контейнера должна приводить к автоматическому обновлению индексов.


E>Вот в C++ для этого можно boost::multi_index применить.


Опять таки С++ тут не причем. Это вопрос библиотеки. Выкинь буст и получишь более сложное решение.

Что касается решения на Шарпе, то твой буст тут отдыхает, так как в дотнет входит такой класс как DataTable. В нем встрена поддержка индексов и представлений. Вот наклепал на коленке за пару минут:
using System;
using System.Data;
using System.IO;

class Program
{
    static void Main()
    {
        string path = @"c:\WINDOWS";

        DirectoryInfo dir = new DirectoryInfo(path);
        DataTable files = new DataTable("files");
        
        files.Columns.Add("Name", typeof(string));
        files.Columns.Add("Date", typeof(DateTime));
        files.PrimaryKey = new DataColumn[] { files.Columns["Name"] };
        // Создаем представление для поиска по имени
        DataView nameView = new DataView(files);
        nameView.Sort = "Name"; // это создаст индекс по полю "Name".
        // Создаем представление для поиска по дате
        DataView dateView = new DataView(files);
        dateView.Sort = "Date"; // это создаст индекс по полю "Date".
        // возиться с владельцем просто влом. Это не так просто. 
        // Но с точки зрения задачи проблем нет. Нужно бобавить еще одно предствление.
        // Если нужны индексы по нескольким полям, то это тоже не проблема.

        foreach (FileInfo file in dir.GetFiles())
            files.Rows.Add(file.Name, file.LastWriteTime);

        DataRowView[] rows = nameView.FindRows("winnt256.bmp");
        if (rows.Length > 0)
            Console.WriteLine(rows[0]["Date"]);

        rows = dateView.FindRows(
            new FileInfo(Path.Combine(path, "winnt.bmp")).LastWriteTime);

        foreach (DataRowView row in rows)
            Console.WriteLine(row["Name"]);
    }
}


Можешь ради хохмы попробовать то же саоме на С++ слабать. А потом сравнить время которое затратил, объем кода и понятность этого самого кода.

Вот только это опять таки наличие довольно крутого класса. Тоже смое можно сделать и на МС++.

E>Вот, нашел, кто запустил сюда эту информацию: http://www.rsdn.ru/Forum/?mid=588736
Автор: Gaperton
Дата: 30.03.04

E>Кстати, я в этот миф верю.

Ну, верь, верь. Ради хохмы мой пример (выше) запустился со второго раза. Опечатался в имени типа второй колонки. Ради хохмы реализуй аналог на С++ и посчитай сколько раз будшь компилировать/запускать.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[27]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.08.05 18:06
Оценка:
Здравствуйте, VladD2, Вы писали:

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


E>>Я не однозначно выразился в определении задачи. Есть map<X, Y>, нужно из него получить map2, где все X сохраняют свое значение, а все Y меняют.


VD>А по какому принципу они это делают? Ну, зачем они меняют значения? Каков алгоритм?


Да проще все записать
my_map_t updated;
for( my_map_t::iterator it = source.begin(), it_end = source.end(); it != it_end; ++it )
    updated[ it->first ] = new_value;
    
source.swap( updated );


Просто в реальном коде используются гораздо более длинные имена, поэтому такой тупой for там будет занимать намного больше места.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[26]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.08.05 18:33
Оценка:
Здравствуйте, eao197, Вы писали:

E>Глянул DataView и DataTable и не понял: DataView без DataTable можно использовать?


Работающий пример: Re[24]: Стиль Дональда Эрвина Кнута
Автор: VladD2
Дата: 17.08.05


Причем, учти, что до этого я с ним ни разу не возился. Время которое ушло на его написание и отладку примерно 5 минут.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[32]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.08.05 18:33
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>В данном случае значение будет иметь степень поддержки языком обобщенного программирования.


Забавно, что тот же DataTable таки объодится банальным полиморфизмом.

Хотя создать аналог на дженериках тоже не проблема. Объем кода просто не малый, а смысла не так много.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[26]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.08.05 18:33
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Это несколько другое. boost::multi_index -- контейнер, аналог map (Dictionary в C#), но со многими ключами.


И что дикая проблема такой написать? Просто уже есть не хуже.

ПК> DataView -- компонент "легкой" базы данных.


1. TataTable, так как DataView всего лишь средство создания представлений для TataTable.
2. Это не облегченная БД, а компонент работы с данными. Я, например, с удовольствием читаю им данные из ХМЛ-я когда они там в соотвествующем формате лежат (а это часто встречается). Кто-то получает данные из БД. А кто-то вот использует чтобы получить индексы.

ПК> Ну и, естественно, все проверки типизации в случае последнего динамические.


И? Ты просто пошуметь сюда влез? Поднимись выше и посмотри с чего это все началось:

А вот пример ситуации, когда C++ может быть короче, чем Java или C#, или Ruby. Представь, что нужно прочитать оглавление каталога в контейнер чтобы затем уметь обращаться к этому контейнеру по трем индексам: по именам файлов, по дате их изменения и по имени их фладельца. Причем вставка или удаление элемента в/из контейнера должна приводить к автоматическому обновлению индексов.

Вот в C++ для этого можно boost::multi_index применить.


ПК> Ну и, опять-таки, это был пример "ситуации, когда C++ может быть короче, чем Java или C#, или Ruby".


Это очередной пример пыпытки нечесной игры. В простонародье — мошейничества.

ПК> Использование DataView в данном случае получится значительно длиннее (закрывая глаза на эффективность, выразительность и т.п.).


А ты приведи полный код и сравним. Что до эффективности, то это просто незнание реализации. TataTable хранит данные в типизированных массивах. Индексы тоже типизированные. Скорость их работы более чем приемлема для данных хранимых в памяти.

В общем, очередная демонстрация притягивания аргументов за уши исходя из фанатизма. Нет никаких приемуществ в данной задаче у С++ и быть не может.

Давай ради хохмы усложним задачу и предложим отобразить файлы имеющие дату совподающую с некоторым в некотором диалоге. Вот тогда оверхэд и посчитаем. Для дататэйбла это будет еще строчки 4-5 кода. На С++ поре грязи.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[27]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.08.05 18:33
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Посмотрел на последнее еще чуть поближе... Похоже, DataView/DataTable работают в терминах предустановленных типов данных, на которые придется "раскладывать" объекты своих типов, и, похоже, не позволяют задавать свои отношения порядка и т.п. В общем, если это так, то это не "несколько другое", а "совсем другое".


Re[24]: Стиль Дональда Эрвина Кнута
Автор: VladD2
Дата: 17.08.05


ЗЫ

Особо спешит серьезность с которой ты говоришь все это.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[28]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.08.05 18:48
Оценка:
Здравствуйте, eao197, Вы писали:

E>Да проще все записать

E>
E>my_map_t updated;
E>for( my_map_t::iterator it = source.begin(), it_end = source.end(); it != it_end; ++it )
E>    updated[ it->first ] = new_value;
    
E>source.swap( updated );
E>


Т.е. просто забить одним значением? Неужели это может быть нужно?

Ну, да все равно не ясно зачем здесь функциональный подход.
Вот как бы это было на Шарпе:
string[] keys = new string[map.Count];
map.Keys.CopyTo(keys, 0);

foreach (string key in keys)
    map[key] = 123;

причем:
string[] keys = new string[map.Count];
map.Keys.CopyTo(keys, 0);

нужно только из-за того, что стандартные коллекции дотнета в целях уменьшения ошибок запрещают модификацию коллекций во время итерации по ней.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.08.05 19:06
Оценка: +1
Здравствуйте, VladD2, Вы писали:

E>>Ага. Когда комплекс состоит из пяти процессов, которые работают на двух машинах (это пока, планируется еще большая распределенность), то просто обхахатываешься.


VD>Ну, да при этом отладчик уже не понадбится. Все равно работать не будет.


Ну на разскажи это нашим дежурным операторам. А то мужики и не знают поди.

E>>А вот пример ситуации, когда C++ может быть короче, чем Java или C#, или Ruby. Представь, что нужно прочитать оглавление каталога в контейнер чтобы затем уметь обращаться к этому контейнеру по трем индексам: по именам файлов, по дате их изменения и по имени их фладельца. Причем вставка или удаление элемента в/из контейнера должна приводить к автоматическому обновлению индексов.


E>>Вот в C++ для этого можно boost::multi_index применить.


VD>Опять таки С++ тут не причем. Это вопрос библиотеки. Выкинь буст и получишь более сложное решение.


Выкинь .NET Framework и получишь ли ты решение вообще?

<...пример поскипан...>
VD>Можешь ради хохмы попробовать то же саоме на С++ слабать. А потом сравнить время которое затратил, объем кода и понятность этого самого кода.

VD>Вот только это опять таки наличие довольно крутого класса. Тоже смое можно сделать и на МС++.


За пример спасибо. Как только дойдут руки до boost.1.33, так пришлю пример на C++.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[25]: Стиль Дональда Эрвина Кнута
От: Павел Кузнецов  
Дата: 17.08.05 19:18
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Что касается решения на Шарпе, то твой буст тут отдыхает, так как в дотнет входит такой класс как DataTable. В нем встрена поддержка индексов и представлений. Вот наклепал на коленке за пару минут:

VD>
VD>        files.Columns.Add("Name", typeof(string));
VD>


А так можно?
files.Columns.Add("my data", typeof(MyData));

И чтобы по этой колонке искать можно было?
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[25]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 17.08.05 23:38
Оценка: 84 (4) +1
Здравствуйте, VladD2, Вы писали:

VD>Что касается решения на Шарпе, то твой буст тут отдыхает, так как в дотнет входит такой класс как DataTable. В нем встрена поддержка индексов и представлений. Вот наклепал на коленке за пару минут:

VD>
VD>using System;
VD>using System.Data;
VD>using System.IO;

VD>class Program
VD>{
VD>    static void Main()
VD>    {
VD>        string path = @"c:\WINDOWS";

VD>        DirectoryInfo dir = new DirectoryInfo(path);
VD>        DataTable files = new DataTable("files");
        
VD>        files.Columns.Add("Name", typeof(string));
VD>        files.Columns.Add("Date", typeof(DateTime));
VD>        files.PrimaryKey = new DataColumn[] { files.Columns["Name"] };
VD>        // Создаем представление для поиска по имени
VD>        DataView nameView = new DataView(files);
VD>        nameView.Sort = "Name"; // это создаст индекс по полю "Name".
VD>        // Создаем представление для поиска по дате
VD>        DataView dateView = new DataView(files);
VD>        dateView.Sort = "Date"; // это создаст индекс по полю "Date".
VD>        // возиться с владельцем просто влом. Это не так просто. 
VD>        // Но с точки зрения задачи проблем нет. Нужно бобавить еще одно предствление.
VD>        // Если нужны индексы по нескольким полям, то это тоже не проблема.

VD>        foreach (FileInfo file in dir.GetFiles())
VD>            files.Rows.Add(file.Name, file.LastWriteTime);

VD>        DataRowView[] rows = nameView.FindRows("winnt256.bmp");
VD>        if (rows.Length > 0)
VD>            Console.WriteLine(rows[0]["Date"]);

VD>        rows = dateView.FindRows(
VD>            new FileInfo(Path.Combine(path, "winnt.bmp")).LastWriteTime);

VD>        foreach (DataRowView row in rows)
VD>            Console.WriteLine(row["Name"]);
VD>    }
VD>}
VD>


VD>Можешь ради хохмы попробовать то же саоме на С++ слабать. А потом сравнить время которое затратил, объем кода и понятность этого самого кода.


Алаверды:
#include <boost/filesystem/operations.hpp>
#include <boost/filesystem/path.hpp>

#include <boost/multi_index_container.hpp>
#include <boost/multi_index/mem_fun.hpp>
#include <boost/multi_index/ordered_index.hpp>

#include <iostream>

using namespace boost::filesystem;
using namespace boost::multi_index;
using boost::multi_index_container;

class    directory_item
    {
    private :
        std::string    name_;
        std::time_t    mtime_;
        boost::intmax_t size_;

    public :
        directory_item()
            :  mtime_( 0 ), size_( 0 )
            {}
        directory_item(
            const std::string & name,
            const std::time_t & mtime,
            boost::intmax_t size )
            :  name_( name ), mtime_( mtime ), size_( size )
            {}

        std::string name() const { return name_; }
        std::time_t mtime() const { return mtime_; }
        boost::intmax_t size() const { return size_; }
    };

std::ostream &
operator<<( std::ostream & o, const directory_item & item )
    {
        std::time_t t = item.mtime();

        return ( o << item.name() << ", "
            << std::string( std::ctime( &t ) ).substr( 0, 24 )
            << ", " << item.size() << std::endl );
    }

struct name {};
struct mtime {};
struct size {};

typedef multi_index_container<
                directory_item,
                indexed_by<
                        ordered_unique<
                                tag< name >,
                                const_mem_fun<
                                        directory_item, std::string, directory_item::name > >,
                        ordered_non_unique< 
                                tag< mtime >,
                                const_mem_fun<
                                        directory_item, std::time_t, directory_item::mtime > >,
                        ordered_non_unique<
                                tag< size >,
                                const_mem_fun<
                                        directory_item, boost::intmax_t, directory_item::size > >
                >
        >
        directory_container;

template< typename Tag, typename MultiIndexContainer >
void print_out_by(
    const MultiIndexContainer& s )
    {
        const typename index< MultiIndexContainer, Tag >::type& i = get< Tag >( s );

        typedef typename MultiIndexContainer::value_type value_type;

        std::copy(
                i.begin(), i.end(),
                std::ostream_iterator< value_type >( std::cout ) );
    }


int main( int argc, char* argv[] )
    {
        path full_path( initial_path() );

        if ( argc > 1 )
            full_path = system_complete( path( argv[1], native ) );
        else
            {
                std::cout << "\nusage:   simple_ls [path]" << std::endl;
                return 1;
            }

        if ( !exists( full_path ) )
            {
                std::cout << "\nNot found: " << full_path.native_file_string() << std::endl;
                return 1;
            }

        if ( is_directory( full_path ) )
            {
                directory_container result;

                directory_iterator end_iter;
                for ( directory_iterator dir_itr( full_path );
                        dir_itr != end_iter;
                        ++dir_itr )
                    {
                        try
                            {
                                bool directory = is_directory( *dir_itr );

                                result.insert(
                                        directory_item(
                                                dir_itr->leaf() + ( directory ? "/" : "" ),
                                                last_write_time( *dir_itr ),
                                                is_directory( *dir_itr ) ? 0 : file_size( *dir_itr ) ) );
 
                            }
                        catch ( const std::exception & ex )
                            {
                                std::cerr << dir_itr->leaf() << " " << ex.what() << std::endl;
                            }
                    }

                std::cout << "result.size: " << result.size() << std::endl;
                std::cout << "\nordered by name:" << std::endl;
                print_out_by< name >( result );

                std::cout << "\nordered by modification time:" << std::endl;
                print_out_by< mtime >( result );

                std::cout << "\nordered by size:" << std::endl;
                print_out_by< size >( result );
            }
    }


Жирным выделен код, который непосредственно относится к работе с контейнером.
Класс directory_item написан так же мной. Все остальное безбожно утянуто из примеров Boost::MultiIndex и Boost::Filesystem.

Проектный файл (с Boost.Build разбираться было в лом, поэтому использовал свою приблуду):
require 'mxx_ru/cpp'

Mxx_ru::setup_target(
    Mxx_ru::Cpp::Exe_target.new( "simple_ls.rb" ) do

        rtl_mode Mxx_ru::Cpp::RTL_SHARED
        threading_mode Mxx_ru::Cpp::THREADING_MULTI
        runtime_mode Mxx_ru::Cpp::RUNTIME_RELEASE

        lib "boost_filesystem-vc71-mt-1_32.lib"

        target "simple_ls"

        cpp_source "simple_ls.cpp"

    end
)


Компилируется:
ruby simple_ls.rb


Запускается:
simple_ls <имя каталога>


Вот содержимое каталога на котором это все тестировалось:
-rw-rw-rw-   1 user     group       16384 Aug 18 02:12 .simple_ls.cpp.swp
-rw-rw-rw-   1 user     group         142 Aug 18 01:53 Jamfile.v2
-rw-rw-rw-   1 user     group          15 Aug 18 02:58 cerr.log
drwxrwxrwx   1 user     group           0 Aug 18 03:15 o
-rw-rw-rw-   1 user     group        3386 Aug 18 03:05 simple_ls.cpp
-rwxrwxrwx   1 user     group       28672 Aug 18 03:15 simple_ls.exe
-rw-rw-rw-   1 user     group         343 Aug 18 03:14 simple_ls.rb


И вот результат работы:
result.size: 7

ordered by name:
.simple_ls.cpp.swp, Thu Aug 18 02:12:26 2005, 16384
Jamfile.v2, Thu Aug 18 01:53:41 2005, 142
cerr.log, Thu Aug 18 02:58:26 2005, 15
o/, Thu Aug 18 03:15:19 2005, 0
simple_ls.cpp, Thu Aug 18 03:05:01 2005, 3386
simple_ls.exe, Thu Aug 18 03:15:20 2005, 28672
simple_ls.rb, Thu Aug 18 03:14:52 2005, 343

ordered by modification time:
Jamfile.v2, Thu Aug 18 01:53:41 2005, 142
.simple_ls.cpp.swp, Thu Aug 18 02:12:26 2005, 16384
cerr.log, Thu Aug 18 02:58:26 2005, 15
simple_ls.cpp, Thu Aug 18 03:05:01 2005, 3386
simple_ls.rb, Thu Aug 18 03:14:52 2005, 343
o/, Thu Aug 18 03:15:19 2005, 0
simple_ls.exe, Thu Aug 18 03:15:20 2005, 28672

ordered by size:
o/, Thu Aug 18 03:15:19 2005, 0
cerr.log, Thu Aug 18 02:58:26 2005, 15
Jamfile.v2, Thu Aug 18 01:53:41 2005, 142
simple_ls.rb, Thu Aug 18 03:14:52 2005, 343
simple_ls.cpp, Thu Aug 18 03:05:01 2005, 3386
.simple_ls.cpp.swp, Thu Aug 18 02:12:26 2005, 16384
simple_ls.exe, Thu Aug 18 03:15:20 2005, 28672


На все про все, включая исталляцию boost-1_32, компиляцию Boost.Filesystem, изучение документации, поиск и переработку примеров, написание моего кода и тестирование ушло около одного часа двадцати минут. Редактировал все в Vim-е. Документацию смотрел в Opera, куски кода из примеров boost-а воровал Far-ом. Компилировался по ходу дела раз 20-30, запускался -- раз 10-15. Прошу так же учесть, что до этого из Boost-а я использовал только Boost.Test, т.е., фактически, это моя первая реальная программа на Boost-е.




Сравнивать то, что получилось у тебя и у меня не берусь. Пусть другие сравнивают.

Лично мне кажется, что у меня получился вполне реюзабельный класс directory_container. У тебя же захардкоденное заполнение одного DataTable и одного DataView. При попытке применить это где-то еще все приведенные тобой действия придется повторять.

Кроме того, в класс directory_item можно легко добавить дополнительные поля, которые не должны участвовать в индексации, и directory_container от этого не изменится. Что придется делать в твоем подходе -- бог его знает. На вскидку кажется, что придется добавлять дополнительные столбцы. Но это как-то не по объекто-ориентированному получается.

Глядя на собственный код могу сказать, что мне кажется слишком тяжеловесной конструкция в typedef. Хотя писать ее было легко. И после знакомства с Boost.MultiIndex воспринимается она легко. Но вот для постороннего она может выглядеть жутковато.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[21]: Стиль Дональда Эрвина Кнута
От: ЯпонИц Россия www.yaponiz.com
Дата: 18.08.05 04:43
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Если посадили, то посадили. Но есть море народа который провобавл разные вещи.


К сожалению, это "море" слишком мало чтобы говорить:

Все те кто сегодня привык к IDE или там скажем Мультиэдиту, все они когда-то стояли перед выбором и скорее всего пробовали разные варианты.


А ещё есть такая вещь как время на "попробовать". Согласитесь, та же VS, имея небольшой порог вхождения, "подсаживает" на себя буквально за несколько минут, как раз "Hello World" напишешь.
Я не волшебник, я только учусь.
Posted by RSDN@HOME.
Re[26]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.08.05 08:40
Оценка:
Здравствуйте, eao197, Вы писали:

E>На все про все, включая исталляцию boost-1_32, компиляцию Boost.Filesystem, изучение документации, поиск и переработку примеров, написание моего кода и тестирование ушло около одного часа двадцати минут. Редактировал все в Vim-е. Документацию смотрел в Opera, куски кода из примеров boost-а воровал Far-ом. Компилировался по ходу дела раз 20-30, запускался -- раз 10-15. Прошу так же учесть, что до этого из Boost-а я использовал только Boost.Test, т.е., фактически, это моя первая реальная программа на Boost-е.


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

E>Сравнивать то, что получилось у тебя и у меня не берусь. Пусть другие сравнивают.


E>Лично мне кажется, что у меня получился вполне реюзабельный класс directory_container. У тебя же захардкоденное заполнение одного DataTable и одного DataView. При попытке применить это где-то еще все приведенные тобой действия придется повторять.


Это уже не важно. Передомной и не стояла задача написать повторно используемое решение. Я просто продемонстрировал способ решения.

Главное другое. Главное, что твои предположения о приемуществе С++ в данной задаче оказались неверным. Думаю ты не будешь спорить по этому поводу?

Толку же от такой пенисометрии не много, так как это опять сравнение библиотек. Причес со стороны С++ не стандартных (внешних). Не составит труда создать и более точный аналог Boost::MultiIndex. Просто в этом нет потребности, а без нее трахаться влом.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[26]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.08.05 08:40
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>А так можно?

ПК>
ПК>files.Columns.Add("my data", typeof(MyData));
ПК>

ПК>И чтобы по этой колонке искать можно было?

Да, хоть "Date & time". Это всего лишь строка которая ставится в соотвествие с индексом колонки.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[26]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.08.05 08:40
Оценка:
Здравствуйте, eao197, Вы писали:

VD>>Опять таки С++ тут не причем. Это вопрос библиотеки. Выкинь буст и получишь более сложное решение.


E>Выкинь .NET Framework и получишь ли ты решение вообще?


Буст библиотека внешня. К С++ отношения не имеет. Фрэймворк же часть рантайма.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.08.05 08:40
Оценка:
Здравствуйте, ЯпонИц, Вы писали:


ЯИ>К сожалению, это "море" слишком мало чтобы говорить:

ЯИ>

Все те кто сегодня привык к IDE или там скажем Мультиэдиту, все они когда-то стояли перед выбором и скорее всего пробовали разные варианты.


Более чем достаточно.

ЯИ>А ещё есть такая вещь как время на "попробовать". Согласитесь, та же VS, имея небольшой порог вхождения, "подсаживает" на себя буквально за несколько минут, как раз "Hello World" напишешь.


О том и речь. А вот первый трах с Емаксом очень часто заканчивается отказом от него. Лично у меня было и менно так. Причем я уже точно понимал, что он не хуже чем VS и т.п.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[27]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 18.08.05 08:57
Оценка: +1
Здравствуйте, VladD2, Вы писали:

E>>На все про все, включая исталляцию boost-1_32, компиляцию Boost.Filesystem, изучение документации, поиск и переработку примеров, написание моего кода и тестирование ушло около одного часа двадцати минут. Редактировал все в Vim-е. Документацию смотрел в Opera, куски кода из примеров boost-а воровал Far-ом. Компилировался по ходу дела раз 20-30, запускался -- раз 10-15. Прошу так же учесть, что до этого из Boost-а я использовал только Boost.Test, т.е., фактически, это моя первая реальная программа на Boost-е.


VD>Ну, что же учитывая, что код больше далеко не в двадцать раз уже можно сделать вывод о том, что трахался ты намного больше и к тому же это явно противоречит идеи о том, что в любом коде одинаковое количество ошибок.


<offtopic>
Тезис по поводу "трахания намного больше" нуждается в доказательстве. Тебе не кажется?
Я так понимаю, что здесь в обсуждениях к словам собеседника проявляется высокий уровень доверия. В противном случае разговаривать не о чем, т.к. нет никакого доверия твоим словам о том, что ты сделал свой пример за 5 минут.
</offtopic>

Кроме того я не понял вот этого: "явно противоречит идеи о том, что в любом коде одинаковое количество ошибок". Из чего именно следует такой вывод?

E>>Сравнивать то, что получилось у тебя и у меня не берусь. Пусть другие сравнивают.


E>>Лично мне кажется, что у меня получился вполне реюзабельный класс directory_container. У тебя же захардкоденное заполнение одного DataTable и одного DataView. При попытке применить это где-то еще все приведенные тобой действия придется повторять.


VD>Это уже не важно. Передомной и не стояла задача написать повторно используемое решение. Я просто продемонстрировал способ решения.


Я тоже, но при этом получил реюзабильное решение. За просто так.
Имхо, это имеет практическую ценность.

VD>Главное другое. Главное, что твои предположения о приемуществе С++ в данной задаче оказались неверным. Думаю ты не будешь спорить по этому поводу?


Я же сказал, что не мне оценивать. Т.к. программы получились ну совершенно разные.

VD>Толку же от такой пенисометрии не много, так как это опять сравнение библиотек. Причес со стороны С++ не стандартных (внешних). Не составит труда создать и более точный аналог Boost::MultiIndex. Просто в этом нет потребности, а без нее трахаться влом.


Использовать DataView тебе не в лом, потому что он написан.
Использовать Boost::MuitiIndex мне так же не в лом, потому, что он написан.

Разсуждения о стандартных/нестандартных библиотеках идут лесом. Т.к. библиотека есть, у нее нормальная лицензия, нормальная поддержка большого количества платформ и на моем компиляторе с ней нет никаких проблем. Поэтому я не вижу _никаких_ препятствий к ее использованию.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[27]: Стиль Дональда Эрвина Кнута
От: Cyberax Марс  
Дата: 18.08.05 11:01
Оценка: +2
VladD2 wrote:

> E>Выкинь .NET Framework и получишь ли ты решение вообще?

> Буст библиотека внешня. К С++ отношения не имеет. Фрэймворк же часть
> рантайма.

Что такое "C++"? Если язык, опрделенный станартом ISO/IEC, то тогда что
будет, если в .NET использовать ТОЛЬКО стандартизованую часть Framework'а?

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[27]: Стиль Дональда Эрвина Кнута
От: adontz Грузия http://adontz.wordpress.com/
Дата: 18.08.05 11:35
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Буст библиотека внешня.


А у Си++ все бибилотеки внешние. Да и не так уж неотделим C# от рантайма. Project\Properties\Configuration Properties\Advanced\Do not Use Mscorlib
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[27]: Стиль Дональда Эрвина Кнута
От: Павел Кузнецов  
Дата: 18.08.05 12:11
Оценка:
VladD2,

> VD>>Опять таки С++ тут не причем. Это вопрос библиотеки. Выкинь буст и получишь более сложное решение.

>
> E>Выкинь .NET Framework и получишь ли ты решение вообще?
>
> Буст библиотека внешня. К С++ отношения не имеет. Фрэймворк же часть рантайма.

И, скажем, в Моно присутствует в том же объеме?..
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[27]: Стиль Дональда Эрвина Кнута
От: Павел Кузнецов  
Дата: 18.08.05 12:15
Оценка: +1 -1
VladD2,

> ПК>А так можно?

> ПК>
> ПК>files.Columns.Add("my data", typeof(MyData));
> ПК>

> ПК>И чтобы по этой колонке искать можно было?

> Да, хоть "Date & time". Это всего лишь строка которая ставится в соотвествие с индексом колонки.


Я не о названии, а о типе данных. Здесь говорится буквально следующее:

The DataType property supports the base .NET Framework data types shown below:
Boolean
Byte
Char
DateTime
Decimal
Double
Int16
Int32
Int64
SByte
Single
String
TimeSpan
UInt16
UInt32
UInt64

Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[28]: Стиль Дональда Эрвина Кнута
От: Павел Кузнецов  
Дата: 18.08.05 13:12
Оценка: :)
P.S.

>> ПК>А так можно?

>> ПК>
>> ПК>files.Columns.Add("my data", typeof(MyData));
>> ПК>

>> ПК>И чтобы по этой колонке искать можно было?

>> Да, хоть "Date & time". Это всего лишь строка которая ставится в соотвествие с индексом колонки.


> Я не о названии, а о типе данных. <...>


Точнее, запихать-то туда объект своего типа данных получается. Главное, можно ли отсортировать DataView по колонке своего типа данных, и по своему условию сортировки?
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[28]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.08.05 17:26
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Что такое "C++"? Если язык, опрделенный станартом ISO/IEC, то тогда что

C>будет, если в .NET использовать ТОЛЬКО стандартизованую часть Framework'а?

Рассуждения о сферокониках меня не интересуют.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[28]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.08.05 17:26
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>И, скажем, в Моно присутствует в том же объеме?..


ДатаТэйбл? Да.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[29]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.08.05 17:26
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Точнее, запихать-то туда объект своего типа данных получается. Главное, можно ли отсортировать DataView по колонке своего типа данных, и по своему условию сортировки?


А почему нет? Реализуй IComparable (или IConvertible с приведением к другому типу) и вперед.


ЗЫ

Я вообще с тебя порожаюсь периодически. Такое ощущение, что ты дотнет все за неработающую игрушку держишь. Удивляшся, что что-то работает.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[28]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.08.05 17:26
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Я не о названии, а о типе данных.


using System;
using System.Data;
using System.IO;

class Program
{
    class A : IComparable
    {
        public A(int i) { I = i; }
        public int I;

        #region IComparable Members

        public int CompareTo(object obj)
        {
            if (obj == null)
                return 1;

            return ((A)obj).I.CompareTo(I);
        }

        #endregion
}

    static void Main()
    {

        string path = @"c:\WINDOWS";

        DirectoryInfo dir = new DirectoryInfo(path);
        DataTable files = new DataTable("files");

        files.Columns.Add("Name", typeof(string));
        files.Columns.Add("Date", typeof(DateTime));
        files.Columns.Add("A", typeof(A));
        files.PrimaryKey = new DataColumn[] { files.Columns["Name"] };
        // Создаем представление для поиска по имени
        DataView nameView = new DataView(files);
        nameView.Sort = "Name"; // это создаст индекс по полю "Name".
        // Создаем представление для поиска по дате
        DataView dateView = new DataView(files);
        dateView.Sort = "Date"; // это создаст индекс по полю "Date".

        DataView aView = new DataView(files);
        aView.Sort = "A";
        // это создаст индекс по полю "Date".
        // возиться с владельцем просто влом. Это не так просто. 
        // Но с точки зрения задачи проблем нет. Нужно бобавить еще одно предствление.
        // Если нужны индексы по нескольким полям, то это тоже не проблема.
        int i = 0;
        foreach (FileInfo file in dir.GetFiles())
            files.Rows.Add(file.Name, file.LastWriteTime, new A(i++));

        DataRowView[] rows = nameView.FindRows("winnt256.bmp");
        if (rows.Length > 0)
            Console.WriteLine(rows[0]["Date"]);

        rows = dateView.FindRows(
                new FileInfo(Path.Combine(path, "winnt.bmp")).LastWriteTime);

        foreach (DataRowView row in rows)
            Console.WriteLine(row["Name"]);

        Console.WriteLine("Find by A:");
        rows = aView.FindRows(new A(10));

        foreach (DataRowView row in rows)
            Console.WriteLine(row["Name"]);
    }
}
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[28]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.08.05 17:26
Оценка: :)
Здравствуйте, eao197, Вы писали:

E><offtopic>

E>Тезис по поводу "трахания намного больше" нуждается в доказательстве. Тебе не кажется?
E>Я так понимаю, что здесь в обсуждениях к словам собеседника проявляется высокий уровень доверия. В противном случае разговаривать не о чем, т.к. нет никакого доверия твоим словам о том, что ты сделал свой пример за 5 минут.
E></offtopic>

И? Если ты моим словам доверяшь, то поверь что действительно где-то 5 минут (ну, может 7... это не суть важно). И действительно заработало со второй попытки. Отладки небыло вообще. Ошибка была в том, что в строке:
        files.Columns.Add("Date", typeof(DateTime));

я опечатался и влепил DataView вместо DateTime. Получилось просто из спешки опечатался написав Data вместо Date и комплитом докомплитил с гореча. Первый же запуск выдал осмысленное исключение. После испрвления типа все сразу заработало.

Сравнивая с тоим расскзаом я и делаю вывод. Пять минут без траха против 20+ с трахом.

E>Кроме того я не понял вот этого: "явно противоречит идеи о том, что в любом коде одинаковое количество ошибок". Из чего именно следует такой вывод?


Сравни количество компиляций/запусков которое потребовалось и мне. Твой код больше максимум в два-три раза. А траха в 20. Один к одному как в твоих рассказах о Руби. Что собственно и должно быть.

VD>>Это уже не важно. Передомной и не стояла задача написать повторно используемое решение. Я просто продемонстрировал способ решения.


E>Я тоже, но при этом получил реюзабильное решение.


И? Молодец сделал лишнее.

E> За просто так.


Как сказать. Учитывая затраченые силы я бы так не сказал.

E>Имхо, это имеет практическую ценность.


А по-моему для данного примера это не важно.

VD>>Главное другое. Главное, что твои предположения о приемуществе С++ в данной задаче оказались неверным. Думаю ты не будешь спорить по этому поводу?


E>Я же сказал, что не мне оценивать. Т.к. программы получились ну совершенно разные.


Разные не разные. Но даже младенец заметит, что никакого превосходство у плюсов тут нет.

E>Использовать DataView тебе не в лом, потому что он написан.

E>Использовать Boost::MuitiIndex мне так же не в лом, потому, что он написан.

Ага. Вот только есть небольшая разница. Для того чтобы подключить Буст прийдется лезть в Интернет... качать его... распаковывать... настраивать пути... искать нужные инклюды. Мне же пришлось дописать ровно одру строку код:
using System.Data;


E>Разсуждения о стандартных/нестандартных библиотеках идут лесом.


Да нет. Не идут, так как лично ты несколько раз говорил, что мог бы использовать ххх из буста, но вот не привык и т.п. Это как раз и есть та самая разница.

ЗЫ

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

Можно конечно порссуждать об эффетивности, но думаю это уже будет очередное лукавство.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[29]: Стиль Дональда Эрвина Кнута
От: Павел Кузнецов  
Дата: 18.08.05 17:53
Оценка:
VladD2,

> ПК>Я не о названии, а о типе данных.

>
>
> <...>
>


Первая попытка, на работе, не удалась:

d:\users\pkuznetsov\test\csharpconsoleapplication\class1.cs(48,13): error CS1501: No overload for method 'Add' takes '3' arguments
c:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\system.data.dll: (Related file)

Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[29]: Стиль Дональда Эрвина Кнута
От: Павел Кузнецов  
Дата: 18.08.05 18:47
Оценка:
VladD2,

> ПК>Я не о названии, а о типе данных.

>
> <...>
>


Попробовал на более свежей версии .Net Framework. Заработало. В принципе, выглядит вполне приемлемо. Жаль только, что все проверки в динамике, и нужно возиться с несколькими объектами.
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[30]: Стиль Дональда Эрвина Кнута
От: Павел Кузнецов  
Дата: 18.08.05 19:09
Оценка:
P.S.

> Попробовал на более свежей версии .Net Framework. Заработало. В принципе, выглядит вполне приемлемо. Жаль только, что все проверки в динамике, и нужно возиться с несколькими объектами.


Еще один недостаток: порядок сортировки жестко связан с объектом.
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[29]: Стиль Дональда Эрвина Кнута
От: Павел Кузнецов  
Дата: 18.08.05 19:18
Оценка: 2 (2)
VladD2,

> И? Если ты моим словам доверяшь, то поверь что действительно где-то 5 минут (ну, может 7... это не суть важно). И действительно заработало со второй попытки. Отладки небыло вообще. Ошибка была в том, что в строке:

>
>         files.Columns.Add("Date", typeof(DateTime));
>

> я опечатался и влепил DataView вместо DateTime. Получилось просто из спешки опечатался написав Data вместо Date и комплитом докомплитил с гореча. Первый же запуск выдал осмысленное исключение. После испрвления типа все сразу заработало.
>
> Сравнивая с тоим расскзаом я и делаю вывод. Пять минут без траха против 20+ с трахом.

Это некорректное сравнение, т.к. ты шел по уже известной тебе дорожке, а eao197 прокладывал для себя новую.

Скажем, у меня в результате 10-15 минутных попыток сделать сортировку/поиск по своему типу не получилось. 10-15 минут у меня ушло на то, чтобы разобраться, как могли бы работать сортировка/поиск в случае такого интерфейса, как у DataColumn. Т.к. никакого места, где бы мог задаваться предикат не нашел (если его нет, то сие есть достаточно серьезный недостаток для некоторых случаев), решил, что нужно реализовать что-нибудь типа IComparable. Правда, прочитав спецификацию, я и не ожидал, что оно заработает, и, получив исключение:

Unhandled Exception: System.ArgumentException: Find finds a row based on a Sort order, and no Sort order is specified.

отвалил. Сейчас глянул, в чем было в том варианте, который у меня получился. Дело в похожей на описываемую тобой опечатке: вместо myDataView осталось dateView.

> Разные не разные. Но даже младенец заметит, что никакого превосходство у плюсов тут нет.


Есть, даже несколько. Самые существенные — проверки в compile-time и возможность задавать предикат для сравнения.

> В общем, обсуждать по-моему в данном ответвлении болше нечего.


В смысле преимущетства языка в плане написания аналогичного класса согласен, здесь оно у C++, если сравнивать с C# 2.0, не решающее, хотя и присутствует (например, без возможности параметризации шаблонов указателями на члены, придется предикаты задавать в динамике или выписывать немного больше кода).
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[29]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 18.08.05 19:23
Оценка: +2
Здравствуйте, VladD2, Вы писали:

E>>Кроме того я не понял вот этого: "явно противоречит идеи о том, что в любом коде одинаковое количество ошибок". Из чего именно следует такой вывод?


VD>Сравни количество компиляций/запусков которое потребовалось и мне. Твой код больше максимум в два-три раза. А траха в 20. Один к одному как в твоих рассказах о Руби. Что собственно и должно быть.


В моем случае количество компиляций/запусков ни о чем не говорит. Это стиль у меня такой. Я стараюсь компилироваться как только какой-нибудь фрагмент закончу. Даже если это будет функция из одной строки. И запускаюсь при первой же возможности. Даже если программа ничего не делает, просто убедится, что все стартует и завершается. Мне так удобнее работать. Я даже на Java так делал, хотя с теми IDE этап компиляции уже чистой формальностью был, сама IDE все ошибки подсвечивала. И с Ruby сейчас так же делаю.

Тут когда-то про Debug-Driven Programming говорили, когда программы на Smalltalk-е прямо в отладчике пишутся/тестируются/дописываются/тестируются... Вот такая частая компиляция и мелкие запуски у меня и есть аналог этого DDP. Может за счет этого у меня C++ программы редко глючат. И, может быть, поэтому часто высказываемое тобой мнение о том, что программы на C++ -- это сплошной глюкодром, меня не менее часто злит. Но я сам время от времени вижу C++ код, который проще выбросить, чем до ума довести. Прямое следствие сложности языка. Мне с этой сложностью помогают бороться частые тестовые запуски. Кому-то что-то еще. А кому-то вообще ничего не помогает

VD>В общем, обсуждать по-моему в данном ответвлении болше нечего.


С этим согласен. Обсуждение пора заканчивать. Хотя, имхо, каждый из нас остался при своем мнении.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[33]: Стиль Дональда Эрвина Кнута
От: Павел Кузнецов  
Дата: 19.08.05 04:30
Оценка:
AndrewVK,

>>> В любом случае никто не мешает нам написать на шарпе близкий аналог boost::multi_index. К языкам это имеет весьма опосредованное отношение.


> ПК>В данном случае значение будет иметь степень поддержки языком обобщенного программирования.


> Да, но вот для обобщенных коллекций нетовских дженериков достаточно. А кодогенерации для такой коллекции не нужно.


Для такого контейнера желательно наличие: 1) параметризации шаблонов указателями на члены; 2) аргументы шаблонов по умолчанию; 3) специализация шаблонов; 4) нелишней оказалась бы и латентная типизация.
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[31]: Стиль Дональда Эрвина Кнута
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.08.05 07:59
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Еще один недостаток: порядок сортировки жестко связан с объектом.


Мне интересно, ты что доказать хочешь? Есмли то, что DataView не годится для практического применения, то это не так, чему есть масса доказательств. Если то, что бустовский мультииндекс лучше, то это тоже не так, у DataView есть масса функционала, которого там нет. Прикинь, к примеру, во что обойдется реализация для него DataView.RowFilter.
... << RSDN@Home 1.2.0 alpha rev. 599>>
AVK Blog
Re[28]: Стиль Дональда Эрвина Кнута
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 19.08.05 08:21
Оценка:
Здравствуйте, eao197, Вы писали:

E>Разсуждения о стандартных/нестандартных библиотеках идут лесом. Т.к. библиотека есть, у нее нормальная лицензия, нормальная поддержка большого количества платформ и на моем компиляторе с ней нет никаких проблем. Поэтому я не вижу _никаких_ препятствий к ее использованию.


Ну тогда нет никаких препятствий использовать, к примеру, Wintellect.PowerCollections.MultiDictionary.
... << RSDN@Home 1.2.0 alpha rev. 599>>
AVK Blog
Re[29]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 19.08.05 08:46
Оценка:
Здравствуйте, AndrewVK, Вы писали:

E>>Разсуждения о стандартных/нестандартных библиотеках идут лесом. Т.к. библиотека есть, у нее нормальная лицензия, нормальная поддержка большого количества платформ и на моем компиляторе с ней нет никаких проблем. Поэтому я не вижу _никаких_ препятствий к ее использованию.


AVK>Ну тогда нет никаких препятствий использовать, к примеру, Wintellect.PowerCollections.MultiDictionary.


Конечно нет. А как это будет выглядеть тогда?

Вот в примере с DataView/DataTable мне не понравилась такая штука -- допустим, мне нужно помещать в контейнер с несколькими индексами объект конкретного типа (в моем примере это directory_item). При изменении значения объекта автоматически должны обновляться индексы. Так же как при добавлении/удалении объекта. В случае с boost.multi_index это так и есть. А вот в случае с DataView/DataTable мне приходится вручную извлекать отдельные поля из directory_item и помещать из в соответствующие столбцы. Тоже самое мне придется делать и при изменении объекта.

В случае с Wintellect.PowerCollections.MultiDictionary будет такая же ручная разборка объекта на ключи индексов?
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[34]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.08.05 10:03
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Для такого контейнера желательно наличие: 1) параметризации шаблонов указателями на члены; 2) аргументы шаблонов по умолчанию; 3) специализация шаблонов; 4) нелишней оказалась бы и латентная типизация.


Ты просто привык жить в рамках концепций С++. Если от них отойти, то становится понятным, что все можно сделать и по другому. Дженерики обеспечат статическую типизацию, а остальное можно решить средствами ООП.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[30]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.08.05 10:03
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Это некорректное сравнение, т.к. ты шел по уже известной тебе дорожке, а eao197 прокладывал для себя новую.


Хм. С чего ты это взял? Чесно говоря до этого момента с DataView я ни разу не работал. Я просто помнил, что DataTable имеет функционал по работе с индексами, и помнил, что он реализован не явно. Кстати, чтобы не возиться с хэлпом я банально залез в DataTable Рефлектором, нашел в не этом классе методы с именем ХххИндексХхх и путем просмотра мест откуда они испоьзуются вышел на DataView. Далее заглянул в хэлп и увидил примитивный пример. На все про все ушло две-три минуты. Это было самое большое время которо я затратил. Остальное тупое кодирование.

ПК>Скажем, у меня в результате 10-15 минутных попыток сделать сортировку/поиск по своему типу не получилось. 10-15 минут у меня ушло на то, чтобы разобраться, как могли бы работать сортировка/поиск в случае такого интерфейса, как у DataColumn.


А ты не думал, что дело может быть просто в небольшом опыте общения с дотнетом? Без опыта ты и с классом File мог бы провозиться 15 минут. Просто чтение дотнетного форума позволило бы искать то что нужно (даже если ты специально на вопросе не останавливался).

ПК> Т.к. никакого места, где бы мог задаваться предикат не нашел (если его нет, то сие есть достаточно серьезный недостаток для некоторых случаев),


Предикат чего?

ПК>отвалил. Сейчас глянул, в чем было в том варианте, который у меня получился. Дело в похожей на описываемую тобой опечатке: вместо myDataView осталось dateView.


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

>> Разные не разные. Но даже младенец заметит, что никакого превосходство у плюсов тут нет.


ПК>Есть, даже несколько. Самые существенные — проверки в compile-time и возможность задавать предикат для сравнения.


Превосходства нет. При поиске так же можно задавать выражения. Причем динамически. Что до типизации. Конечно это привосходство. Но учитывая намного большую гибкость самого DataTable думаю, что его можно в рассчет не брать. Попробуй, например, дописать код сериализации содержимого в ХМЛ или бинарный формат. Для DataTable — это убдет пара строк. Ну, или отфильтровать строки по некоторому критерию (опять же 1-2 строки).

>> В общем, обсуждать по-моему в данном ответвлении болше нечего.


ПК>В смысле преимущетства языка в плане написания аналогичного класса согласен, здесь оно у C++, если сравнивать с C# 2.0, не решающее,


Ладно скромничать. Тут его просто нет.

ПК> хотя и присутствует (например, без возможности параметризации шаблонов указателями на члены, придется предикаты задавать в динамике или выписывать немного больше кода).


Почему кода должно быт больше я не понял. Что до ссылок на члены, то можно пережитьи без этого.

А потом не забывай, что в действительно отвественных, тонких местах в дотнете всегда можно воспользоваться такими радикальными методами как кодогенарация во время исполнения (обычно с кэшированием результата). При этом динамические решения становятся даже быстрей многих статических, так как по сути являются специально сгенерированным под задачу кодом.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[30]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.08.05 10:03
Оценка:
Здравствуйте, eao197, Вы писали:

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


E>>>Кроме того я не понял вот этого: "явно противоречит идеи о том, что в любом коде одинаковое количество ошибок". Из чего именно следует такой вывод?


VD>>Сравни количество компиляций/запусков которое потребовалось и мне. Твой код больше максимум в два-три раза. А траха в 20. Один к одному как в твоих рассказах о Руби. Что собственно и должно быть.


E>В моем случае количество компиляций/запусков ни о чем не говорит. Это стиль у меня такой.


А. Ну, я тебя обудрю. Я когда на плюсах пишу, то у меня стиль такой же. Причем на плюсах я в 10 раз осторожнее.

E> Я стараюсь компилироваться как только какой-нибудь фрагмент закончу.


Дык, я тоже. Причем как на Шарпе так и на плюсах. Разница только в том, что для Шарпа куски получаются компактнее и меньше верятность получить бяку. Так что кустки могут содержать больше полезной нагрузки и стадий получается меньше.

E> Даже если это будет функция из одной строки. И запускаюсь при первой же возможности. Даже если программа ничего не делает, просто убедится, что все стартует и завершается. Мне так удобнее работать. Я даже на Java так делал, хотя с теми IDE этап компиляции уже чистой формальностью был, сама IDE все ошибки подсвечивала. И с Ruby сейчас так же делаю.


О том и речь. Это и называется траха меньше. Зачем что-то запускать если ты и так уверен, что проблем нет?

E>Тут когда-то про Debug-Driven Programming говорили, когда программы на Smalltalk-е прямо в отладчике пишутся/тестируются/дописываются/тестируются... Вот такая частая компиляция и мелкие запуски у меня и есть аналог этого DDP.


Смолток просто не имеет стадии компиляции. В нем объекты добавляются динамически, так что аналогия не очень хорошая. Но поверь, я тоже стараюсь стестироваться при написании более менее тестируемого участка кода. Иногда это действительно метод в пару строк. Иногда в экран. С++ для такого стиля подходит как раз очень плохо. И компиляция дико медленная, и стадии нужны уж очень мелкие, так как напортачить можно в значительно большем количестве мест.

E> Может за счет этого у меня C++ программы редко глючат. И, может быть, поэтому часто высказываемое тобой мнение о том, что программы на C++ -- это сплошной глюкодром, меня не менее часто злит. Но я сам время от времени вижу C++ код, который проще выбросить, чем до ума довести. Прямое следствие сложности языка. Мне с этой сложностью помогают бороться частые тестовые запуски. Кому-то что-то еще. А кому-то вообще ничего не помогает


Все так. Только плюсы здесь скорее обуза чем подспорье. На других языках твой стиль намного поще применять. Я когда перешел с С на С++ первое время испытывал дикий дискомфорт. Вроде возможности все теже (веренее их даже бльше), но вот так же интарактивно отлаживаться как я это делал на QuickC я уже не мог. А ведь казалось бы и среда круче, и отладчик... Потом привык и перестал обращать на это внимание. Но когда взял в руки VB5, то снова ощутил этот кайф почти интерактивного написания кода. В дотнете, кстати, очень хотелось бы поиметь модификацию кода на лету как это было в VB6 (в С++ оно есть на на больших шаблонных проектах просто не работает). Вроде как эту фичу встраивают в дотнет, так что вообще лафа (вот только в бэтах глючит оно сильно).

VD>>В общем, обсуждать по-моему в данном ответвлении болше нечего.


E>С этим согласен. Обсуждение пора заканчивать. Хотя, имхо, каждый из нас остался при своем мнении.


Ну, я так и не понял как при всех этих демонстрациях ты мог остаться при том же мнении.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Стиль Дональда Эрвина Кнута
От: Maxim S. Shatskih Россия  
Дата: 19.08.05 10:06
Оценка:
SC>я был (и с тех пор нахожусь) в шоке от
SC>"весьма необычного" стиля программирования
SC>Великого Мастера.

Такой стиль у практически всего GPLного опен-сорсного софта.
Занимайтесь LoveCraftом, а не WarCraftом!
Re[31]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 19.08.05 10:16
Оценка:
Здравствуйте, VladD2, Вы писали:

E>> Даже если это будет функция из одной строки. И запускаюсь при первой же возможности. Даже если программа ничего не делает, просто убедится, что все стартует и завершается. Мне так удобнее работать. Я даже на Java так делал, хотя с теми IDE этап компиляции уже чистой формальностью был, сама IDE все ошибки подсвечивала. И с Ruby сейчас так же делаю.


VD>О том и речь. Это и называется траха меньше. Зачем что-то запускать если ты и так уверен, что проблем нет?


Хорошая подпись стоит в сообщениях Lorenzo_LAMAS

Of course, the code must be complete enough to compile and link.


Продолжая логическую мысль можно сказать, что пока программа при запуске не выдала корректные результаты, нельзя быть уверенным в том, что проблем нет.
Ну а если подвести все к нашей программистской реальности, то даже когда программа при запуске выдала корректные результаты, все равно нельзя быть уверенным в том, что проблем нет.
Как кто-то умный сказал: "Тесты могут показать наличие ошибки, но не могут доказать обратного"

VD>>>В общем, обсуждать по-моему в данном ответвлении болше нечего.


E>>С этим согласен. Обсуждение пора заканчивать. Хотя, имхо, каждый из нас остался при своем мнении.


VD>Ну, я так и не понял как при всех этих демонстрациях ты мог остаться при том же мнении.


Вот поэтому: Re[29]: Стиль Дональда Эрвина Кнута
Автор: eao197
Дата: 19.08.05
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Стиль Дональда Эрвина Кнута
От: Quintanar Россия  
Дата: 19.08.05 10:22
Оценка:
Здравствуйте, Maxim S. Shatskih, Вы писали:

SC>>я был (и с тех пор нахожусь) в шоке от

SC>>"весьма необычного" стиля программирования
SC>>Великого Мастера.

MSS>Такой стиль у практически всего GPLного опен-сорсного софта.


Да ладно.
Re[29]: Стиль Дональда Эрвина Кнута
От: EvilChild Ниоткуда  
Дата: 19.08.05 11:41
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ага. Вот только есть небольшая разница. Для того чтобы подключить Буст прийдется лезть в Интернет... качать его... распаковывать... настраивать пути... искать нужные инклюды.


Странный аргумент.
А .NET Framework не нужно устанавливать? Или быть может он весит меньше boost'а и быстрее выкачивается и устанавливается?
Re[32]: Стиль Дональда Эрвина Кнута
От: Павел Кузнецов  
Дата: 19.08.05 11:42
Оценка:
AndrewVK,

> Если то, что бустовский мультииндекс лучше, то это тоже не так, у DataView есть масса функционала, которого там нет. Прикинь, к примеру, во что обойдется реализация для него DataView.RowFilter.


В сравнительно тривиальный адаптер. У нас подобные используются с произвольными диапазонами (заданных парой итераторов).
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[35]: Стиль Дональда Эрвина Кнута
От: Павел Кузнецов  
Дата: 19.08.05 11:45
Оценка: 2 (2) +1
VladD2,

> ПК>Для такого контейнера желательно наличие: 1) параметризации шаблонов указателями на члены; 2) аргументы шаблонов по умолчанию; 3) специализация шаблонов; 4) нелишней оказалась бы и латентная типизация.


> <...> Дженерики обеспечат статическую типизацию, а остальное можно решить средствами ООП.


multi_index_container<
     directory_item,
     indexed_by<
         ordered_unique<
             tag< name >,
             const_mem_fun< directory_item, std::string, &directory_item::name >
             >,
         ordered_non_unique<
             tag< mtime >,
             const_mem_fun< directory_item, std::time_t, &directory_item::mtime >
             >,
         ordered_non_unique<
             tag< size >,
             const_mem_fun< directory_item, boost::intmax_t, &directory_item::size >
             >
         >
     >
     directory_container;

В этом случае во время компиляции выполняются следующие проверки:
1) в контейнер помещаются только элементы соответствующего типа (multi_index_container< directory_item, ... >);
2) индексы заданы для свойств элементов (const_mem_fun< directory_item, std::string, &directory_item::name >);
3) искать элементы в этом контейнере можно только по ключам, для которых заданы соответствующие индексы, и которые, соответственно, являются свойствами элементов.

Наиболее близкий вариант, который я вижу, на generics может выглядеть примерно так:
MultiIndexContainer<DirectoryItem> directoryContainer;
...
Index<DirectoryItem, String> nameView = new Index<DirectoryItem, String>(directoryContainer, delegate String NameFromItem(DirectoryItem));
...
Index<DirectoryItem, DateTime> dateView = new Index<DirectoryItem, DateTime>(directoryContainer, delegate DateTime DateTimeFromItem(DirectoryItem));
...


Попытки сделать именно контейнер (коллекцию), т.е. один класс вместо россыпи классов, насколько я вижу, приведут как минимум к потере пункта 3.
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[31]: Стиль Дональда Эрвина Кнута
От: Павел Кузнецов  
Дата: 19.08.05 11:58
Оценка: +1
VladD2,

> ПК>Это некорректное сравнение, т.к. ты шел по уже известной тебе дорожке, а eao197 прокладывал для себя новую.

>
> Хм. С чего ты это взял? <...>
>
> ПК>Скажем, у меня в результате 10-15 минутных попыток сделать сортировку/поиск по своему типу не получилось. <...>
>
> А ты не думал, что дело может быть просто в небольшом опыте общения с дотнетом? <...>

Вот это и была для eao197 "новая дорожка": он с Boost раньше, как уже сказал, не работал.

> ПК> Т.к. никакого места, где бы мог задаваться предикат не нашел (если его нет, то сие есть достаточно серьезный недостаток для некоторых случаев),

>
> Предикат чего?

Предикат, задающий порядок.

> ПК>Есть, даже несколько. Самые существенные — проверки в compile-time и возможность задавать предикат для сравнения.

>
> Превосходства нет. <...> Что до типизации. Конечно это привосходство.

ЧТД.

> Попробуй, например, дописать код сериализации содержимого в ХМЛ или бинарный формат.


http://boost.org/libs/multi_index/doc/advanced_topics.html#serialization При этом, в отличие от интрузивной сериализации .Net, поддерживается возможность реализации форматов, не предусмотренных авторами классов.

> отфильтровать строки по некоторому критерию (опять же 1-2 строки).


На C++ для этого обычно используются более общие средства, работающие не только с конкретным классом. В частности, мы используем адапторы над диапазонами (пара итераторов). Подобные же адапторы подойдут и здесь, еще и повторно используемые для любых диапазонов/контейнеров, а не только для multi_index (пара строк). Если хочется получить копию отфильтрованного содержимого, можно воспользоваться copy_if -- те же две строки.

>>> В общем, обсуждать по-моему в данном ответвлении болше нечего.

>
> ПК>В смысле преимущетства языка в плане написания аналогичного класса согласен, здесь оно у C++, если сравнивать с C# 2.0, не решающее,
>
> Ладно скромничать. Тут его просто нет.

Попробуй сделать на C# интерфейс коллекции (т.е. один класс), обеспечивающий проверки времени компиляции, перечисленные в этом
Автор: Павел Кузнецов
Дата: 19.08.05
сообщении.

> ПК> хотя и присутствует (например, без возможности параметризации шаблонов указателями на члены, придется предикаты задавать в динамике или выписывать немного больше кода).

>
> Почему кода должно быт больше я не понял.

Ну, напиши пример объявления коллекции, аналогичного в плане проверок времени компиляции этому
multi_index_container<
      directory_item,
      indexed_by<
          ordered_unique<
              tag< name >,
              const_mem_fun< directory_item, std::string, &directory_item::name >
              >,
          ordered_non_unique<
              tag< mtime >,
              const_mem_fun< directory_item, std::time_t, &directory_item::mtime >
              >,
          ordered_non_unique<
              tag< size >,
              const_mem_fun< directory_item, boost::intmax_t, &directory_item::size >
              >
          >
      >
      directory_container;
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[29]: Стиль Дональда Эрвина Кнута
От: Павел Кузнецов  
Дата: 19.08.05 12:02
Оценка:
AndrewVK,

> E> библиотека есть, у нее нормальная лицензия, нормальная поддержка большого количества платформ и на моем компиляторе с ней нет никаких проблем. Поэтому я не вижу _никаких_ препятствий к ее использованию.


> Ну тогда нет никаких препятствий использовать, к примеру, Wintellect.PowerCollections.MultiDictionary.


Препятствий, очевидно, никаких. Только он не делает того, что нужно. MultiDictionary<TKey,TValue>, как понятно даже из параметров типа, не позволяет искать по нескольким ключам. Если посмотреть в документацию, то можно увидеть, что это аналог std::multimap, а не boost::multi_index_container.
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[32]: Стиль Дональда Эрвина Кнута
От: Павел Кузнецов  
Дата: 19.08.05 12:07
Оценка:
AndrewVK,

> Мне интересно, ты что доказать хочешь?


Что усложнение языка порой приводит к новым выразительным возможностям, отсутствующим в противном случае.
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[36]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.08.05 11:46
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Попытки сделать именно контейнер (коллекцию), т.е. один класс вместо россыпи классов, насколько я вижу, приведут как минимум к потере пункта 3.


А зачем вообще пихать структуры или классы в этот мультимап? Можно хранить только индексы и ссылку на объект.

Идея создавать несколько типизированных представлений очень ничго. В дотнете создание пары лишних экземпляров никому поемшать не могут. Более того это настоящая фобия многих плюсовиков — боязнь составных классов (т.е. класса ссылкающегося на кучу подобъектов). Те же коллекции всегда делаются отдельным подобъектом. И что?

А объем кода можно сократить введя перегруженный дженерик-метод (и соотвествющие перегруженные обобщенные представления) который возмет на себя все сложности. Как-то так:
MultiIndex<Item> map = new MultiIndex<Item>;
View<stryng>      yView  = map.CreateView<stryng>("Y"); // динамическое создание делегата для свойства
// перегруженный вариант с двумя параметрами
View<int, string> XYView = map.CreateView<int, string>(
    delegate(A a) { return a.X; },
    delegate(A a) { return a.Y; });
    
yView["Test 2"].X...

XYView[new A(2, "Test 2")].X...
XYView[2, "Test 2"].X...

Собственно, полная типобезопасность, довольно простой и удобный интерфейс.

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

Как еще один вариант, вместо делегатов можно воспользоваться стандарной техникой оповещения о изменениях свойств, но этот способ к сожалению требует внесения кода в хранимые классы.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[32]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.08.05 11:46
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Вот это и была для eao197 "новая дорожка": он с Boost раньше, как уже сказал, не работал.


Я с DataView тоже. Форумы то он читал? Буст, хотя бы на уровне документации изучал?

ПК>Предикат, задающий порядок.


Способ сотрировки?

ПК>ЧТД.




>> Попробуй, например, дописать код сериализации содержимого в ХМЛ или бинарный формат.


ПК>http://boost.org/libs/multi_index/doc/advanced_topics.html#serialization При этом, в отличие от интрузивной сериализации .Net, поддерживается возможность реализации форматов, не предусмотренных авторами классов.


Ну, кое что доступно. Но зачем это нужно? Если захочется ХСЛТ всегда доступен.

>> отфильтровать строки по некоторому критерию (опять же 1-2 строки).


ПК>На C++ для этого обычно используются более общие средства, работающие не только с конкретным классом.


Во оно как? Крутой язык... Жать, что на фиг не упали более общие средства. Фильтровать то нужно тоже по иднексу. Иначе какой вообще смысл от этого мультимапа? Можно и перебором искать.

ПК>Попробуй сделать на C# интерфейс коллекции (т.е. один класс), обеспечивающий проверки времени компиляции, перечисленные в этом
Автор: Павел Кузнецов
Дата: 19.08.05
сообщении.


Я тебе там ответил. Могу только еще раз предложить перестать превозносить плюсы. Нет ничего что можно сдалть на них и нельзя на других языках. Вопрос только в подходах.

ПК>Ну, напиши пример объявления коллекции, аналогичного в плане проверок времени компиляции этому


Уже писал. Кода получается меньше.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[30]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.08.05 11:46
Оценка:
Здравствуйте, EvilChild, Вы писали:

EC>Странный аргумент.

EC>А .NET Framework не нужно устанавливать? Или быть может он весит меньше boost'а и быстрее выкачивается и устанавливается?

Фэймворк ставится один раз вместе со студией (при этом можно просто на Next жать и все). Далле чтобы создать проект и исползовать в нем тот или иной класс нужно нажать пару кнопок. Буст же нужно устанавливать отдельно. Используют его даеко не все. Да и буст — это не одна библиотека подкючаемая одной строкой, а куча для каждой из которых унжно потрахаться, чтобы ее использовать.

Так что странный не мой аргумент, а та упертость с котрой поклонники С++ не признают самых очевидных вещей.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[33]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.08.05 11:46
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:


>> Если то, что бустовский мультииндекс лучше, то это тоже не так, у DataView есть масса функционала, которого там нет. Прикинь, к примеру, во что обойдется реализация для него DataView.RowFilter.


ПК>В сравнительно тривиальный адаптер. У нас подобные используются с произвольными диапазонами (заданных парой итераторов).


Адаптеры не смогут испоьзовть индексы.

К тому же это не единственная возможность DataTable/DataSet. Они еще позволяют сливать разыне DataTable/DataSet-ы, получать описание отредактированных данных (причем в разных формах, одна из которых Diff XML), создавать набор связанных DataTable-ов (в DataSet-е) и отображать их на один сложный ХМЛ. И еще черт знает что. В общем, мощьный и слоный класс с очень неплохой производительностью.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[33]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.08.05 11:46
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Что усложнение языка порой приводит к новым выразительным возможностям, отсутствующим в противном случае.


Это смотря как усложнять. А то иногда результат получается не очень красивым.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[33]: Стиль Дональда Эрвина Кнута
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 21.08.05 18:59
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>В сравнительно тривиальный адаптер. У нас подобные используются с произвольными диапазонами (заданных парой итераторов).


Ну это вряд ли. Видишь ли, там собственный язык запросов, который позволяет вводить фильтры пользователю или хранить их в конфигурации.
... << RSDN@Home 1.2.0 alpha rev. 606>>
AVK Blog
Re[3]: Стиль Дональда Эрвина Кнута
От: Maxim S. Shatskih Россия  
Дата: 21.08.05 21:41
Оценка:
MSS>>Такой стиль у практически всего GPLного опен-сорсного софта.
Q>Да ладно.

Особо рекомендую GNU grep и SCSI стек из линукса. Песня. Кнут отдыхает.
Занимайтесь LoveCraftом, а не WarCraftом!
Re[4]: Стиль Дональда Эрвина Кнута
От: Quintanar Россия  
Дата: 22.08.05 11:10
Оценка: +1
Здравствуйте, Maxim S. Shatskih, Вы писали:

MSS>>>Такой стиль у практически всего GPLного опен-сорсного софта.

Q>>Да ладно.

MSS>Особо рекомендую GNU grep и SCSI стек из линукса. Песня. Кнут отдыхает.


А USB драйвер, например, написан очень неплохо
Все зависит все-таки от того, кто писал, а нет open source'ности.

Некоторые вещи, к тому же, были написаны очень давно (тот же grep, наверняка), когда вопрос о понятности кода не стоял так остро и не было выработано каких-то рекомендаций по этому поводу. Чем современне программа, тем она лучше написана, как правило. + стиль С-шных программ очень портит требование переносимости. Если программа должна работать на 10-ках различных платформ, она будет выглядеть плохо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.