Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.08.26;
Скачать: [xml.tar.bz2];

Вниз

Кто что думает?   Найти похожие ветки 

 
Zagaevskiy ©   (2007-06-03 11:54) [0]


Создатели Cи и UNIX признают, что разыграли весь мир

    В заявлении, потрясшем весь компьютерный  мир,  Кен  Томпсон,  Деннис
Ричи и Брайан Керниган признали, что  операционная  система  UNIX  и  язык
программирования   Си,   созданные   ими   --   тщательно   спланированный
первоапрельский розыгрыш,  "продержавшийся"  более  20  лет.  Выступая  на
последнем Конгрессе разработчиков программного обеспечения  для  ОС  ДЕМОС
(UnixWorld Software Development Forum), Томпсон признал следующее:

    "В 1969 году AT&T завершила работу над проектом операционной  системы
Multics (известная операционная система  60-х,  см.  прим.2)  Брайан  и  я
только что начали работу с  ранней  реализаций  Паскаля,  разработанной  в
лаборатории  проф.  Вирта  в  Швейцарии,  и  находились  под  впечатлением
элегантности, простоты  и  мощи  этого  языка.  Деннис  как  раз  прочитал
"Уставший  от  колец",  веселую  сатиру  на  знаменитую  трилогию  Толкина
"Властелин колец" (*1*). Ради шутки мы решили написать  пародии  на  среду
Multics и Паскаль. Деннис и я отвечали за  операционную  среду.  Глядя  на
Multics, мы спроектировали новую систему настолько сложной  и  запутанной,
чтобы максимально "испортить жизнь" рядовым пользователям, назвали ее UNIX
как пародию  на  Multics,  добавив  много  других  достаточно  рискованных
аналогий.
    Затем Деннис и Брайан разработали по-настоящему  извращенный  диалект
Паскаля, назвав его "A". Когда мы  обнаружили,  что  другие  действительно
пытаются писать программы на A, мы  быстро  добавили  еще  парочку  хитрых
примочек, создав B, BCPL,  и,  наконец,  Си.  Мы  остановились,  добившись
успешной компиляции следующего:

   for(;P("\n"),R-;P("|"))for(e=C;e-;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);

    Мы не могли даже  представить,  что  современные  программисты  будут
пытаться  использовать  язык,  допускающий  подобный  оператор!  Мы   даже
собирались  продать  все  это  Советам,  чтобы   отбросить   развитие   их
компьютерного дела на 20 лет  назад  (*2*).  Представьте  наше  удивление,
когда  AT&T,  а  также  другие  американские  корпорации  начали  пытаться
использовать UNIX и  Си!  Более  20  лет  ушло  на  то,  чтобы  приобрести
достаточный  опыт  для  создания  хоть  немного  полезных   приложений   с
использованием  этой  технологической  пародии  60-х.  Мы  были   поражены
упорством  и  целеустремленностью  (если  не  чувством  здравого   смысла)
типичного программиста, использующего  UNIX  и/или  Си.  В  любом  случае,
Брайан, Деннис и я в  течение  последних  лет  работали  исключительно  на
Паскале в среде Apple Macintosh и чувствуем себя по-настоящему  виноватыми
в том хаосе, путанице и действительно скверном программировании,  причиной
которых явилась наша неудачная шутка столько лет тому назад."

    Большинство поставщиков версий UNIX и Си,  включая  AT&T,  Microsoft,
Hewlett-Packard, GTE, NCR, DEC, отказались комментировать это выступление.
Borland International, ведущий производитель инструментальных средств  для
Паскаля и Си, включая популярные Турбо Паскаль, Турбо  Си  и  Турбо  Си++,
заявил, что они давно подозревали это и  будут  продолжать  улучшать  свои
разработки для Паскаля и  прекратят  дальнейшие  усилия  по  развитию  Си.
Официальный  представитель  IBM  разразился  безудержным  хохотом  и   был
вынужден отменить спешно собранную конференцию о судьбе RS6000 заявив, что
"VM появится в ближайшее время". В непонятом аудиторией кратком  сообщении
проф. Вирт, отец Паскаля, Модулы-2 и Оберона, сказал лишь, что некто  P.T.
Barnum был прав.
    Кстати, из обычно совершенно надежных источников стало известно,  что
подобное признание возможно скоро последуют от Вильяма Гейтса относительно
MS-DOS и Windows. Не случайно, вышеупомянутый представитель IBM уже  начал
отрицать, что Виртуальная Машина (VM) является созданной  для  внутреннего
употребления аналогичной шуткой, вырвавшейся наружу.


 
homm ©   (2007-06-03 12:04) [1]

Думаю мир не рухнет от таких заявлений, даже ЕСЛИ это и правда.


 
Anatoly Podgoretsky ©   (2007-06-03 12:13) [2]

> Zagaevskiy  (03.06.2007 11:54:00)  [0]

И откуда ты только откопал этот древний  боян


 
Zagaevskiy ©   (2007-06-03 12:24) [3]

Да так, лазал в инете и вот результат...


 
Рамиль ©   (2007-06-03 12:51) [4]

Всем баянам боян:)


 
Юрий Зотов ©   (2007-06-03 12:55) [5]

> Кто что думает?

Думаю (и всегда так думал), что все эти извращения типа i++ взамен нормально читаемой записи не дают никаких реальных преимуществ (поскольку все определяется выходом компилятором, а не его входом) и только лишь запутывают исходный код.


 
homm ©   (2007-06-03 13:05) [6]

> что все эти извращения типа i++

На мой взгляд извращения типа somevar += othervar; наоборот упрощают чтение.


 
Zagaevskiy ©   (2007-06-03 13:22) [7]


> На мой взгляд извращения типа somevar += othervar; наоборот
> упрощают чтение

Да но :
  for(;P("\n"),R-;P("|"))for(e=C;e-;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);
Ж8-[   ]


 
Юрий Зотов ©   (2007-06-03 13:30) [8]

> homm ©   (03.06.07 13:05) [6]

Не будем брать явное (и явно нарочитое) извращение типа

for(;P("\n"),R-;P("|"))for(e=C;e-;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);

Возьмем извращение простое: somevar += othervar;

И зададимся простым вопросом: а чем же оно конкретно упрощает (как Вы считаете) чтение кода?


 
homm ©   (2007-06-03 13:36) [9]

> : а чем же оно конкретно упрощает (как Вы считаете) чтение
> кода?

Найдите отличие.
this.somevar[x][y].R = this.somevar[x][y].R + othervar;
this.somevar[x][y].R = this.somevar[x][y].P + othervar;

Легко ошибиться как при написании, так и при чтении.
this.somevar[x][y].R += othervar;
А так в 2 раза короче.


 
Gero ©   (2007-06-03 13:38) [10]

> [8] Юрий Зотов ©   (03.06.07 13:30)И зададимся простым вопросом:
> а чем же оно конкретно упрощает (как Вы считаете) чтение кода?


Отсутствием избыточного повторения идентификатора в строчке.


 
Anatoly Podgoretsky ©   (2007-06-03 13:41) [11]

> homm  (03.06.2007 13:05:06)  [6]

Упрощает, это надо же такое извращение над мозгом делать.
Жрецом от программирования показаться хочется, что бы не посвященные не поняли.


 
имя   (2007-06-03 14:00) [12]

Удалено модератором


 
isasa ©   (2007-06-03 14:06) [13]

homm ©   (03.06.07 13:36) [9]
Найдите отличие.
this.somevar[x][y].R = this.somevar[x][y].R + othervar;


Проше надо быть. :)

ThisFu_kLongNameVariable tmpvar;

tmpvar=this.somevar[x][y].R;
...
tmpvar=tmpvar+othervar;


 
имя   (2007-06-03 14:07) [14]

Удалено модератором


 
имя   (2007-06-03 14:09) [15]

Удалено модератором


 
homm ©   (2007-06-03 14:14) [16]

> Проше надо быть. :)
> ThisFu_kLongNameVariable tmpvar;
> tmpvar=this.somevar[x][y].R;
> ...
> tmpvar=tmpvar+othervar;

Конечно так проще, чем предложено. У вас, что комплекс чтоли, у старшего поколения? Боитесь видеть очевидные вещи :(


 
Юрий Зотов ©   (2007-06-03 14:20) [17]

> homm ©   (03.06.07 13:36) [9]

1. Вообще-то, если человек дает полям (свойствам, методам...) имена R и P, то это его проблемы.

2. Пример некорректен. Сравнивать надо ОДИНАКОВО. Найдите  отличие:
this.somevar[x][y].R += othervar;
this.somevar[x][y].P += othervar;

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

3. Короче - не значит понятнее. Вот пример на Паскале:
W := PWord(Integer(@I) + 2)^;
I имеет тип integer, W имеет тип word. Возьмите любое значение I (кроме нуля) и скажите - чему будет равно W после выполнения этого кода на платформе x86? Сможете сказать без компьютера и не ошибиться?

А мы ведь говорим о простоте чтения кода.

> Gero ©   (03.06.07 13:38) [10]

См. п.3 выше.


 
isasa ©   (2007-06-03 14:24) [18]

homm ©   (03.06.07 14:14) [16]
Конечно так проще, чем предложено. У вас, что комплекс чтоли, у старшего поколения? Боитесь видеть очевидные вещи


:)
Ну, прямо так сразу ...
Не надо опошлять идею языка высокого уровня. Можно сбацать язык на основе алфавита и способа письма древних Шумеров ...


 
Юрий Зотов ©   (2007-06-03 14:28) [19]

> homm ©   (03.06.07 14:14) [16]

Есть предложение дискутировать ДОКАЗАТЕЛЬНО и по СУТИ. Воздерживаясь от оценки поколений, длин, толщин и прочего.

Есть еще одно предложение - произнося слово "очевидно", НИКОГДА не забывать добавлять к нему слова "всего лишь для меня".


 
isasa ©   (2007-06-03 14:30) [20]

Юрий Зотов ©   (03.06.07 14:20) [17]
W := PWord(Integer(@I) + 2)^;


Тонкий намек, на то, что младший байт хранится первым? :)


 
Mike Kouzmine ©   (2007-06-03 14:30) [21]

А мне си++ больше нравится, чем паскаль для объектов. А перешел я на него (паскаль) в начале 90 из-за того, что дома была только 286, а си++ борланда текущей версии требовал 386.


 
Юрий Зотов ©   (2007-06-03 14:34) [22]

> isasa ©   (03.06.07 14:30) [20]

Да, но суть не в этом. Это пример того, как НЕ надо писать НИ НА КАКОМ языке. Этот код и короток в исходнике, и эффективен в машинном виде, но не приведи Боже когда-нибудь сопровождать такую программу.

Еще это пример того, что при желании (глупом, конечно) даже и на Паскале можно написать write-only код. А уж о Си и говорить нечего.


 
homm ©   (2007-06-03 14:43) [23]

> 2. Пример некорректен. Сравнивать надо ОДИНАКОВО. Найдите
> отличие:
> this.somevar[x][y].R += othervar;
> this.somevar[x][y].P += othervar;

Тогда что-же вы написали неодинаково?
this.somevar[x][y].R += othervar;
this.somevar[x][y].R = this.somevar[x][y].P + othervar;


Вот так одинокого, только во втором варианте ошибка, которую фиг увидишь.


 
Юрий Зотов ©   (2007-06-03 14:47) [24]

> homm ©   (03.06.07 14:43) [23]

В примере на Паскале человек хотел написать R, а написал P.
В примере на Cи человек хотел написать P, а написал R.

Или наоборот. Как угодно, суть будет все та же.

И что? Какая ошибка лучше? Какая хуже? И в чем разница?


 
homm ©   (2007-06-03 14:58) [25]

> И что? Какая ошибка лучше? Какая хуже? И в чем разница?

Разница в том, что если я пишу
this.somevar[x][y].P += othervar;
я сразу вижу, что не то написал, а если написано
this.somevar[x][y].R = this.somevar[x][y].P + othervar;
Я сижу и долго втыкаю, почему же оно не работает, потому что вторая запись не бросается в глаза, потоу-что человек уже подсознательно ЗНАЕТ что там написано то-же самое, и проверит это лишь в последнюю очередь.


 
Юрий Зотов ©   (2007-06-03 15:10) [26]

> homm ©   (03.06.07 14:58) [25]

> если я пишу
> this.somevar[x][y].P += othervar;
> я сразу вижу, что не то написал

А я - не вижу. Кто сказал, что здесь должно быть R, а не P? Кто сказал, что здесь должно быть P, а не R?

И когда эта строка не одна, как здесь, а среди сотен других, как в реальной программе, то заметить ошибку одинаково трудно на ЛЮБОМ языке.

Не надо давать переменным дурацких имен - тогда не будет и дурацких ошибок. И это правило справедливо тоже для ЛЮБОГО языка.


 
Anatoly Podgoretsky ©   (2007-06-03 15:44) [27]


> Вот так одинокого, только во втором варианте ошибка, которую
> фиг увидишь.

Строго наоборот, это в первом варианте не увидишь, а во втором она в глаза бросается.


 
IMHO ©   (2007-06-03 15:49) [28]


> homm ©   (03.06.07 14:14) [16]



У тебя что, комплекс что ли,  у младшего поколения?


 
имя   (2007-06-03 15:56) [29]

Удалено модератором


 
Zagaevskiy ©   (2007-06-03 16:02) [30]

Удалено модератором
Примечание: Тоже на бан нарываетесь? Так Вы скажите, сделаем.


 
имя   (2007-06-03 16:03) [31]

Удалено модератором


 
TUser ©   (2007-06-03 16:05) [32]


> 3. Короче - не значит понятнее. Вот пример на Паскале:
> W := PWord(Integer(@I) + 2)^;
> I имеет тип integer, W имеет тип word. Возьмите любое значение
> I (кроме нуля) и скажите - чему будет равно W после выполнения
> этого кода на платформе x86? Сможете сказать без компьютера
> и не ошибиться?
>
> А мы ведь говорим о простоте чтения кода.

Пиведенный пример на си - это очень распространенная конструкция. А вот пример с приведением кода на Паскале, это еще надо специально выдумывать алгоритм, где это действителньо требуется.


 
Юрий Зотов ©   (2007-06-03 16:07) [33]

> TUser ©   (03.06.07 16:05) [32]

Да. И что?


 
имя   (2007-06-03 16:17) [34]

Удалено модератором


 
Zagaevskiy ©   (2007-06-03 16:25) [35]

Удалено модератором
Примечание: Извинения приняты, все ОК. Но сколько же раз можно извиняться? Ветка о ДРУГОМ, не надо оффтопить.


 
Alx2 ©   (2007-06-03 16:29) [36]

Полтора года назад полностью перешел на С++. Очень приглянулась реализация ООП в нем. Реализации лаконичнее и понятнее получается, чем на ООП версии Pascal. Хотя, дело, наверное, в руках и в кривости их.  
Но ведь и на Pascal можно написать так, что не въедешь в код. И на С++. Только на последнем меньше предохранителей от этого.


 
Однокамушкин   (2007-06-03 16:37) [37]


> Юрий Зотов ©   (03.06.07 13:30) [8]
> > homm ©   (03.06.07 13:05) [6]
> И зададимся простым вопросом: а чем же оно конкретно упрощает
> (как Вы считаете) чтение кода?

Сравним две записи:
a = a + b;
a += b;


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

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


 
Юрий Зотов ©   (2007-06-03 16:42) [38]

> Однокамушкин   (03.06.07 16:37) [37]

Сравним две записи:
a = a + b;
a += b;

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

:о)

Причем заметьте, что ТАКАЯ трактовка НИЧУТЬ не хуже Вашей...
:о)


 
Kostafey ©   (2007-06-03 16:48) [39]

> a = a + b;
> a += b;

По - моему это вопрос привычки.
Ни больше, ни меньше.


 
Zeqfreed ©   (2007-06-03 16:49) [40]

Недели софистики с Юрием Зотовым на Дельфимастере :)



Страницы: 1 2 3 4 5 6 7 8 9 
10 11 12 13 14 15 вся ветка

Форум: "Прочее";
Текущий архив: 2007.08.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.58 MB
Время: 0.102 c
15-1185954112
dr Gonzo
2007-08-01 11:41
2007.08.26
Справочник по Delphi издательства O Reilly


2-1185996421
Мануха
2007-08-01 23:27
2007.08.26
chart


2-1185985576
Ruffian
2007-08-01 20:26
2007.08.26
Генератор списков паролей


2-1186090859
Rumin
2007-08-03 01:40
2007.08.26
как записать clienttoscreen как api функцию


2-1185204031
nikfel
2007-07-23 19:20
2007.08.26
Функция LoadImage.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский