LINUX.ORG.RU
ФорумTalks

Что вы так предесь от идеи «все зависимости в одном большо пакете»?

 бандлы, ,


0

3

I-Love-Microsoft написал тут мысль обозначеную в заголовке

Ищу работу дистрибутивостроителем / системным программистом (комментарий)

«но лучше бы нашелся хоть один адекватный человек, чтобы сделать дистрибутив с нескучными пакетами, которые бы несли все зависимости в себе, поверх некоей минимальной базовой системы. Типа макинтош, типа Ubuntu Personal. Каждая лягушка делает свой дистр, но все как один сует пакеты с зависимостями.»

Проприетарщики этим и занимаются, что создают ОГРОМНЫЕ бандлы со своим софтом, дошло до того, что питон с полсотней нескучных «батареек» там лежит.

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

Почему стремятся к dll hell?

★★★★★
Ответ на: комментарий от Pravorskyi

Не сгущаю, а описываю свой многолетний опыт. QA пакетов вне базовой системы всегда ниже плинтуса, и оно понятно, т.к. никаких человекочасов не хватает поддерживать все сотни тысяч взаимосвязей между ними в условиях периодически ломающегося api и abi и несовместимых обновлений.

thunar ★★★★★
()
Последнее исправление: thunar (всего исправлений: 2)
Ответ на: комментарий от xwicked

Если в DLL добавляется всего лишь одна функция, то она смещает точку вхождения(адрес) в другие все функции.

Ты хочешь рассказать, что в винде нет динамической линковки и таблицы экспортируемых функций?

sergej ★★★★★
()

вопрос еще интересней: почему столько зависимостей у пакетов? Неужели внутри этих программ используется такое кол-во функционала, которое находится в этих гигабайтах зависимостей?

Подозреваю, что все, что работает, при правильном написании кода, должно весить раз в 20 меньше

Xwo
()
Ответ на: комментарий от sergej

Ты хочешь рассказать, что в винде нет динамической линковки и таблицы экспортируемых функций?

Компоновщик также вставляет в конечный DLL-файл таблицу экспортируемых идентификаторов — раздел экспорта, в котором содержится список (в алфавитном порядке) идентификаторов экспортируемых функций, псрсмснных и классов. Туда же помещается относительный виртуальный адрес (relative virtual address, RVA) каждого идентификатора внутри DLL-модуля.

Это сделано для скорости, но не для переносимости и удобства. Скорости никто не видит, как и удобства в принципе тоже, а ОСям по 20(!) лет уже и никто не чешется...

xwicked ★★☆
()
Последнее исправление: xwicked (всего исправлений: 1)
Ответ на: комментарий от Xwo

Либо ты пишешь все сам, либо используешь библиотеки, а это зависимости.

sniper21 ★★★★★
() автор топика
Ответ на: комментарий от sergej

Ну в алфавитном, ну относительный. А проблема-то в чем?
Добавление новой функции не меняет ABI.

Идентификатор экспортируемых функций - это ИМЯ, а не число. По этому имени получается ЧИСЛО(относиительный виртуальный адрес). Изменяется имя - совместимость летит к чертя... к юристам, простите.
При компиляции, компилятор УДАЛЯЕТ удалённую функцию из DLL(да, сокращается её размер), как следствие опять летит к юристам совместимость. Это можно было сделать опционально, с пометкой «критическая», и работал бы отбойник, сохраняющий совместимость. Но на йух никому ничего не нужно.

xwicked ★★☆
()
Ответ на: комментарий от Mamin_simpotyaga

Сейчас вижу, что здравомыслящих людей стало больше

Тебе кажется. Все не правы.

crutch_master ★★★★★
()
Ответ на: комментарий от intelfx

Вопрос на миллион: а как надо?

Ориентироваться на интерфейсы взаимодействия, а не на имена функций в so'шках.

crutch_master ★★★★★
()
Ответ на: комментарий от xwicked

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

xwicked ★★☆
()
Ответ на: комментарий от xwicked

С хрена ли оно куда-то летит?

Динамический линковщик шарится по этой таблице и подставляет реальные адреса в адресное пространство exe-шника.

sergej ★★★★★
()
Ответ на: комментарий от sergej

С хрена ли оно куда-то летит?
Динамический линковщик шарится по этой таблице и подставляет реальные адреса в адресное пространство exe-шника.

procedure Button1Click(Sender: TObject);
begin
  {"Чистим" адрес функции от "грязи"}
  @GetSimpleText := nil;
  {Пытаемся загрузить библиотеку}
  LibHandle := LoadLibrary('MYDLL.DLL');
  {Если все OK}
  if LibHandle >= 32 then begin
    {...то пытаемся получить адрес функции в библиотеке}
    @GetSimpleText := GetProcAddress(LibHandle,'GetSimpleText');
    {Если и здесь все OK}
    if @GetSimpleText <> nil then
      {...то вызываем эту функцию и показываем результат}
      ShowMessage(StrPas(GetSimpleText(True)));
  end;
  {И не забываем освободить память и выгрузить DLL}
  FreeLibrary(LibHandle);
end;

В старой версии программы вызывается функция «GetSimpleText» из библиотеки. Автор обновил программу и версию библиотеки, в которой он дал более удачное название функции «GetRichText». Всё. GetProcAddress не найдёт в библиотеке функцию «GetSimpleText» - совместимость улетела.

xwicked ★★☆
()
Ответ на: комментарий от sergej

А почему только один внимательно прочитал то, что я написал? :D В остальных случаях должно работать, вроде как...

xwicked ★★☆
()

Разрабочтик писал под Qt5.6 Его из дистра выпилили и накатили 5.9, в котором что-то сломано. Будешь курить бамбук с неработающей софтиной?

leg0las ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.