Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
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
позвольте, я объясню: вас, сударь, просто занесло во вселенную с закрытой фридмановской метрикой
свет, который отражается от вашей спины, проходит через всю вселенную и попадает вам же в глаза
хм, а как она может быть связана с космологическими моделями?
Фридман, когда их решал, ничего про слабое взаимодействие и не знал /me: http://imgs.xkcd.com/comics/impostor.png
Материи и антиматерии в наблюдаемых нами пределах явно не поровну. Если кулоновский заряд в таком случае и нулевой, то с барионным числом точно что-то не так.
Два чая этому сэру. Пока бесконечный сток кодил - изматерился. А теперь рефакторить боюсь, т.к. тесты лень писать было. После уютных сишки и крестов, которые тебе хотя бы опечатки отлавливают, это пиздец какой-то...
З.Ы. Авторы либ ещё такие ахуенные дефолты выбирают... Опечатался в имени параметра с коннекшн стрингом, так мне sqlite базу в памяти замутили, не кидать же исключение. И я потом долго не мог понять, чё за хуйня творится - вроде всё работает, но данные теряются при каждом рестарте инстанса...
Вот никогда не было при работе с сишкой и крестами ощущения работы с опасной бритвой. Куча предупреждений о том что нога находится рядом с траекторией полёта пули, ошибки компилятора, если что не то. В Питоне ИДЕ говорит что всё ОК, в коде тоже всё вроде ок, запускаем и пиздец, всё распидорасило. Оказалось что где-то порядок аргументов перепутал.
Тупизация не нужна.
Запусти код. Запусти его еще раз.
Ладно, на самом-то деле это не говорит что сишка чем-то лучше питуна.
Просто гвидо не запилил иде с нормальным линтером, а сишкой обмазываются уже сколько... 40? 50 лет? Блять, да там компилятор задрочен ворнингами настолько уже наизусть все типичные ошибки знает.
У нас было с собой 2 компилятора, 75 ворнингов, Wall, Wextra, детектор неявных конвертаций для всех типов и целое море море санитайзеров. Не то, что бы это был необходимый набор для работы. Но если начал конпелировать сишку, становится трудно остановиться. Единственное, что вызывало у меня опасения — это Wno-cpp. Нет ничего более беспомощного, безответственного и испорченного, чем выхлоп крестовых шаблоны. Я знал, что рано или поздно мы перейдем и на эту дрянь.
> Wno-cpp
Я сначала подумал, что этот параметр задаёт вопрос «Где здесь C++?», если не находит крестовых конструкций в коде. Полез в хелп — оказалось, что оно тупо игнорирует #warning.
> нормальным линтером
Это ж глобальный анализ программы нужен, чтобы хотя бы понять, чё за объект там передали и какие методы у него есть... И то не факт, что это удастся выяснить...
Строки с числами не складывает, да параметры считает у функций - и на том спасибо... Всё-таки не полный мрак, как в экмаскрипте.
Ой да ладно. В сишке-то ощущение защищенности? От того ли, что всякая системная херня может незаметно вернуть знаковый инт в месте где отрицательные значения никто не ждет (типа размер файла), и как результат запороть память где-то вообще хер знает где, а потом по кор дампам гадать где же в миллионе строк нужных для того, чтобы прочитать строку из файла кроется эта херня?
Я слежу за перепиской наших арэнди (основной продукт написан на сишке), и как они неделями не могут найти почему блять в этом месте вдруг у указателя последняя цифра - 3. И как они каждый день в течении этого времени добавляют "фикс", и как этот фикс проходит 100500 тестов после успешной компиляции, и все равно нифига не помогает - последняя цифра все равно 3, в 0.1% случаев.
> может незаметно вернуть знаковый инт в месте где отрицательные значения никто не ждет
Ой блять, а в питоне/пыхе/жс она вообще может вернуть флоат или строку...
Случай из практики: в питоне либы любят внезапно возвращать байтстринг вместо юникодного или наоборот... И пока он в пределах ascii - всё даже работает, к сожалению...
З.Ы. Одно дело, когда тебе извне контракт нарушили и какую-то херню передали. И совсем другое - когда ты даже за свой код не можешь быть уверен (а в питоне/пыхе/жс и прочих у меня именно такое ощущение).
Так а откуда возьмется в сишке уверенность за свой код, когда в любой момент из любой части программы можно случайно перезаписать все что угодно? В том же ж.скрипте если произойдет ошибка, то ее причину можно легко обнаружить. В сишке - можно жизнь прожить, и так и не найти.
> В том же ж.скрипте если произойдет ошибка, то ее причину можно легко обнаружить. В сишке - можно жизнь прожить, и так и не найти.
lol"d!
Дедушка на смертном одре. Внуки, я всю жизнь искал ошибку в pituh.c, "почему последняя цифра указателя иногда бывает 3" и вам завещаю продолжить моё дело. Деда, так вореантность выпадения тройки 10%.
Ну у наших фишка в другом: они знают, что значения иногда используются до инициализации, и поэтому аллокатор на тестовых сборках записывает специальные "отравленые" значения, чтобы потом их можно было найти. Лажа в том, что их можно найти, только если сломается относительно близко к настоящей проблеме, но чаще всего можно только наблюдать косвенные признаки проблемы. Ну и сопутствующая проблема: если "травить" одним и тем же значением - то потом непонятно кто первопричина, а если разными - то потом тяжело доказать, что причина именно в "отравлении", а не случайно похожая запись.
Под валгриндом погонять - нет, система большая распределенная, с очень активно использующейся многопоточностью. Валгринд будет работать очень долго (часами, если у кого-нибудь терпения хватит), и много чего пропускать / ругаться на легитимные конструкции.
Не, сишка даже хуже путина. Там если распидорасит, так может распидорасить сразу все и притом не в том месте где ошибка, а не как в путине - местами падает при некоторых значениях. Поймал исключение и живешь дальше. Авось полпроекта как-то и работают, пока какой-то питух рядом комитит хотфиксы прямо в продакшен, переписывая контракты, но тк не успевает, то выпускает функционал без половины контрактов верных, но зато большая часть работает, а оставшиеся места постепенно как-то перепишет.
Да исключения с стектрейсами - взял и поправил, сразу чо. Можно комитить прямо в продакшен - если раньше падало - можно и сейчас закомитить в модуль под кетчем эксепшенов - хуже не станет
Меня вот подход crystal поражает. Там худшее от двух миров - синтаксис руби, но при этом статическая типизация с выводом типов. Прикол в том что конпелятор выкидывает неиспользуемые методы не конпелируя, поэтому для того чтоб почувствовать профит от статической типизации нужны юниттесты которые будут эти методы вызывать.
В варианте K&R можно было даже auto не писать: всегда выводился int как самый естественный тип для процессора, ибо остальные типы не нужны, как не нужны структуры, кроме массивов.
свет, который отражается от вашей спины, проходит через всю вселенную и попадает вам же в глаза
Фридман, когда их решал, ничего про слабое взаимодействие и не знал
/me: http://imgs.xkcd.com/comics/impostor.png
А какие ещё есть заряды?
просто в карму, не на гк
Там уже некуда(
Исследования показывают, что ничего не выйдет.То ли дело PHP!
>unit tests
Люто проиграл с этого.
И в жабе после паттернов эффективность должна по идее падать.
З.Ы. Авторы либ ещё такие ахуенные дефолты выбирают... Опечатался в имени параметра с коннекшн стрингом, так мне sqlite базу в памяти замутили, не кидать же исключение. И я потом долго не мог понять, чё за хуйня творится - вроде всё работает, но данные теряются при каждом рестарте инстанса...
Запусти код. Запусти его еще раз.
Ладно, на самом-то деле это не говорит что сишка чем-то лучше питуна.
Просто гвидо не запилил иде с нормальным линтером, а сишкой обмазываются уже сколько... 40? 50 лет? Блять, да там компилятор задрочен ворнингами настолько уже наизусть все типичные ошибки знает.
https://github.com/mattdiamond/fuckitjs
https://pypi.python.org/pypi/fuckit
Я сначала подумал, что этот параметр задаёт вопрос «Где здесь C++?», если не находит крестовых конструкций в коде. Полез в хелп — оказалось, что оно тупо игнорирует #warning.
Без крестошаблонов очевидно не обошлось.
Блин кстати, стасик_ассерт добавили в с++11, а стасик_варнинг - нет - фейл
Это ж глобальный анализ программы нужен, чтобы хотя бы понять, чё за объект там передали и какие методы у него есть... И то не факт, что это удастся выяснить...
Строки с числами не складывает, да параметры считает у функций - и на том спасибо... Всё-таки не полный мрак, как в экмаскрипте.
Я слежу за перепиской наших арэнди (основной продукт написан на сишке), и как они неделями не могут найти почему блять в этом месте вдруг у указателя последняя цифра - 3. И как они каждый день в течении этого времени добавляют "фикс", и как этот фикс проходит 100500 тестов после успешной компиляции, и все равно нифига не помогает - последняя цифра все равно 3, в 0.1% случаев.
Ой блять, а в питоне/пыхе/жс она вообще может вернуть флоат или строку...
Случай из практики: в питоне либы любят внезапно возвращать байтстринг вместо юникодного или наоборот... И пока он в пределах ascii - всё даже работает, к сожалению...
З.Ы. Одно дело, когда тебе извне контракт нарушили и какую-то херню передали. И совсем другое - когда ты даже за свой код не можешь быть уверен (а в питоне/пыхе/жс и прочих у меня именно такое ощущение).
lol"d!
Дедушка на смертном одре. Внуки, я всю жизнь искал ошибку в pituh.c, "почему последняя цифра указателя иногда бывает 3" и вам завещаю продолжить моё дело.
Деда, так вореантность выпадения тройки 10%.
Потому что http://govnokod.ru/20220
Да исключения с стектрейсами - взял и поправил, сразу чо. Можно комитить прямо в продакшен - если раньше падало - можно и сейчас закомитить в модуль под кетчем эксепшенов - хуже не станет
там все процессы^W таски живут в одном адресном пространстве, дальше можете представить
Это примерно как с крестошаблонами. Вдвойне справедливо для старых версий VisualC++.
Как это теперь развидеть?
Выделенный жырным момент: это когда кривая производительности начинает идти вниз, а кривая самооценки вверх.
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?
template<class T> T squareVec4(T v)
auto squareVec4(auto v)
Да он профи обобщенного кода
Что это за гоатсе-оператор?
=O= или =@=