- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
// https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Common-Function-Attributes.html
access
access (access-mode, ref-index)
access (access-mode, ref-index, size-index)
// примеры:
__attribute__ ((access (read_only, 1))) int puts (const char*);
__attribute__ ((access (read_only, 1, 2))) void* memcpy (void*, const void*, size_t);
__attribute__ ((access (read_write, 1), access (read_only, 2))) char* strcat (char*, const char*);
__attribute__ ((access (write_only, 1), access (read_only, 2))) char* strcpy (char*, const char*);
__attribute__ ((access (write_only, 1, 2), access (read_write, 3))) int fgets (char*, int, FILE*);
В GCC 10 какой-то новый атрибут access появился, чтоб более строго что-то там гарантировать:
The access attribute enables the detection of invalid or unsafe accesses by functions to which they apply or their callers, as well as write-only accesses to objects that are never read from. Such accesses may be diagnosed by warnings such as -Wstringop-overflow, -Wuninitialized, -Wunused, and others.
The access attribute specifies that a function to whose by-reference arguments the attribute applies accesses the referenced object according to access-mode. The access-mode argument is required and must be one of three names: read_only, read_write, or write_only. The remaining two are positional arguments.
The required ref-index positional argument denotes a function argument of pointer (or in C++, reference) type that is subject to the access. The same pointer argument can be referenced by at most one distinct access attribute.
The optional size-index positional argument denotes a function argument of integer type that specifies the maximum size of the access. The size is the number of elements of the type referenced by ref-index, or the number of bytes when the pointer type is void*. When no size-index argument is specified, the pointer argument must be either null or point to a space that is suitably aligned and large for at least one object of the referenced type (this implies that a past-the-end pointer is not a valid argument). The actual size of the access may be less but it must not be more.
j123123 14.03.2021 23:12 # 0
6oHo6o 14.03.2021 23:26 # 0
void*, int
можно было сказать, что первый парамтер есть указатель на такую-то структуру, если второй равен такой-то конгстанте
j123123 14.03.2021 23:29 # 0
guest6 14.03.2021 23:30 # 0
bormand 14.03.2021 23:19 # 0
j123123 14.03.2021 23:25 # 0
bormand 14.03.2021 23:28 # 0
А для самого конпелятора это вроде просто макросы-пустышки.
j123123 14.03.2021 23:33 # 0
Эту хуйню можно потом через Why3 в язык для SMT солверов экстрактить. И даже в Coq, чтоб руками доказывать.
6oHo6o 14.03.2021 23:35 # 0
Придумать новый язык с такой типизацией, как нам нравится, но обратно совместимый с сями, и транспилер сделать из него в си?
j123123 14.03.2021 23:36 # +1
bormand 14.03.2021 23:36 # +1
j123123 14.03.2021 23:40 # +2
bormand 14.03.2021 23:41 # +1
6oHo6o 14.03.2021 23:47 # +1
А кресты и objc изначально превращали код в си (хотя про кресты я не уверен). Сейчас конечно конечно уже нет.
Кстати, С++ не полностью обратно совместим с няшной, а вот обж вроде как полностью.
Desktop 14.03.2021 23:50 # +3
- мм, простота и понятность C++, помноженная на лаконичность и выразительность ObjC, что может быть лучше
bormand 14.03.2021 23:51 # +1
Объективное крестоговно/CLI. То же самое, но с удобством управления ресурсами в C#.
К сожалению его почему-то не пильнули.
Desktop 14.03.2021 23:59 # +1
booratihno 15.03.2021 00:01 # +1
Desktop 15.03.2021 00:05 # 0
а у эппла можно в одном исходнике мешать обжектив, няшную и кресты, красиво вызывая одно из другого, а в соседнем сырце на Свифте вызывать продукты этой жизнедеятельности
booratihno 15.03.2021 00:07 # 0
Виндузятник из крестов трогает няшный w32api примерно как яблоник трогает какой нить core foundation, наверное
Desktop 15.03.2021 00:18 # 0
booratihno 15.03.2021 00:25 # 0
j123123 16.03.2021 05:04 # +3
У меня никаких "проектов" и "солюшенов" нет, я просто пишу сборочный скрипт и компилирую что угодно с чем угодно.
booratihno 16.03.2021 11:21 # +2
j123123 16.03.2021 12:09 # 0
booratihno 16.03.2021 12:20 # 0
Desktop 16.03.2021 12:11 # 0
j123123 16.03.2021 12:15 # 0
bormand 16.03.2021 12:20 # 0
booratihno 16.03.2021 12:21 # 0
алсо, его можно собирать из командной строки (но если у тебя сложная логика сборра, то заебешься)
bormand 16.03.2021 12:24 # 0
booratihno 16.03.2021 12:31 # +1
а кодить потом в notepad++ ?
bormand 16.03.2021 12:34 # 0
cmake то ещё говнище, конечно. Но по сравнению с мсбилдой он на порядки удобнее. Да и к венде гвоздями не прибит.
booratihno 16.03.2021 12:37 # 0
>винде
ну если ты пишеш не только под винду, то понятно, что не нужно хранить проект в студийном говне
bormand 16.03.2021 12:57 # 0
Да, и кастомные скрипты ещё. Но их реально проще выписать и переписать на чём-то другом. Особенно с учётом того, что студия все настройки по 4 раза повторяет если через гуйню править.
booratihno 16.03.2021 13:01 # 0
ну да, но тебе похуй, если ты через гуйню всё делаешь
bormand 16.03.2021 13:07 # 0
А потом ты видишь, что какая-то опция включена в 5 ворециях сборки из 8 и думаешь -- они это специально или так получилось? Комментов же гуйня не даёт написать.
booratihno 16.03.2021 13:11 # +2
с гуйней еще есть такая проблема, что можно случайно вкоммитить путь
c:\users\booratiho\
и незаметить
Desktop 16.03.2021 13:13 # 0
bormand 16.03.2021 13:25 # 0
Там что-то есть, но через гуйню эти дефолты совсем пиздец настраивать, проще руками написать xml'ку.
Desktop 16.03.2021 12:39 # 0
bormand 16.03.2021 12:50 # 0
В основном очередным самодельным говноязыком. Ну и тем, что многие важные вещи вообще не поправить не залезая в код (а он на крестах).
А если собирать стандартные проекты -- сойдёт.
Desktop 16.03.2021 12:56 # 0
bormand 16.03.2021 13:00 # 0
Что-нибудь адекватное из императивных языков. Ибо сам cmake по сути и является императивным DSL, нахуяренным на коленке. Он даже не пытается косить под декларативность.
booratihno 16.03.2021 13:02 # 0
bormand 16.03.2021 13:03 # 0
Но cmake императивный и его как-то парсят... Полностью исполняют весь скрипт, как и гредл, на самом деле.
Вот отредактировать что-то из гуйни -- да, неразрешимая задача. Но никто вроде уже и не пытается.
booratihno 16.03.2021 13:05 # 0
bormand 16.03.2021 13:05 # 0
Ну конпеляцию можно же прервать. Вот тебе и решение хальтинг проблема.
Fike 16.03.2021 14:28 # 0
Desktop 16.03.2021 13:05 # 0
ну то есть какие у нас есть варианты?
1) пистон
2) ???
booratihno 16.03.2021 13:06 # 0
bormand 16.03.2021 13:06 # 0
Desktop 16.03.2021 13:12 # +1
- каждому своё, но я уж лучше на велосипедном поделии попишу, чем на этой отрыжке wannabe-программистов
bormand 16.03.2021 13:39 # 0
Ну удачи там. В js хотя бы переменные из фрейма вызывающей функции не наследуются. И массивы не через жопу сделаны.
Desktop 16.03.2021 13:40 # 0
есть же какая-то билд-система на лиспе, кстати
Fike 16.03.2021 18:25 # 0
*впрочем, я послал его нахуй год-два-три назад, когда оказалось что сишку надо компилить через рулы для плюсов, а компилятор самому выставлять через классическую переменную окружения (СС вроде)
Desktop 16.03.2021 18:31 # 0
Fike 16.03.2021 19:10 # 0
MAKAKA 16.03.2021 19:14 # 0
Fike 16.03.2021 13:02 # +1
j123123 16.03.2021 12:24 # 0
booratihno 16.03.2021 12:27 # 0
но решение очень неоднозначное
bormand 16.03.2021 12:36 # 0
Как что-то уникальное. qt creator вон из cmake их умеет получать. Да и из make опции конпелятора можно надрать в теории.
booratihno 16.03.2021 12:38 # 0
но из make вряд-ли)
Впрочем, jциферкам может оно и не надо. Настоящему индейцу ctags+vim и заебись
j123123 16.03.2021 12:43 # 0
booratihno 16.03.2021 12:45 # 0
Но editorconfig это хорошая идея, да.
bormand 16.03.2021 12:46 # 0
Да это особо и не надо.
Самое главное -- макросы, инклуды, прочие опции конпелятора которые влияют на код. Вот это вот самое нужное в "проекте". Без этой инфы проще взять "ноутпад++" и не заморачиваться с "ИДЕ".
j123123 16.03.2021 12:53 # 0
Да, подобная хрень вполне нужна и полезна, но если эта хрень работает только в одной конкретной IDE, на одной конкретной платформе, то это херня.
booratihno 16.03.2021 12:55 # 0
он прибит гвоздями к win32api например, и на другие платформы впринципе не портируется.
Или например он написан под cocoa и appkit и никогда не будет собираться ни под что кроме мака
j123123 16.03.2021 12:56 # 0
Потому что тогда получается так, что только на винде его и можно удобно редактировать, и только вот в этой конкретной IDE, а бывают ведь и другие ОС, и еще можно кросскомпилировать и удаленно отлаживать что-то, пользуясь при этом не виндой.
booratihno 16.03.2021 12:58 # 0
Ты кстати в своем Makefile вполне можешь завязаться на наличие perl, bash, sed, awk, и удачи тебе в сборке это под другую ОС
j123123 16.03.2021 13:05 # 0
Будто бы есть что-то хорошее в том, что код под винду собирается только под виндой.
> Ты кстати в своем Makefile вполне можешь завязаться на наличие perl, bash, sed, awk, и удачи тебе в сборке это под другую ОС
perl, bash, sed, awk в винде можно из msys2 взять, с этим как-то попроще, чем если какую-то хуйню, наглухо завязанную на виндовый компилятор и SDK пытаться собирать в прыщах.
booratihno 16.03.2021 13:10 # +1
Ну вот например есть проект (беру от балды)
https://plugring.farmanager.com/plugin.php?pid=312&l=ru
Это плагин в фару для посылки говна через MAPI (понятия не имею, кому это нужно).
MAPI есть только под винду, и FAR есть толкьо под винду.
На кой чорт тут вообще думать про другие ос?
>perl, bash, sed, awk в винде можно из msys2 взят
я видел попытки собрать всякое такое говно на винде, и это всегда был ад:
то у пользователя путь с ебанутыми символами, то еще что.
Кстати, завязка на bash тоже не позволит тебе портироваться дальше GNU:)
bormand 16.03.2021 13:14 # +1
Ну вот так потом и получается, что "FAR есть толкьо под винду". Заебись подход.
Desktop 16.03.2021 13:16 # 0
типа разработчик ФАРа должен был обязательно сделать его кроссплатформенным, чтобы лялиховоды вкусили плоды его работ? а не сильно ли это самонадеянно звучит?
guest6 16.03.2021 13:18 # +2
Очевидно, все эти технологии не нужны, ведь они не кросс-платформены
j123123 16.03.2021 13:16 # +1
> MAPI есть только под винду, и FAR есть толкьо под винду.
> На кой чорт тут вообще думать про другие ос?
А на кой черт надо так писать свои IDE и SDK, что собирать под винду эту хуиту возможно только из винды? Если у меня в контроллере некая OS, мне не надо почему-то в контроллер засовывать компилятор чтоб собрать под эту микроконтроллерную OS некую херню.
bormand 16.03.2021 13:17 # 0
Эм, по-моему тут всё очевидно. Как и с маком. Манагеры сверху сказали -- нам нужен вендор-лок, чтобы винда/макбуки лучше продавались.
Desktop 16.03.2021 13:18 # +2
- у тебя весь мир в контроллере, даже набо, даже нах-нах, мы уже поняли.
А винда тут при чём?
guest6 16.03.2021 13:20 # 0
Почему прыщепоттеринг не хочет писать кросс-платформенный софт, и предлагет свой софт на BSD даже не тестировать?
j123123 16.03.2021 13:26 # 0
bormand 16.03.2021 13:30 # 0
В теории я, конечно, должен юзать последнюю версию и течь, а остальные просто снести. Но на практике это не работает.
booratihno 16.03.2021 13:37 # +2
узнать, что у тебя теперь и новая не ставится, и старая не до конца удалилась
и все другие SDK и студии теперь у тебя тоже не ставятся, и пишут неизвестную ошибку.
И на форумах советуют сделать sfc /scannow, а более умные советуют переустановить Windows.
И только один чел нашел procmonом какой GUID в реестре нужно удалить, чтобы всё заработало
booratihno 16.03.2021 13:36 # 0
prn.c , лол
https://devblogs.microsoft.com/oldnewthing/20031022-00/?p=42073
Какой смысл делать кросс компиляцию, тратить вермя на портирование SDK, разбираться с особенностями компиляторов (к примеру, экспорировать функции у линкера из вижала и gcc нужно по разному) если твой код все равно не будет работать на других ос?
Fike 16.03.2021 13:37 # 0
j123123 16.03.2021 13:42 # +2
Почему у тебя "будет или не будет некий код работать под другими ОС" как-то увязывается с тем, "можно или нельзя компилировать этот код из некоторой-ОС под единственую-ОС-в-которой-код-будет-работать" ? Как это вообще соотносится?
MAKAKA 16.03.2021 14:53 # 0
Твой код тоже не компилируется на bolrand c 3 под DOS, но тебя это нисколечки не волнует
Petro-san 16.03.2021 15:48 # 0
bormand 16.03.2021 15:52 # 0
MAKAKA 16.03.2021 15:54 # 0
А исошки у нас и так обычно и образы дисков и с MBR, иначе как бы они с флешки грузились (без руфусов)?
bormand 16.03.2021 15:59 # 0
MAKAKA 16.03.2021 16:05 # 0
SetVolumeMountPoint("c:\\гавно", "d:\\гавно.bin") ?
Кстати, можешь попробовать еще vhdx: это и формат дисков для hyper-v, и их disk manager умеет прикручивать. Сейчас это модно:)
bormand 16.03.2021 16:10 # 0
Он сложный, лень... А обычные vhd я умею генерить и цеплять, там простенький хедер в конце и всё.
MAKAKA 16.03.2021 16:17 # 0
Я смутню помню, что там заголовок тома показывают драйверам файловых систем, и говорят "to je tvoje hovinko?", и кто первый согласится -- тот и прикручивает
bormand 16.03.2021 16:26 # 0
MAKAKA 16.03.2021 16:28 # 0
Поверх него драйвер партиций (который там понимает MBR, GPT, вот это всё), потом volumgr (который отличает софтварные рейды -- dynamic вот это всё), и потом файлуха
Petro-san 16.03.2021 16:22 # 0
MAKAKA 16.03.2021 16:24 # +1
j123123 16.03.2021 21:50 # 0
А почему возникла ситуация, что на это надо специально тратить время? Вот например взять некую ОС под микроконтроллеры, пусть это например будет RetroBSD, она предоставляет POSIX API и программное окружение unix и из нее даже можно компилировать код под нее же, притом работает она на микроконтроллере Microchip PIC32 с 128 килобайтами памяти и 512 килобайтами Flash: https://habr.com/ru/post/143679/
Почему-то там не возникало ситуации, что надо тратить время чтоб что-то под эту ОС собирать не из-под нее же. Почему? Может быть потому, что для RetroBSD никто не вендорлочил SDK и тулкит таким образом? Почему на винде такое возникло? Нахуя было вендорлочить? Хорошо ли это?
MAKAKA 16.03.2021 22:26 # 0
Потому что не все компиляторы совместимы друг с другом, увы.
SDK для RetroBSD специально была сделана портируемой (и наверняка не на все существующие ОС) чтобы делать кросс-компиляцию, потому что на самом RetroBSD собирать не удобно.
Попробуй собрать ядро Linux на RetroBSD, или даже на OpenBSD (без GNU bitutils, gnu make, баша (там ksh), и гцц: шлангом и бздёвыми тулами с pmake). Скорее всего тебя ожидает сюрприз.
> POSIX API
Ты можешь использовать стандартную библиотеку си уровня C89 (VC не поддерживает c99), и собираться примерно одинаково всеми компиялторами, но далеко ты так не уедешь.
POSIX внезапно тоже покрывает далеко не все: начиная от сискола signal() (который в BSD и SystemV ведет себя по разному) и заканчивая epoll/kqueue в разных *nix нас ждут разные API.
Именно потому у любого крупнгого проекта есть огромные ОС-специфичные куски.
Тоже касается и сборки.
Неужели я могу просто так собрать clangом любую линуксовую и GNUшную тулу?
>Почему на винде такое возникло? Нахуя было вендорлочить?
SDK -- довольно крупная штука, и поддерживать её совместимость с разными компиляторами и OS это большая работа.
Смотри, Linux на Clang тоже не очень легко переносится
https://github.com/ClangBuiltLinux/linux/issues
И так, проблем много.
А есть ли бенефиты? Я ни одного не вижу.
Но разумеется, маркетинговое решение тут тоже есть: MS хочет, чтобы ты покупал Windows.
> Хорошо ли это?
Было бы отлично, если бы все ОС реализовывали одинаково SUS/POSIX, и все компиляторы работали бы одинаково.
Но увы...
j123123 16.03.2021 22:39 # 0
Как это мешает сделать кросскомпиляцию?
> Тоже касается и сборки.
С каких хуёв процесс сборки надо гвоздями прибивать к конкретной ОС? Компилятору нужно лишь читать из файла, писать в файл и аллоцировать/освобождать память, и всё, нихуя ничего платформоспецифичного компилятору делать не надо. Компилятору не нужно быть завязанным на какую-то хуйню вроде COM или реестр виндовса для компиляции чего-либо.
> SDK -- довольно крупная штука, и поддерживать её совместимость с разными компиляторами и OS это большая работа.
Что именно там ОС-специфичного? Повторяю, компилятору достаточно чтения файлов, запись в файлы, выделение памяти через malloc и освобождение через free.
> Смотри, Linux на Clang тоже не очень легко переносится
Это ты вообще в другую оперу полез. Я говорю не о том, чтоб хер пойми что хер пойми каким компилятором собиралось, а чтоб компилятор X который умеет компилировать код только !!ДЛЯ!! операционки W мог это делать не только в операционке W, а вообще в любой операционке, где есть возможность читать писать файлы и выделять память на хипе. С хрена ли ты приплел тот факт, что у разных компиляторов разные расширения?
MAKAKA 16.03.2021 22:47 # 0
С таких, что ты не можешь скомпилировать любой код любым компилятором.
Ты не можешь взять Clang, и скомпилировать им Linux ядро "из коробки", не сделав предварительно телодвижений.
>С каких хуёв процесс сборки надо гвоздями прибивать к конкретной ОС?
Процесс сборки может быть прибит:
* к утилитам GNU (которых нет во многих ОС, пока ты их туда не поставишь)
* компилятору, которого нет на другой ОС
>Повторяю, компилятору достаточно чтения файлов
Сборка проекта состоит не только из компиляции .c файлов в объекты с последующей линковкой, но еще и хуевой кучи всего: от компиляции ресурсов, до генерации лексеров и парсеров.
На тебе жабаговно от гнушников
https://openjdk.java.net/groups/build/doc/building.html
Build Tools Requirements
* Autoconf
* GNU Make
* GNU Bash
Всё. Без этого говна ты ничего не соберешь.
>Компилятор X который умеет компилировать код только !!ДЛЯ!! операционки W мог это делать не только в операционке W
В смысле ты спрашиваешь меня, почему VisualC++ не портировали под Linux, чтобы ты там мог зачем-то собирать код под Win32API?
j123123 16.03.2021 22:52 # 0
Да. И какое это имеет отношение к вопросу о том, почему я не могу код специально для MSVC компилировать в MSVC который работает не в винде?
> Процесс сборки может быть прибит:
> * к утилитам GNU (которых нет во многих ОС, пока ты их туда не поставишь)
Эти утилиты непереносимы (вендорлокнуты)? Ну типа, может они к systemd привязаны, и без systemd они не запускаются?
> Сборка проекта состоит не только из компиляции .c файлов в объекты с последующей линковкой, но еще и хуевой кучи всего: от компиляции ресурсов, до генерации лексеров и парсеров.
Что в этом платформоспецифичного?
> В смысле ты спрашиваешь меня, почему VisualC++ не портировали под Linux, чтобы ты там мог зачем-то собирать код под Win32API?
Бинго!
MAKAKA 16.03.2021 23:11 # 0
shell и make это части операционной системы (во всяком случае, в bsd). Тот факт, что приходится рядом с ними ставить еще и их GNUшные аналоги говорит нам о том, что для сборки проекта недостаточно портировать компилятор: нужно портировать и другие утилиты тоже.
Теперь смотрим, какие утилиты нужны винде:
>Что в этом платформоспецифичного?
В SDK есть .bat файлы, которые не работают на *nix по причине отсутствия там cmd.exe.
В SDK есть утилиты, использующие API операционки.
Компилятор ресурсов ``rc.exe`` импортирует user32.dll и kernel32.dll.
Наконец сам компилятор файл "cl.exe" импортирует следующие dll:
* ole32.dll
* kernel32.dll
* MSVCP140.dll (это как раз рантайм)
* ADVAPI32.dll
>Бинго!
Итого:
Чтобы портировать WinSDK и VisualC++ на Linux, там придется:
* Убрать завязку на наличие cmd.exe из SDK
* Убрать завязки на win32API (сделав свой слой абстракции, где этот функционал реализован поверх линуксовых сисколов)
Звучит как "дохуя работы", а какой в этом практический смысл я так и не понял.
Зачем собирать что-то для виндуоса на линуксе?
j123123 16.03.2021 23:15 # 0
Отсутствие cmd.exe это наименьшая из проблем. В wine есть свой cmd который может батники запускать.
> Зачем собирать что-то для виндуоса на линуксе?
Чтобы можно было юзать билд-серверы не на винде для сборки.
MAKAKA 16.03.2021 23:17 # 0
Возможно можно запусьтить VisualC++ на Wine. Я не пробовал.
API винды частично закрыт, и я не уверен в стабильности этого решения:)
>Чтобы можно было юзать билд-серверы не на винде для сборки.
Зачем? Какой в этом смысл?
А в линуксе так делают, кстати? Убунту и дебиан собирают на FreeBSD и Solaris?
j123123 16.03.2021 23:24 # 0
Допустим чтоб арендовать в AWS хуйни и там компилировать под винду не в винде.
> А в линуксе так делают, кстати? Убунту и дебиан собирают на FreeBSD и Solaris?
С FreeBSD - https://gist.github.com/bijanebrahimi/62596745808f8667c40ff91b07d9e7b8
C Solaris - https://stackoverflow.com/a/2438768
Ну и наверняка можно и из FreeBSD под Solaris, и из Solaris под FreeBSD, но есть шанс напороться на хуевый сборочный скрипт, который тебе всю малину испортит.
6oHo6o 17.03.2021 00:52 # 0
А на AWS нельзя поставить винду?
Просто если я виндоблядь, то у меня и админы виндобляди, и линукса не знают. Зачем плодить сущности и изучать что-то еще?
>wget https://ftp.gnu.org/gnu/binutils/binutils-2.27.tar.gz
Ну то есть начинать нужно с кучи левых сущностей?
А зачем? В чем смысл?
Fike 17.03.2021 00:55 # 0
6oHo6o 17.03.2021 00:57 # 0
Если я пишу, например, игру под Direct3D, то я вообще может линукс в глаза не видел. Зачем мне про него думать?
j123123 17.03.2021 01:50 # +1
А если я не хочу ставить винду? Нахуй ставить винду только ради компилирования хуйни под винду?
6oHo6o 17.03.2021 02:51 # 0
Потому что VC++ не работает под другие ОС:)
Вообще винда так работает: чтобы что-то под нее сделать, обычно нужно поставить винду.
Нахуя ставить систему с GDI чтобы сделать на ней файлопомойку, например? Или веб сервер?
Но ставят же
j123123 16.03.2021 23:55 # 0
Кстати нахуя придумали эту поебень с ресурсами, если всю хуйню можно хранить просто как обычные данные, не внося новых сущностей?
bormand 16.03.2021 23:59 # 0
А так то да, qt картинки просто эмбеддит как сишные массивы.
6oHo6o 17.03.2021 00:50 # +1
У тебя есть .exe файл с иконкой и картинками, например
Fike 17.03.2021 00:53 # +1
j123123 17.03.2021 01:47 # 0
Если б эта хрень была нужна только чтоб у .exe файла была иконка, я б этот вопрос не задавал.
6oHo6o 17.03.2021 02:50 # 0
Но там можно хоть картинки хранить, хоть что
Fike 17.03.2021 03:00 # 0
6oHo6o 17.03.2021 03:07 # 0
Fike 17.03.2021 03:19 # 0
да-да, можно задавать вопрос "а что хорошего в твоей шутке?"
6oHo6o 17.03.2021 03:21 # 0
Ты против ембединга иконок? не нужно так делать?
Fike 17.03.2021 03:52 # 0
j123123 17.03.2021 03:25 # 0
https://www.youtube.com/watch?v=LuSNjmEcVjY
TOPT 17.03.2021 03:26 # 0
j123123 16.03.2021 22:58 # 0
Вообще, если внимательно перечитать сообщение https://govnokod.ru/27294#comment615192 то я указывал не только на проблему сборки для "проектов", вендорлокнутых на непереносимый тулчейн (тулчейн, который запускается только на винде), но и на проблемы что некая IDE хранит некую хуйню:
> "Самое главное -- макросы, инклуды, прочие опции конпелятора которые влияют на код. Вот это вот самое нужное в "проекте". Без этой инфы проще взять "ноутпад++" и не заморачиваться с "ИДЕ"."
которая делает более удобным редактирование что-то в этом "проекте", и эта хуйня работает только в этой ОС только в этой "ИДЕ", и извольте компилировать это только на винде, билдсерверы с прыщами тут не катят.
MAKAKA 16.03.2021 23:14 # 0
Билдсервера на прыщах и так не катят же
j123123 16.03.2021 23:17 # 0
... то можно сделать так, чтоб работали. Или запускать через неэмулятор wine (не факт что прокатит).
> Билдсервера на прыщах и так не катят же
И это плохо
MAKAKA 16.03.2021 23:20 # 0
Ну ты согласен, что это много работы: отпилить всё от Win32API?
>. Или запускать через неэмулятор wine (не факт что прокатит).
Когда что-то проприетарное реверс-инженерят всегда может что-то не прокатить)
>И это плохо
Ну блин, мне тоже не нравится, что винда не POSIX. Но с этим уже ничего не сделаешь.
Маємо те, що маємо
bormand 16.03.2021 23:25 # 0
Какое-то потепление с их стороны есть.
6oHo6o 17.03.2021 00:54 # 0
Потепление началось потому, что они поняли, что скоро станут не нужны.
Нахуя питонисту ебаться с виндой (где нет гуникорнов) если у него есть мак или убунта?
bormand 17.03.2021 12:32 # 0
Нет конечно, но раньше и в виндовом нельзя было.
booratihno 17.03.2021 12:58 # 0
bormand 17.03.2021 13:24 # 0
Но даже в худшем случае это лучше чем виртуалка. Ёбли меньше на порядок.
booratihno 17.03.2021 13:29 # 0
bormand 17.03.2021 13:37 # 0
С новым контейнером на каждый билд оно таки чище и воспроизводимей.
booratihno 17.03.2021 13:41 # 0
Но софт любит серануть в реестр или в %LOCALAPPDATA%, и увы
bormand 17.03.2021 13:42 # 0
Поэтому пусть сидит в одноразовом контейнере.
booratihno 17.03.2021 13:50 # 0
какой бугор ))
bormand 17.03.2021 13:51 # 0
Хеш от пути к файлу (что логично), положения в нём (что логично) и какой-то матери.
booratihno 17.03.2021 13:54 # 0
bormand 17.03.2021 13:56 # 0
guest6 17.03.2021 13:59 # 0
Мне казалось, что если ты хочешь линковаться с внешними чуваками, то ты делаешь extern "C".
А что там наманглит компиляторр для статической линковки в один бинарь тебе пофиг, не?
bormand 17.03.2021 14:03 # 0
booratihno 17.03.2021 14:06 # 0
у тебя sha пощитан от него?
bormand 17.03.2021 14:17 # 0
Ну вот есть у тебя бинарь и его исходники. Как ты убедишься, что он из них собран?
Дебиан вон тоже на это дрочит, овер 90% пакетов байт в байт можно пересобрать.
booratihno 17.03.2021 14:20 # 0
если дата сырцов новее бинаря, то нужно его пересобрать
если нет, то нет
bormand 17.03.2021 14:22 # 0
booratihno 17.03.2021 14:23 # 0
ты не знаешь что у тебя получится, пока не соберешь.
если ты уже собрал, то получи sha, и распостраняй бинарь и sha.
В какой момент я могу захотеть сам собрать бинарь заарнее зная что у меня получится?
bormand 17.03.2021 14:32 # 0
guest6 17.03.2021 14:36 # 0
Если у меня автогенеренное имя лямбды другое, то как мне это мешает?
bormand 17.03.2021 14:42 # 0
Но ты мне не доверяешь и боишься его запускать. Тогда я даю тебе исходники. Ты их читаешь и собираешь... но получается какая-то другая хуйня, в которой весь код перемешан потому что лямбды по-другому называются. А запустить свой собранный драйвер ты толком не можешь т.к. подписать тебе его нечем. В итоге ты ни то ни другой юзать не можешь.
Тут-то ты и задумываешься, как было бы заебись, если бы бинарь всегда собирался одинаково.
booratihno 17.03.2021 14:47 # 0
хотя он конечно редкоземельный
bormand 17.03.2021 14:45 # 0
guest6 17.03.2021 14:51 # 0
у меня на репе лежит deb-src и deb. Ты почитал код deb-src, собрал deb, и убедился, что я не пиздун
bormand 17.03.2021 14:52 # 0
guest6 17.03.2021 14:53 # 0
bormand 17.03.2021 14:55 # 0
booratihno 17.03.2021 14:56 # 0
от чего всетаки зависит имя лямды?
bormand 17.03.2021 14:59 # 0
В gcc вроде только от контента цппшника. Анонимный неймпейс вроде от пути к файлу ещё.
booratihno 17.03.2021 15:18 # 0
если я чрутнул всё, и сырцы лежат в fakeroot , то проблемы нет
bormand 17.03.2021 15:19 # 0
В последних студиях вроде тоже починили.
booratihno 17.03.2021 15:21 # 0
вообще есть ощущение, что крестобялди соснули
в няшной имена символов стабильны и предсказуемы
bormand 17.03.2021 15:26 # 0
А так получается, что с одной стороны анонимная хуйня не должна торчать из своего объектника. А с другой стороны мёржить одинаковый код из хедеров то хочется, поэтому она не совсем приватная, comdat по сути.
Вот и начинается ёбля с тем как мёржить foo и foo и при этом не мёржить foo и foo.
guest6 17.03.2021 16:20 # 0
JloJle4Ka 17.03.2021 16:31 # 0
MAKAKA 17.03.2021 16:34 # 0
JloJle4Ka 17.03.2021 16:44 # 0
bormand 17.03.2021 16:45 # +1
Если найдёшь -- можешь торвальдса пригласить побухать. Он обещал проставиться.
JloJle4Ka 17.03.2021 16:51 # 0
MAKAKA 17.03.2021 17:06 # +2
Fike 17.03.2021 19:04 # 0
bormand 17.03.2021 19:49 # +1
Какой блокчейн )))
MAKAKA 17.03.2021 20:55 # +1
Всегда пишу
hash(hash(hash(hash(hash($var))
bormand 17.03.2021 21:28 # 0
guest6 17.03.2021 21:30 # 0
bormand 17.03.2021 21:37 # +1
Настоящий PBKDF2 примерно так и работает, только там хмак вместо хеша.
bormand 17.03.2021 16:44 # 0
Х.з., возможно хотелось более стабильное имя, чтобы даже при небольших правках не менялось. Пока ты рядом новую лямбду не добавишь.
MAKAKA 17.03.2021 17:16 # +2
удобно
Fike 17.03.2021 19:02 # +1
bootcamp_dropout 17.03.2021 14:35 # 0
Ты можешь паралельно распространить бинарь и собирать чтобы потом убедиться что все совпадает и использовать разданные бинарники
guest6 17.03.2021 14:37 # 0
нахуя мне 5000 раз собирать одно и тоже?
bootcamp_dropout 17.03.2021 14:39 # 0
Нахуя - чтобы на деплой тратить не час а полчаса или не два часа а час
guest6 17.03.2021 14:41 # 0
компилировать на десяти машинах одно и тоже?
чем это быстрее?
и если Борманд утверждает, что на разных машинах у тебя разные имена лямбд, то и билд по вашему не "ррепродюсбл"
bootcamp_dropout 17.03.2021 14:45 # 0
у тебя есть бинарь который раздать по сети 30 минут и сорцы которые компилировать 30 минут
ты предлагаешь его сначала собрать, потом раздать = 60 минут
я предлагаю параллельно раздать и собрать чтобы потом каждая машина смогла сверить sha бинарника и того чтобы собралось = 30 минут, компилируется только на одной машине которая зарепортит sha
guest6 17.03.2021 14:49 # 0
идею я понял, но если Борманд утверждает, что в зависимости от машины у тебя будут разные бинари, то получается,что и собирать их придется в виртуалке?
CHayT 17.03.2021 11:53 # 0
^
you are here
bormand 17.03.2021 12:24 # 0
Когда они уже до systemd доберутся...
j123123 16.03.2021 23:27 # 0
Не надо было его припиливать туда.
> Ну блин, мне тоже не нравится, что винда не POSIX. Но с этим уже ничего не сделаешь.
Для компиляции никакой POSIX не нужен. Компиляция - чтение файлов, запись в файлы, выделение и освобождения памяти. Это можно и на условной DOS делать, если убрать ебнутые ограничения на имена файлов.
6oHo6o 17.03.2021 00:53 # 0
Ты предлагаешь юзать C89? А как делать многопроцесную компиляцию? -j4 как сделать?
j123123 17.03.2021 03:32 # 0
"-j4" не юзает никаких pthread-ов или чего-то такого. Это просто означает, что одновременно можно запускать 4 процесса компилятора/линкера/еще-какой-то-хуйни.
6oHo6o 17.03.2021 03:36 # 0
Разве в c89 есть для этого API?
Я правда не знаю, могу ошибаться
j123123 17.03.2021 03:51 # 0
6oHo6o 17.03.2021 03:54 # 0
Выходит, для портирования компилятора между прыщами и пиндой придется делать разный код.
И такого, я уверен, дофига: "за бесплатно" портировать не получится.
Алсо, винда же это не просто ядро, это еще туева хуча сервисов.
Захочешь ты там в SDK свой .exeшник подписать например, и тебе понадобится доступ к виндовому CryptoAPI, потому что у пользователя там лежит сертификат и ключ (в отличие от линуксов, где "openssl" это просто сторонняя тула, в винде это часть системы)
j123123 17.03.2021 04:10 # 0
Какие сложности у тебя возникнут с написание общей обертки под разные ОС, умеющие в эту многозадачность?
> Выходит, для портирования компилятора между прыщами и пиндой придется делать разный код.
Компилятор ничего про многопоточность знать не должен, вызывать несколько экземпляров компилятора параллельно - задача сборочных скриптов
> И такого, я уверен, дофига: "за бесплатно" портировать не получится.
Приведи реальный пример
6oHo6o 17.03.2021 04:18 # 0
Любой код увеличивает сложность системы. Не стоит добавлять код, если он не решает никакую полезную задачу.
Задача "компилировать виндовый софт под линуксом" полезной не является к сожалению, потому что у нас пока нету ни одного реального примера такого желания от разработчика под windows.
>вызывать несколько экземпляров компилятора параллельно - задача сборочных скриптов
То есть нам еще нужно портировать и какие-то сборочные утилиты, и написать этот код в них?
>Приведи реальный пример
Ну вот нет кросс-платформенного запуска процессов.
signtool на винде умеет сходить в time server
https://docs.microsoft.com/en-us/windows/win32/seccrypto/signtool?redirectedfrom=MSDN
для работы с http у винды есть API, использующее настройки системы (прокси, аутентификацию, итд): все это придется переписывать
Да и сам Signtool завязан на CryptoAPI.
j123123 17.03.2021 04:36 # 0
У нас - это у кого? Вот пример: - кто-то такой херней занимается, значит кому-то оно надо.
j123123 17.03.2021 04:42 # 0
Хождение по http и всякие криптоапи - это уже не компилятор, а какая-то вспомогательная херня. Нехер было такую дикую поебень городить. Мне для компиляции хуйни через GCC не нужно никакое криптоапи и никакой http
bormand 17.03.2021 10:19 # 0
Даже если ты технически сможешь запинать их тулчейн под прыщи (а это несложно), они тебя просто засудят нахуй за то что ты не с макакабука собирал.
Вендор лок такой вендор лок))
booratihno 17.03.2021 13:01 # 0
шланг не сложно, а как ты будешь какие нить сториборды компилировать?
там же наверняка проприетарные тулы на Mach-O с кучей зависимостей?
bormand 17.03.2021 13:04 # 0
А что это? Нам чисто сишку надо было, и то не разрешили. Шланга и библиотек вполне хватило бы.
booratihno 17.03.2021 13:17 # 0
а вам нужна была corefoundation, или хватило бы тока bsdшных api?
Если тока BSD, то может можно было как-то DarwinBSD собрать?
guest6 17.03.2021 12:51 # 0
j123123 17.03.2021 03:57 # 0
В с89 есть функция system(), только там надо ждать завершение того запущенного процесса, так что второй параллельный процесс ей не породить.
6oHo6o 17.03.2021 03:58 # 0
В линуксах у тебя чуть ли не в сисколе есть argv, а в винде это строка, и их нужно правильно склеить:)
А еще ты захочешь наверное чтобы новый процесс наследовал от тебя какие-то дескрипторы, или чтобы его завершения можно было ожидать (типа wait()), или проложить с ним какой-то pipe, чтобы общаться.. и все это нифига не портабельно на винду без кастомного кода
j123123 17.03.2021 04:13 # 0
В винде это строка если у тебя https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-winmain
Обычный main там тоже есть, и работает он как обычно
https://docs.microsoft.com/en-us/cpp/cpp/main-function-command-line-args?view=msvc-160
6oHo6o 17.03.2021 04:21 # 0
https://devblogs.microsoft.com/oldnewthing/20100917-00/?p=12833
боль
https://web.archive.org/web/20190109172835/https://blogs.msdn.microsoft.com/twistylittlepassagesallalike/2011/04/23/everyone-quotes-command-line-arguments-the-wrong-way/
j123123 17.03.2021 04:14 # 0
Хмм... а зачем это компилятору?
6oHo6o 17.03.2021 04:22 # 0
а как мне знать, что они завершились?
j123123 17.03.2021 04:31 # 0
Это уже проблема не компилятора. Это проблема той штуки, которая их (процессы компилятора) запускает. И в самом компиляторе с этим ничего делать не надо.
j123123 17.03.2021 04:40 # 0
6oHo6o 17.03.2021 00:58 # 0
ну блядь, в 1995-м году MS вообще не думал, что они как-то будут с юниксом серьезно соприкасаться
Нахуя было вообще брать VMS вместо Unix для NT?
Я бы с радостью отменил Windows, и заменил бы его на что-то типа Mac OS (которая SUS), чтобы не держать в голове по два вида каждой сущности, но увы
j123123 16.03.2021 23:05 # 0
bormand 16.03.2021 23:29 # 0
Desktop 16.03.2021 12:41 # 0
а проекты визуалки ты можешь открывать и в других IDE, как и икскодовские
j123123 16.03.2021 12:47 # 0
guest6 16.03.2021 12:51 # 0
Desktop 16.03.2021 12:54 # 0
j123123 16.03.2021 12:20 # 0
Fike 16.03.2021 12:22 # +2
6oHo6o 14.03.2021 23:37 # 0
bormand 14.03.2021 23:39 # 0
bormand 14.03.2021 23:56 # +2
Функция аналогичным образом описывает свой контракт на входе. Если тупла не кастанулась -- значит каких-то утверждений не хватило.
З.Ы. Что-то я боюсь PoC этой хуйни пилить, как бы дьявола не призвать.
booratihno 15.03.2021 00:04 # +2
bormand 15.03.2021 00:05 # 0
Desktop 15.03.2021 00:07 # +2
bormand 15.03.2021 00:14 # +2
CHayT 15.03.2021 01:20 # +2
CHayT 15.03.2021 01:18 # +1
booratihno 15.03.2021 00:30 # 0
bormand 15.03.2021 00:33 # 0
guest6 15.03.2021 00:38 # 0
bormand 15.03.2021 00:40 # 0
6oHo6o 15.03.2021 00:52 # 0
Хорошо, если так.
Мечтаю о таком для джвы, чтобы например функции с пометкой @Slow нельзя было вызвать из треда, обрабатывающего гуйные события (функции с пометкой @EDT, например)
bormand 15.03.2021 00:57 # 0
В SDK вроде тоже есть аннотации про in/out и связи между размером и поинтером, но я не уверен что везде.
guest6 15.03.2021 01:02 # 0
в требовании
IRQL PASSIVE_LEVEL
значит ли это, что я не могу позвать её из обработчика прерывания?
В MSDN я не вижу на ней никакой аннотации, но может быть она есть в .h файле
или это вот то самое IrqlPsPassive ?
bormand 15.03.2021 01:09 # 0
Саму аннотацию в хедере поищи.
6oHo6o 15.03.2021 01:13 # 0
Круто, что такая штука есть
зы
нашел
вот это
_IRQL_requires_max_(PASSIVE_LEVEL)
?
bormand 15.03.2021 01:15 # 0
6oHo6o 15.03.2021 01:18 # 0
Потому что Walter Oney в книжке про WDM про это ничего не писал.
серый котейка в ботинок ссал
bormand 15.03.2021 01:20 # 0
6oHo6o 14.03.2021 23:26 # 0