?

Log in

No account? Create an account
Рождество и бездомные в центре Сан-Хосе - самого большого города в Silicon Valley - Юрий Панчул [entries|archive|friends|userinfo]
Money can buy bandwidth. Latency requires bribing God.

[ website | My Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Рождество и бездомные в центре Сан-Хосе - самого большого города в Silicon Valley [Dec. 29th, 2015|11:31 pm]
Yuri Panchul
Рождество в центре Сан-Хосе - самого большого города в Silicon Valley:




Рождественская экспозиция призывает меньше мыться в душе для экономии воды, использовать собственные авоськи в магазинах и лампочки LED:




Бездомные - там же:



Как эти люди стали бездомными?

Они забывали делать free для каждого malloc в языке программирования Си
12(17.6%)
Они допускали гонки в последовательностных схемах в Verilog-е из-за неправильного использования блокирующих присваиваний
5(7.4%)
Они отрицали что весь Запад поддерживает свободу на Украине и их работодатели прислушались к бдительным украинцам
9(13.2%)
Они допустили перерасход воды во время мытья в душе, не использовали LED-лампочки и не отказались от одноразовых пакетов
11(16.2%)
Они кощунственно не поддерживали всеобщее умиление Стивом Джобсом, Марком Цукербергом и Элоном Маском
15(22.1%)
Я не знаю, что натворили эти джентлемены, но им явно помогли бы ватники
13(19.1%)
Из-за бугра плюете?
3(4.4%)
LinkReply

Comments:
[User Picture]From: dom3d
2015-12-30 08:17 am (UTC)
зы
Кроме пункта - Они забывали делать free для каждого malloc в языке программирования Си, я добавил бы, что эти лохи использовали оператор go to.
(Reply) (Thread)
[User Picture]From: panchul
2015-12-30 08:33 am (UTC)
Перепишите без goto следующий фрагмент:
a ()
{
    open_b ();

    if (c1 ())
        goto FAILURE1;

    while (! d ())
    {
        if (c2 ())
           goto FAILURE2;

        for (i = 0; i < 100; i ++)
        {
            if (c5 ())
                goto FAILURE2;

        for (j = 0; j < 100; j ++)
        {
            if (c3 ())
                goto FAILURE1;

            e ();
        }
       }

        f ();

        for (i = 0; i < 100; i ++)
        {
            if (c4 ())
                goto FAILURE2;

            g ();
        }
    }          

        return ok;

FAILURE1:

    close_b ();
    return err1;

FAILURE2:

    kill_b ();
    return err2;
}




Edited at 2015-12-30 08:34 am (UTC)
(Reply) (Parent) (Thread)
[User Picture]From: maxdz
2015-12-30 09:09 am (UTC)
Calling close_b() after failed c1() but kill_b() after failing c2()/c5() and again close_b() after c4()?

Come on Youri. This is a really stupid code whose author should be fired and finish sleeping on streets of San Jose. Together with people who don't call free() after malloc().
(Reply) (Parent) (Thread)
[User Picture]From: panchul
2015-12-30 09:35 am (UTC)
failure по разным причинам может требовать разной обработки
(Reply) (Parent) (Thread)
[User Picture]From: maxdz
2015-12-30 09:42 am (UTC)
Sure. But not in a such "mixed" manner.
(Reply) (Parent) (Thread)
[User Picture]From: panchul
2015-12-30 03:41 pm (UTC)
Вы додумываете/фантазируете семантику close и kill, она никак не специфицирована в данном коде. Поставьте вместь close и kill буквы abc и xyz. И перепишите.
(Reply) (Parent) (Thread)
[User Picture]From: maxdz
2015-12-30 04:12 pm (UTC)
Normally goto will be used to avoid nesting like here:

...
{
  if (!initInet())
    goto label1;

  if (!openSocket())
    goto label2;

  if (!writeSocket())
    goto label2;

  if (!readSocket())
    goto label2;

  return OK;

label2:
  closeSocket();

label1:
  closeInet();
  return error;
}


But there is no necessity in goto's here - it can be avoided with different methods (using nesting too).

Edited at 2015-12-30 04:15 pm (UTC)
(Reply) (Parent) (Thread)
[User Picture]From: panchul
2015-12-30 06:43 pm (UTC)
Иногда можно ввести дополнительную функцию, иногда делать break, иногда закрывать что-то в деструкторе, но иногда читабельнее с goto. Поэтому я за то, чтобы эту опцию в арсенале иметь, а не избегать ее по квази-религиозным причинам.

И коню понятно, что в вашем упрощенном примере (все на одном уровне) можно сделать break и одну дополнительную переменную. Это ханжество (скрытое goto), а вот вы перепешите мой исходный пример.
(Reply) (Parent) (Thread)
[User Picture]From: dom3d
2015-12-30 09:33 am (UTC)
Делаешь впереди
#define RETURN_FAILURE1 close_b (); return err1;

А потом используешь

if()
RETURN_FAILURE1
(Reply) (Parent) (Thread)
[User Picture]From: panchul
2015-12-30 09:41 am (UTC)
Вы _немедленно_ сделали ошибку, связанную со скрытием ";" внутри макроса. То что вы написали работать не будет из-за того что вы не поставили фигурные скобки.

Но даже если отбросить это промах - а что если обработчик failure более сложный и использует локальные переменные?

И вообще это ханжество - сдуплицировать код и скрыть его в макро только чтобы избежать использования однозначно понимаемого и легко читаемого goto
(Reply) (Parent) (Thread)
From: realurix
2015-12-30 03:37 pm (UTC)

Зачем спорить с убогими лузерами?

Юра! Ну что ты слушаешь, а тем более споришь с этими неграмотными лузерами? Твой фрагмент легко можно изобразить без операторов go to. В теории алгоритмов этот приём называется "расщеплением узлов". Впервые был использован Ляпуновым в его лекциях по операторному методу ещё в 1950 году для свёртывания программы/алгоритма в один узел, когда расщеплённые узлы образуют линейные участки, которые затем сворачиваются. Америкосы потом с успехом сплагиатили этот приём в своих работах без ссылок на Ляпунова. Равно как и с полупроводниками сплошное воровство. Все патенты америкосов в области полупроводников датируютмя после декабря 1947 года, после выхода в свет обзорной статьи "Советские исследования электронных полупроводников" журнале "Успехи физических наук" за октябрь 1947 года. Там и о работах Френкеля 1936 года и Френкеля/Ландау 1939 года по теории электронно-дырочной проводимости сказано, а значит Шоккли получил Нобелевку за перевод в 1949 году работ Френкеля/Ландау. И про открытие туннельного эффекта в полупроводниках в ЛИФИ в 1934 году, за что присвоивший себе приоритет ЛИФИ Лео Есаки получил в 1959 году Нобелевку. В той же статье указаны исследования 1-переходных (диоды), 2-переходных (транзисторы), 3-переходных (тиристоры) и N-переходных (гетероструктуры) полупроводников.

Edited at 2015-12-30 11:08 pm (UTC)
(Reply) (Parent) (Thread)
[User Picture]From: allesanbr
2015-12-30 02:27 pm (UTC)
поддержу.
goto до того зачмырили, что многие программисты даже не знают о его существовании.
На самом деле есть масса случаев где этот оператор помогает в разы упростить код осуществляя по сути ассемблерный переход в нужное место программы.

Нельзя не согласиться с тем, что злоупотребление им несколько затрудняет читабельность кода программы, но после РНР, где три страницы(дисплея) кода с единственным оператором на все случаи жизни - код со злоупотреблением goto будет читаться так-же легко, как стихи пушкина.
(Reply) (Parent) (Thread)
[User Picture]From: craftwr
2015-12-31 05:18 am (UTC)
go to надо применять с умом и только. PHP таки хуже basic. Второй читабельнее и go to там применим как нормальный инструмент, а в пыхпыхе он несколько чужероден.
(Reply) (Parent) (Thread)
[User Picture]From: allesanbr
2015-12-31 05:35 am (UTC)
людей которые разделяют оператор goto - пробелом, нужно убивать на месте...
морально...
расстреливая из реактивного говномёта...

простите, так о чём мы говорим?
о грамматике английского языка, или о программировании?
go и to это два разных слова и на сколько мне известно в программировании никак не применяются в таком виде.
...если только в английской версии 1С ))))))))))))))
(Reply) (Parent) (Thread)
[User Picture]From: craftwr
2015-12-31 05:44 am (UTC)
О программировании. А разделять в тексте это у меня привычка уже давно выработалась. В листинге естественно слитно.
В 1С лучше писать по русски, хотя я там вообще не люблю писать. Ибо синтаксис пц.
(Reply) (Parent) (Thread)