LINUX.ORG.RU

Сравнительное исследование дефектов показывает превосходство стека TCP/IP Linux


0

0

По результатам исследования проведенного Reasoning Inc. оказалось что реализация стека протоколов TCP/IP в Linux версии 2.4.19 имеет меньше дефектов чем реализации этого стека в нескольких коммерческих системах.

>>> Подробности

★★★★★

Проверено: green

int somefunc() {
int fd;
int ret = -1;
type1 *var1, *var2, *var3;

if ((var1 = malloc(...)) != NULL) {
if ((var2 = malloc(...)) != NULL) {
if ((var3 = malloc(...)) != NULL) {
if ((fd = open(...)) != -1) {
что-то делаем с этими var*
Допустим мы делаем
read из файла...
ret = 0;
close(fd);
}
free(var3);
}
free(var2);
}
free(var1);
}
return ret;
}

Переходы предсказуемы, вопросов о работе free() не возникает
в принципе, никаких goto, код чистый и понятный всем. Вопросы?
Ах, да, вас уровень вложенности не устраивает??? Так это проходяще...

P.S.: 20 строк - идеальный размер для исходного кода функции,
поскольку укладывается в экран и оказывается полностью обозрим.
А в памяти удерживается 3-5 ближайщих (и вверх, и вниз) строк.

no-dashi ★★★★★
()

2Die-Hard:

> В половине реализаций Це free(NULL) сглючит

В gcc и VC не глючит, в icc тоже не глючит, в сановском компиляторе тоже с этим все в порядке...

> Напряги фантазию, попробуй мысленно подставить вместо связки malloc()-free() чуть более сложную конструкцию...

Ну будет чуть более сложный if... Скажем вместо проверки всего и вся в одном if'e будут вложенные if'ы, и все равно такой код будет восприниматся куда легче, т.к. полезные строки будут идти одна за другой, а обработка ошибок будет сидеть в else... Даже при переводе на человеческий язык фраза: "Мы сделаем "это" если "то" и "сё" выполняется", чем фраза "Мы сделаем "это" если "не то" и "ни сё" не выполняется".

anonymous
()
Ответ на: комментарий от anonymous

2anonymous (*) (2003-02-16 21:41:45.072):
Ок, уел ;)
Действительно, не тот случай, когда без goto не обойтись. Хотя, согласись,
сопровождение/развитие подобного кода НЕ тривиально (в отличие от случая с
goto. IMHO 40 вложенных if'ов - не самое читабельное зрелище).

Die-Hard ★★★★★
()
Ответ на: комментарий от anonymous

to anonymous (*) (2003-02-16 21:05:10.788) :

>Мда... Я конечно понимаю, что стандарт на С ты не читал,

Да, на C не читал, только на C++ (ISO/IEC 14882) :)

> но хоть man 3 free читать не пробывал?

А толку? Мне на M$ VS 5.0 программировать приходится.

to lb : это не BCC 3.1 случайно ты имеешь ввиду ?

MrBool
()

> IMHO 40 вложенных if'ов - не самое читабельное зрелище

Нет конечно 40 проверок это перебор.

anonymous
()
Ответ на: комментарий от anonymous

to anonymous (*) (2003-02-16 21:48:25.636) :

> В gcc и VC не глючит

Версия VC какая ?

MrBool
()

2MrBool:

> А толку? Мне на M$ VS 5.0 программировать приходится.

Во-первых: у MS с этим проблем вообще ни когда не было Во-вторых: И давно ты на VS программируешь? Я чего спрашиваю, дело в том, что VS6.0 вышел в 98 году, где же ты VS5.0 откопал? Ну и в-третьих: а я почему-то считал, что ты в каком-то универе на линуксе программирешь и твой профессор код под gpl раздает. Или я тебя с кем-то путаю?

anonymous
()
Ответ на: комментарий от Die-Hard

Не уел. Просто привел пример :))
(кстати сорри, что не подписался, пароль забыл).

Развитие/сопровождение кода с goto тоже далеко не тривиально.
Если было бы 40 проверок, я бы побил код на несколько inline функций.
Но иногда без goto действительно не обойтись.
Как хорошо изученный и часто дергаемый пример - функция do_fork или еще более наглядно schedule() и goodness() в ядре линукса. Там использование goto оправдано (транслируется в более быстрый код), но как геморройно ее модифицировать....

Я бы сделал старый вывод: каждому инструменту - свое место использования. GOTO или BREAK - именно инструменты, и использовать их надо разумно.

nst
()
Ответ на: комментарий от anonymous

to anonymous (*) (2003-02-16 22:03:09.531) :

> Во-первых: у MS с этим проблем вообще ни когда не было

Завтра проверю :) Насколько я помню там были грабли,
один раз пришлось лепить if для проверки на NULL.

>Во-вторых: И давно ты на VS программируешь?

2 года с хвостиком. Но на голом C + WINAPI только
старый софт сопровождаю

> Я чего спрашиваю, дело в том, что VS6.0 вышел в 98 году,
> где же ты VS5.0 откопал?

Приходится сопровождать прогу которю начали писать в ~1996
году, она на VS 6.0 не компилируется.

>Ну и в-третьих: а я почему-то считал, что ты в каком-то
>универе на линуксе программирешь и твой профессор код
>под gpl раздает. Или я тебя с кем-то путаю?

Путаешь :)

MrBool
()

2no-dashi (*) (2003-02-16 21:48:01.005):
> Ах, да, вас уровень вложенности не устраивает??? Так это проходяще...
Не совсем.

Если речь идет об идеальной реализации алгоритма - то почти верно ("почти" - если
не используется многовариантный переход, switch(); последний - сам себе goto).

Если речь идет об изменении алгоритма - сотни вложенных if'ов практически не поддаются контролю
со стороны программиста.

> ...P.S.: 20 строк - идеальный размер для исходного кода функции ...
Опять - ПОЧТИ верно.

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

Если принять, что вызов функции ничего не стОит, то goto не нужен даже теоретически.
На практике, однако, вызов функции ГОРАЗДО дороже безусловного перехода.

Мой експиренс показывает, что всякий раз, когда хочется написАть goto, следует крепко
задуматься - а надо ли? В 90 % случаев окажется, что (мнимая) необходимость использования
goto проистекает от непродуманности алгоритма.

Но - в нескольких процентах случаев алгоритм без goto окажется запутаннее и/или
тормознутее, чем то же самое с goto.

Я долгое время страдал "религиозной предубежденностью" против goto, пока, наконец, не
понял, что это - глупо. Если введением ОДНОГО goto можно сделать алгоритм полностью
прозрачным - в противовес 40 вложенным if'ам - IMHO это -- хорошо.

Die-Hard ★★★★★
()

Мне этот тред уже начинает нравится :)

MrBool
()

2Die-Hard: если я вижу 20 вложенных if'ов... Значит, что-то пошло не так. Кстати о конечных автоматах: согласен, это именно тот случай, когда код получается длинным... При большом числе состояний. P.S.: GOTO иногда удобен, но приведенный пример был явно не тем случаем...

no-dashi ★★★★★
()

по-моему неплохой пример использования goto --- qsort в glibc,

там если в кратце то обрабатывается "текущий" отрезок, рекурсия осуществляется тоьлко в одну сторону/ветку, вторая реализуется путем присваивания локальным переменным нужных значений и goto в начало.

по-моему экономия и времени и памяти (стэка) очевидна :)

anonymous
()
Ответ на: комментарий от anonymous

anonymous (*) (2003-02-16 22:03:09.531):
> ...я почему-то считал, что ты в каком-то универе на линуксе программирешь и твой
> профессор код под gpl раздает.

BTW, наверное, ты MrBool'а со мной путаешь. Помнится, пару месяцев назад я такую
историю тут рассказывал.

Die-Hard ★★★★★
()

2 no-dashi (*) (2003-02-16 21:48:01.005)

>Переходы предсказуемы, вопросов о работе free() не возникает >в принципе, никаких goto, код чистый и понятный всем. Вопросы? >Ах, да, вас уровень вложенности не устраивает??? Так это проходяще...

Извини, немного переформатил код я твой...

int somefunc() { int fd; int ret = -1; type1 *var1, *var2, *var3;

if ((var1 = malloc(...)) != NULL) { if ((var2 = malloc(...)) != NULL) { if ((var3 = malloc(...)) != NULL) { if ((fd = open(...)) != -1) { что-то делаем с этими var* Допустим мы делаем read из файла... ret = 0; close(fd); } free(var3); } free(var2); } free(var1); } return ret; }

Такой код и так уже получается imho менее читабельным, а если мы выделяем при работе под свои нужды не 3 кусочка памяти и открываем один файл и гораздо больше переменных и несколько файлов?

2 anonymous (*) (2003-02-16 20:18:23.869):

malloc я привел только в качестве примера, далеко не любая пара функций выделяющая/освобождающая действует подобно malloc/free (я про то, что free(NULL) не свалит программу в корку).

а если делать if (ptr) free(ptr); то тут лишние проверки будут, которыми просто нагромоздится код...

sseREGa
()
Ответ на: комментарий от no-dashi

2no-dashi (*) (2003-02-16 22:41:16.655):
> приведенный пример был явно не тем случаем...
В общем, как раз (ПОЧТИ :) ) тем.

Идея в том, что екцепшен при последовательном распределении ресурсов, требующих
освобождения, прямо просится на goto. Приведенный ПРОСТЕЙШИЙ пример, действительно,
возможен без goto, но - был бы он чуть посложнее...

Ну, дык, мы пришли к консенсусу?

Я пошел домой, до завтра не отвечу.

Die-Hard ★★★★★
()

Сопрограммы принципиально не реализуются без goto

eugine_kosenko ★★★
()

Насколько я знаю, алгоритм решения следующей задачи невозможно реализовать без goto:

Дано целое n и вектор целых чисел N[n]. Необходимо найти декартово произведение множеств

A[i] = {j| 1 <= j <= N[i]}, где 1<=i<=n

Существенное замечание: задачу нужно решить в общем виде, то есть, недопустимо фиксировать n и формировать n вложенных циклов.

eugine_kosenko ★★★
()
Ответ на: комментарий от sseREGa

> malloc я привел только в качестве примера, далеко не любая пара > функций выделяющая/освобождающая действует подобно malloc/free (я про > то, что free(NULL) не свалит программу в корку).

Дык! Например, как ведет себя fclose(NULL)? А есть еще десятки ресурсов (семафоры, сокеты итд итп), и далеко не все, я думаю, понимают семантику нулевого указателя. А как быть с дескрипторами файлов?

eugine_kosenko ★★★
()

эй, бул, так ты что, ждал пока сузе 8-й выйдет чтобы карты использовать? гыгы? 2 года в чулане держал?

Так надо было взять виндовс, поскольку

; ; Purpose: 926 setup information file for Windows 98 / Windows 2000 ; ; Author: AJ Jiang ; ; Date: Mar 10, 1999 ; ;

А он, бедненький, сузе 8-й ждал. Ну ничего, с больными это бывает.

И что, разве в германии юзают такое гамно, как via? Хотя, они там социал кормят... им простительно, убогим

anonymous
()

2eugine_kosenko

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

А еще всем пИсателям программ советую почитать Дейкстру, он тоже рулит.

Досвидания мои маленькие любители бейсика.

anonymous
()

> что нет такого алгоритма который нельзя было бы реализовать без goto

Да, можно. Любой. Однако бывают случаи, когда это дает менее читабельный исходник (уже показали, вместо одного goto куча проверок) и, как следствие, более раздутый и тормозной код.

Если в реализации _критичных_ко_времени_исполнения_ программ (TCP/IP стек, например) goto будет убран _исключительно_по_религиозным_соображениям программиста, то нах%й такого программиста с его программами.

> почитать Дейкстру, он тоже рулит

Дйкстра? И чем же он рулит? Уж не рулем ли?
Старичок давно уже не актуален, зарвался он в свое время.

anonymous
()

А для Linux есть что-нить вроде Borland C++ 3.1? Просто это удобный продукт и хотелось бы видеть его аналог в Linux.

anonymous
()
Ответ на: комментарий от anonymous

Уважаемый Юрий Фролов!

Вы можете использовать оператор goto где угодно. и когда угодно. Эта Ваше личное дело. Но!!! Есть такая наука КИБЕРНЕТИКА (это которая продажная девка империализка), и один из многочисленных разделов этой науки занимается доказательством парвильности программ. Механизм доказательства довольно простой, и основывается на парочке аксиом и теорем. В общих чертах: "Любой блок ПРАВИЛЬНОЙ программы имеет один вход, и один выход". "Если на входе блока правильные данные, и на выходе правильные данные, то такой блок счетается правильным". Ну вобщем и все. Доказательство приводить не буду, т.к. за 15 лет оно, естественно, забылось.
Так вот, уважаемый Юрий Фролов, Если ваш замечательный и красивый код имеет Ваш любимый оператор goto, то получается, что у Вас, как минимум, два блока у которых входов, и выходов не два. Следовательно ДОКАЗАТЬ правильность Вашей программы невозмодно. Это совсем не значит что она неправильная, просто доказать это нельзя. Поэтому, в приложениях, к которым применяются требования повышенной надежности, оператор goto недопустим. И совсем необязательно в меня тыкать кодом ядра линукса. Его писали люди, и, уверен. что это обычные люди. Ни чем не умнее ни Вас ни меня.
Я прямо слышу Ваше возражение по поводу асемблерного кода, сгенерированного компилятором. Там всевозможных джампов просто тьма. Но задача заключается не в том, что сгенерил сомпилятор, его правильность на совести разработчикомв языка, и правильности построения конечного автомата, и его реализации, а дело в том, чтобы Вы написали ПРАВИЛЬНЫЙ код!

Спасибо за внимание!

vada ★★★★★
()

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


>Дйкстра? И чем же он рулит? Уж не рулем ли?
>Старичок давно уже не актуален, зарвался он в свое время.

Ну по поводу Дийкстры не надо так строго. Он совершил прорыв в свое время. Как и Алан Тюринг и фон Нейман и Бебидж.
Хотя и Вы, молодой человек, anonymous (*) (2003-02-17 01:28:02.68), не знаю Вашего имени, совершенно неправы. Дийкстра, безусловно, был прав, но Вам не понять, по видимости, его мыслей. Вам еще учиться, учиться и еще раз учиться, как завещал еще один неплохой мыслитель. :)

Не хотел влезать в этот спор, но порой оператор goto бывает весьма полезен. Например, Брюс Эккель писал в своей книге про Java, что break и continue с метками являются совершенными аналогами этого оператора, и это при том, что в языке есть хорошая поддержка исключений. Весьма показателен пример с выходом из 20-ти вложенных циклов. И не надо говорить про исключения в этом случае, в языке С исключений нет. Кроме того, иногда goto придает читабельность коду. Например, если в конце функции надо выполнить некие завершающие действия безотносительно результата выполнения этой функции. Единомышленники Страуструпа заговорят о специальных классах, все это так, но что делать если мы пишем на С. Я понимаю, что лес валить проще бензопилой Дружба, но если надо расхреначить пару полешек, то проще взяться за топор.

del
()

2vada (*) (2003-02-17 10:12:42.423)
>"Любой блок ПРАВИЛЬНОЙ программы имеет один вход, и один
>выход". "Если на входе блока правильные данные, и на выходе
>правильные данные, то такой блок счетается правильным". Ну вобщем и
>все. Доказательство приводить не буду, т.к. за 15 лет оно,
>естественно, забылось.
Ага, это верно.

>Так вот, уважаемый Юрий Фролов, Если ваш замечательный и красивый
>код имеет Ваш любимый оператор goto, то получается, что у Вас, как
>минимум, два блока у которых входов, и выходов не два.
А вот это не совсем верно. Не надо (надо аккуратнее) пользоваться межблочными переходами. Они иногда приводят к неоднозначным результатам. Все переходы в пределах одного блока не нарушают концепции "черного ящика", хотя иногда уменьшают читабельность.

del
()

>А для Linux есть что-нить вроде Borland C++ 3.1? Просто это удобный
>продукт и хотелось бы видеть его аналог в Linux.
Kylix?

del
()

2vada (*) (2003-02-17 10:12:42.423)

Не с целью пофлеймить, а любопытства ради. Уважаемая vada, не могли бы Вы привести мне ссылки на РАБОТАЮЩИЕ продукты ИНДУСТРИАЛЬНОГО уровня, позволяющие производить доказательство работоспособности программ реального (а не лабораторного) размера? О существовании ТЕОРЕТИЧЕСКИХ разработок в этой области я осведомлен, а вот об их применимости в реальной жизни -- нет. "Тыкать" в вас кодом ядра Линукса я, конечно, не буду. Я просто позволю себе напомнить Вам, что ядро -- это большая РАБОТАЮЩАЯ программа из реального мира. Если Вы ДОКАЖЕТЕ работоспособность (или неработоспособность) хотя бы нескольких ее модулей, то, поверьте, разработчики Вам только спасибо скажут. Но, боюсь, Вы этого сделать не сможете.

Юрий Фролов

anonymous
()
Ответ на: комментарий от anonymous

to anonymous (*) (2003-02-17 00:22:13.582) :

>эй, бул, так ты что, ждал пока сузе 8-й выйдет чтобы карты
>использовать? гыгы? 2 года в чулане держал?

Нет, под SuSE 7.2 руками прописал в /etc/modules.conf :)

>Так надо было взять виндовс, поскольку

В отличии от тебя я флагами не махаю, а юзаю то что купил :)

>А он, бедненький, сузе 8-й ждал. Ну ничего, с больными это
>бывает.

>И что, разве в германии юзают такое гамно, как via?

Ты маленький такой тормозок, но тормозишь круто. respect :)

>Хотя, они там социал кормят... им простительно, убогим

Ну и какая тут взаимосвязь ? :)

MrBool
()

Юрию Фролову: Советую Вам прислушаться к тому, что говорит vada, поскольку в данном случае он СОВЕРШЕННО прав. Примеры таких программ я привести не могу, но уверяю Вас, что уже в конце 70-х годов прошлого века они (подобные системы) уже существовали. Тогда же я знал подобные примеры, но по прошествии лет они стерлись из памяти за ненадобностью. Кроме того в те же годы мне довелось в процессе учебы изучать теорему, которая доказывала, что ЛЮБУЮ программу можно написать при помощи 3- видов блоков:1) линейная последовательность; 2) цикл; 3) if. Как очевидное следствие - при наличие в языке подобных блоков GO TO не является необходимым.

kraw ★★★★
()
Ответ на: комментарий от del

to del :

>Например, Брюс Эккель писал в своей книге про Java, что break
>и continue с метками являются совершенными аналогами этого
>оператора, и это при том, что в языке есть хорошая поддержка
>исключений.

break и continue не совсем аналоги goto (можешь так и написать Экелю ;) так как их область действия ограничина :)

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

Если говорить о жабе то для этих целей правильно
использовать блок

try{
// some work
}
finally{
// clean up
}

Это именно то чего так нехватает C++

>Единомышленники Страуструпа заговорят о специальных классах,
>все это так, но что делать если мы пишем на С

Если одни и теже ресурсы то завернуть в функции захвата
и распределения ресурса и засунуть в отдельный модуль,
вызывать по надобности.Ненадо забывать что на C так же можно
писать в OO стиле ;)

MrBool
()

2del: Вы делаете одну ошибку. Наименьшим блоков является оператор. Т. е. блок мы далее разбиваем на блоки и получаем в лице GO TO "неправильный" блок.

kraw ★★★★
()

господа, вы отошли от темы...

Насколько я понимаю, чтобы TCP стек был оптимален на многопроцессорных системах он должен быть многопоточный. Я не знаю как устроен TCP стек в BSD. Но уважаемые BSD'шнико обьясните мне пожалуста как может разбор протокола закрученый в одну функцию быть многопоточным? Либо Вы ламо и не шарите либо в BSD TCP стек однопоточный. Если же он все-таки однопоточный, то как он может быть лучше многопоточной реализации в linux?

>Ну ну видел я исходники разбора tcp проткола в Линухе(2.4.6) такого >сраного кода в своей жизни до сих пор не встречал, как он работает хрен >его поймет, туева хуча функций без названий и понятных заголовков, >которые хрен знает что делают. Зато в бзди (4.4) разбор tcp протокола >закручен в рдну функцию в 2000 строк с небольшим по моему. Очень красиво >написан, правда с безусловными переходами, зато все понятно. И ессестно >бсдя заруливает линух. Я не знаю что там в последних версиях ядра линуха >наворотили, но мне кажется, что скорость можно увеличить простым >упорядочиванием и разбором того дерьма, которое содержит ядро Линуха.

anonymous (*) (2003-02-14 10:48:43.306)

anonymous
()
Ответ на: комментарий от anonymous

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

Уже прочитали. С нетерпением ждем от Вас решения поставленной задачи без GOTO

> А еще всем пИсателям программ советую почитать Дейкстру, он тоже рулит.

Дийкстра просто катастрофически устарел. Нужно читать Ллойда, Гриса, Хоара. Абрамова, наконец...

> Досвидания мои маленькие любители бейсика.

Ну, если Ваши познания в программировании не продвинулись дальше Дийкстры и Бейсика, тогда до свидания!

eugine_kosenko ★★★
()

2eugine_kosenko: А Вы почитайте, все-таки, Дейкстру. Даже Евклид не устарел с появлением Лобачевского. Что уж говорить о Дейкстре. Хотя я понимаю - юные гении предпочитают ничего не читать. "Ученого учить - только портить".

kraw ★★★★
()
Ответ на: комментарий от eugine_kosenko

2 eugine_kosenko

>Существенное замечание: задачу нужно решить в общем виде, то есть, >недопустимо фиксировать n и формировать n вложенных циклов.

%))) Мальчик про рекурсию забыл.... Бывает.

vada ★★★★★
()

Если мне неизменяет память, то в QNX ядро ДОКАЗАННО на ПРАВИЛЬНОСТЬ. А QNX это индустриальный стандарт как система реального времени.

Korwin ★★★
()
Ответ на: комментарий от eugine_kosenko

> С нетерпением ждем от Вас решения поставленной задачи без GOTO
А можно попросить вас привести код с goto?
Просто для большей наглядности.

nst
()
Ответ на: комментарий от del

> Весьма показателен пример с выходом из 20-ти вложенных циклов

BTW, в Ада-подобных языках для разрешения подобной проблемки используют специальную конструкцию типа

<<outer_label>>
loop
loop
loop
...
exit outer_label
end loop
end loop
end loop

Тоже своеобразный компромисс между читабельностью и чистотой

eugine_kosenko ★★★
()

2Korwin (*) (2003-02-17 12:37:34.971)

Не верю! (С) Станиславский

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

anonymous
()

2Korwin: память тебе не изменяет - доказано. А вот с "индустриальным стандартом" ты имхо погорячился. :) Та же IOS гораздо более распостранена например, но и она не является индустриальным стандартом - там вообще нет стандарта как такогого, уж очень широкий спектр задачь. :)

На счет стека и т.д. - мысли правильные мелькали, но так и не прорезались. :) Подсказка - пересчитайти графики на более правильные единицы измерения чем мегабайты в секунду...:)))

Irsi
()

>Если мне неизменяет память, то в QNX ядро ДОКАЗАННО на ПРАВИЛЬНОСТЬ.
>А QNX это индустриальный стандарт как система реального времени.

2Korwin: Не уподобайтесь Irsi...

anonymous
()
Ответ на: комментарий от kraw

> Кроме того в те же годы мне довелось в процессе учебы изучать теорему, > которая доказывала, что ЛЮБУЮ программу можно написать при помощи 3- > видов блоков:1) линейная последовательность; 2) цикл; 3) if.

Боже, как все это устарело! С тех пор было доказано, что ЛЮБУЮ программу можно написать при помощи 2 (двух!) видов блоков: 1) линейная последовательность; 2) цикл WHILE.

> Как очевидное следствие - при наличие в языке подобных блоков GO TO не > является необходимым.

Как очевидное следствие - при наличии в языке подобных блоков IF, UNTIL, FOR, а также механизм исключений не является необходимым.

Ну и что, будем исключать все лишние конструкции?

eugine_kosenko ★★★
()

>Подсказка - пересчитайти графики на более правильные единицы измерения
>чем мегабайты в секунду...:)))

2Irsi: Это в попугаи что ли....:)))))))))))))))

anonymous
()
Ответ на: комментарий от kraw

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

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

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

eugine_kosenko ★★★
()

2All

А что longjump нынче не моден ?

Саныч

anonymous
()
Ответ на: комментарий от vada

> %))) Мальчик про рекурсию забыл.... Бывает.

Согласен, хотя это еще не повод унижать оппонента. Кто Вам сказал, что я мальчик?

Может, так и запишем: "Задачи, неразрешимые без goto, решаются с помощью рекурсии"?

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

Да и стек не резиновый...

eugine_kosenko ★★★
()
Ответ на: комментарий от Korwin

> Если мне неизменяет память, то в QNX ядро ДОКАЗАННО на ПРАВИЛЬНОСТЬ. А > QNX это индустриальный стандарт как система реального времени.

Извиняюсь, а правильность ЧЕГО там доказана?

eugine_kosenko ★★★
()
Ответ на: комментарий от nst

> А можно попросить вас привести код с goto? > Просто для большей наглядности.

Если можно, вечером. Оно у меня в блок-схемах, его еще закодировать нужно...

eugine_kosenko ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.