Раньше чтоб сохранить картинку в 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% скорости в никому не нужном синтетическом тесте
Здравствуйте, T4r4sB, Вы писали:
TB>Если это все стандартизируется в системе то так даже лучше — меньше таскать в программе, когда в операционке всё есть. Но и тут есть подвох когда появляется новая функуия без которой твои программы в новой версии оси выглядят немного странно, а если ты задействуешь эту функцию, то потеряешь совместимость со старыми версиями.
Это если двигаться в одну сторону.
Но есть еще и движение в ином направлении, ортогональном: работа на разных ОС. Т.е. одни и те же фичи есть и там, и там, но оформлены совершенно по разному. И тут возникает некий слой обеспечения совместимости, сперва в виде библиотек, затем в виде фреймворков. И вот мы уже в мире плюсовых Qt/FLTK/wxWindows или Java-овского Swing-а в конце 1990-х. В общем-то то самое пакетно-ориентированное программирование в уже оформившемся виде.
O>>Когда уже доделают оптимизирующие компиляторы, чтобы выковыривали из пакетов только реально выполняемые клиентской программой строчки кода и генерили безбиблиотечный исходник 30 килобайт? C>Так давно. Статическая линковка называется.
То подключение пакетов целиком как есть. А надо просто использовать пакет как книгу рецептов, и скопировать из них только те последовательности команд, которые нужны для конкретной задачи.
Друга ищи не того, кто любезен с тобой, кто с тобой соглашается, а крепкого советника, кто полезного для тебя ищет и противится твоим необдуманным словам.
Здравствуйте, T4r4sB, Вы писали:
TB>Раньше чтоб сохранить картинку в png, тебе надо было читать как устроен формат и самому креативить и переставлять битики.
Ну, я до сих пор все так делаю. Знаю, что трачу много времени, зато не имею зависимостей, кроме неизбежных, вроде хлопот с подписыванием ядерного кода. А некоторые заказчики очень довольны тем, что мой софт почем зря не лезет в сеть, для сборки не нужно скачивать и устанавливать 100500 библиотек (как тут недавно описывалось
Здравствуйте, so5team, Вы писали:
S>такое явление как "библиотеки подпрограмм" начало формироваться, если я правильно помню историю, еще до этого
Обычно это были таки библиотеки стандартных подпрограмм. В том и разница, что библиотеки и API, более-менее стандартизованные "сверху", обеспечивают большее единообразие и меньший хаос, нежели современное бесконтрольное их использование.
Здравствуйте, LaptevVV, Вы писали:
LVV>Кто сертифицирован — те надежные и работают всегда и везде.
Дело не столько в сертификации, сколько в количестве/разнообразии, которое уже давно неспособен охватить отдельно взятый мозг. Представьте себе ресторан, где меню в виде талмуда толщиной сантиметров в семь.
Здравствуйте, cppguard, Вы писали:
O>>Когда уже доделают оптимизирующие компиляторы, чтобы выковыривали из пакетов только реально выполняемые клиентской программой строчки кода и генерили безбиблиотечный исходник 30 килобайт?
C>Так давно. Статическая линковка называется.
Не. В идеале такой компилятор должен получать на вход исключительно исходники (хотя бы обфусцированные). Обладая должной мощью, он мог бы найти все возможные зависимости (вплоть до динамических), по ним построить граф, и максимально его оптимизировать, а все ненужное выкинуть. Тогда, действительно, из десятка библиотек, по сотне мегабайт каждая, можно будет собрать бинарник в пару десятков килобайт, если его функциональность большего не требует.
Собственно, все это давно и активно используется в производстве микросхем. Там на входе софта, строящего топологию, почти всегда только исходники, которые довольно сильно оптимизируются. Библиотек, предоставляющих готовые схемные решения, тем более — готовые топологии, крупные производители стараются избегать.
Здравствуйте, T4r4sB, Вы писали:
TB>Раньше чтоб сохранить картинку в png, тебе надо было читать как устроен формат и самому креативить и переставлять битики. Да, надо было читать документацию к формату, но это было прикольно. TB>Сейчас ты скачиваешь готовый пакет и изучаешь документацию, чтобы понять, какие настроечки и конфигуровочки надо куда приделать. Какой флаг приделать к унылой команде унылого скрипта сборки — обосраться как весело TB>Раньше если у тебя был баг и расстрел памяти, то это было увлекательное приключение по поиску причин. Сейчас ты лелешь на стековефрлоу чтобы узнать, у кого ещё этот пакет так же баганул и как это обойти TB>Раньше ты сам придумывал интерфейс своей либе и прикручивал фичи. Сейчас ты зубришь документацию, но это не помогает. Ты наизусть знаешь как использовать сишный рандом, который ты 10 лет не использовал, но не можешь запомнить как приделать к программе современный идеологически-выдержанный рандом, в котором за тебя все формулы запрятали в методы с названиями, которые хрен запомнишь, и каждый раз гуглишь заново. TB>Раньше твоя программа получалась 30 килобайт и запускалась везде, сейчас она весит 10 мегов и требует новейшую вин11, потому что использованный тобой пакет тащит какую-то зависимость до которой хрен доберёшься и на которую всем насрать. TB>Какое же это унылое говно — современное пакетно-ориентированное программирование.
Да, были бумажные книжки по процессорам — и что-то даже оседало в голове.
Сейчас гуглёж, гуглёж, гуглёж.
TB>Какое же это унылое говно — современное пакетно-ориентированное программирование.
А еще через пару лет автору приходит в голову что его Public API не соответствует новейшим веяниям моды и перелопачивает все.
А потом, если вдруг пакет стал мега популярным, автор решает что на MIT лицензии ничего не заработаешь и переходит на какое-то написанное выпускником задрищенского юрфака говно.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Дело не столько в сертификации, сколько в количестве/разнообразии, которое уже давно неспособен охватить отдельно взятый мозг. Представьте себе ресторан, где меню в виде талмуда толщиной сантиметров в семь.
И большинство блюд есть совершенно невозможно, а в остальных есть неприятные баги рецепта, на которые уже пару лет висят пулл-реквесты, только на них автору некогда посмотреть
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, LaptevVV, Вы писали:
LVV>Кто сертифицирован — те надежные и работают всегда и везде. LVV>Ошибка в таком пакете — это ахтунг и мировая катастрофа...
Может не прокатить.
Работал я в одном проекте. Писался он на Java. Тестировщики в какой-то момент начали рапортовать об ошибке, что-то критическое. А разработчики не видят, в чём дело. Позже выяснилось, что у одних стояла Java от Oracle, а у других — от IBM. Они некоторые вещи типа областей видимости по-разниму обрабатывают.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Здравствуйте, T4r4sB, Вы писали:
TB>>Раньше чтоб сохранить картинку в png, тебе надо было читать как устроен формат и самому креативить и переставлять битики.
ЕМ>Ну, я до сих пор все так делаю. Знаю, что трачу много времени, зато не имею зависимостей, кроме неизбежных, вроде хлопот с подписыванием ядерного кода. А некоторые заказчики очень довольны тем, что мой софт почем зря не лезет в сеть, для сборки не нужно скачивать и устанавливать 100500 библиотек (как тут недавно описывалось
Здравствуйте, T4r4sB, Вы писали:
TB>>>Раньше чтоб сохранить картинку в png, тебе надо было читать как устроен формат и самому креативить и переставлять битики.
ЕМ>>Ну, я до сих пор все так делаю. Знаю, что трачу много времени, зато не имею зависимостей, кроме неизбежных, вроде хлопот с подписыванием ядерного кода. А некоторые заказчики очень довольны тем, что мой софт почем зря не лезет в сеть, для сборки не нужно скачивать и устанавливать 100500 библиотек (как тут недавно описывалось
), разбираться с лицензией на каждую, и т.п.
TB>Респект, это ТРУЪ-программирование а не тупо собрать пакетики
Подозреваю, что это только потому, что он на протяжении десятилетий занимается очень специфической темой, связанной с обработкой звука в драйверах Windows.
Довелось бы ему с подписанными XML-документами работать, да еще на 3х платформах, можно было бы посмотреть как бы он выкручивался бы.
Здравствуйте, syrompe, Вы писали:
TB>>Какое же это унылое говно — современное пакетно-ориентированное программирование.
S>А еще через пару лет автору приходит в голову что его Public API не соответствует новейшим веяниям моды и перелопачивает все. S>А потом, если вдруг пакет стал мега популярным, автор решает что на MIT лицензии ничего не заработаешь и переходит на какое-то написанное выпускником задрищенского юрфака говно.
В русте отчасти это решается возможностью указать в зависимостях старую версию пакета
Только все равно страшно что бинарник распухнет если разные компоненты потребуют разную версию одного и того же пакета и все продублируется на каждый чих.
А еще я попробовал так сделать чтоб собирать старым компилятором (новый в вин7 не работает по причине... да все той же) и нифига чет не прокатило. Мб я плохо старался, яхз
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Здравствуйте, so5team, Вы писали:
S>Подозреваю, что это только потому, что он на протяжении десятилетий занимается очень специфической темой, связанной с обработкой звука в драйверах Windows.
Ну, драйвера-то почти любые делаются в основном на собственном коде — прицепить к ним модные библиотеки сложно по вполне понятным причинам.
А когда для обработки звука/видео используется какой-нибудь fmmpeg, то получается что-то вроде VLC media player, у которого за тридцать лет не было ни одной неглючной реализации.
S>Довелось бы ему с подписанными XML-документами работать, да еще на 3х платформах, можно было бы посмотреть как бы он выкручивался бы.
Ну, я в суровой математике не копенгаген, так что сами средства создания/проверки подписей, наверное, взял бы готовые (тем более, что они давно есть в составе каждой популярной ОС). А для работы с XML недолго сделать собственный движок, это не рокет сайенс...
Здравствуйте, T4r4sB, Вы писали:
TB>Раньше чтоб сохранить картинку в png, тебе надо было читать как устроен формат и самому креативить и переставлять битики. Да, надо было читать документацию к формату, но это было прикольно. TB>Сейчас ты скачиваешь готовый пакет и изучаешь документацию, чтобы понять, какие настроечки и конфигуровочки надо куда приделать. Какой флаг приделать к унылой команде унылого скрипта сборки — обосраться как весело TB>Раньше если у тебя был баг и расстрел памяти, то это было увлекательное приключение по поиску причин. Сейчас ты лелешь на стековефрлоу чтобы узнать, у кого ещё этот пакет так же баганул и как это обойти TB>Раньше ты сам придумывал интерфейс своей либе и прикручивал фичи. Сейчас ты зубришь документацию, но это не помогает. Ты наизусть знаешь как использовать сишный рандом, который ты 10 лет не использовал, но не можешь запомнить как приделать к программе современный идеологически-выдержанный рандом, в котором за тебя все формулы запрятали в методы с названиями, которые хрен запомнишь, и каждый раз гуглишь заново. TB>Раньше твоя программа получалась 30 килобайт и запускалась везде, сейчас она весит 10 мегов и требует новейшую вин11, потому что использованный тобой пакет тащит какую-то зависимость до которой хрен доберёшься и на которую всем насрать. TB>Какое же это унылое говно — современное пакетно-ориентированное программирование.
Хм. Я не понял только одного — кто запрещает вам сейчас креативить и переставлять битики?
Я вот в восторге от пакетно-ориентированного программирования.
Ведь у меня есть выбор между тем, чтобы начать пердолить что-то самому, и тем чтобы быстро скачать пару гигов из интернета и поехать.
Это гораздо круче, чем "компонентное программирование" прошлого века.
Я помню свой восторг из девяностых, когда я обнаружил возможность на Delphi просто кинуть на форму готовый медиаплеер, и у меня была программа, умеющая воспроизводить mp3!
Представляете себе уровень затрат по написанию своего mp3-плеера на каком-нибудь Turbo C под DOS? Все вот эти вот чтения битиков из файла, аккуратная обработка всех "пользователь выдернул дискетку во время работы", декодирование формата, декомпрессия на лету, подсчёт времени для того, чтобы вовремя перекидывать аудиобуфера в саундбластер?
Каких-то несколько месяцев кранча, и кривенькая косенькая программа будет готова.
А тут — работы на три минуты. Ещё 15 минут можно потратить на то, чтобы сделать плееру кавайные кнопки.
Одна проблема — весь плеер теперь чёрный ящик. Если он не умеет играть .ogg — ну всё, не умеет. Перекраской кнопочек и передвиганием его по форме дело не спасти.
А теперь — пжалста, пакеты. Хочется влезть в аудиотракт этого плеера, и, к примеру, извлекать из него слова для караоке? Смотришь, что там у него внутри, встраиваешь свой код — и алга. Опять же, для распознавания речи не нужно тратить полжизни на написание докторской. Качнул пакетик с нейросеткой — и она тебе всё распознаёт.
Возможность быстро прототипировать — бесценна.
А если пакет перестал устраивать — велком обратно в битики. Можешь и сам сеточку тренировать, и mp3 декомпрессировать. Чего нет-то.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Хм. Я не понял только одного — кто запрещает вам сейчас креативить и переставлять битики?
Это не ценится( Рынок требует быстрее наговнякать ублюдище весом в 10 мегов, требующее последнюю винду.
S>Представляете себе уровень затрат по написанию своего mp3-плеера на каком-нибудь Turbo C под DOS? Все вот эти вот чтения битиков из файла, аккуратная обработка всех "пользователь выдернул дискетку во время работы", декодирование формата, декомпрессия на лету, подсчёт времени для того, чтобы вовремя перекидывать аудиобуфера в саундбластер? S>Каких-то несколько месяцев кранча, и кривенькая косенькая программа будет готова.
Не надо кранчиться, надо неспешно пилить декодер. Разве это не кайф?
S>А тут — работы на три минуты.
Крайне унылой работы по изучению документации по сборке. Ну для Дельфи ладно, настройка сборки и правда неактуальна.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Здравствуйте, T4r4sB, Вы писали:
TB>Это не ценится( Рынок требует быстрее наговнякать ублюдище весом в 10 мегов, требующее последнюю винду.
Рынок этого требовал примерно всегда. Просто раньше возможностей таких не было. А сейчас те, кто неспособен воспользоваться возможностями, вытесняются из мейнстрима —
TB>Не надо кранчиться, надо неспешно пилить декодер. Разве это не кайф?
Не вижу тут особого кайфа. Пилить лучший в мире декодер — да, кайф. Ну, так это и сейчас можно делать.
А просто пилить декодер, который отличается от ста тыщ других декодеров только набором уникальных багов — ну, такое себе.
TB>Крайне унылой работы по изучению документации по сборке. Ну для Дельфи ладно, настройка сборки и правда неактуальна.
Отож. Кстати, унылая документация по сборке — это признак стрёмного пакета. Приличные вещи должны быть лёгкими в применении. Качнул — подключил — завёл.
А не вот это вот всё, когда приходится бегать по кругу с настройками tsc, потому что одна библиотека хочет CommonJS, а другая — ES2023.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, T4r4sB, Вы писали:
TB>Это не ценится( Рынок требует быстрее наговнякать ублюдище весом в 10 мегов, требующее последнюю винду.
TB>Не надо кранчиться, надо неспешно пилить декодер. Разве это не кайф?
Ну тут никак — нужно определиться, что для вас первостепенно: чтобы вашу работу оценили или чтобы она приносила удовольствие.
Не, я обеими руками за то чтобы успешно сочетать, но надеяться что это обязательно получится...
Здравствуйте, Михаил Романов, Вы писали:
МР>Ну тут никак — нужно определиться, что для вас первостепенно: чтобы вашу работу оценили или чтобы она приносила удовольствие. МР>Не, я обеими руками за то чтобы успешно сочетать, но надеяться что это обязательно получится...
Надо чтоб всемогущий Бог вытеснил идиотов, которые не в состоянии найти галочку при сборке и на пустом месте лепят зависимость от последней венды. Ну раз рынок этих идиотов только благословляет.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
ЕМ>Не. В идеале такой компилятор должен получать на вход исключительно исходники (хотя бы обфусцированные). Обладая должной мощью, он мог бы найти все возможные зависимости (вплоть до динамических), по ним построить граф, и максимально его оптимизировать, а все ненужное выкинуть. Тогда, действительно, из десятка библиотек, по сотне мегабайт каждая, можно будет собрать бинарник в пару десятков килобайт, если его функциональность большего не требует.
Турбопаскаль и Дельфи при компоновке успешно выкидывали код неиспользуемых процедур/методов без всяких исходников — для построения графа вполне достаточно того, что в объектных файлах есть ИМЕНА/сигнатуры процедур/методов (и скорее ВСЕХ, чем только вызываемых из них и ими самими — что-то типа таблиц импорта/экспорта в dll, но явно шире).
Скорее всего, стандартные форматы obj/lib такое не позволяют, но у Борланда были свои.
ЕМ>(вплоть до динамических)
А вот с этим — облом! Динамическое компилятору (тем более линкеру) ну никак не проанализировать (без исполнения кода, да и оно не даёт абсолютно никакой гарантии!)
В Дельфи объем экзешников начал "расти как на дрожжах", огорчая минималистов, из-за включения рефлексии, после которой ВСЕ published-методы уже нельзя было выкидывать — а ну как код вызовет их по имени (сформировав само имя динамически e.g. загрузив из файла конфигурации, которого и В ИСХОДНИКАХ-ТО НЕТ или он там другой)
(А рефлексию при использовании VCL не выключить, т.к. она нужна для построения форм по dfm-метаописаниям в ресурсах. Но можно выключить, если обходиться без VCL. Кстати, .NET WinForms строит формы генерируемым кодом без рефлексии — теоретически можно было бы и VCL переписать в таком ключе. Но у кода формостроения объем больше, чем у метаописаний, так что гарантий выигрыша нет!)