The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

79% встроенных в код сторонних библиотек никогда не обновляются, opennews (ok), 27-Июн-21, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


134. "79% встроенных в код сторонних библиотек никогда не обновляю..."  +/
Сообщение от макпыф (ok), 27-Июн-21, 13:56 
имел ввиду использовать системную версию библиотек
Ответить | Правка | К родителю #82 | Наверх | Cообщить модератору

151. "79% встроенных в код сторонних библиотек никогда не обновляю..."  +/
Сообщение от Котофалк (?), 27-Июн-21, 15:41 
Ты всё проспал. Разработчики прибитых гвоздями версий ненавидят системные библиотеки. Им нужна среда, в которой всё как они захотят.
Ответить | Правка | Наверх | Cообщить модератору

162. "79% встроенных в код сторонних библиотек никогда не обновляю..."  +/
Сообщение от Аноним (26), 27-Июн-21, 16:51 
И чтобы было меньше вопросов к системным либам пихают многие разработчики свое творчество в снапы, флатпаки, а то и в докеры и почему то случается, что и это не помогает. Кто же все-таки виноват и что делать?
Ответить | Правка | К родителю #134 | Наверх | Cообщить модератору

170. "79% встроенных в код сторонних библиотек никогда не обновляю..."  –1 +/
Сообщение от Ordu (ok), 27-Июн-21, 18:20 
Подскажи мне, в какой версии какой системной библиотеки можно найти реализацию perfect hash table? Да такую, чтобы она в качестве ключей принимала бы строку заданную указателем на кусок памяти + длина строки, не полагаясь бы на наличие терминатора \0. И чтобы с C'шным API, без всех этих няшностей сиплюсплюса.

А ещё, что-нибудь маааленькое, C'шное, для парсинга url'ов в подстроки совместимые с perfect hash table выше?

А ещё, да, что-нибудь такое, для генерации выборок случайных чисел, подчиняющихся заданному распределению. Чтобы там было бы распределение Гаусса, распределение Пуассона, может ещё парочку каких. И да, неплохо было бы, если бы оно умело пару десятков статистических методов сравнения выборок. В смысле, вот те стандартные которые включают любой курс статистических методов, типа хи-квадрат, anova, T-вилкоксона, t-Стьюдента, U-манна-уитни, и тп. Желательно при этом, чтобы я тупо туда скармливал семпл за семплом, потом вызывал бы что-то типа finish, и получал бы результат -- значение параметра, p-значимость, и тп.

Ещё было бы неплохо иметь всяких библиотечек для извлечения данных из /proc. Там блин синтаксисы простейшие, но так задалбывает с ними разбираться, обрабатывая на ходу всевозможные ошибки ввода-вывода, что прям ппц. Причём, местами -- это не просто синтаксис, это надо взять открыть директорию, перечислить там все поддиректории с именами определённого вида, залезть в эти поддиректории, найти файлы с определённым именем, распарсить их в соответствии с определённым синтаксисом, и собрать всё это в одну сводную табличку. Ипааать. И это же на фоне того, что любой вызов open или read может вернуть ошибку, которую либо надо заигнорить и повторить операцию, либо вернуть её как ошибку наверх. Начинаешь задумываться, почему бы ядру не освоить sql в качестве языка запросов, да?

Или, скажем, библиотечку для рисования табличек в терминале. В смысле, чтобы не мухой на стекле выёживаться с printf("| %03.7d | %.25s |"... , ох блин, надо ж не фиксированные размеры полей, а подобрать их по содержимому таблички и под ширину терминала... А с переносами по словам в ячейке что делать? Есть ли какие алгоритмы, позволяющие легко и быстро получить достаточно хороший результат в 99% случаев? Ух ты ёкарный бабай, хрен с ними с няшной псевдографикой типа
    ╔═════════════════════════╗
    ║ НЯШНАЯ ПСЕВДОГРАФИКА ║
    ╚═════════════════════════╝

(сорри, не ипу как тут в комментах получить fixed-width шрифт, чтобы действительно няшно вышло, в маркдаун форум не хочет, а все эти bb-коды, насколько я вижу, не работают).

Не, действительно, хрен с ним, и можно ведь и обычными ASCII +-| обойтись. Или даже на них забить, чтобы не создавать себе проблем на несколько вечеров кодинга кряду на няшность, которая не добавляет ни йоту функциональности. Вообще вывести всё в виде записей вида:

row1: value1,
row2: value2,
...
rowN: valueN.

кстати так парсить проще будет, если чо.

Но с другой стороны, можно ведь взять что-нибудь типа [1], что в достаточно простых случаях позволяет получать достаточно хороший результат, а потом просто озаботиться тем, чтобы не создавать слишком сложных случаев? М? Но есть ли что-нибудь такое среди "системных библиотек"?

[1] https://crates.io/crates/term-table

Нет. Среди системных библиотек есть только старпёрство 80 уровня. Никакой няшности. Никаких послаблений. Если библиотека не была предложена в 80-х годах лично Керниганом, то это ересь, а не библиотека. За такие библиотеки надо сжигать на костре. Либо, альтернативы вида "gnome в депендансах". Которые тоже не решают всех проблем, потому что туда тоже не так то и просто включить свою библиотечку, которая няшно рисует таблички в терминале, или реализует H-краскала-уоллеса, делая сомнительные и неоднозначные допущения о том, в каком формате данные будут загружаться туда.

Ответить | Правка | К родителю #134 | Наверх | Cообщить модератору

173. "79% встроенных в код сторонних библиотек никогда не обновляю..."  +/
Сообщение от макпыф (ok), 27-Июн-21, 19:04 
системные библиотеки = установленные в систему то есть в /usr/lib или еще куда нибудь

установить туда можно что угодно

Ответить | Правка | Наверх | Cообщить модератору

178. "79% встроенных в код сторонних библиотек никогда не обновляю..."  –1 +/
Сообщение от Ordu (ok), 27-Июн-21, 19:34 
> системные библиотеки = установленные в систему то есть в /usr/lib или еще
> куда нибудь
> установить туда можно что угодно

Хаха. Ты пробовал?

Не, ну ты вот сам подумай. Вот, допустим, ты пишешь софтину, которая не под Debian заточена, не под RedHat, не под Arch и не под Gentoo, ты пишешь софтину, задумывая её как кроссплатформенную промежь unix'ов. И теперь вопрос: как ты будешь при инсталляции своей софтины убеждаться, что в системе уже установлена libsomething-I-need-a-lot.so, причём достаточной версии?

configure? Эмм... ну это в принципе вариант, да. Если твой configure выдаст диагноз системе вида "здесь не установлена libsomething-I-need-a-lot.so.3.12" то это сработает: если человек снизошёл до запуска configure, то можно надеятся, что такое заявление подтолкнёт его у установки something-I-need-a-lot. Гарантировать этого нельзя, но если он не может, то это его проблемы.

A если не configure, то что? pkg-config? Это тоже вариант, но того же уровня.

rpm? apt-get? emerge? pacman? Но они не позволяют описать депенданс, которого нет в репах. В смысле, ты не сможешь проверить свой build/install-скрипт, не занеся предварительно в репы эту библиотеку. Но разработчик этой библиотеки считает, что возня с репами тысячи дистров -- это не та деятельность, которую он готов выполнять в качестве хобби. На самом деле, скорее всего, он не готов даже для одного репа поддерживать пакет: ему, в качестве хобби, интересно писать алгоритмы, реализовывать структуры данных, парсить синтаксисы, сериализовывать данные, но ему не интересно писать шелл-скрипты, под разные версии дистров, которые там что-то сделают. Ему не интересно связываться с бюрократией, которая требует десятка справок в трёх экземплярах, только для включения пакета в репы.

В результате, ты не имеешь никакой библиотеки в репах, которая решит твою проблему. Я поэтому выше и задавал конкретные вопросы, типа "подскажи мне библиотеку, которая делает X". Я надеялся, что это будет хорошо демонстрировать точку зрения. Нет такой библиотеки. И либо ты начинаешь атаковать лбом кирпичную стену, в надежде протолкнуть такую библиотеку в репы, которую можно подключить, либо ты забиваешь на всё это, и включаешь библиотеку в виде сорцов.

Покажи мне как можно установить в систему библиотеку, которая реализует для C строки вида struct {size_t len; size_t *bytes}. Которая реализует url_encode/url_decode. Которая позволяет легко получать выборки из различных распределений вероятностей. Которая позволяет легко форматировать данные в таблички, используя наилучшее возможное представление для терминала. Как это сделать? Так, чтобы часик повозиться единожды, и установить.

Нет такого способа. Linux-дистры не заточены под такое. Они распространяют лишь достаточно "серьёзные" библиотеки, которые достаточно часто используются. Если они попытаются двинутся хоть на полкарасика ниже, если они попытаются предоставлять больше библиотек, то их накроет dll-hell'ом, и мейнтейнеры linux'ов взвоют, и выкинут свои рабочие компьютеры от бессилия. dll-hell -- это фундаментальная проблема, есть разные способы справляться с ней, но ни один из них не является серебряной пулей. Подход linux-дистров не решает её, лишь снижает её влияние: по сравнению с вендой, он (за счёт трудов мейнтейнеров дистра) даёт возможность для ограниченного списка софта и депендансов иметь наилучшее решение проблемы. Всё что выходит за пределы ограниченного списка софта/депендансов, будет решать проблемы dll-hell так, как сможет. Причём дистры не предоставляют _ваабще_никаких_инструментов_ для этого. Программист вынужден костылить свои решения.

Тут могут помочь всякие решения, типа maven, gridle, cargo, npm, gem, pip, ..., но даже с ними возникают ОГРОМНЫЕ проблемы, если их пользовать через apt-get, emerge и тп. В том смысле, что все эти apt-get лишь добавляют больше проблем. Когда я игрался с ruby, я быстро забил на "emerge dev-ruby/something-i-need" и перешёл к использованию gem напрямую, устанавливая всё что нужно в $HOME. Потому что репы больше создают проблем в этом случае, чем решают. Они не могут найти решение для dll-hell в столь мелком разрешении: dll-hell -- это фундаментальная проблема со сложность O(exp(N)), под её решение не хватит никаких вычислительных ресурсов, и никаких человеческих ресурсов.

Самый простой способ для разработчика: оставить эти проблемы "кому-нибудь-ещё". Вот кому будет не лень с ними возиться, кому будет интересно или очень нужно, вот пускай он и возится.

Ответить | Правка | Наверх | Cообщить модератору

182. "79% встроенных в код сторонних библиотек никогда не обновляю..."  +/
Сообщение от макпыф (ok), 27-Июн-21, 19:50 
configure проверяет либы через pkg-config. Всегда нормально работало это и никаких проблем подобных не было. потом линкеру идет -lsome-lib и он уже решает so.3.12 или so.3.13 и тд

если же ты про бинарники (их распространяют только дистры и виндузятники) то
1. их кстати принято распространять ввиде пакетов для дистрибутивов (а значет зависимости решаются дистрибутивным ПМ)
2. просто сказать что требуются установить определенные библиотеки нельзя
3. ld.so если что сам скажет что какаято либа не найдена


Ну а если вы используете какието странные васяноподелки которых даже в репах дистров нету то в случае бинарников прилинкуйте статически. При нормальной установке пользователю не составит труда собрать также и эту зависимость

Ответить | Правка | Наверх | Cообщить модератору

185. "79% встроенных в код сторонних библиотек никогда не обновляю..."  –1 +/
Сообщение от Ordu (ok), 27-Июн-21, 20:09 
> Ну а если вы используете какието странные васяноподелки которых даже в репах
> дистров нету то в случае бинарников прилинкуйте статически. При нормальной установке
> пользователю не составит труда собрать также и эту зависимость

Дык они и делают именно это: они включают статически, вместе с сорцами.

А насчёт сваливать на потенциального пользователя обязанность скачать сорцы и собрать их, я расскажу тебе байку. [в качестве оправдания] Я был молодой и глупый, я два месяца назад впервые поставил linux, за три дня убил XFree86, пытаясь его отконфигурировать, провёл полтора месяца в ядерной консоле, и смог-таки скомпилять XFree86, до состояния когда у меня запустился xterm. [/в качестве оправдания] И вот я думаю: теперь надо собрать gnome. Я залез на сайт gnome, и там ипааать в рот сколько всяких разных тарболлов. Я скачал все. В смысле, закинул в список закачки, и wget выкачивал метров по сто за ночь, через dialup, который по ночам был по дешёвке ваще -- там были карточки Web-Plus, которые на неделю ночей за какие-то копейки продавались. И вот у меня лежит хренова туча тарболлов, и я такой: а в каком порядке их собирать? Хз, думаю. Я тогда выкрутился посредством создания шелл-скрипта, который брал первый тарболл, распаковывал, пытался собрать, и если это не работало, то брал второй тарболл, пытался собрать... и так далее. И если какой-то тарболл собрался в процессе, то просто убираем его из списка, и начинаем сначала. Именно тогда я возненавидел autootols.

Но я к тому, что тебе видимо не приходилось сталкиваться с ситуацией, когда софтина для сборки требует какого-то очень специфического окружения, и хрен его знает что именно надо. Причём, я отмечу, что мой пример с гномом -- это ещё цветочки, потому что эти примеры чётко знали, что им нужно. В более общей ситуации, программисту сложно понять, что именно нужно его софтине, чтобы собраться. Он может принимать за данность какое-то свойство системы, а оно на самом деле не является данностью в FreeBSD. Или может у него просто установлена библиотека, и он её использует, не замечая того. А может не библиотека, а расположение файлов в etc важно. Или может наличие какого-то файла в /proc (что накладывает ограничения на версию ядра и/или на его конфигурацию). А может быть это работает только в локали en_US.C, и нихрена не работает в локали ru_RU.KOI8-R? А разработчик не замечает, потому что единственная установленная у него локаль -- это en_US.C.

Ответить | Правка | Наверх | Cообщить модератору

187. "79% встроенных в код сторонних библиотек никогда не обновляю..."  +/
Сообщение от макпыф (ok), 27-Июн-21, 20:18 
обычно на эту тему есть документация. В том случае проблема была совсем в другом, т.к. одна программы была кучей тарболов и ты не нашел документации. Если что https://www.linuxfromscratch.org/blfs/

для пользователя юзающего бинарники лучше всего использовать ПМ дистра

> Дык они и делают именно это: они включают статически, вместе с сорцами.

дык  я про установку в систему для сборки статической версии если ты очень хочешь бины распространять без ПМ. Но опять же - так делают только виндузятники. А обычно либо дистро ПМ либо сорцы

А если ты хочешь дополнительно собрать tar.*z пакет для любого дистра - линкуй системные либы статически или засунь внутрь тарбола динамические. А тут речь идет о включении их  в код и сборки по дефолту вместе с прогой

Ответить | Правка | Наверх | Cообщить модератору

190. "79% встроенных в код сторонних библиотек никогда не обновляю..."  +/
Сообщение от Ordu (ok), 27-Июн-21, 20:30 
Ты сейчас излагаешь точку зрения энд-юзверя. Точку зрения "зделайте так, чтобы мне было хорошо".

> А если ты хочешь дополнительно собрать tar.*z пакет для любого дистра - линкуй системные либы статически или засунь внутрь тарбола динамические. А тут речь идет о включении их  в код и сборки по дефолту вместе с прогой

Естественно: это самый простой способ избежать бюрократии дистромейнтейренов. Подумай как программист, ну вот хотя бы попытайся. Тебе нужна функция, которой нет ни в одной из системных либ. Что делать? Скопипастить её в код со stackoverflow? Проигнорить stackoverflow и написать заново? Или подключить несистемную библиотеку, которая реализует эту функцию?

Ответить | Правка | Наверх | Cообщить модератору

244. "79% встроенных в код сторонних библиотек никогда не обновляю..."  +/
Сообщение от макпыф (ok), 28-Июн-21, 10:04 
обычно linux разработчики вообще не распространяют бинарники. в конечном итоге - почти все пакеты LFS и большая часть пакетов BLFS встроеных копий либ не имеют и нормально живут. И собственно библиотеки нельзя разделить на "системные и несистемные" - системные = установленные в систему, а туда может быть установлена любая библиотека.

К счастью для большей части либ есть --with-system-somelib и т.д.

> Подумай как программист, ну вот хотя бы попытайся. Тебе нужна функция, которой нет ни в одной из системных либ. Что делать? Скопипастить её в код со stackoverflow? Проигнорить stackoverflow и написать заново? Или подключить несистемную библиотеку, которая реализует эту функцию?

ну я бы скорее всего использовал первый вариант т.к. второй лень, а подключать доп либы когда это не нужно т.к. есть 1 и 2 вариант - так себе

Ответить | Правка | Наверх | Cообщить модератору

247. "79% встроенных в код сторонних библиотек никогда не обновляю..."  –1 +/
Сообщение от Ordu (ok), 28-Июн-21, 11:26 
Вот чего ты мне пытаешься доказать? Что программисты так не делают? Но ведь в новости написано, что они так делают. Ты пытаешься логикой опровергнуть реальность сейчас, или что?

>> Подумай как программист, ну вот хотя бы попытайся. Тебе нужна функция, которой нет ни в одной из системных либ. Что делать? Скопипастить её в код со stackoverflow? Проигнорить stackoverflow и написать заново? Или подключить несистемную библиотеку, которая реализует эту функцию?
> ну я бы скорее всего использовал первый вариант

Это и есть встраивание открытого кода в свой проект. Только хуже, чем с библиотекой, потому что обновлений точно не будет. Не только простых обновлений, которые не ломают совместимость, но и ломающих совместимость обновлений не будет. И на stackoverflow при этом достаточно дырявого кода, эпизодически в новостях всплывает очередной пример. Кроме того, stackoverflow работает только пока функция укладывается в несколько десятков строк. Если тебе нужна, скажем, библиотека для вменяемой работы со строками в C, то это уже сотни строк, и на стековерфлоу не будет такого. Придётся копипастить с github'а. Что уже и есть встраивание открытой библиотеки в свой проект.

Ответить | Правка | Наверх | Cообщить модератору

248. "79% встроенных в код сторонних библиотек никогда не обновляю..."  +/
Сообщение от макпыф (ok), 28-Июн-21, 11:44 
то что значительная часть проектов отлично без этого обходится.

>  Если тебе нужна, скажем, библиотека для вменяемой работы со строками в C, то это уже сотни строк, и на стековерфлоу не будет такого. Придётся копипастить с github'а. Что уже и есть встраивание открытой библиотеки в свой проект.

В таком случае как раз стоит подключить библиотеку. Ну а ради 10 строк не стоит.

Ответить | Правка | Наверх | Cообщить модератору

250. "79% встроенных в код сторонних библиотек никогда не обновляю..."  +/
Сообщение от Ordu (ok), 28-Июн-21, 12:58 
> то что значительная часть проектов отлично без этого обходится.

Да, очень часто посредством выпиливания лобзиком велосипедов. Или использования не тех алгоритмов, которые подходят лучше, а тем что есть. Скажем, конструкции вида
if(strcmp(s, "hello") == 0)
{ ... }
else if(stdcmp(s, "world") = 0)
{ ... }
else ...

И так пара десятков else-if'ов. Хотя сложив все эти строчки в хештабличку, можно обойтись подсчётом хеша s, и использования этого хеша как индекса в хештабличке, с дальнейшим switch'ом. Но для этого нужна perfect hash-табличка, желательно такая, которая собирается в compile-time. Хрен ты найдёшь такое в репах. Поэтому костыли if-else'ов, или, скажем, libc'овой реализации хеш-таблички (которая вовсе не perfect, и как её собрать в compile-time я даже не представляю). Или велосипеды выпиленные лобзиком ad hoc.

Бывают люди, кто ценит своё время, и понимает что весь код в мире не напишешь сам, но C и C++ в этом смысле очень недружелюбны к тем, кто пытается код заимствовать со стороны и ещё потом отслеживать эти заимствования, обновляя их по возможности. Поэтому таких людей относительно немного.

>>  Если тебе нужна, скажем, библиотека для вменяемой работы со строками в C, то это уже сотни строк, и на стековерфлоу не будет такого. Придётся копипастить с github'а. Что уже и есть встраивание открытой библиотеки в свой проект.
> В таком случае как раз стоит подключить библиотеку. Ну а ради 10
> строк не стоит.

А они не подключают, они включают код библиотеки в код программы. И это работает даже для 10 строк. Ну, в смысле, почти работает. Потому что хоть задумка и хороша (если в этих 10 строках найдётся баг, то на них прилетит багфикс), на практике этот багфикс часто оказывается невостребованным.

Ответить | Правка | Наверх | Cообщить модератору

272. "79% встроенных в код сторонних библиотек никогда не обновляю..."  +/
Сообщение от n00by (ok), 30-Июн-21, 17:01 
> if(strcmp(s, "hello") == 0)
> { ... }
> else if(stdcmp(s, "world") = 0)
> { ... }
> else ...

+
> И так пара десятков else-if'ов. Хотя сложив все эти строчки в хештабличку,
> можно обойтись подсчётом хеша s, и использования этого хеша как индекса
> в хештабличке, с дальнейшим switch'ом. Но для этого нужна perfect hash-табличка,
> желательно такая, которая собирается в compile-time. Хрен ты найдёшь такое в
> репах. Поэтому костыли if-else'ов, или, скажем, libc'овой реализации хеш-таблички (которая
> вовсе не perfect, и как её собрать в compile-time я даже
> не представляю). Или велосипеды выпиленные лобзиком ad hoc.

Идеальный хеш на этапе трансляции подразумевает, что определено конечное множество строк, верно? Не ясно, зачем тогда при ветвлении оперировать со строками, а не с их индексами в массиве (в какой задаче такое может понадобиться).

Кроме того, else намекает, что s возможно указывает на произвольное значение, значит вероятна коллизия. В таком случае на этапе трансляции следует генерировать пефиксное дерево (оно может оказаться быстрее, поскольку не требует сканирования всей строки). Но если транслятор произведёт подстановку (inline) strcmp() и оптимизирует, то результирующий код окажется гомоморфен поиску по дереву.

Ответить | Правка | К родителю #250 | Наверх | Cообщить модератору

174. "79% встроенных в код сторонних библиотек никогда не обновляю..."  –2 +/
Сообщение от Аноним (26), 27-Июн-21, 19:23 
Надеюсь это не мне написано было, а то для меня тут темный лес.
Ответить | Правка | К родителю #170 | Наверх | Cообщить модератору

181. "79% встроенных в код сторонних библиотек никогда не обновляю..."  +/
Сообщение от Аноним (26), 27-Июн-21, 19:46 
ldd
Ответить | Правка | Наверх | Cообщить модератору

183. "79% встроенных в код сторонних библиотек никогда не обновляю..."  –1 +/
Сообщение от макпыф (ok), 27-Июн-21, 19:53 
> Надеюсь это не мне написано было, а то для меня тут темный
> лес.

разуметься тебе, ну кому же еще это может быть написанно. Ведь точно не тому на чье сообщение это ответ

Ответить | Правка | К родителю #174 | Наверх | Cообщить модератору

188. "79% встроенных в код сторонних библиотек никогда не обновляю..."  –1 +/
Сообщение от Аноним (26), 27-Июн-21, 20:25 
В начале не понятно кому, потом было конкретно не мне, но я кажется понял о чем разговор идет и себе же ответил.)
Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру