Раньше чтоб сохранить картинку в png, тебе надо было читать как устроен формат и самому креативить и переставлять битики. Да, надо было читать документацию к формату, но это было прикольно.
Сейчас ты скачиваешь готовый пакет и изучаешь документацию, чтобы понять, какие настроечки и конфигуровочки надо куда приделать. Какой флаг приделать к унылой команде унылого скрипта сборки — обосраться как весело
Раньше если у тебя был баг и расстрел памяти, то это было увлекательное приключение по поиску причин. Сейчас ты лелешь на стековефрлоу чтобы узнать, у кого ещё этот пакет так же баганул и как это обойти
Раньше ты сам придумывал интерфейс своей либе и прикручивал фичи. Сейчас ты зубришь документацию, но это не помогает. Ты наизусть знаешь как использовать сишный рандом, который ты 10 лет не использовал, но не можешь запомнить как приделать к программе современный идеологически-выдержанный рандом, в котором за тебя все формулы запрятали в методы с названиями, которые хрен запомнишь, и каждый раз гуглишь заново.
Раньше твоя программа получалась 30 килобайт и запускалась везде, сейчас она весит 10 мегов и требует новейшую вин11, потому что использованный тобой пакет тащит какую-то зависимость до которой хрен доберёшься и на которую всем насрать.
Какое же это унылое говно — современное пакетно-ориентированное программирование.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Здравствуйте, Nuzhny, Вы писали:
TB>>Какое же это унылое говно — современное пакетно-ориентированное программирование.
N>За 15 минут вайдкодишь то, что раньше делал бы год, заворачиваешь в докер. Докер-ориентированное программирование.
При этом докер внутри себя скачивает скрипт с гитхаба, запускает его, а он поднимает ещё один докер-контейнер.
TB>Раньше твоя программа получалась 30 килобайт и запускалась везде, сейчас она весит 10 мегов и требует новейшую вин11, потому что использованный тобой пакет тащит какую-то зависимость до которой хрен доберёшься и на которую всем насрать. TB>Какое же это унылое говно — современное пакетно-ориентированное программирование.
Когда уже доделают оптимизирующие компиляторы, чтобы выковыривали из пакетов только реально выполняемые клиентской программой строчки кода и генерили безбиблиотечный исходник 30 килобайт?
Друга ищи не того, кто любезен с тобой, кто с тобой соглашается, а крепкого советника, кто полезного для тебя ищет и противится твоим необдуманным словам.
Здравствуйте, Osaka, Вы писали:
O>Когда уже доделают оптимизирующие компиляторы, чтобы выковыривали из пакетов только реально выполняемые клиентской программой строчки кода и генерили безбиблиотечный исходник 30 килобайт?
Так давно. Статическая линковка называется. Только вот сразу перестают работать всякие рефлексии, а за ними и DSL, обёртки, декораторы, расширения времени выполнения и т.д. А ещё внезапно выясняется, что современная экосистема это ни разу не 30 килобайт. Только TLS/SSL тянут за собой воз и маленькую тележку, а ещё видео, звук, формат документов.
Здравствуйте, T4r4sB, Вы писали:
TB>Раньше чтоб сохранить картинку в png, тебе надо было читать как устроен формат и самому креативить и переставлять битики. Да, надо было читать документацию к формату, но это было прикольно.
И детских багов маленькую тележку, которые превращают твою прогу в решето. Спасибо, пожалуйста, не надо. В 2025-ом не нужно содержать отдел разработки, чтобы твой код выполнял минимальные требования по безопасноcти.
TB>Раньше ты сам придумывал интерфейс своей либе и прикручивал фичи. Сейчас ты зубришь документацию, но это не помогает. Ты наизусть знаешь как использовать сишный рандом, который ты 10 лет не использовал, но не можешь
Напомни, сколько итераций заняло у уважаемых бородатых мужиков придумать стандарт аутентификаии WiFi, чтобы он не было решетом? А сколько разных стандартов сейчас содержать пометки "deprecated, insecure"? Сколько существует протоколов, для которых есть разные реализации, и они несовместимы друг с другом? В POSIX free() объявлен как free(void *), хотя даже школьнику очевидно, что данные не меняются, а значит сигнатура должна быть free(const void *). И так на каждом шагу. Я не хочу в то время, когда реализации стандартов писали в каморке, что за актовым залом, и через пару месяцев выяснялось, что всё поломано ещё на старте.
TB>Раньше твоя программа получалась 30 килобайт и запускалась везде, сейчас она весит 10 мегов и требует новейшую вин11, потому что использованный тобой пакет тащит какую-то зависимость до которой хрен доберёшься и на которую всем насрать.
Это не проблема программирования, это проблема программистов. Мои проги и сейчас требуют минимум зависимостей, максимально используют runtime языка.
Кругом море задач, для которых не существует пактов. Например, укладка графов на плоскости, чтобы они красиво смотрелись. С учётом весов и ограничений.
Вот только никогда не стояло задачи открывать png. Стоят всегда более интересные задачи, в которой надо еще и архитектуру обдумать. А ты был вынужден тратить время на идиотский формат png файла, а не решать именно свобю задачу
Здравствуйте, cppguard, Вы писали:
C>В POSIX free() объявлен как free(void *), хотя даже школьнику очевидно, что данные не меняются, а значит сигнатура должна быть free(const void *).
А вы могли бы объяснить старому пердуну, давно забывшему школу, почему это "очевидно" и почему "данные не меняются"?
Здравствуйте, T4r4sB, Вы писали:
TB>Раньше чтоб сохранить картинку в png, тебе надо было читать как устроен формат и самому креативить и переставлять битики.
А сохраняли вы картинку в итоге посредством прерываний BIOS-а, вручную переставляя головку винчестера на нужные сектора и вручную обновляя цепочку секторов, занятых вашим файлом в метаданных файловой системы?
Это самое "пакетно-ориентированное программирование" с нами уже лет 50, начиная со времен бурного развития языков высокого уровня и появления чего-то вроде "стандартных библиотек" для них. А уж такое явление как "библиотеки подпрограмм" начало формироваться, если я правильно помню историю, еще до этого, просто там были серьезные препятствия для того, чтобы это явление стало мейнстримом: привязка софта к конкретным платформам (коих было множество, а совместимости не было) и отсутствие дешевых, быстрых и надежных средств доставки этих "библиотек" в любую точку планеты.
Мне лично отрадно, что на моих глазах происходит взросление этого самого "пакетно-ориентированного программирования" на протяжении последних 35 лет. И есть ощущение, что лет через 10 мы еще будем вспоминать нынешние времена с умилением: вот мол, какие были времена, люди сами делали для себя библиотеки, и какие это были библиотеки! Не то, что эти ваши гигабайты сгенерированные языковыми моделями, в которых не то что человек, даже самые продвинутые языковые модели не могут разобраться...
TB>Какое же это унылое говно — современное пакетно-ориентированное программирование.
Просто настало время сотворить в мировом масштабе сертификацию пакетов.
Или что-то в этом роде.
Кто сертифицирован — те надежные и работают всегда и везде.
Ошибка в таком пакете — это ахтунг и мировая катастрофа...
Ну, что-то вроде ядра линукса, любое изменение/дополнение для которого проходит централизованную проверку.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Nuzhny, Вы писали:
N>Здравствуйте, T4r4sB, Вы писали:
TB>>Какое же это унылое говно — современное пакетно-ориентированное программирование.
N>За 15 минут вайдкодишь то, что раньше делал бы год, заворачиваешь в докер. Докер-ориентированное программирование.
Ну да. Сервера-же бесплатные.
Когда одни делают лёгкие контейнеры только с одним бинарником, другие вайб-кодят 20-гигабайтовие образы у грузят ими CI/CD и кубер, который помнит всё, если не чистить.
Здравствуйте, so5team, Вы писали:
S>А вы могли бы объяснить старому пердуну, давно забывшему школу, почему это "очевидно" и почему "данные не меняются"?
Здравствуйте, cppguard, Вы писали:
S>>А вы могли бы объяснить старому пердуну, давно забывшему школу, почему это "очевидно" и почему "данные не меняются"?
C>https://rsdn.org/forum/cpp/1918853.flat#1918853
К сожалению, у меня нет времени внимательно читать то, что кто-то написал на каких-то заборах. Кроме того, по двум последним ссылкам обсуждение идет не для free, а для kfree из Linux-а, там может быть своя специфика.
Что касается free, то ее задачей является освобождение блока памяти.
Для некоторых типов аллокаторов это означает необходимость модификации memory control block-а, предшествующего адресу, который был передан во free. В таких аллокаторах указатель на этот самый MCB получается очень просто:
и все это делается без надобности снимать константность с указателя. И выглядит логично -- раз для free нужен указатель, который допускает модификации, вот и получаем такой указатель.
Кроме того, вроде как ни POSIX, ни стандарт Си не запрещает иметь реализации free, которые кроме освобождения указанного блока еще и затирают содержимое освобожденного блока какими-то специальными значениями (например, 0xDEADBEAF в debug-сборках). Опять же для этого нужен указатель, допускающий модификации.
Здравствуйте, so5team, Вы писали:
S>Кроме того, вроде как ни POSIX, ни стандарт Си не запрещает иметь реализации free, которые кроме освобождения указанного блока еще и затирают содержимое освобожденного блока какими-то специальными значениями (например, 0xDEADBEAF в debug-сборках). Опять же для этого нужен указатель, допускающий модификации.
Нормальный такой аргумент Ну так нигде в стандарте и не написано, что всё, что не запрещено, разрешено. Аналогично можно придумать пример про какие-то другие функции, работающие с указателями. Помимо того, что уже написано, и с чём я большей степени согласен, я ориентируюсь прежде всего на семантику. В стандарте чётко описано поведение, и поведение, кроме случаев double-free, ничего не говорит про модификацию данных. Особенности реализации это особенности реализации, пусть внутри снимается const сколько угодно раз — данные не должны быть изменены, потому что семантика этого не описывает, а значит не сломаются и остальные механизмы, полагающиеся на константность.
Здравствуйте, cppguard, Вы писали:
C>Нормальный такой аргумент Ну так нигде в стандарте и не написано, что всё, что не запрещено, разрешено.
Собственно, так и есть. Если что-то не запрещено явно и не объявлено как ведущее к UB, то это разрешено.
Вас же не удивляет, что компилятор может удалять переменные из кода в результате оптимизации. Или добавлять run-time проверки на переполнение стека.
C>я ориентируюсь прежде всего на семантику
Только вот для удаляемых данных нет вот этой вот семантики: "данные не должны быть изменены"
Данные превратились в мусор, их больше нет. Соответственно, нет и такого требования как "данные не должны быть изменены", т.к. это требование тупо не к чему применять.
При этом одно из достоинств Си, неоднократно озвучиваемых хейтерами C++, состоит в том, что якобы в Си все прозрачно, нет ничего, что делается неявно "под капотом". И как раз передача неконстантного void* в free этой самой прозрачности и следует -- если память по переданному указателю может модифицироваться, то значит не место неявным снятиям константности под тем самым "капотом".
У меня нет задачи убедить вас в том, что мои аргументы единственно верны и вы заблуждаетесь.
Моя задача показать, что утверждение об "очевидно" далеко не очевидно.
Здравствуйте, cppguard, Вы писали:
C>Здравствуйте, T4r4sB, Вы писали:
TB>>Раньше чтоб сохранить картинку в png, тебе надо было читать как устроен формат и самому креативить и переставлять битики. Да, надо было читать документацию к формату, но это было прикольно. C>И детских багов маленькую тележку, которые превращают твою прогу в решето.
Не без этого, но такие баги даже чинить как-то не так скучно что ли
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Здравствуйте, sergey2b, Вы писали:
N>>За 15 минут вайдкодишь то, что раньше делал бы год, заворачиваешь в докер. Докер-ориентированное программирование. S>а можно пример реального проекта/задачи
Здравствуйте, so5team, Вы писали:
S>Здравствуйте, T4r4sB, Вы писали:
TB>>Раньше чтоб сохранить картинку в png, тебе надо было читать как устроен формат и самому креативить и переставлять битики.
S>А сохраняли вы картинку в итоге посредством прерываний BIOS-а, вручную переставляя головку винчестера на нужные сектора и вручную обновляя цепочку секторов, занятых вашим файлом в метаданных файловой системы?
Мышку в досе прерываниями ловил, например. И даже испытал некоторое разочарование когда узнал что в винде это совсем не так делается.
Если это все стандартизируется в системе то так даже лучше — меньше таскать в программе, когда в операционке всё есть. Но и тут есть подвох когда появляется новая функуия без которой твои программы в новой версии оси выглядят немного странно, а если ты задействуешь эту функцию, то потеряешь совместимость со старыми версиями. И опять придем к проблеме когда простейшее приложение какого-то хрена требует последнюю версию венды и браузера и... все равно 10 мегов на диске
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Здравствуйте, cppguard, Вы писали:
C>Здравствуйте, Osaka, Вы писали:
O>>Когда уже доделают оптимизирующие компиляторы, чтобы выковыривали из пакетов только реально выполняемые клиентской программой строчки кода и генерили безбиблиотечный исходник 30 килобайт?
C>Так давно. Статическая линковка называется. Только вот сразу перестают работать всякие рефлексии, а за ними и DSL, обёртки, декораторы, расширения времени выполнения и т.д.
Мы все еще про С-образные? В них рефлексия бывает только которую явно программист прописал, как и подключение библиотек
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте