LINUX.ORG.RU

Библиотека GNU libavl


0

1

Удивительным образом не вижу пакета для неё в одной операционной системе, которую нельзя называть. А .ebuild-файл к этой библиотеке совершенно точно должен существовать, потому что это одна из зависимостей ZFS.

Для сравнения - есть ли она в Debian? Есть, оказывается.

https://adtinfo.org/
«GNU libavl is the most complete, well-documented collection of binary search tree and balanced tree library routines anywhere.»

Знаете почему Gnome тормозит? Они эту библиотеку не используют, у них «a library named glib, which has an unoptimized recursive C implementation

Между тем, библиотека libavl написана модным, литературным, стилем программирования. Я всегда как-то думал, что literate programming это нечто абстрактное (мол, просто документируйте больше), но нет, это вполне конкретный особый способ извратить исходники в репозитории (TexiWEB), и они его реально применяют (и, наверное, обучают ему)!
Значит к библиотеке есть книжка, по которой можно всё изучить (411 страниц). И это очень хорошо.

Для сравнения, попробуйте поискать методички такого размера и детальности на русском языке. Их нет. Три тётки женщины попробовали что-то написать, но… Недотягивает уровень, моё оценочное суждение, зато там есть неуместные якобы «юморные» картинки.

Хотелось бы заметить, что эта библиотека мало известна среди российских программистов, по неизвестной мне причине. Наверное лень читать. Чаще советуют макросы для деревьев из BSD.

Подробности: https://git.savannah.gnu.org/cgit/avl.git/tree/ (GNU LGPL v2.1)

cc -g -W -Wall -ansi -pedantic    -c -o texitree.o texitree.c
texitree.c:1038:1: warning: ‘tree_print’ defined but not used [-Wunused-function]
 1038 | tree_print (struct tree *tree)
      | ^~~~~~~~~~
cc -lm -g texitree.o   -o texitree
/usr/bin/ld: texitree.o: in function `space_distance_along':
/.../avl/texitree.c:1685:(.text+0x354e): undefined reference to `sqrt'
collect2: error: ld returned 1 exit status
make: *** [Makefile:181: texitree] Error 1

Такая вот литература.

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

Я согласен с тем, что библиотека не соответствует стандартам кодирования GNU:

$ autoreconf -i
autoreconf-2.71: error: 'configure.ac' is required
$ ./configure --help
bash: ./configure: No such file or directory

Но текст ошибки у меня другой:

$ make
makeinfo --number-sections  libavl.texi
You found a bug: Text remaining without normal text but `@0,@value{SP}got@value{SP}%d\n"},@cr
'

Additional informations:
last location: libavl.texi:7596
context_stack: (_root preformatted)
current: (preformatted) :   contents(1)
 <- @format
Died at /usr/share/texinfo/Texinfo/ParserNonXS.pm line 5319.
make: *** [Makefile:155: libavl.info] Error 25
Shushundr ★★★
() автор топика
Ответ на: комментарий от HerbertHoover

Я уже задавал вопрос на тему того, как писать .ebuild-файл для программы, созданной без GNU Autotools. Там не ответили толком. Поэтому я и в этой теме не надеюсь.

Shushundr ★★★
() автор топика

Для поста не хватает примера кода этой замечательной библиотеки:

*|B/;pa[k - 1]%g(
	|A/;x%b(
		^a,
		^b),
	|C\;w%b(
		^c,
		^d))

=>

*|B/;x%g(
	|A%b(
		^a,
		^b),
	|C%r(
		^c,
		^d))

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

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

Зачем мне куда-то смотреть? Чтобы доказать кому что?

Вообще фиолетово на эту либу, я про нее только сегодня узнал. Жил как-то без нее.

Package Details: libavl 2.0.3-2
utanho ★★★★★
()
Последнее исправление: utanho (всего исправлений: 1)
Ответ на: комментарий от iron

По-идее, эта либа в проекте GNU, поэтому наверное её можно «реанимировать» (рассуждая по аналогии с Apache Foundation). Не знаю, как в GNU, а в Apache можно пройти всякие там формальные процедуры, предоставить роадмэп улучшений и т.д. и взять шефство над проектом.

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

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

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

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

Тебя только это смущает? Покажи тогда код из этой библиотеки ближайшему литератору и попроси рецензию.

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

Строка, в которой ошибка, выглядит так:

      @tabalign{}@IND{4em}@w{@i{printf}} (@cleartabs{}@wtab{}@t{"@value{SP}@value{SP}@value{SP}@value{SP}First@value{SP}item@value{SP}test@value{SP}failed:@value{SP}expected@value{SP}0,@value{SP}got@value{SP}%d\n"},@cr

«Команда makeinfo --number-sections libavl.texi используется для генерации документа в формате Info с нумерованными разделами из исходного файла Texinfo.

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

Ключ –number-sections указывает makeinfo добавлять номера разделов (например, 1.2, 3.1 и т.д.) к заголовкам разделов в выходном документе. Это делает структуру документа более понятной и позволяет читателям легче перемещаться по документу.

Ваш исходный файл libavl.texi будет преобразован в документ Info с нумерованными разделами, который можно просмотреть с помощью утилиты info»

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

В общем, как будто в этот файл .texi вывели сообщение об ошибке с текстом:
" First item test failed: expected 0, got %d\n"

команда @t{text}:
«Set text in a fixed-width, typewriter-like font, if possible.» это команда texinfo
https://www.gnu.org/software/texinfo/manual/texinfo/html_node/Command-List.html

TexiWEB обрабатывает директивы @include в исходном файле и объединяет их в один выходной файл с расширением .texi

texiweb source.w

точнее в Makefile написано примерно как-то так:

WEAVE_FLAGS =

...

w_source = avl.w bst.w catalogue.w examples.w extra.w glossary.w	\
intro.w libavl.w pavl.w pbst.w prb.w preface.w rb.w references.w	\
rtavl.w rtbst.w rtrb.w search-alg.w table.w tavl.w tbst.w trb.w

...

libavl.texi: $(w_source) texiweb
	./texiweb $(WEAVE_FLAGS) weave libavl.w $@

Сама программа texiweb.c лежит там же в репозитории:

$ ./texiweb --help
texiweb, a program for translating TexiWEB documents
Usage: texiweb [OPTION]... COMMAND

Commands:
  weave INFILE OUTFILE     translate TexiWEB to Texinfo
  tangle INFILE [OUTFILE]  translate TexiWEB to C

Options:
  -d, --debug            enables code for debugging texiweb
  -l, --line             (tangle) emit #line directives
  -f, --filenames        (tangle) only print list of output files
  -u, --unused           (tangle) also print list of unused sections
  -s, --segments         (tangle) print all segments to dir OUTFILE
  -c, --catalogues       (weave) also print unused catalogues
  -a, --unanswered       (weave) also list exercises without answers
  -n, --nonzero-indent   (weave) warn for indent adjust between blocks
  -h, --help             print this help, then exit
  -v, --version          show version, then exit

Report bugs to bug-avl@gnu.org.

Описание от автора, кто кого вызывает - https://mailman.egr.msu.edu/mailman/public/linux-user/2001-February/003323.html

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

Проблема в том, что после вызова макроса @value{SP} сразу идёт цифра. Формируется это в строке https://git.savannah.gnu.org/cgit/avl.git/tree/texiweb.c#n3264

Если поставить пробел перед нулём, то проблема не возникает. Не знаю, почему в макросах утилиты texinfo происходит так.

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

Чего ты мне фейспалм ставишь? Я не обязан уметь делать make programs и вообще открывать Makefile. Я запускаю просто make, а цель all не собирается, потому что возникает ошибка при сборке документации.

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

texiweb.c:1589: "@set SP {@char`@ }\n",
texiweb.c:1609: "@set SP @ @c\n",

первый вариант, это если @iftex, а второй вариант, если @ifnottex

@c - это игнорировать всё до конца строки:
«Ending a macro body with ‘@c’ may cause text following the macro invocation to be ignored as a comment in texi2any. This is not the case when processing with TeX. This was often done to “comment out” an unwanted newline at the end of a macro body»
https://www.gnu.org/software//texinfo/manual/texinfo/html_node/Macro-Details.html

Но здесь не определение макроса, а использование (invocation) встроенной команды @set

В общем, непонятно, с чего бы склеиваться @value{SP} и 0.

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

Ешё у меня примерно такая бага:

libavl.texi:524: warning: @html should only appear at the beginning of a line (possibly involving @little)
libavl.texi:524: superfluous argument to @end html:  in (possibly involving @little)

на примерно таком тексте:

@ifhtml
You can also view the fully expanded code in a code segment by
following the link from the segment name or number (our example does
not include this feature).
@end ifhtml
At the bottom of section 19 you will find a note reading `@little{This
code is included in @segno{15}.}', making it easy to move back to
section 15 that includes it.

Ошибка в третьей снизу строке, где вызов @little

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

Единственный плюс сабжа (я так вижу!) – многопоточные деревья.

Ещё несколько:

  1. участие в процессе GNU (а не самостоятельный проект)
  2. используется как зависимость ZFS и не придётся переделывать ZFS для использования другого проекта (об этом я с самого начала написал)
  3. автор потратил немало времени на изготовление, надо уважать труд
Shushundr ★★★
() автор топика
Ответ на: комментарий от Werenter

Просто впиши в него нужные команды компиляции

Компиляция просто не работает:

У меня установлен

# emerge -pv =texinfo-7.1

...

 -*  sys-apps/texinfo
      Latest version available: 7.1
      Latest version installed: 7.1
      Size of files: 5 416 KiB
      Homepage:      https://www.gnu.org/software/texinfo/
      Description:   The GNU info program and utilities
      License:       GPL-3+

Я пытаюсь скомпилировать проект GNU libavl
https://savannah.gnu.org/projects/avl
командами

$ git clone https://git.savannah.gnu.org/git/avl.git
$ make docs
makeinfo --number-sections  libavl.texi
libavl.hdr:87: warning: environment command format as argument to @alias
libavl.texi:853: warning: @cindex should only appear at the beginning of a line
...

Проблема в том, что файлы libavl.hdr и libavl.texi генерируются при помощи программы texiweb (из репозитория libavl), и, значит, я не могу влиять на их содержимое

Сайт
https://lists.gnu.org/mailman/listinfo/bug-avl
у меня не открывается, как и куда отправить сообщение об ошибке я не знаю.

«Домен lists.gnu.org или адрес их сервера находится в реестре Роскомнадзора. "Доступ к информационному ресурсу ограничен на основании Федерального закона «Об информации, информационных технология и о защите информации».»

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

Тебя только это смущает?

Я слишком мало знаю про технологию texinfo, чтобы она меня смущала, но на ЛОР есть несколько топиков про то, что были проблемы с русским языком (в 2004, 2017-м годах).

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

warning: environment command format as argument to @alias

В формате texinfo @команды могут быть однострочными и обрамляющими блок текста при помощи двух вызовов @команда @end команда. Если создаётся алиас для команд второго вида, то выдаётся такой варнинг.

https://www.gnu.org/software/texinfo/manual/texinfo/html_node/_0040format.html

«The @format command is similar to @display, except it leaves the text unindented.»

https://www.gnu.org/software/texinfo/manual/texinfo/html_node/_0040display.html

«The @display command begins another kind of environment, where the font is left unchanged, not switched to typewriter as with @example. … The @display command indents the text, but does not fill it.»

$ head libavl.hdr -n 89 | tail -n 5
@macro cr
@end macro
@alias begincode = format
@alias endcode = end
@macro blankline 

https://www.gnu.org/software/texinfo/manual/texinfo/html_node/_0040alias.html

«Unfortunately, it’s not possible to alias Texinfo environments; for example, @alias lang=example is an error.»

Я не знаю, что такое «Texinfo environment» (потому что в документации нет гиперссылки на определение термина), но вот выше в документации про @display как раз упоминалось @example и в описании были слова «another kind of environment».

Ну и что теперь делать? Искать в .w-файле пары @begincode/@endcode и заменять на @format/@end format ? Так потеряется «семантика», для сохранения которой, вроде как была создана команда @alias… Мне, кстати, непонятно, что будет плохого, если эта семантика потеряется. В документации про такое не пишут.

В самом .w-файле такого нет, это добавляет утилита texiweb:

$ grep -n  begincode *.c
texiweb.c:1649:      "@alias begincode = format\n",
texiweb.c:1695:      "@macro begincode\n",
texiweb.c:2952:      emits ("@begincode\n");

И ещё такой кусок текста есть:

      "@macro begincode\n",
      /* Uncomment to put a thin rule above code segments. */
      /* "@vskip 1pt plus0pt@hrule@vskip -2pt plus0pt", */
      "@smallskip\n",
      "@end macro\n",
      "@macro endcode {ignore}\n",
      /* Uncomment to put a thin rule below code segments. */
      /* "@vskip 1pt plus0pt@hrule\n", */
      "@end macro\n",

Само макро используется в файле intro.w:

ChangeLog-2004-12-28  Ben Pfaff  <blp@gnu.org>
ChangeLog-
ChangeLog-	* texiweb.c: Support recent Texinfo.
ChangeLog:	(open_header_file) Change strategy used for @begincode, @endcode
ChangeLog-	in output.
ChangeLog-	(transition) Ditto.
ChangeLog-

$ grep -n "begincode" *
intro.w:129:@begincode
intro.w:183:@begincode
intro.w:217:@begincode
Shushundr ★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 4)
Ответ на: комментарий от Shushundr

Ты просто увидел похожее название и посчитал, что три файлика в дереве исходников zfs-fuse, в каждом из которых ясным языком написано

/*
* Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
* Use is subject to license terms.
*/

есть библиотека GNU libavl?

arkhnchul ★★
()
29 декабря 2023 г.
Ответ на: комментарий от Shushundr

Читал страницу https://stackoverflow.com/questions/4553735/gnu-autotools-debug-release-targets

Так и не понял, как сделать дебужную и релизную сборки (и в какие директории их устанавливать). Чтобы дебужная была без оптимизации, а релизная с оптимизацией при компиляции. Вроде как GNU Autotools к такому не приспособлен?

«If you are building a project and you want to make a debug build or a release build, you should use different options at configure time.»

Ну ок, а как это тогда делать на уровне .ebuild-файла?

Я хочу, чтобы включение USE=«debug» на одном из пакетов включало дебужность на всю глубину в пакетах платформы. А в генте рекомендуют только per package environment variables, а это не то же самое.

И мне не ясно, как должны устанавливаться дебужные версии всего по FHS.

Shushundr ★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 3)