The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Выпуск генератора лексических анализаторов re2c 3.0, opennews (??), 28-Янв-22, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


7. " Выпуск генератора лексических анализаторов re2c 3.0"  –9 +/
Сообщение от Аноним (-), 28-Янв-22, 09:49 
В умелых руках goto, как правило, не нужен. Аккуратный структурный код, как правило, не требует goto. Если вы применяете goto, значит скорее всего вы говнокодер. Оператор goto применяется 1 раз в тысячу лет.
Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

9. " Выпуск генератора лексических анализаторов re2c 3.0"  +11 +/
Сообщение от Аноним (9), 28-Янв-22, 09:50 
Ты еще скажи в ассемблере jmp aka goto не нужен.  
Ответить | Правка | Наверх | Cообщить модератору

12. " Выпуск генератора лексических анализаторов re2c 3.0"  –1 +/
Сообщение от Аноним (-), 28-Янв-22, 09:54 
>Ты еще скажи в ассемблере jmp aka goto не нужен.  

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

Ответить | Правка | Наверх | Cообщить модератору

15. " Выпуск генератора лексических анализаторов re2c 3.0"  –1 +/
Сообщение от Анониим (?), 28-Янв-22, 10:10 
Ты забыл упомянуть что можно реализовать при помощи оверхеда в том числе оверхеда на «безопасность». Тогда да.  
Ответить | Правка | Наверх | Cообщить модератору

42. " Выпуск генератора лексических анализаторов re2c 3.0"  +1 +/
Сообщение от Аноним (-), 28-Янв-22, 19:42 
> Ты забыл упомянуть что можно реализовать при помощи оверхеда в том числе оверхеда на «безопасность». Тогда да.

Ты забыл еще раз, ни к селу ни к городу, приплести ассемблер.
Расскажи поподробнее за оверхед gccшного cleanup аттрибута (сарказм). Он все верно сказал, языковые фичи с 0 оверхедом для этого давно есть - scope guards в D, defer в Zig и т.д. Компилятор сгенерирует точно такие же прыжкы по адресам, как и в "ручном режиме" с goto, только вот читаться оно будет куда лучше, а заделать очередной "goto fail" будет сложнее.


Ответить | Правка | Наверх | Cообщить модератору

30. " Выпуск генератора лексических анализаторов re2c 3.0"  +8 +/
Сообщение от Crazy Alex (ok), 28-Янв-22, 13:51 
Это если бы в си были исключения с блоками finally или деструкторы. А так - последовательный клинап в конце функции с несколькими метками и выходы через goto в нужные точки - самый чистый вариант, который я с си видел.
Ответить | Правка | К родителю #7 | Наверх | Cообщить модератору

33. " Выпуск генератора лексических анализаторов re2c 3.0"  –3 +/
Сообщение от Аноним (-), 28-Янв-22, 14:00 
>то если бы в си были исключения с блоками finally или деструкторы.

Не дай бог. Убъёте дух сишки. Высокоуровневые сахара сишке не нужны.

Ответить | Правка | Наверх | Cообщить модератору

35. " Выпуск генератора лексических анализаторов re2c 3.0"  +6 +/
Сообщение от Ordu (ok), 28-Янв-22, 14:24 
> Если вы применяете goto, значит скорее всего вы говнокодер. Оператор goto применяется 1 раз в тысячу лет.

Ядро linux с тобой не согласно. Там goto используется в хвост и в гриву, например, как замена RAII: чтобы подчищать ресурсы при аварийном выходе из функции. Необходимость завершиться с ошибкой может быть детектирована в любой момент, и структурно следить за тем, чтобы освободить те ресурсы, которые были уже выделены и не освобождать те ресурсы, которые ещё не были -- это жуть. Груды дублирования кода, рантайм проверок типа if(ptr) free(ptr); и в целом код превращается в болото, в котором любой неосторожный шаг приведёт либо к use-after-free, либо к memleak, либо к double-free, либо ещё к чему-нибудь поэкзотичнее.

Когда же у тебя в конце функции что-то типа:

...
return SUCCESS;

cleanup1:
   free(ptr);
cleanup2:
   close(fd);
cleanup3:
   do_something_else();
   return FAILURE;

А внутри:

fd = open(...);
if(fd < 0) {
    goto cleanup3;
}
ptr = malloc(...);
if(ptr == NULL) {
    goto cleanup2;
}
if(something_else_went_bad()) {
    goto cleanup1;
}
то всё видно, _структурированно_, няшно и управляемо. Ещё и коды ошибок можно прокидывать туда через переменную int ret, объявленную в начале функции.

Ответить | Правка | К родителю #7 | Наверх | Cообщить модератору

47. " Выпуск генератора лексических анализаторов re2c 3.0"  –2 +/
Сообщение от Аноним (-), 29-Янв-22, 09:47 
Тонко потроллить решил? Хорошо, отвественным ядрописателям goto разрешаю. Остальным говнокодерам не советую.
Ответить | Правка | Наверх | Cообщить модератору

49. " Выпуск генератора лексических анализаторов re2c 3.0"  +/
Сообщение от Ordu (ok), 29-Янв-22, 11:15 
> Тонко потроллить решил? Хорошо, отвественным ядрописателям goto разрешаю. Остальным говнокодерам
> не советую.

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

Ответить | Правка | Наверх | Cообщить модератору

52. " Выпуск генератора лексических анализаторов re2c 3.0"  +/
Сообщение от nvidiaamd (?), 29-Янв-22, 12:32 
Видали хозяин пришел  и нпм разрешил. Хуух.
Ответить | Правка | К родителю #47 | Наверх | Cообщить модератору

45. " Выпуск генератора лексических анализаторов re2c 3.0"  +1 +/
Сообщение от Анончик (?), 28-Янв-22, 23:51 
Я правильно понимаю что goto: 6,069 code results in freebsd/freebsd-src
Указывает на то что разработчики фряхи те еще гавнокодеры?
Ответить | Правка | К родителю #7 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру