LINUX.ORG.RU
ФорумTalks

ненависть: Python-libxml деструкторы

 , , , ,


0

4

Имеется популярнейшая библиотека работы с XML - libXML2.

Биндинги для неё есть для практически всех скриптовых языков. Есть они и для Python.

http://xmlsoft.org/python.html

смотрим пример кода

import libxml2, sys

doc = libxml2.parseFile("tst.xml")
if doc.name != "tst.xml":
    print "doc.name failed"
    sys.exit(1)
root = doc.children
if root.name != "doc":
    print "root.name failed"
    sys.exit(1)
child = root.children
if child.name != "foo":
    print "child.name failed"
    sys.exit(1)
doc.freeDoc()

разглядываем приведенный пример и задумываемся над последней строкой.

ХГМ.

Поскольку у Python «имеется» прекраснейшая возможность писать деструкторы к скалярам, то вот такая выдержка из документации имеет место быть:

Also note the need to explicitly deallocate documents with freeDoc() . Reference counting for libxml2 trees would need quite a lot of work to function properly, and rather than risk memory leaks if not implemented correctly it sounds safer to have an explicit function to free a tree. The wrapper python objects like doc, root or child are them automatically garbage collected.

Изучая эту библиотеку подробнее - выходим на прекрасные функции

  • freeDoc
  • xpathFreeContext
  • и так далее

Расскажите мне почему нормальные деструкторы программисту не нужны.

★★

Последнее исправление: leave (всего исправлений: 2)

Если посмотреть на список тем автора, можно предположить что у него жена ушла к Гвидо.

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

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

то же с (/foo|/bar)/baz
KeyError (

ЧЯДНТ?

$ python3
Python 3.6.5 (default, Mar 31 2018, 19:45:04) [GCC] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from lxml import etree
>>> from io import StringIO
>>> f = StringIO('<foo><bar></bar></foo>')
>>> tree = etree.parse(f)
>>> r = tree.xpath('/foo/bar')
>>> str(r)
'[<Element bar at 0x7f2c2f5efbc8>]'
>>> r = tree.xpath('(/foo|/baz)/bar')
>>> str(r)
'[<Element bar at 0x7f2c2f5efbc8>]'

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

скобки не поддерживает, варианты не поддерживает

такой вот «нормальный» XPath

Скинь сниппет (пример кода, демонстрирующий подобное поведение).

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

Авторы написали кривой <subj>, а виноват питон?

Прям универсальный шаблон. Ничего, что чуть менее чем все питонячьи батарейки кривые, сам питон конечно неуиноуен.

bread
()
Ответ на: комментарий от Manhunt

да, я переключался между уже четвертой библиотекой и попал не туда.

да lxml подходит таки под определение нормальной библиотеки.

теперь еще надо поглядеть как она бенчмаркает по сравнению с libxml.

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

а авторы STD библиотеки пишут «пишите noSTD XPath, а когда-нибудь мы это пофиксим»

тоже не питон виноват?.....

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

теперь еще надо поглядеть как она бенчмаркает по сравнению с libxml.

Выложи инфу, интересно. Хотя «под капотом» там наверняка тот же libxml. Просто биндинг более высокоуровневый.

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

А что ТЫ, однозвёздый, сделал для HATE-DRIVEN DEVELOPMENT ?!

Manhunt ★★★★★
()

http://xmlsoft.org/python.html

Вообще-то по ссылке предлагается смотреть на lxml:

The distribution includes a set of Python bindings, which are guaranteed to be maintained as part of the library in the future, though the Python interface have not yet reached the completeness of the C API.

Note that some of the Python purist dislike the default set of Python bindings, rather than complaining I suggest they have a look at lxml the more pythonic bindings for libxml2 and libxslt and check the mailing-list.

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

Да. Собственно о чем мы спорим? Я Python использую с 2000 года. Вы не используете. Ну так может прекратите цирк?

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

Предыдущие товарищи просто пилили в 175 раз эффективнее.

oldstable
()

libxml2 вообще - так себе либка, жаль, что лучшей нет.

Но то, что кто-то недоосилил сделать нормальные биндинги к питону, - либо проблема компетенции биндингописателя, либо он просто сделал на скорую руку PoC, а дальше поддерживать неохота.

Sorcerer ★★★★★
()

Угадал автора по слову «скаляр» в контексте Python.

krautcat
()
Ответ на: комментарий от steemandlinux

я искал именно биндинги именно к libxml и первое чо я сделал - спросил у pip search что он мне может предложить.

я что-то не так сделал?

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

Я Python использую с 2000 года.

Дык у тебя глаз замылен, а приходящим извне проще заметить кривизну. Так вот, питон очень странный мягко говоря. Схожие очучения у меня от lua, но это очень нишевая и прилично оптимизированная штука, можно и потерпеть. Зачем терпеть жирнющий медленный интерпретатор с нескучным дизайном и васянскими API, не очень понимаю.

bread
()
Ответ на: комментарий от rsync

я что-то не так сделал?

Да, искал библиотеки на pypi, не посмотрев сначала что там нормальные люди для питона используют.

oldstable
()
Ответ на: комментарий от steemandlinux

то есть вот этот ад с наличием двух, а то и трех версий Python в каждом репе Linux - это еще не глобально, то ли еще будет?

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

Адок начнется, когда выпустят 4-й питон (с перламутровыми пуговицами). А второй не может умереть, потому что слишком завязались на него дистроделы. Ну у нас же есть три или четыре несовместимых версии луа в дистрах, пусть и питон плодится и размножается. Правда луа можно смело в /dev/null в отличие от.

bread
()
Ответ на: комментарий от rsync

Чтобы найти пакет если ты не помнишь точного названия. Или список пакетов под определённое ключевое слово. Ну знаешь, как и в любом другом репозитории.

oldstable
()
Ответ на: комментарий от bread

Прям универсальный шаблон. Ничего, что чуть менее чем все <subj> батарейки кривые, сам <subj> конечно неуиноуен.

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

когда мне нужен скажем редактор, я у апта спрашиваю без заглядывания в гугл

не понимаю почему тут по другому?

а вспомнил, в питоне же всё через ж

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

И ставишь первый попавшийся? Да вы экстремал. Так можно у апта спросить веб-браузер и пользоваться потом вместо него линксом.

oldstable
()
Ответ на: комментарий от rsync

в нем смогли не напрягать пользователя своими проблемами?
если да, то питон даже хуже Java

Нужно напрягать в языках с автоматическим управлением памяти. В java вся надежда на finalize() метод, он будет вызван по прихоти GC. т.е. скорее всего приложение захватит весь хип а потом начнет действовать GC и удалять объекты. Я думаю похожее поведение можно было бы добоится использовав weak reference, в обоих языках имеются, а значит в питон можно было бы сделать тоже самое.

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

Так гугль тоже выдает пакет 7 летней давности, а новый в самом конце болтается.

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

не понимаю почему тут по другому?

Краткое и ясное изложение всех твоих питонопроблем.

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