- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
https://habr.com/ru/post/497114/
А, кстати о темплейтах. Рабочий проект, где каждый .cpp-файл компилируется по 5-7
минут даже без оптимизаций? Время до первой диагностики компилятора в те же 5
минут? Пердёж компилятора на десятки мегабайт в случае ошибок? Да, я сохранял в
файл и замерял ради интереса. Потребление памяти компилятором в 5-10 гигов на
файл? Билдсервер с 32 ядрами и 64 гигами памяти, на которой нельзя запускать
больше чем этак 8 параллельных потоков компиляции? Проект на несколько десятков
kloc, собирающийся на ней полчаса? Получите, распишитесь.
И тулинг. Мне куда проще находить, на что у меня тратится память, в том же хаскеле,
который, как известно, только для факториалов и годится. Системы сборки? Ха. Апгрейд
компилятора для прода? Жди лет пять после релиза стандарта. Пакетный менеджер? Ха-ха.
Reproducible builds? Ха-ха-ха. Все места, где я работал, на это либо вообще забивали,
либо вкладывали какое-то совершенно неадекватное количество ресурсов. Я понимаю,
почему так происходит, у этого всего есть абсолютно логичные и объективные причины,
по-другому и выйти не могло, но я устал так жить.
И их все нужно иметь одновременно, если работаешь над чужими проектами.
То ли дело ассемблер - там всей этой хуйни с алиасингом и UB тупо нет. (хотя на самом-то деле кое в чем UB есть и в ассемблере, но это, сука, надо очень постараться)
Ну и можно тут например почитать про ошибки и варнинги ассемблера https://developer.arm.com/docs/dui0807/e/assembler-errors-and-warnings/list-of-the-armasm-error-and-warning-messages
A1316E: Shifted register operand to MSR has undefined effect
A1319E: Undefined effect (using PC as Rs)
A1320E: Undefined effect (using PC as Rn or Rm in register specified shift)
A1321E: Undefined effect (using PC as offset register)
A1322E: Unaligned transfer of PC, destination address must be 4 byte aligned, otherwise result is UNPREDICTABLE
This error is reported when you try to use an LDR instruction to load the PC from a non word-aligned address. For example:
AREA Example, CODE
LDR pc, [pc, #6] ; Error – offset must be a multiple of 4
END
This code gives an UNPREDICTABLE result.
Компилятором то? Да почти ноль по сравнению с крестами. У йажи конпелятор же вообще игрушечный.
Лолшто. Если от IDE для сраной жабы у тебя комп подтормаживает, то от крестопроекта аналогичных размеров он просто ляжет и больше не поднимется.
Количество файлов и сложность их парсинга и автодополнения там просто несопоставимые.
Жопа в том, что для крестов нет какого-то де-факто способа сборки и доставки зависимостей, как в тех же йаже или педоне. Плюс геморрой с версиями конпеляторов и стандартной либы, особенно на винде. В итоге у всех свои велосипеды со своими костылями и багами.
Видимо у ОПа тупо юзаются конпелятор и либы из системы со всеми вытекающими последствиями.
Докеры-хуёкеры это круто, конечно (отбросим тот факт, что с виндой они буквально год-два как стали более-менее юзабельными). Но людям то хочется и локально с исходниками поработать.
И вот тут-то и начинаются проблемы. Виндовые тулчейны разных версий плохо друг на друга влияют, особенно если тебе дрова собирать. 100500 версий либ надо на диске параллельно держать, а они в крестах далеко не по мегабайту весят, да ещё и умножаются на всякие debug/release да 32/64. Как-то это всё ещё разводить в системе сборки, чтобы лишнего говна не натянуло (а у систем сборки в крестах полно своих заскоков).
Оно реализуемо, конечно, но ОП про неадекватное количество ресурсов не просто так пишет. Там даже на чистом докере без локальной сборки неплохо поебаться придётся.
Но у большинства контор всё проще - некогда с докерами пердолиться, код пилить надо. Собирают тем, что от предков досталось.
Сколько там ваши ноде модулес да жабьи кеши весят то? Пара гигов на тыщу либ? Одна сборка буста весит гига полтора. А их надо хотя бы штуки 4.
> что значит влияют
В основном это проблема с драйверными китами, обычные сдк они походу тестируют. Ставишь новый тулчейн, а предыдущий пошёл по пизде, в нём теперь пары тулов не хватает. Ставишь следующий, а после него у предыдущих какая-то переменная проебалась. Кто с msvc работал - тот в цирке не смеётся.
> почему не унифицировать софт
Потому что если удобной и быстрой доставки всего этого говна нет, люди будут собирать тем, что у них на компе завалялось. Пока совсем собираться не перестанет. Реальность она такая.
А если потом ньюфагу надо собрать древнюю ветку - это отдельное веселье :)
Кстати да, подтверждаю. У меня папка с либами «Vcpkg» (там буст для x64-windows и x64-windows-static и ещё пара мелких либ) весит «2.99 ГБ (3 219 287 415 байт)», а внутри — «Файлов: 57 155; папок: 4 699».
Питон с ждк весят сраные копейки, да и к системным путям гвоздями не прибиты. Их можно даже в репу закоммитить и никто не заметит, лол. И если в прыщах тулчейн можно отпилить от системных путей путём его пересборки, то с доставкой msvc всё гораздо веселее.
Ну да, там будут проблемы похуже, но этой проблемы там нет :)
К слову, у майков таки есть готовый докерный образ msvc, но это прям совсем свежатина. Ну и раньше был автономный пакет, но у него свои заморочки (чего-то там не хватало, не помню уже).
Да если бы только буст... Почти любая крестолиба в собранном виде весит дохуя. И твой код тоже будет весить дохуя. Потому что 90% этого веса - отладочная инфа.
Х.з., чтобы линкеру сами dll'ки для сборки не требовались?
На самом деле мне виндовая реализация динамических библиотек больше нравится. Всё-таки символ ищется в конкретной dll'ке. А в прыщах он уже в рантайме берётся из первой попавшейся.
Да, на венде символ привязан к конкретной дллке, на прыщах он берётся из рандомной сошки. Предвижу ответ "а ты символы не повторяй и всё будет норм".
Если гнутый - то cmake, автолулзы, qmake и b2.
Проблема в том, что тебе придётся юзать и собирать либы с разными системами сборки. И твой личный выбор их авторов не ебёт.
>Если гнутый - то cmake, автолулзы, qmake и b2.
А ещё всякие ninja и mesonы.
https://github.com/systemd/systemd/pull/6266
При том, что это пример из практики разработки на с++. Можешь привести подобный пример из практики разработки под йажу или питон? Я думаю нет.
Но как-то вылезла проблема с превышением длины mangled-имен (лимит то ли 64 Кб, то ли больше).
А ты на нём на работе пишешь или дома?
Есть ли вообще вакансии, проекты? Какой класс задач стоит решать с D, если это хобби?
У меня валяется книжка Александреску редакции начала десятых, но она увы как памятник.
По мне так в D хорошо писать сетевые тулзы/сервера, т.к. есть либа vibed на фиберах, т.е. он подходит для тех же целей, для которых создавался Go.
Проекты и конторы использующие есть, вакансий не видел.
Я понимаю, что это гуглится, но интереснее послушать из первых рук.
А ты на нём на работе пишешь или дома?
Есть ли вообще вакансии, проекты? Какой класс задач стоит решать с J, если это хобби?
Какой багор )))
А в крестах там можно? Сделать какую-нибудь рекурсивную экспоненциальную питушню.
> Остальные пыхеры с жабоебами слишком тупы
PHP (5585)
C++ (2489)
Java (1441)
Если пользоваться твоей классификацией, то эрэнэрщики умнее крестовиков более, чем в два раза. А вот йажевики да, потупее будут.
https://habr.com/ru/post/142140/
Пока искал статью, наткнулся на другую, с впечатляющим названием:
https://habr.com/ru/post/215777/
питухи думают, что проблема пхп была в плохой реализации ООП, лол
Я мельком глянул, а там какие-то килобайты текстовой психозы, потом пара примеров кода, потом снова психоза. Что-то там про тупых программистов, которые используют питушню в качестве инструментов (не знаю, лучше ли было повысить порог вхождения, чтобы только доктора наук осилили?), что-то ещё.
Примеры какие-то питушарские
Такое ощущение, что у автора проблемы с абстракциями, и он пришёл из какой-нибудь вербозной йажи. Или с PHP, где во всех случаях вместо null возвращают false. Мне кажется, все написали бы
И проверяли бы так:
Хотя, я, разумеется, привык к языку, а он развивает абстрактность мышления и чувство семантики.
1. "== false" использовал редко, в основном в рамках триады true/false/null, когда == false отличается от !
2. "!" использую, когда автор сказал бы "== false"
3. "== null" использую для сравнения с пустотой - отсутствием поля либо явно возвращённой нулстотой
4. "!!" или "Boolean" - когда надо кастануть в Boolean, .filter(Boolean) - когда надо убрать пустошню
5. "" использую, когда автор сказал бы "== true"
И теперь мне чуть больше понятен бугурт автора
1. ! работает для false, 0, "", null, undefined
2. == false работает для false, 0, ""
3. === false работает только для false
Какой багор )))
P.S. Но явное "== false" - питушня вербозная.
Если случайно выбрать не то поле и подставить вместо пароля undefined, то создастся пользователь с паролем "undefined". Если тот же код использовать и при проверке пароля, на сайт можно будет ещё и заходить. Разумеется, с любым паролем.
Отличный способ выстрелить себе в ногу.
Человек под ником zviryatko получает от меня лучи добра и уважения в далекий 2014-й.
"Linking Weka's code fails with a threshold of 500: phobos contains a few large symbols (one larger than 8kb!) "
На «MSVC» можно прямо mangled имя получить через нестандартный («raw_name()»):
Выведет:
c++filt, во.
Какой багор (((
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1396654
Приходилось через c++filt пайпать выхлоп.
Судя по репортам он и в 15ой и в 17ой, и в 18ой, итд.
(UPD: встретил этот баг в реальном мире на своём компе, когда расследовал — нашёл его в исходниках «OpenJDK».)
Они были известны своим похуистичным отношением к багам.
UPD: я так понял по Russian, что это личная находочка.
Не, я на этот баг только два года назад наткнулся. Потом только погуглил хорошенько и нашёл ещё и чей-то репорт.
На SO хинты, в стиле: скачайте исходники, поправьте седом пару строк и пересоберите perf.
https://stackoverflow.com/questions/33057653/perf-enable-demangling-of-callgraph/34061874#34061874
При том там попутно куча всякой питушни вылезет, при компиляции.
Потом нужно запаковать это в deb и проинсталлить, что превращается в квест на целый день. А всё из-за косоруких уебней, не желающих нормально чинить баги.
Если смотреть с этой точки зрения та же слака будет попроще.
Тут недавно https://govnokod.ru/26589#comment541916 репортили об установке серверной убунты.
Да и Роман когда-то рассказывал, что в Яндексе жарились с переходом с 14ой на 16ю.
Нахуй и в пизду. Всё, что я пересобрал, я тупо накатываю в /opt/<имя проги>
Да ладно? Слакбилды как раз tar'ки делали последним шагом. В них даже установочный скрипт можно было присунуть, насколько я помню.
Собственно подобной хуйнёй я и собираю бинарники для /opt.
В path далеко не всё нужно. Да и с ld path особых проблем не помню.
На самом деле, в убунте что-то пересобирать надо довольно редко, поэтому мне тупо лень разбираться с пакетами.
Да банальным враппером на шелле. Я не хочу пересобранные либы всей системе показывать - ей от этого может стать плохо. Именно поэтому я против установки чего-либо в системные каталоги.
Да ну, казуальщина всякая. Какой-нибудь gcc'шный тулчейн под arm. Няшный ffmpeg во времена унылого avconf'а и т.п.
Уже давно ничего не собирал, на самом деле. Совсем охомячился.
Время от времени к алфавиту манглинга добавляются новые буквы из-за того, что в языке появляются новые конструкции.
Первый пример (.?AU?$integer_sequence@H$0A@$00$01$02$0 3$04$05$06$07$08$09$0L@$0M@$0N@$0O@$0P@$ 0BA@$0BB@$0BC@$0BD@$0BE@$0BF@$0BG@$0BH@$ 0BI@$0BJ@$0BK@$0BL@$0BM@$0BN@$0BO@$0BP@$ 0CA@$0CB@$0CC@$0CD@$0CE@$0CF@$0CG@$0CH@$ 0CI@$0CJ@$0CK@$0CL@$0CM@$0CN@$0CO@$0CP@$ 0DA@$0DB@$0DC@$0DD@$0DE@$0DF@$0DG@$0DH@$ 0DI@$0DJ@$0DK@$0DL@$0DM@$0DN@$0DO@$0DP@$ 0EA@$0EB@$0EC@$0ED@$0EE@$0EF@$0EG@$0EH@$ 0EI@$0EJ@$0EK@$0EL@$0EM@$0EN@$0EO@$0EP@$ 0FA@$0FB@$0FC@$0FD@$0FE@$0FF@$0FG@$0FH@$ 0FI@$0FJ@$0FK@$0FL@$0FM@$0FN@$0FO@$0FP@$ 0GA@$0GB@$0GC@$0GD@@std@@) можно разманглить обратно с помощью какой-то утилиты (что-то типа «demangle»), второй пример (.??@e478c360da54a681ea25f5e24da4d618@) похож на криптографическую сумму, которую напрямую разманглить нельзя. Во втором примере спасут только символьные файлы.
Надо хешировать. Чтоб вместо "my_very_long_shitty_mangled_name" было md5("my_very_long_shitty_mangled_name")
> sumanai
> сегодня в 16:41
> Как будто в оригинале оно в 100% случаев верное. Ошибки есть везде.
> Моей разработке (бекенд на PHP) известные ошибки WSL не мешают.
пока читал первую строчку, удивлялся такому ответу
Первые сборки WSL конечно трешовые были, но в последних виндах они вполне рабочие.
А я тут говорил много лет назад, что не стоит серьёзно морочить себе голову этой хуетой.
Я не прочитал ни одной статьи по плюсам с прошлого лета, и мне офигенно.
Я не написал ни строчки осмысленного кода на плюсах за последние три месяца, с тех пор, как распустили отдел, где я работал, и мне просто супер.
Я позволил себе хотеть больше никогда не писать на плюсах, и у меня появились крылья.
Читал и мысленно комментировал сентециями с ебаного.it.
Чувствую себя, как пустой сосуд, зато счастливый.
>Использовать строки, где внутри char*, не думая об алиасинге? Нельзя.
>паддинг
>алиасинг
Сишкопроблемы.
Кстати Царь же пояснял что PODы в общем не нужны, и нужно юзать массивы.
Но анскильные животные как обычно не послушали.
Там в треде остро не хватает Царя. Rust-сектанты распоясались, некому урезонить анскильных питухов.
В C++ одного знания синтаксиса мало. Там надо умение писать и читать всякую метушню на шаблоноговне, понимать что вот так делать можно, а вот так нельзя потому что UB, знание всяких подводных камней, best practices и далее по списку. И да, вся эта херня достаточно много ценности программиста составляет, и она завязана на конкретный говноязык.
например?
> в том языке к этому может быть совсем другой подход.
Это правда, но такая хрень есть со всеми языками.
Переходя на новый язык, петух берет с собой в голове частичку старого.
Я видел как жабисты писались на питоне писать как на жабе, например (один файл -- один класс, сеттеры/геттеры итд)
>например?
Например, нахуй тебе знать про то, что в крестоговне вот та хуйня UB а вот та хуйня не UB, есть public private protected, множественное наследование, friend классы, если ты пишешь на каком-нибудь языке, где этой херни просто нет, типа хаскеля?
Есть языки, где нет
> Они в джаве есть, и в C#
Есть языки, где нет
> Оно есть в питоне, и даже активно используется
Есть языки, где нет
> а, ты говорил про конкретный язык) А я думал вообще про любой.
Я говорил что некая питушня в каком-то другом языке может быть нахуй не нужна. Про любой - не любой я вообще не уточнял.
> Есть языки, где нет
Это только те хорошие языки, где код просто не скомпилируется, если ты не докажешь, что вон в ту функцию передал отсортированный массив квадратов простых чисел, лежащих в пределах от 100500 до 10005000. В остальных найдётся контрактная питушня, которая за себя не отвечает. Не так разрушающе, как UB, но по эффектам где-то на том же уровне.
>Они в джаве есть, и в C#
Синтаксический мусор для анскильных отбросов.
Единственный полезный модификатор — сопзт.
Но его отребье украло из Сишки.
Хотя возможно стоило сделать наоборот — немутабельные по умолчанию, и модификатор для включения мутабельности.
Хотим read-only? @lombok.Getter
Хотим write-only? @lombok.Setter
Хотим public? @Getter @Setter
Хотим transient? @JsonIgnore
Хотим private? Ничего не пишем, оставляем package private
Из них можно собрать что угодно, написав ЛЮБУЮ логику обработки.
Допустим в жабе из коробки нету никакого write-only модификатора.
Я так когда-то ставил квоты количества запросов по rmi.
А классы, имеющие доступ матчить хоть по регулярке.
Так и есть.
АОП кстати в последнее время часто ебошат именно аннотациями. Всякие @Around и @Before
>запахло питонячими декораторами
Да. По сути то же, только более оопешно и строготипизированно.
Раньше для этих целей использовали маркерные интерфейсы.
Сейчас завезли сложную систему аннотаций с метаданными.
Зачем питушиться с модификаторами — загадка.
GC можно отключать в любом месте атрибутом @nogc.
Но наличие GC ломает привычный подход с RAII.
Итог - сойдет вместо питона для среднего размера скриптов (особенно если GIL напрягает).
Без RAII писа́ть можно, но придётся себя контролировать, чтобы не забыть что-то освободить.
Кстати, почему в веб-браузерах утечки памяти, хотя их писа́ли на языках с RAII?
При использовании с «FastCGI» обычно даже сбрасывают FastCGI-сервер через каждые 500 запросов, чтобы нейтрализовать утечки в самом интерпретаторе, если таковые вдруг имеются.
https://govnokod.ru/26026#comment514049
Вообще в настройках интерпретатора есть параметр memory_limit, ограничивающий выделение памяти.
https://www.php.net/manual/ru/ini.core.php#ini.memory-limit
GC заметает мемори лики под ковер усложняя их поиск, вот и всё
Например, написа́ть программу, которая вычисляет сумму 100 чисел. Поскольку размер известен, память будет выделяться статически. А если нужно сложить 199 чисел, нужно просто эту программу вызвать два раза (при втором вызове вместо одного аргумента подставить результат первого вызова).
$ acummulate sum 199
Фортеры засели в большинстве своём в омерике, в среде контроллеров трамваев и прочего лоу левел.
Хотя в рашке были удачнве попытаки на десктоп и серверные, но сейчас почему-то тишина.
Я вот на ARM'овом контроллере без всяких биосов могу свой код запустить и с железом напрямую работать. Доступ к флешке есть, в сериал порт срать можно. Значит я запускаю свой код на операционке нулевого размера? Лол.
что не так?
Или это про (U)EFI?
ЗЫ. ненавижу грамматики 0 уровня
Говно в том, что рантайм D требует этот GC и если постоянно его держать выключенным, память утечет.
Я пытаюсь понять, чего боится j123123.
Значит, кучу фишек мы использовать не сможем. Это плохо. С другой стороны, ничего не утечёт, потому что функции, требующие сборщика мусора, мы вызвать не сможем.
В языке D это иначе.
Значит, если указать @nogc в мейне, то мы вообще не сможем из программы вызывать функции, которые используют мусоросборщик.
Параметры: totalSize
Объем памяти в байтах для выделения без запуска сборки мусора. Он должен быть меньше или равен размеру временного сегмента.
Если я правильно понял, он выделяет блок памяти, но внутри NoGCRegion временно приостанавливает сборку. Это всего лишь временная задержка сборки мусора, чтобы увеличить скорость на участке, обрабатывающем что-нибудь в реальном времени.
>Для общего развития давно уже хочу освоить Python, но отпугивает толщина
лол, кажется что проще выучивания питона ничего не может быть. Разве что пивка попить проще
Angiotensin-converting enzyme, он же ангиотензин-превращающий фермент?
Формат архива, который разрабатывали как альтернативу «RAR»?
Выглядела такой же страшной как CORBA. Никогда не пользовался.