Linda-chan
программизм В поисках одного кода нашла модуль, который писала ещё на первой работе. Там проверялось имя компьютера на соответствие имени компьютера, за которым я работала. Ностальгия...
SannySanoff
Windows интеллектуальное_гопничество programming сегодня я узнал, что внутре докера можно запускать венду и билдить там вендовые приложения. Powershell команды в RUN и так далее.

есть даже микрософтовские репы с образами венды.

есть даже примеры докерфайлов у них на сайте с документацией.

только примеры из документации не работают, потому что такого тега уже нету в микрософтовской репе с образами, хихихи!

а если заменить тег на латест, то образы качаются, но в моем докере оно почему-то не работает, видать мой докер не такой, нужен видать микрософт докер, хихихи

закрыл сайт с документацией, удалил скачанные имеджи.

удалил из памяти это знание.

может когда-нибудь потом, а так — лучше б я не знал.
SannySanoff
продуктивность programming Mac faggots Моя работа с Xcode и разработка (портирование Ц кода) под гей ос (обе из них) всегда связана с анальной болью. Xcode — это очень странный кусок нехорошей субстанции. Его файл проекта — нечитаемый кусок субстанции, причём куча сторонних инструментов успешно редактируют его напрямую, ломая его, после чего проект не собирается. Понятное дело, ошибки даже в самом verbose mode ничего стоящего не сообщают. Гуй самого Xcode для настроек проекта — это кошмар, в нем нет нормального поиска, только бесконечные списки настроек без логического порядка, используются аутентичные термины не такие как везде, что искать неясно, часто используемые общечеловеческие настройки смешаны с кучей субстанции которую не дай бог когда-то придётся тронуть.

Один из забавных моментов недавно — это настройка переменных с путями, которые можно использовать как часть остальных путей. Можно их менять, кликнув на значение, но как добавить? Это нетривиально.

На скриншоте показана последняя из 30 страниц настроек проекта, Swift Compiler Search Paths, Warnings Policies, User-Defined. Вот последнее — это оно.

Менять их можно, удалять — не нашел как, добавить — нашел как (но я вам не скажу). Картинку посмотрите, ответ в комментах.

SannySanoff
DART programming Короче забавный езык. Там в нем есть списки типизированные (например Int8List), и есть функция принадлежащая их базовому классу, которая копирует в список в указанный (start, end) диапазон какой-то итератор. И последним параметром, сколько элементов проскипать в этом итераторе, прежде чем начать копировать.

someList.setRange(0, 100, fromIterator, int skipIterator)

Казалось бы пц по производительности, когда мне нужен memmove! Я пишу не под веб (dart -> js), а под десктоп и андроед, там JIT.

Так вот нет. Там под конкретные реализации списков, в том числе итератором являются все такие типизированные списки, подставляется memmove или близкое к нему, да, да. А под остальное поди generic реализация.

Так вот, не всегда такие фокусы им даются легко. Расскажу щас.

Там есть жеж куча, а есть нативный аллокатор, потом надо фри делать, именно пойнтеру:

Pointer<Uint8> ptr = ffi.calloc.allocate(1024);
Uint8List lst = ptr.asTypedList(1024).buffer.asUint8List()

ну и также можно просто

Uint8List lst = Uint8List(1024) — в куче аллоцируется.

Смысл в том что и так и так лист на выходе, очень удобно. Например передавать его по ссылке между isolates, если он нативный. Так вот.

у меня там в dsp там всякие вычисления на массиве in-place, то есть

for {
lst[i] = someFunc(lst[i])
}

много их там у меня, перемешиваясь in-place с out of place. И вдруг бац, стало падать нехорошо, разные недобрые abort(), SIGSEGV итп. Копал, копал, падает в цикле в после записи в 217 элемент такого вот листа, стабильно причём. А ведь раньше работало, до рефакторинга и ОПТИМИЗАЦИЙ направленных на уменьшение лишнего копирования.

Так вот, если дать в самое начало пайплайна такой нативно аллоцированный массив, то падает. А если скопировать его в обычный перед вызовом, то не падает. Ну один раз скопировать на вычислительно сложный вызов мне не жалко, но ведь какие фокусники, какие затейники! Я так понял, глюк там в том месте где после нескольких итераций они заменяют интерпретированный кусок на JIT кусок, иначе такое странное смещение не понять, иногда успевает ругаться в консоль перед смертью.

Как страшно жить.
SannySanoff
сшашечка коварно тоталитаризм programming Короче, Дуров говорит что его ведущий программист ему сказал, что его пыталось завербовать ФБР, чтобы он с невозмутимым лицом использовал некий опенсорс для интеграции в телегу (клиента), просто потому что опенсорс почему нет.

Отакие дела.
SannySanoff
profit тоталитаризм programming Меня тут спросили, как я себя чувствую когда пишу на Flutter под веб, какие ощущения?

Да какие ощущения, ребята? Как будто с Украины свалил в это тяжёлое время, вот такие ощущения. Побег из дурдома.

Точнее и не сказать.

Я ведь я под веб программировал с 1995 года на языке С, потому что perl воспринимал как сифилис мозга, Господь уберег. Я помню как все начиналось. Я помню оптимизм с CGI, потом нативные плагины к вебсерверам для того чтобы бинарники не запускать на каждый запрос.

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

Я помню в районе 2005 наши написали им GWT, удалось спасти тогда много людей. К сожалению скоро после того им завезли из "цивилизованного мира" печеньки (react), и таким образом продлили агонию до сегодняшнего дня, и теперь имеем то, что имеем.

Поэтому флуттер это как сбежать оттуда. Но ситуация такая, что сила толпы, это агрессивное тоталитарное скриптописание, кто не с нами тот против нас, стыдливо маскирующееся иллюзией строгой системы типов тайпскрипта, заставляет людей спасаться молча и по-одиночке. Казалось бы благонадежный ангулар фронтендер однажды не выходит на работу, а через некоторое время такие всплывают на Ютубе по другую сторону, блогерами про Раст или Verilog, и вспоминают прошлую жизнь как кошмар, который, к счастью, остался позади.
Linda-chan
программизм Культура «пет-проектов» должна умереть.
Я за утилитарный подход: нужна тебе какая-то программа, чтобы делать то, что другие не могут или могут, но не так, как тебе нужно – открываешь среду разработки (или текстовый редактор), пишешь код, а потом его используешь. Со временем у тебя таких программ набирается тонна, и ты все их используешь с той или иной периодичностью, выпиливая баги и модифицируя под новые условия. Можешь даже делиться с народом удачными или потенциально общественно полезными программами.
Ну, типа как, не нравится тебе как дверца в шкафу весит – берёшь, перевешиваешь её и пользуешься. Можешь даже кому-то ещё перевесить, если кто нуждается.
В культуре же «пет-проектов» оные проекты предстают в виде эдакого особого объекта, который необходимо выдавить из себя и упорно заниматься им хотя бы раз в день.
Одни вопрошают, каким бы «пет-проектом» заняться, ибо ничего придумать не могут, а надо. Другие рекомендуют придумать себе «пет-проект» и регулярно заниматься им, чтобы потенциальный хээр видел, что ты – серьёзный кандидат, «пет-проектом» занимаешься, а не объебос какой-то. Третьи жалуются, что десяток «пет-проектов» не оставляют времени работу работать и личной жизнью заниматься.
Ну, вы же не ломаете с утра до ночи голову над вопросом, какой бы гвоздь куда-нибудь вбить, а потом ежедневно гнуть его по-всякому, чтобы однажды кому-то его показать и доказать, что ты серьёзный чел, с гнутым гвоздём в стенке, а не объебос какой-то.
SannySanoff
profit внезапно programming Так хорошо, что и intel, и ARM, и скоро RISC-V все они работают в little-endian режимах в подавляющем большинстве конфигураций. Можно писать плохой софт и не париться на порядок байт в слове.
Linda-chan
программизм Написала тестовую программу, которая парсит заголовки Win16 и Win32 программ, показывая интересные данные вроде версии подсистемы, типа подсистемы, контрольной суммы, имени и описания модуля, ну и так далее. А теперь не знаю, что делать со всем этим кодом.
SannySanoff
коварно внезапно интеллектуальное_гопничество programming Я думаю, WASM был назван WEB assembly , чтобы не распугать соевых фронтенд-тайпскрипт-программистов, чтобы традиция быстрых программ не умерла, когда никого кроме этих программистов не останется. Некоторые соевые заинтересуются нормальными языками, и зерно цивилизации сохранится.
SannySanoff
аморальное programming к вопросу про WASM из #3053163

сабж из "low-level fast java" скатывается в гов... в ентерпрайз.

короче, по факту есть 3 конпелятора

1) wasm -> ir -> LLVM — самый быстрый код выходит
2) wasm -> cranelift — тормознее раза в полтора-два
3) wasm -> говно и палки -> даже не запускал

проекты:

wasmer — рантайм который на лету JIT конпелирует функции чем бог пошлет.

wasmedge — рантайм который конпелит ВСË, потом выполняет. Конпелирует через файл когда попросишь, на выходе получается бинарник (wasm, в котором есть секция с оригинальным кодом, и проприетарная секция с нативным кодом) который оно умеет грузить как оригинальный, но видит что там уже AOT, и юзает его.

wasmtime — ентерпрайзное

может что-то еще есть — не знаю

Под андроедом ситуация:

Все унылые, говорят, что новые андроеды анально огораживаются на манер яббла, и генерить на лету выполняемый код (JIT) это не кошерно, даже шаред либу загрузить из не APK некошерно, и даже против Google Play Policy, но в Apple это было с самого начала, а гугл только сейчас пришел.

Все говорят, что мы типа можем андроед, по факту, видать раньше могли, а щас унылые, оказывается:

wasmedge умеет только интерпретировать, на устройстве понятное дело нативный конпелятор в AOT гонять отказывается, а если подсунуть отконпелированный AOT файл, то выполнять отказывается, интерпретирует оригинальную секцию, то есть западло даже в обход гугло-полиси запустить код. Очень сильно не копал, может в коде закомментировано.

wasmer — у него вылазит ILLEGAL INSTRUCTION на устройстве когда доходит дело до execution (cranelift). Если зафорсить генерить на левую платформу, говорит "чувак не гони, тут arm64", стало быть не совсем тупой, но и не особо прокачан.

По коммунити: у обоих есть дискорды, практически мертвые. Может быть активность есть в maillist, но не смотрел. Заходил на слак к cranelift, там ентерпрайз, мёртвое, трафика не видно.

По документации: в текстовой документации про андроед практически не упоминается кроме бахвальства, а по десктопу у меня вроде вопросов нет. Документация кода на 3-.

По отладке под большим братом: если собрать rust с отладкой, то CLion ходит по коду rust и ставит точки останова и даже смотрит переменные.

Вывод: писать плагины под андроедский софт на wasm на текущий момент запрещено уже политически, только на скриптовых езыках. На гейфоны мы и не рассчитывали, но андроед огорчил. Из-за этого соответствующий софт сырой, а разрабы похоже в унынии и не копают в этом направлении.

Протрахался несколько дней и так и эдак.
SannySanoff
радио programming Короче, в любительском радио есть такая мода (протокол) цифровая FT8. Кто в курсе, тот знает, а кто не знает, то и пофигу. Очень щас популярная тема, ей несколько лет всего.

Смысл в том, что первоначальный декодер из радиосигнала в текст, и в другую сторону, был написан на ФОРТРАНЕ. Такие суровые дядьки из прошлого двигают наше настоящее в будущее. Пока не умерли такие дядьки, мир не рухнул, мир даже двигается вперед.

Так вот, те же дядьки на С++ выкатили десктоп апп, на Qt, который использует этот код на фортране, потому что пользователям нужен ГУЙ. Ну даже под линукс сделали, вот радости было. А сорцы — открытые.

А под андроед не сделали. Потому что конпелить фортран под андроедом нафиг нафиг.

Зато потом пришел некий болгарин, воистину герой.

Он перевел весь код на С++ с фортрана! И не на простой С++, а на Qt C++, который не понимается православными конпеляторами без Qt препроцессоров.

Обмазав результирующий код, все эти контрольные суммы, FFT преобразования с разными смещениями, переводы по словарям слов протокола, ресемплинги сигнала с разной частотой, синтезирования гипотез, сравнения с тем шо пришло, вычитанием рядом идущих каналов, разбирания по битам, коды цезаря и прочая избыточность — он обмазал это всё еще и кишками Qt, такими как QThread, QString, Qt слотами и Qt сигналами, и задержками с магическими константами прямо в декодере потому что оно у него так лучше работало в его UI, которое он сам написал. У него в процессе декодирования радиосигнала ходили Qt сигналы (коллбеки и UI events) прямо из числодробилки!

Потому что это был очень суровый болгарский программист.

После его работы несколько лет спустя пришел ваш покорный слуга, который открыл для себя это творчество, и взял этот Ц код и давай его сувать в свое приложение, которое работает на андроеде в том числе. Потому что там уже практически С++.

Мне пришлось очистить всё от Qt говна. Я написал заглушку для QString, QStringArray, всякие регекспы, а QThread перевёл на pthread. Слоты и сигналы я выкинул потому что куда их мне, перевел все на обычные вызовы, мне не западло.

(продолжение в комментах)
max630
programming попробовал visual studio collaboration

Сука, как в бане голый сидишь и на тебя смотрят все. Кому блядь это может понадобиться?
SannySanoff
коварно внезапно programming способ размножения rust (языка).

1) пишем какую-то полезную либу на rust.

2) делаем к ней убогий c-api, в котором на С только ряд функций, но далеко не всё что можно. Таким образом, язык Ц становится языком второго класса. Либу можно прямо юзать в Ц проектах, но как-то позорно.

3) облегчаем интегрирование rust в проект на C, потому что rust легче чем С++. То есть в вашем проекте нужен кусочек rust кода, который эту либу юзает как надо, в подробностях, чего существующий c-api не позволяет.

4) ржавчина (rust) пожирает ваш C проект.

И так становится всё на свои места. И название, и способ распространения.
SannySanoff
AI profit programming Конечно, ИИ увеличивает частоту "WTF" в работе программиста.

В том смысле, что работа программиста состоит из приведения материала к желаемому результату, процесс итеративный, состоит из "WFT/маловато", поправил(наговнокодил), перезапустил — повторять до достижения результата.

Так вот, очередное WTF обычно состоит из двух фаз:
1) найти что не так
2) поправить (если непонятно, то научиться — нагуглить, почитать, понять)

Когда работаешь в знакомой среде, учиться не надо, только говнокодь, это кстати развращает.

А когда ты на распутице, то конечно приходится гуглить.

ИИ делает гугл не нужным. Пастишь ошибку, или спрашиваешь "как обычно делают", если фреймворк какой-то очередной велосипед, который со старым смыслом новым синтаксисом.

Частота WTF увеличивается, потому что очередной WTF использует вместо гугла или перебора вариантов поиска документации — запрос к ИИ, который пишет "глупышка, тут всё просто", и ты уже в курсе.

И остаешься в потоке дольше.

Такие дела.
SannySanoff
AI продуктивность programming Как только я заполучу LLM с контекстом 1М, я в тот же день ничего не буду делать кроме как писать заливалку в контекст запроса всего своего проекта, и вытаскивалку из ответа LLM патчей на дерево файлов. Мой текущий проект на голанг меньше 1.5МБ кода, а в токенах дай бог это 300К.

Может поэтому и придерживают выход на публику больших контекстов, чтобы программисты не нервничали?

Я знаю и о технических сложностях и о дороговизне больших запросов, да.
SannySanoff
programming нет более гуманитарной отрасли чем девопс. Тупо нужно сталкиваться с проблемой и учить как что-либо делать в конкретную временную эпоху. Здесь подмазать, здесь подпатчить (патчи взять оттуда)..

Ни логики, ни стройности. Типа биологии.
SannySanoff
офигенно AI profit programming ну вот на гейбуке с М2 с большой моделью, whisper.cpp переводит мне аудио из видоса ютуба в текст, со скоростью, превышающей реалтайм раза в полтора-два. На батарейке.

При этом потребляемая мощность полтора ватта, судя по репортам. И еще может на английский переводить, если кому надо.

слава роботам!

перед этим пробовал полгода назад на первом титане (nvidia titan x pascal), потребление было ну вы поняли, и скорость 0.7-0.8 по ощущениям.
SannySanoff
политота бесноватые детям programming все светлые люди планеты на грету злятся, и в недоумении "грета как ты могла", типа палестина все дела. Добралсь даже до осьминога.

Никто не обращает внимания, что грету просто насетапили играют. У них всех есть персональные "психологи" (или один), которые геймифицировали их политическую активность, там всякие 270 week streak, и так далее. Она ж нумерует для отчетности, нумерованные посты — это ее kpi, остальное для нее — шум, втч и комменты и реакция всей тусовочки.

Все живые люди, кроме них самих, в этой игре — как случайные прохожие, когда играешь в Ingress, если кто еще помнит. Статические элементы, NPC в окружающей действительности.

обожаю такое.

janPona
дыбр программирование После недельного вынужденного отпуска (незапланированный клининг, переезд) вышел вчера на работу. В первый день вообще ничего не делал, потому что тошнило от самой идеи что-то программировать. Под вечер решил сделать разминку для затёкшего мозга — написал пару десятков строк на Go.

Сегодня с утра незаметно для себя понял, что могу и хочу программировать. А ещё понял, что для теперешнего меня программирование — это способ НЕ работать. Есть задача, есть согласованные на брейнстормах решения, есть методология проектирования (простой до нудности SOLID) — руки сами пишут, AI дописывает, а голова в это время думает о чём-то своём. Когда написаны все интерфейсы, а надо только сделать реализацию, то такое ощущение, что просто бездумно наполняешь некую статичную форму однородным содержимым (накладываешь мороженое в стаканчик или заливаешь цемент в опалубку).

Но это иллюзия. На самом деле, мозг работает, но не на полную мощность, потому что, во-первых, AI очень сильно сглаживает синтаксические колючки, во-вторых, знакомая и привычная методология не оставляет никаких сюрпризов для разработки. Не нужно изобретать всё новые и новые велосипеды.

Другое дело — чужой код. Вот там конечно, неизведанная территория с чуждой логикой и законами. Но — не сегодня, не сегодня))
Wlad
log говно программирование Чёрт дёрнул добавить в Visual Studio новый язык (человеческий, не программирования). Теперь не запускается с матами: "Не удалось инициализировать управление пакетами: отказано в доступе.". Под админом запускается. Я, конечно, понимаю, что дело происходит в древней и не совсем поддерживаемой Win7, но ощущение такое, что инсталлер просто где-то накосячил с правами. Поэтому говно.
SannySanoff
programming faggots В догонку в "я писал три года на ямле"

И эти люди ругают бейсик.

Вот эти цифры индента — это разница между количеством отступов в месте описания вставляемого значения и между количеством отступов в месте использования.

у меня после 10 минут "работы на ямле" — несколько дней, когда я успокаиваю себя. Очень медленно в результате получается что-то делать.

этот язык уже мертв, но он об этом еще не знает. Особенно в смеси с гошными шаблонами, против которых я конечно ничего не имею.

не, я никак не угомонюсь!!

основывать на этом езыге такой "вау-софт" как кубернетез и весь зоопарк вокруг него — это просто потрясающая виртуозность повара который "жрите теперь это *****, никуда вы от меня не денетесь"

человечество обречено

SannySanoff
аморальное programming — На каком языке вы программировали последние 3 года?
— На YAML ;-(

(Развернулись зумеры, мы-то думали что слабее и хуже типизацию, чем в жабоскрипте, нельзя придумать, но, оказывается, пробить дно можно было легко).
SannySanoff
programming fun Мне нравится, что твиторский новый логотип весьма похож на логотип X Window System, еще когда поверх него не начали рисовать вот эти гномы всякие и кеды.

А тут Маск поднял с пола, сдул пыль, и — миллионам хомяков в лицо.
SannySanoff
programming Когда пойдет настоящее программирование с использованием ИИ, натурального языка, о! это будет расцвет программистов.

Массы неструктурированных спецификаций, которыми уговаривают специфическую версию моделей работать определенным образом, и которые перестают работать так как надо, как только обновилась версия модели.

Кобол? Кобол будет вспоминаться как старая добрая годнота. Ну а java вообще будет уделом избранных.

А потом.. начнут структурировать язык спецификаций, и вернутся к паскалю. Изобретут стандартный IF (ветвление), научат выполнять нейронную сеть выполнять его не тогда, когда ей кажется, а всегда, ну потом еще операторы ввода-вывода...

Ну и всё. А где мы, программисты были всё это время? Да там же где и были, только сердце наше переживало всё это время за этих гуманитариев, которые посчитали, что теперь-то они на коне!
mabu
программирование Однако приложений не умеющих проверять результат выделение памяти на NULL полно. То ли программисты не знают, что malloc(); может вернуть NULL, то ли банально ленятся. Причём отсутствует проверка в таких приложения, что разработчики там должны были сгореть со стыда, типа glibc или fbrt.
Другая проблема — это принудительное падение когда malloc вернула NULL. Вот что говорит сама glibc:
GLib (gthread-posix.c): Unexpected error from C library during 'malloc': Cannot allocate memory. Aborting.
Аварийный останов (стек памяти сброшен на диск)
А что, «очень надёжно». Как раз для серверов: если нагрузка возросла, зачем нам корректно обрабатывать ошибку и ждать когда нагрузка снизится — сразу падаем.
mabu
программирование Опытным путём установлено.
На x86 из 1 мегабайта и правда одна страница стека выделяется, вторая защитная. А если создать буфер больше двух страниц и что‐то туда записать — то программа падает.
На x64 доступно 6 страниц, запись на седьмую вызывает падение.
mabu
программирование В Windows по умолчанию размер стека потока 1 Мибайт. Столько резервируется. Но реально выделяется только одна страница + одна сторожевая.
Я всегда говорил линковщику чтобы он сразу выделял весь этот мибайт под стек.
Сейчас уменьшил это значение до 512 кибайт.
И что же? Теперь система рядом выделяет 3 страницы (12 кибайт) и резервирует 512 кибайт. От чего убежал — к тому прибежал.

А если линковщику не указывать размеры стека, то на x86 программа падает: в стеке выделяется большой буфер, который выходит за пределы сторожевой страницы, происходит ACCESS_VULVALATION.
mabu
программирование Когда ты говоришь «Ссылку на стандарт!» или «Процитируй пункт стандарта в котором это написано», ты понимаешь, что официального Си‐стандарта нет в открытых источниках, и этот твой «стандарт» непроверяем?
mabu
программирование Это называется «Когда в Си Плас Плас обнаружили баг в дизайне — const означает не константу как в математике, а переменную которую нельзя изменять».
И вместо того, чтобы сделать const константой, они решили ввести константу через изъёб с constexpr.
mabu
программирование Зачем в бесике нужны эти:

End Type
End Sub
End Function
End Select
End If
End Scope

Почему нельзя просто End?

Во‐первых, так читать легче. Не нужно прокручивать экран вверх в поисках начала блока, что же там закончилось: функция или условный оператор.
Во‐вторых, End Function намного понятнее при озвучке, чем голый End, } или " ". Люди с ограниченным зрением поймут.

Другая проблема — это решение неоднозначности между End как statement и End как функции:

If x = 0 Then
End ' конец программы
End If ' конец блока условного оператора

Если оставить только End, это приведёт к неоднозначности:

If x = 0 Then
End ' конец блока условного оператора или выход из программы?
End
janPona
валидация typescript программирование Короче, посоны, расходимся. Философский камень найден.

Если у вас есть некий REST API, для которого нет OpenAPI схемы.
Или, скажем, вы подписаны на SNS-события, которые вообще пока нет штатного способа документировать (AsyncAPI не предлагать, сырое говно).
Или просто надо валидировать (и одновременно документировать) некий JSON или YAML файл, создаваемый пользователем.
Или у вас есть для этого всего JSON-схема, но вы хотели бы иметь ещё и compile-time проверку на TypeScript соответствия живых данных этой схеме.

То просто возьмите Zod zod.dev

Zod отличается от других валидаторов (Ajv, Joi, validator-js, и даже class-validator) тем, что он нативно поддерживает TypeScript, и все runtime-валидации автоматически становятся и compiletime-валидациями. Такое нормально не реализзовано больше нигде. Есть ещё io-ts, но там скорее попытка притянуть функциональную философию Haskell в мир TypeScript, а так нормальные люди не пишут.

Конвертация zod-схем в json-схемы и обратно:
npmjs.com
npmjs.com

Короче, я на работе в нескольких сервисах прикрутил эту штуку, и теперь счастью моему нет предела.
mabu
программирование Пишу программу на бейсике. Окно с кнопками, текстовыми полями, значком, манифестом, ресурсом и всё такое.
Размер екзешника 9 килобайт.

Пишу на С++ голую int main(){return 0;};. Без всяких значков, манифестов и ресурсов.
Размер — 100 килобайт.

Почему С++ вместо программ создаёт какое‐то Bloatware?