- 1
Просто оффтоп #9
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
Просто оффтоп #9
#1: https://govnokod.ru/20162 https://govnokod.xyz/_20162
#2: https://govnokod.ru/25329 https://govnokod.xyz/_25329
#3: https://govnokod.ru/25415 https://govnokod.xyz/_25415
#4: (vanished) https://govnokod.xyz/_25472
#5: https://govnokod.ru/25693 https://govnokod.xyz/_25693
#6: (vanished) https://govnokod.xyz/_26649
#7: https://govnokod.ru/26672 https://govnokod.xyz/_26672
#8: https://govnokod.ru/26924 https://govnokod.xyz/_26924
Этот оффтоп сгенерирован автоматически.
Индекс оффтопов: https://index.gcode.space/.
Зеркала Говнокода и полезные ресурсы:
* https://govnokod.xyz/ (альтернативный Говнокод)
* https://gcode.space/ (read-only зеркало Говнокода)
* https://t.me/GovnokodBot (Говнокод-бот в «Telegram»)
* https://t.me/GovnokodChannel (Тематический канал в «Telegram»)
* https://vorec.space/ (глоссарий Говнокода)
Российские ученые разморозили несколько доисторических червей, и двое проснулись
Эти два червя, собранные из вечной мерзлоты в Арктике, были среди 300 размороженных для анализа в 2018 году
После оттаивания два червя начали двигаться и есть. Одному 32 000 лет, а другому 41 700 лет.
Почему двач? Вот почему, там смешнявка:
По новым сведениям динозавры вообще не были ящерами, а были пернатыми. Короче это просто очень большие петухи. Зачем тебе очень большие петухи? Ты петух?
Ну то есть даже третьего перла не видели, да?
Классический UNIX:
Устройство могло быть блочным (диск, лента) или символьным (терминал, ком порт, тот же самый терминал)
Символьные устройства не кешировались, а блочные всегда кешировались.
Чтобы иметь доступ к диску без кеша (например, для разбиения его) одно устройство
могло иметь два разных /dev :блочное и символьное. В солярис до сих пор так.
Solaris:
блочные устройства кешируются, символьные нет.
Диск может иметь два устройства: символьное и блочное.
NT:
Разделения на устройства нет: устройства не кешируются (если драйвер явно не включил кеш),
так что кеширование происходит только на уровне файловой системы.
Руссинович утверждает, что это позволяет не переводить виртуальные блоки (в терминах ФС)
в логические (в терминах LBA) лишний раз, а так же поддерживать работу с устройствами
напрямую, если софт сам делает кеш (MS-SQL)
FreeBSD:
От блочных устройств попросту отказались: стало примерно как в винде.
Linux:
Есть и блочные, и символьные. Диски блочные.
Символьные устройства кешировались файловой системой на уровне VFS (как в винде)
Блочные тоже кешировались своим кешем (см page cache vs buffer cache).
Сначала каждый диск имел два устройства (как в UNIX и Solaris), Oracle даже
советовал использовтаь явно символьное (у оракла свой кеш)
С версии 2.2 стало можно отказатьсяя от кеша у блочного устройства с помощью O_DIRECT.
Но данные кешировались два раза (в VFS и на уровне блочного устройства)
С версии 2.6 кеш объденили (теперь в блочном кеше тупо ссылки на кеш VFS).
Вы за какой подход?
https://www.freebsd.org/doc/en_US.ISO8859-1/books/arch-handbook/driverbasics-block.html
Значит, «сикабельность» не имеет отношения к блочности, и могут быть блочные устройства без seek и символьные с seek?
(c) Морис Бах
Архитектура UNIX.
Кстати, у лент не было файловой системы: отсюда у нас tar и cpio
У терминала сикабельности не было по понятным причнам
Тащемто Stream во многих языках наследник той самой ленты
Зато я помню, что какие-то чуваки в 90-х пытались использовать видео-кассеты для хранения данных. Погугли "АрВид -- Архиватор на Видео" . Делали это хитрые на выдумку наши соотечественники.
А обосраться на несовместимости стандартов всегда все умели: DVD+R, DVD-R
Я обратил внимание на интересное расширение уже существующего формата: они к кассете DV добавили микросхемку, запоминающую позицию ленты. Это упрощает поиск, хотя seek всё равно дорогой.
Про «Арвид» слышал. Вроде предел ёмкости трёхчасовой VHS-кассеты около четырёх гигов. «Арвид» хранил один гигабайт, чтобы обеспечить сохранность данных на затёртой ленте. По тем временам даже это казалось очень много.
А правда что ДевоПсы умеют и код писать и на сервак деплоить?
Наверное под поезд нырнул
У нас дево-псы на питоне пишут лямбдлы для амазона, обрабатывают всякие говнособытия.
Но на самом деле хорошие админы всегда умели скрипитовать. Совсем не пишут кода только попингуи-эникейщики. Зато они умеют заряжать картриджи от струйных принтеров
Какой анскилл )))
Какой контент!
Какой скилл )))
яичко у меня тривиали копибл, и вообще это инт там или хендл какой, так что вызов почти бесплатен
кстати, а можно его инлдайнуть?
Кстати, а как такую фабрику написать? Через вспомогательную анскильную функцию createKoko(KokoType t), в которую можно, в принципе, и темплейтов добавить, чтобы было скилльно, или с помощью дружественного класса, а в исходном сделать приватными конструкторы?
Или, может быть, в самом классе для этого сделать статический метод (тоже с приватными конструкторами)?
В моем коде я оперирую указателем на Petuh. Но содержание петуха мне похуй. И чтобы не инклудить себе неебический Petuh.h (мне похуй на precompiled headers пока) я делаю неполный класс:
class Petuh;
и теку. А дальше комилятор разберется.
Лучше сделай каст в инт, потому что у тебя указатель на тощего питуха без полей будет немножко отличаться от указателя на толстого бойсового питуха, которого ты боишься инклюдить, а значит можно как-то проебаться, наверное.
Хотя если ты потом этот указатель скормишь модулю, где про питуха знают, то ничего случиться не должно, указатель же на начало указывает, а длина последовательности байтов уже берется в соответствии с типом указателя.
В общем, написание «квази-питуха» – это кмк анскил и говнокод, я бы так не сделал )))
Но и в инт я бы не кастил, а то потом программу будет сложно перенести с 16-битной системы на 32-х битную.
Нифига себе! Век живи, век учись (постом выше дезинфа).
Не в int, а в uintptr_t.
а не статическую он может прокопировать везде (если она инлайн) или вставить там адрес ее (и дальше уже линкер как-нить разбереца)?
А откуда ты взял это? Почему это вдруг redundant?
ps: во
https://i.postimg.cc/7LMpfVJQ/bagor.png
https://godbolt.org/z/eK39nT - для "ICC". На компиляторе "GCC" и "Clang" я реального примера не нашел.
Напишу-ка я им баггу
мож это специфичная на VC хуйня?
Но из той же вижуалстудии (как IDE) вполне можно компилировать каким-то другим компилятором, например тем же ICC. Или этот решарпер как-то особо настраивается на какой-то конкретный компилятор?
На O2 норм.
Оптимизация по размеру - странная хуйня. У меня в msvc иногда почему-то при оптимизации по скорости бинарь получался меньше.
Видимо всем похуй на неё, вот и багует.
static в крестах означает "только в этой единице трансляции". Ты можешь иметь разные одноименные статики в разных единицах трансляции. В каждой будет своя копия (если все вызовы проинлайнились - не будет). Некоторые крестобляди считают что статик не нужен т.к. есть анонимные неймспейсы.
inline в крестах означает... нет, не просьбу заинлайнить. А указание, что одноименные функции с inline линкер может смержить в одну. Её реализация во всех единицах трансляции обязана быть одинаковой. Иначе нарушение ODR и UB (линкер выберет случайную из них). Методы классов автоматом получают inline, поэтому с ними нет проблем в хедерах. Свободные функции с телом в хедере надо пометить самому.
Инлайнить конпелятор может все что ему вздумается (если ты не юзаешь расширение noinline).
А static inline для крестов - это какая-то неведомая хуйня. Я даже не скажу, что должно получиться в итоге. Скорее всего статик победит и функция не дойдет до линкера, поэтому инлайн заигнорится.
З.Ы. В няшной другие правила про инлайн.
Теперь понятно, что external linkage функция (static или функция анонимного неймспейса), невидимая снаружи модуля трансляции (это я знал, так как это совпадает с няшной) не имеет смысла быть inline, ведь линкеру не придется ничего смердживать.
Как же мне намекнуть компилятору, что я хотел бы заинлаить это говно внутри модуля? не макрос же делать.
Использовать кастомные расширения типа always_inline?
Или не пытаться руками крутить колеса у едущего автомобиля (Перефразируя Пи) ?
кстати, о дублировалии символов в единицах трансляции и страдании линкера
знаешь такую тему -- COMDAT?
https://stackoverflow.com/questions/1834597/what-is-the-comdat-section-used-for
Кстати, начиная с с++17 можно инлайн переменные мутить (да, звучит как бред, кресты такие кресты).
Зачем нам придумывать новые ключевые слова, ведь от этого может поломаться код? Кто-то мог таким именем назвать какую-нибудь переменную или еще какую-то хуйню! Лучше возьмем уже известное ключевое слово, и чтоб оно делало какую-то хуйню для какой-то другой хуйни, где оно раньше не имело смысла. Давно уже пора неймспейсы для ключевых слов запилить.
Разница между static inline и просто static может интерпретироваться компилятором как подсказка типа "ты попробуй по возможности заинлайнить эту функцию". Чтобы более детально разобраться, можно попробовать проштудировать стандарт крестоговна и там найти про то, как static и inline взаимодействуют для функции (правда может оказаться, что там нихуя нет про это), но вряд ли там будет написано "если у вас static функция, то если добавить еще и inline, то нихуя не изменится, и компилятор обязательно сгенерирует точно такой же код, как и просто static". Так что эта жалоба от ReSharper - «'inline' specifier is redundant on a global static function» является хуйней. Разница вполне может быть.
10.1.6 The inline specifier
> The inline specifier indicates to the implementation that inline substitution of the function body at the point of call is to be preferred to the usual function call mechanism.
§ 9.2.7/2, N4842
Так что да, «static inline» может отличаться от «static».
И все выходы тоже х1. Может это просто ширина шин? Типа х1, х8, х16?
Только вот меня не наебали. Я сразу заподозрил, что это хуйня какая-то.
https://ibb.co/TK4dVFc
Номер и дата основания для внесения в реестр | Орган, принявший решение о внесении в реестр | Ограничение доступа
2020-10-26-2801 от 29.10.2020 | МВД | ограничивается к странице
Попал под раздачу.
А тут говнокода нет... Вернее, говнокод наверняка есть, но информации про сайт «govnokod.ru» там нет.
на наш сайтик прокрался мусор, и нашел крамолу и заблочил его.
страйко теперь сядет на пять лет за пропаганду пе ха пе
За гречу и проституток в самаре
Вселенной не нужно, чтобы мы успели перекатить 100 оффтопов до нового года.
И в этом я с ней согласен.
У меня заболочено с МТСа.
http://govnokod.ru/32
https://govnokod.ru/32
https просто не открывается, http - заглушка ровайдера
А https на говнокоде нет в принципе.
Там видимо префикс заблокировали. У всех так?
http://govnokod.ru/2333333443 - работает
Кстати, попробуй http://govnokod.ru./3 открыть.
мой, открыв govnokod.ru./, сразу говорит "войдите, гость"
А за что заблояили выяснили?
Какая-то криптохуйня называется «УЁБА» (UEBA) )))
Upd: мобильный мегафно и /3 открывает
Потом понял, что «/3» — это URL говнокода, а не маска подсети.
> -999
Какой багор )))
guest8 was ejected.
Судя по изменившемуся хэшу граватара — ejected с концами.
Кстати, сможешь на ngk показывать предыдущую версию комментов до ваниша?
Кстати, фиктивные -999: любой голос их обнуляет. Ослабел Дух Говнокода со времён жёстких +100500, ослабел.
реальный пересчет может осуществляться с учетом статичной базы
где 0 для обычных постов, и -999 для необычных
Нужно быть PHP программистом, который использует MySQL (это важно)!
Такой программист в одной табличке хранит конкретные голоса в виде отдельных записей, а в другой их сумму. Каждый раз при голосовании он пересчитывает сумму, и сохраняет получившееся значение в колонке.
Страйко поменял значение только в той колонке, где хранился результат.
Грязная клевета. Я бы никогда до такого не додумался. Я всегда использую что-то вроде:
Вроде бы, кто-то пытался с ВК бодаться таким образом, но закономерно соснул.
Питух хочет функцию, которая возвращает этот enum или "Error".
В каких-то языках питух берет монаду мейби
В каких-то делает nullable тип.
Что питух делает в C++?
Кроме случаев тяжелой норкомании
У меня идей нет
Как помочь питуху, если он хочет именно енум (чтобы там инт был под капотом)?
Сыграть во что-то с юнионом?
:((
Допустим, питуху еще не подвезли 17ю
> Variant is not allowed to allocate additional (dynamic) memory.
годно!))
2. out-parameters.
3. Тупл <Petuh, bool>.
4. Кинуть исключение, но даже я так не сделал бы.
Но такой вариант мне тоже не нравится.
но можно прпобовать, в конце концов питух хочет писать код на грани
Это убэ?
Но у тебя тут точно УБ, потому что у тебя в энуме два элемента (0 и 100), а 42 нет, так что это багор.
Но если ты подразумеваешь, что у тебя там от 0 до 100 значений, то тут см. начало комментария.
В VC можно
§ 7.6.1.8/10, N4842
А вот кастить 0 или 100 в петуха безопасно.
Вот так можно?
В принципе, «хуй его знает» — уже достаточный повод для того, чтобы так не делать.
По Стандарту вроде бы действительно всё так:
>>> If the enumeration type has a fixed underlying type, the value is first converted to that type by integral conversion, if necessary, and then to the enumeration type.
§ 9.7.1/5
§ 9.7.1/8
Если Инью не указал андердайинг тайп, то С++ может использовать любой. Например такой, в котором число 42 не представить. И тогда убе.
А если указал, и 42 в него входит, то кастить можно, просто результат не будет равен ни Begin, ни End и попытка статически доказать, что свитч экзостед это же не получится.
Если же ты не попал в андрелайн тайп (например, :uint8_t и а ты писннул туда -100500) то это UB
так?
Не любой, а такой в который входят все значения enum'а. Т.е. если я добавлю в енум 0 и 255 то, по идее, там будет как минимум uint8_t. Или нет?
If the underlying type is not fixed, the value is convertible to the first type from the following list able to hold their entire value range: int, unsigned int, long, unsigned long, long long, or unsigned long long.
потому что минимальный тип, способный вместить 0 и 100 это int, а он минимум 1 байт, а значит 42 туда влезет
а в от 130 может и не соснуть, да?
Почитай в Стандарте правила выбора underlying type, там питушня какая-то запутанная.
Ну допустим я сделаю
Чем это хуже?
да и писать его можно проще
enum Petuh {A, B, C,D}
не нужно руками указывать значения
К сожалению, без ручных костылей нельзя.
, иначе при любом изменении енума у тебя всё поедет.
Но если там дырка, то жопа
Тот, кто «windows.h» подключал, в цирке не смеётся.
Хотя дефайн для CreateFile, конечно, бесит.
:)))
LEAN же, чтобы быстрее собирать
https://en.wikipedia.org/wiki/Lean_software_development
«вхуяривать в каждый проект» читать как «вхуяривать в каждый проект, куда вхуяривается "Windows.h"»
min в макрос раскрылся, да?
А вот в «std::min()», сука триждыблядская, раскроется!
int min = array[min_idx];
Раскроется вот тут:
получится троллейбус из буханки хлеба
Ну так-то вместо define можно использовать специальные constexpr (или consteval ? Чем они блядь отличаются?) функции, которые что-то присваивают в структуру с хуйней, и уже их засовывать в неймспейсы. По сути та же хуйня получится.
Кста, в крестах enum class тоже есть, там вроде на скоп влиет
Я делаю интерфейс
Делаю три его объекта статически (они идут в data?)
Делаю на них константные указатели
Передаю везде указатели
Сравнивать указатели легко и просто, весят они мало
По указателю могу вызвать вротуальный метод даже, если я ловкач
ДА?
[rotoeb_mode] чем метаклассы лучше шаблонов?
Почти гомоиконность. Хотя труъ гомоиконность в кресты не завезти конечно.
Лол) кресты возненавидят еще больще
В каком-то смысле это оставит шаблоны только для тупых случаев?
А можно будет например прочитать имена локальный переменных, найти там абюз слово, и сделать ошибку компиляции?
А найти класс с глубиной иерархии больше восьми, и выдать пизды автору?
С каким-нибудь лиспом всё просто и понятно, там код по сути есть AST, а что ты будешь делать с крестами с их rvalue, lvalue, xvalue, унарные, бинарные операторы, всякие правила левоассоциативности и правоассоциативности?
З.Ы. А что операторы? Их ассоциативность уже разобрали, все ADL провели, подходящую перегрузку выбрали - вместо них просто конкретная функция осталась.
> такого-то шаблона
Да пошло оно впизду...
А если надо работать с AST метаклассов??
* фронт энды компиляторов
* блюющего единорога
* решарпер С++ и силайн
* линтеры и прочие стат анализаторы
как-то же парсят значит
https://clang.llvm.org/docs/IntroductionToTheClangAST.html
Так тебе ж надо представлять у себя в голове, как именно какая-то хуйня на крестах будет выглядеть не в виде кода, а в виде AST полученного из кода, допустим чтоб как-то итерироваться по этому AST как по дереву, и что-то там переписывать на основе каких-то правил. Т.е. надо наверное, чтоб ИДЕ-шечка тебе высрала в виде некоей подсказки этот самый AST для какой-то там функции или класса, и ты б сопоставил каким-то образом сам человекочитаемый код на крестах и этот высранный AST, и так ты можешь чего-то там переконструировать на уровне самого AST на каком-то тьюринг-полном языке, понимая при этом, что конкретно за хуйня там происходит, и допустим породить новый класс или новый шаблон на основе уже существующего класса или шаблона. Примерно представляешь себе, как это ебануто?
стандарт есть, но мы его реализуем на 89.1%?
пиздец, вот это мне в С++ конечно не нравится, что никто не может нормально и полностью реализовать весь стандарт
Хотя я даже на счет JS не уверен
И в SQL тоже
https://zen.yandex.ru/media/dvoe_iz_lartsa/jenscina-iz-ugandy-v-39-let-mat-44-detei-5d605b4ba06eaf00aeec2e8e
именно потому парсер лиспа написать намного проще, чем парсер С++, да:)
Я пока еще не собираются ебаца, я лишь обратил внимание, что твой пример с пхп не совсем верен: нагенерить говна я мог макросами еще в чистых сишечках в 1975-м году наверное, а тут именно фишка в том, что я могу не текст генерить, а AST. И читать тоже AST
Штатным сишными препроцессором (если ты макросы на нем собрался делать) ты мало че нагенеришь, там тьюринг-полноту не завезли. Ну а какой-то другой препроцессор ты мог бы и раньше использовать, да.
> а тут именно фишка в том, что я могу не текст генерить, а AST. И читать тоже AST
Я практически уверен, что ты не сможешь (и никто не сможет) адекватно работать с этим говном. https://i.imgur.com/ZnvvvyK.jpg
У меня подгорает от этого после некоторых сишных хедеров, где фиг найдёшь какие именно флаги для чего.
З.Ы. А, там уникальное поле в каждой структуре...
да, я тоже люблю в какую-нить функцию вместо FOO_PETUH случайно передать FO_PETUH и получить непонятную оишбу
По его словам, сейчас любая мировая валюта «находится под серьезным негативным давлением целого ряда обстоятельств в мировой экономике». Влияние, например, оказывают динамика потребления энергоресурсов и изменение цен на нефть и нефтепродукты. «Но в целом, если говорить о макростабильности, как говорил президент, ее удается поддерживать», — сказал Песков.
на макроёбили в общем
https://habr.com/ru/post/523664/
Пыхеры используют слвоа не понимая их значения
И вот, хочу почитать
Make Way for Modules! (30m video overview, Mark Reinhold)
Prepare for JDK 9 (50m video, Alan Bateman)
Modular Development with JDK 9 (60m video, Alex Buckley)
Project Jigsaw: Under the Hood (50m video, Alex Buckley)
будьте ВЫ ПРОКЛЯТЫ!!!
А текстом вообще нету?
Ну и JEPы конечно.
Просто сам факт вызыавает бугор
Чья файка?
Багор 1
Помоги Даше найти msbuild и его VCTargetsPath
2019 (16.): %VSINSTALLDIR%MSBuild\Microsoft\VC\<vers ion>\
2017 (15.): %VSINSTALLDIR%Common7\IDE\VC\VCTargets\
2015 (14.): с:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\<versio n>\
Вместе с msbuild перемещается и тулчейн
2015 (14) "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat""
2017(15) "C:\Program Files (x86)\Microsoft Visual Studio\Community\VC\Auxiliary\Build\vcva rs64.bat"
"Зайцы прыгают, как блохи, над затоптанным ручьем"
Багор 2
До 2017 msbuild знал свои таргеты (которые импортируются обычно в каждом проекте) и хранил их в "HKLM\SOFTWARE\Microsoft\MSBuild\4.0 "
Начиная с 2017 завезли "VsDevCmd.BAT", который устанавливает таргеты в переменную VCTargetsPath, и с тех пор BuildTools (куда входит msbuild) перестали знать таргет.
Теперь если запустить msbuild без VsDevCmd можно получить чудесное, логичное и удобное
>The imported project "C:\Microsoft.Cpp.Default.props" was not found.
Между c:\ и M должен распологаться VCTargetsPath
<Import Project="$(VCTargetsPath)\Microsoft.Cpp. Default.props"/>
но его нет.
Питухи срут кирипичами, и правят реестр
https://stackoverflow.com/questions/8497931/msbuild-does-not-contain-a-value-for-the-vctargetspath-property
MS советует юзать VsDevCmd
https://developercommunity.visualstudio.com/content/problem/270758/vc-20153-v1400-v140-toolset-for-desktop-does-not-s.html
Какой все таки багор
Хотя там с детектом студии и сдк тоже траблы случаются. Но в среднем по палате - сойдёт.
но другой вопрос, что нахуя всё время всё говно куда-то двигать и менять и блядь пути такие ебанутые делать.
Это как если бы на прыщах сообщили "в новой версии дистрибутива gcc перемещается в /home/tools/compilers/The Canonical Corporation/v.923/20.04/gcc"
ты застал nmake, кстати?
Потом вышел .net, потом питухи портировали antы всякие (был nant, лол), потом майки сделали msbuild, а потом научили его и сишечку тоже собирать.
Пытаются сделать заебись... Всё-таки новая схема, когда каждый конпелятор и каждое сдк отдельно лежит, довольно разумна и удобна.
Всё лучше, чем помоище от старых студий, где чёрт ногу сломит из какого сдк какая утилита прилетела. И не дай бог что-то старое удалить.
Я как-то пытался поставить WinSDK 7.1, а он не ставился, потому что нашел у меня более новый .net. А я .net вообще не заказывал. Причем тут блядь .net?
А сколько было пролито слёз от того, что бета-версия студии и не удаляется, и новая не ставится, пока старая есть?
Зачем? Зачем? Тебе с релизными мало секса?
Насрать в реестр недокументированным значением по недокументированному адресу, забыть его удалить, и при установке слующей версии по этой причине выдавать неинформативное сообщение об ошибке с кучей говна в логе в недокументирвоанном формате, чтобы петухи потом процмоном мониторили реестр, искали кто что где читает, и пытались угадать что где исправить
А тулу небось еще хуй найдешь отдельно?
Так то в теории я должен ставить самый свежий сдк и течь. Но старые ветки тоже иногда надо собрать.
Поставишь новый SDK, а там какой-нить версии WDM не поддерживается, ибо нехуй, да?
Более старые конечно же нет.
отдельную виртуалку для говносредней
отдельную виртуалку для говнотекущей
и течешь
что за ректальные задачи смочь собрать разными IDE на одной машине разработчика
вообще на машине разработчика нехуй что-либо собирать на экспорт
именно поэтому я выше про докер писал
А вот дебажиться со 100500 виртуалок как-то не айс. Мне и так под таргет виртуалки нужны.
это, видимо, когда ты большой опенсорс, и не хочешь, чтобы тебе было стыдно за продукт, который ты передаешь в сорцах?
и ветка с версией 2, свежаяя
прикажете их одним компилятором собирать?
если у тебя в таргете версии 1 XP, а последний компилятор её не может, тогда это причина
а две ветки почему надо двумя компиляторами собирать?
Во-вторых новый компилятор -- поменяется версия CRT, а люди плагины написали под старую версию.
Например под питона нужно собирать .dllки именно той версией компилятора, какой собран сам питон.
Алсо, ты откроешь старый проект новой студией, она его конвертнет, и он отвалится у всех, у кого студия старая, если ты закоммитишь. А если нет, то будет ебля с мерджем если кто-то что-то поменяет
А вдруг не ты один над проектом работаешь?
в интеллий папка .idea вообще в гитигноре по умолчанию, не просто так это сделано
В игноре там только workspace, если мы конечно говорим про Java IDE.
модули и проекты, шареные ран-кофигурации и профили инспекций там в vcs, иначе не понятно как взять проект из vcs и потечь.
Правда если проект у тебя построен на градле, то может быть папка и не очень нужна.
А вот в CLion проект всегда строится на cmake: там "настроект проекта" и нет вовсе: они все в CMakeLists.txt или как там оно
есть pom.xml, мавен разберется и сам всё вытащит, ну и жава-иде тоже не тупая, будет пользоваться им же
через 5 лет тоже
у фронтопитухов условный package.json (или тем более package-lock.json) описывает границы дозволенных совместимых версий, от которых зависит твоё чудо
и только программисты мышкой в вижуал студии кипятят
и, наконец, чтобы взять из vcs проект на любом языке, получить воспроизводимый результат и потечь, билд всего лишь надо начать как взрослые писать в ЧИТАТЬ ДАЛЕЕ >>>
Dockerfile // docker-compose.yml // .gitlab-ci.yml
Maven это один из возможных вариантов.
Кроме него можно
* взять гредл (build.gradle)
* использовать настройки самого IDE (что плохо, так как не скриптуется на CI)
Какую-то часть настроек IDE умеет затянуть из мавена или гредла (как минимум зависимости) и настроиться на них
К сожалению, все настройки IDE ни через maven, ни через не выразить. Если ты хочешь готовые ран конфигурации для запуска конкретных тестов, причем чтобы IDE их понимала как тесты и рисовала деревца, то иногда нужно делать ран конифгурации прямо в IDE.
Тоже касается и запуска всяких сервлетов с автодеплоем, передеплоем итд.
Кроме того, есть специфичные для IDE настройки: код стайл, инспекции итд. Их в мавен не сунешь.
В вижал студии не обязательно тыкать мышкой (хотя и рекомендуется, лол).
Можно писать vcxproj для msbuild напрямую (он документирован конечно на троечку)
Можно использовать cmake, он сгенерит проект для студии (студия это поддерживает)
Докер под виндуос, когда я последний раз проверял, запускал под капотом урезанную виртуалку с виндой на hyper-v.
Так что по сравнению с линуксом (где докер почти бесплатен) это довольно тяжело как для разработки (для CI, разумеется, в самый раз).
Но может быть что-то уже изменилось
Забавно, что в VSCode майки уже всё поняли, и там вроде бы все настройки у них можно писать рукой в json
Да ладно, там реально прогресс за последние годы. Года три назад студия научилась сравнивать джве версии в гите!
И даже показывать дерево исходников как есть, без всяких там vcxproj.
я вижу я качественно разворошил этот улей)
Потому что полно мелочей из-за которых свежатиной не собирается. И чем больше ты лезешь в системщину - тем их больше. А ветки эти по 3-4 года тянутся.
Иногда даже новый цмейк не может законфигурить старую ветку потому что в нём "баг" исправили.
Поэтому я немного завидую всяким фронтендерам, у которых из релизов только мастер.
Ебли скорее с разными SDK
Как и многие вещи у майрософт, тут бывает два сценария
* Всё работает из коробки автоматом, и ты охуеваешь от крутости
* Неизвестная неустраняемая ошибка, попробуйте переустановить виндуос
Какой сценарий тебе выпадет -- это уже как повезет
не совсем
Вот тут см https://govnokod.ru/27072#comment592095
компилфятор и линкер с CRT это тулчейн, а SDK это набор либ и хедеров для конкретных задач (WinSDK, DirectxSDK, DriverSDK итд)
>А почему в винде является проблемой держать несколько этих SDK
Потому что криворукие ебланы делали изначально, в одно место в реестре писали итд
Теперь уже стало лучше
Какой пиздец. Лучше б просто говорили "тут у нас компилятор и линкер", "тут у нас отладчик", "тут у нас какая-то говноIDE которая может взаимодействовать с компилятором и отладчиком", "тут у нас какие-то хедеры для какой-то хуйни" а не придумывали какие-то говнотермины. Где-то под "SDK" понимают всю эту хуйню целиком, ну там и IDE, и компилятор, и отладчик, и какие-то хедеры с хуйней. "SDK" это вообще "software development kit", так что под этот термин вообще всю хуйню можно запихнуть.
Например, юниксоид говорит: у меня есть почтовый сервер, есть ldap, есть компилятор, линкер, и документация
А MS говорит: у нас есть групваре для решения задач бизнесa exchange, платформа для централизованного управления пользователями AD, новейшая среда для создания интерактивных приложений visual studio (в которую входят разумеется и компилятор и sdk и даже тула для перехвата сообщений окна) и инструментарий "developer network" (в который входит как документация, так и тулы)
КА-ША!
О да, опять вспоминается бессмертная классика
> Поэтому, если Вы будете продавать программу по частям, он купит у Вас часть, причем наименьшую. Остальное будет пылиться у вас на полке. И вам придется уволить программистов, которые это писали. Поэтому ПРОДОВАЙТЕ ВСЕ СКОПОМ. Наш гамбургер является неотъемлемой частью Кока-колы. “ЭМЭСДОС” был неотъемлемой частью ПК ИВМ. А “Основняк” частью “ЭМЭСДОС”. В результате за год, я получил 3 миллиона людей готовых с руками оторвать книги по “ЭМЭСДОС” и по “Основняку”.
и так далее
Смех смехом, а devenv реально может работать как соснольная команда вместо сборочной системы. И блядь делает это быстрее чем сраный мсбилд...
Самый бергент, это когда IDE хранит свои говнонастройки в проприетарном формате, и не умеетничего собирать без гуя
И ты рядом пишешь свой скриптик для сборки. Я всё повторяю два раза два раза.
До завоза гредла в Intellij было примерно так же
Меньше процессов спавнит вроде, сверяясь по сборочным логам. Для винды же процесс заспавнить - тяжелейшая задача.
>спавнит
это правда: понятие "процесс" у винды отделимо от потока даже в ядре
Очередной костыль от мс, когда гуйня умеет больше чем коммандлайн.
>когда гуйня умеет больше чем коммандлайн.
классический отсос майков, угу.
Блядь, почему сразу не делать по человечески: есть либа для сборки, и есть гуйная и консольная ее клиенты
З.Ы. Или читает, но уже слишком поздно, когда прогрузился и хмл распарсил.
Их можно писать на .net
Мы для анта всякие таски писали когда-то на джаве, например
На самом деле, я счастлив, что уже несколько лет в мсбилд руками лазить не надо. Забыл эту хуйню как страшный сон.
Но у нас на работе обычно cmake генерит эти проекты, как я вижу, а в пет-прожекте можно и в студии накликать: она сама правит xmlки
>шарпеи
думаю, недели времени тебе хватит, чтобы стать более лучшим шарпеем, чем большинство шарпеев, особенно если ты знаешь джаву и С++
Ну я вот пару лет назад был рад, что пару-тройку модулей буквально за день удалось запустить на прыщах.
Если бы дальше шли по пути мсбилд - это был бы тупик и эпик фейл.
Но всякие WCF, WF, и упомянутые выше COM Interop и P/Invoke к Win32API наверное и сейчас ставят крест на прыщах
Operating system Linux, macOS, Windows
Platform .NET Framework, .NET Core
> windows forms (, wpf)
https://devblogs.microsoft.com/dotnet/introducing-net-multi-platform-app-ui/
>https://github.com/dmetzgar/corewf
>ну такое
>2019
ну я ж грю, давно это было, эх
Остаеца
>COM Interop и P/Invoke к Win32API
как это по умному сказать?
Есть ведь по сути четыре концепции же:
* тулчейн (они же билд тулс): cl, link, копуляторы ресурсов и либы CRT
* SDKи разные (.h и .lib и тулы)
* msbuild (который все собирает)
* IDE
Всё перемешано в кашу, и аккуратно разложено в самые неождианные места, чтобы и в голове у тебя тоже каша образовалась
Все SDK и тулы ставятся в
/system/devel/[sdk_name]
или в
/home/[username]/devel/[sdk_name]/version
внутри каждой [sdk_name] есть папка /bin, которая автоматически попадает в path, когда user пишет
set role=devel
Есть так же папка inc, которая попадает в переменную Include
а так же папка lib, которая попадает в lib.
например
/system/devel/jdk/11/..
или
/system/devel/ddk/42/..
или
/system/devel/msvc/14/..
Все нужные для рантайма питушни точно так же ложатся в папки с именем не devel, а runtime, и есть у всех.
В некоторых sdk /devel/[sdk_name]/lib это ссылка на /runtime/[sdk_name]/lib
В той ОС про скриптушков говорят "лол, а у них devel нету, только runtime, они и не разработчики вовсе"
Чтобы удалить SDK, достаточно удалить папку в devel/[sdk_name].
Если хочешь выбрать конкретную версию sdk, то пишшеь
set role=devel sdk:jdk=14
и именно она попадает в path
тоже самое с vc.
никакого реестра, никаких PETUH_HOME
Если я говорю "sdk petuh, version 14", то она всегда или в /system/devel/petuh/14
или в
/home/guest6/devel/petuh/14
https://vk.com/wall-104202895_43705
Почему тогда у файлов они "секции"?
А секции вроде более мелкие чем сегменты. В один сегмент куча секций с похожими правами может войти.
Кстати, как посмотреть сегменты у процесса? Секции мне наверное покажут readelf/objdump и dumpbin на винде и даже ImpEx в far:)
А вот сегменты хз как: на винде есть VMMap, но оно показывает уже кусочки памяти с точки зрения менеджера VM
а спирт по рецепту отпускают, но не в каждой аптеке есть вообще
как и марганцовку, лол
В том же магазине можно купить калийную селитру, кристаллическую серу и древесный уголь.
Вот этиловый спирт фиг достанешь.
Выпил спирту и никакая инфекция не страшна?
Ладно, рискну. Набиваешь презерватив марганцовкой, завязываешь узлом, а потом опускаешь в некий девайс с жидкими углеводородами (естественно, девайс чужой). Под действием углеводородов латекс постепенно растворяется, и марганцовка высыпается. Если среди углеводородов есть непредельные (с ненасыщенными связями), они вступают в реакцию с марганцовкой с выделением атомарного кислорода и большого количества тепла, из-за чего углеводородная смесь вспыхивает.
Сейчас потеряло актуальность, потому что в тех самых девайсах стали ставить замок в крышку.
А «косметическую» пить нельзя, потому что её бодяжат изо всяких отходов производства.
абсент охуенно пахнет
но немного липковат, это не оч
звучит как-то по-наркомански
https://govnokod.ru/27086
https://govnokod.xyz/_27086/