1. Haskell / Говнокод #20195

    −24

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    findConnections :: LinkID
                    -> Link
                    -> [RuleZipper]
    findConnections x = go . fromTree
      where go z =
              case label z of
                Link {_link=l}
                  | x' =*= l -> [z]
                  | True     -> []
                _ ->
                  go' (firstChild z) ++ go' (next z)
    
            go' x = (toList x) >>= go
    
            x' = flipLink x

    1) создаём кучу почти полных копий дерева (не совсем полных, т.к. есть какой-никакой tail sharing)
    2) но это фиксится тем, что обход дерева заканчивается преждевременно из-за ошибки!
    изящный код, который можно породить только в 3 ночи под Sabaton

    Запостил: CHayT, 14 Июня 2016

    Комментарии (82) RSS

    • хуета какая-то
      Ответить
      • позвольте, я объясню: вас, сударь, просто занесло во вселенную с закрытой фридмановской метрикой
        свет, который отражается от вашей спины, проходит через всю вселенную и попадает вам же в глаза
        Ответить
        • Оуч. А откуда тогда у нас CP-ассиметрия?
          Ответить
          • хм, а как она может быть связана с космологическими моделями?
            Фридман, когда их решал, ничего про слабое взаимодействие и не знал
            /me: http://imgs.xkcd.com/comics/impostor.png
            Ответить
            • В замкнутой метрике полный заряд ноль. Поэтому CP-асимметрия тут выглядит как минимум странно.
              Ответить
              • какой заряд?
                Ответить
                • Заряд позитива!
                  Ответить
                • Электрический точно, для остальных та же выкладка должна работать с незначительным поправками.
                  Ответить
                  • > остальных
                    А какие ещё есть заряды?
                    Ответить
                    • Заряд позитива!
                      Ответить
                    • С некоторой вольностью можно "зарядами" назвать барионное и лептонное числа и ароматы.
                      Ответить
                  • а с чего вдруг решили, что суммарный кулоновский заряд вселенной должен быть ненулевым?
                    Ответить
                    • А каким же должен быть клоунский заряд?
                      Ответить
                    • Материи и антиматерии в наблюдаемых нами пределах явно не поровну. Если кулоновский заряд в таком случае и нулевой, то с барионным числом точно что-то не так.
                      Ответить
    • Хаскелю всегда плюсую авансом
      Ответить
    • тоже что-ли подучить Хаскель что-бы тешить свое ЧСВ ?
      Ответить
      • Во многой мудрости много печали; и кто умножает познания, умножает скорбь.
        Ответить
      • > подучить Хаскель что-бы тешить свое ЧСВ

        Исследования показывают, что ничего не выйдет.
        https://github.com/Dobiasd/articles/blob/master/programming_language_learning_curves.md
        То ли дело PHP!
        Ответить
        • >python
          >unit tests
          Люто проиграл с этого.

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

              З.Ы. Авторы либ ещё такие ахуенные дефолты выбирают... Опечатался в имени параметра с коннекшн стрингом, так мне sqlite базу в памяти замутили, не кидать же исключение. И я потом долго не мог понять, чё за хуйня творится - вроде всё работает, но данные теряются при каждом рестарте инстанса...
              Ответить
              • Вот никогда не было при работе с сишкой и крестами ощущения работы с опасной бритвой. Куча предупреждений о том что нога находится рядом с траекторией полёта пули, ошибки компилятора, если что не то. В Питоне ИДЕ говорит что всё ОК, в коде тоже всё вроде ок, запускаем и пиздец, всё распидорасило. Оказалось что где-то порядок аргументов перепутал.
                Ответить
                • Тупизация не нужна.
                  Запусти код. Запусти его еще раз.

                  Ладно, на самом-то деле это не говорит что сишка чем-то лучше питуна.
                  Просто гвидо не запилил иде с нормальным линтером, а сишкой обмазываются уже сколько... 40? 50 лет? Блять, да там компилятор задрочен ворнингами настолько уже наизусть все типичные ошибки знает.
                  Ответить
                  • Помните скрипт fuck для шелла? Продолжение:
                    https://github.com/mattdiamond/fuckitjs
                    https://pypi.python.org/pypi/fuckit
                    Ответить
                    • У нас было с собой 2 компилятора, 75 ворнингов, Wall, Wextra, детектор неявных конвертаций для всех типов и целое море море санитайзеров. Не то, что бы это был необходимый набор для работы. Но если начал конпелировать сишку, становится трудно остановиться. Единственное, что вызывало у меня опасения — это Wno-cpp. Нет ничего более беспомощного, безответственного и испорченного, чем выхлоп крестовых шаблоны. Я знал, что рано или поздно мы перейдем и на эту дрянь.
                      Ответить
                      • > Wno-cpp
                        Я сначала подумал, что этот параметр задаёт вопрос «Где здесь C++?», если не находит крестовых конструкций в коде. Полез в хелп — оказалось, что оно тупо игнорирует #warning.
                        Ответить
                        • Крестухи любят бустовый STATIC_WARNING.
                          Без крестошаблонов очевидно не обошлось.
                          Ответить
                          • > STATIC_WARNING
                            Блин кстати, стасик_ассерт добавили в с++11, а стасик_варнинг - нет - фейл
                            Ответить
                  • > нормальным линтером
                    Это ж глобальный анализ программы нужен, чтобы хотя бы понять, чё за объект там передали и какие методы у него есть... И то не факт, что это удастся выяснить...

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

                Я слежу за перепиской наших арэнди (основной продукт написан на сишке), и как они неделями не могут найти почему блять в этом месте вдруг у указателя последняя цифра - 3. И как они каждый день в течении этого времени добавляют "фикс", и как этот фикс проходит 100500 тестов после успешной компиляции, и все равно нифига не помогает - последняя цифра все равно 3, в 0.1% случаев.
                Ответить
                • > может незаметно вернуть знаковый инт в месте где отрицательные значения никто не ждет
                  Ой блять, а в питоне/пыхе/жс она вообще может вернуть флоат или строку...

                  Случай из практики: в питоне либы любят внезапно возвращать байтстринг вместо юникодного или наоборот... И пока он в пределах ascii - всё даже работает, к сожалению...

                  З.Ы. Одно дело, когда тебе извне контракт нарушили и какую-то херню передали. И совсем другое - когда ты даже за свой код не можешь быть уверен (а в питоне/пыхе/жс и прочих у меня именно такое ощущение).
                  Ответить
                  • Так а откуда возьмется в сишке уверенность за свой код, когда в любой момент из любой части программы можно случайно перезаписать все что угодно? В том же ж.скрипте если произойдет ошибка, то ее причину можно легко обнаружить. В сишке - можно жизнь прожить, и так и не найти.
                    Ответить
                    • > В том же ж.скрипте если произойдет ошибка, то ее причину можно легко обнаружить. В сишке - можно жизнь прожить, и так и не найти.

                      lol"d!
                      Дедушка на смертном одре. Внуки, я всю жизнь искал ошибку в pituh.c, "почему последняя цифра указателя иногда бывает 3" и вам завещаю продолжить моё дело.
                      Деда, так вореантность выпадения тройки 10%.
                      Ответить
                      • > почему последняя цифра указателя иногда бывает 3
                        Потому что http://govnokod.ru/20220
                        Ответить
                        • Ну у наших фишка в другом: они знают, что значения иногда используются до инициализации, и поэтому аллокатор на тестовых сборках записывает специальные "отравленые" значения, чтобы потом их можно было найти. Лажа в том, что их можно найти, только если сломается относительно близко к настоящей проблеме, но чаще всего можно только наблюдать косвенные признаки проблемы. Ну и сопутствующая проблема: если "травить" одним и тем же значением - то потом непонятно кто первопричина, а если разными - то потом тяжело доказать, что причина именно в "отравлении", а не случайно похожая запись.
                          Ответить
                          • Под valgrind'ом не получится погонять?
                            Ответить
                            • Под валгриндом погонять - нет, система большая распределенная, с очень активно использующейся многопоточностью. Валгринд будет работать очень долго (часами, если у кого-нибудь терпения хватит), и много чего пропускать / ругаться на легитимные конструкции.
                              Ответить
                        • СУКАКААА!!! Это не может быть совпадением!
                          Ответить
                  • Не, сишка даже хуже путина. Там если распидорасит, так может распидорасить сразу все и притом не в том месте где ошибка, а не как в путине - местами падает при некоторых значениях. Поймал исключение и живешь дальше. Авось полпроекта как-то и работают, пока какой-то питух рядом комитит хотфиксы прямо в продакшен, переписывая контракты, но тк не успевает, то выпускает функционал без половины контрактов верных, но зато большая часть работает, а оставшиеся места постепенно как-то перепишет.

                    Да исключения с стектрейсами - взял и поправил, сразу чо. Можно комитить прямо в продакшен - если раньше падало - можно и сейчас закомитить в модуль под кетчем эксепшенов - хуже не станет
                    Ответить
                  • Выкинь двойку, тебя же на ней ничто не держит?
                    Ответить
                • самый ад -- это сотни сишного кода, запущенного под VxWorks
                  там все процессы^W таски живут в одном адресном пространстве, дальше можете представить
                  Ответить
            • Меня вот подход crystal поражает. Там худшее от двух миров - синтаксис руби, но при этом статическая типизация с выводом типов. Прикол в том что конпелятор выкидывает неиспользуемые методы не конпелируя, поэтому для того чтоб почувствовать профит от статической типизации нужны юниттесты которые будут эти методы вызывать.
              Ответить
              • > чтоб почувствовать профит от статической типизации нужны юниттесты которые будут эти методы вызывать.

                Это примерно как с крестошаблонами. Вдвойне справедливо для старых версий VisualC++.
                Ответить
        • https://github.com/Dobiasd/articles/blob/master/from_goto_to_std-transform.md

          Как это теперь развидеть?
          Ответить
          • Почитать исходники stl или boost.
            Ответить
            • _Если __дать __нормальные _Имена __всем __сщнстм, __Т __будет __вполне __чтм.
              Ответить
          • А что там такого?

            Выделенный жырным момент: это когда кривая производительности начинает идти вниз, а кривая самооценки вверх.
            vector<int> squareVec4(vector<int> v)
            {
                for (int& i : v)
                {
                    i = i * i;
                }
                return v;
            }


            This time the for line already tells the reader that probably every element of v is used, but still only probably.

            Many people stop here, but we can continue do better in terms of readability ease.

            OK, how can we express more clearly without explicit comments what our code does, i.e. make it self explaining?


            vector<int> squareVec5(vector<int> v)
            {
                transform(begin(v), end(v), begin(v), [](int i)
                {
                    return i*i;
                });
                return v;
            }
            Ответить
            • > vector<int> squareVec4(vector<int> v)
              template<class T> T squareVec4(T v)
              auto squareVec4(auto v)
              Да он профи обобщенного кода
              Ответить
              • «In C++14 you would be able to write
                auto auto(auto)
                {
                    auto;
                }
                Compiler will infer the rest from context»
                Ответить
                • Зачем так сложно? Просто одинокое слово auto во всём файле...
                  Ответить
                  • настоящий C++ должен быть уродливым, поэтому нет
                    Ответить
                • ниет. так низя
                  Ответить
                • В варианте K&R можно было даже auto не писать: всегда выводился int как самый естественный тип для процессора, ибо остальные типы не нужны, как не нужны структуры, кроме массивов.
                  Ответить
      • короче если ты пожизни-неасилятор, то чсв решительно упадет
        Ответить
    • > =*=
      Что это за гоатсе-оператор?
      Ответить
      • это еще не разработанный. в хаскеле реально можно ввести гоатсе оператор типа
        =O= или =@=
        Ответить
      • это разработанный оператор сравнения, в который может поместиться банка вайлдкардов
        Ответить
      • Оператор сравнения круглых контейнеров по диаметру
        Ответить

    Добавить комментарий