программистское
Sep. 23rd, 2006 12:07 amБудет интересно только тем, кто знает, что такое Перл и Юникод. ncurses по умолчанию не поддерживает многобайтные символы, в том числе UTF-8. Начиная с какой-то недавней версии, есть возможность построить отдельную библиотеку, libncursesw вдобавок к обычной libncurses, у которой идентичный интерфейс и встроенная поддержка многобайтных символов.
Однако перловский интерфейс к curses, библиотека Curses, ничего об этом не знает и линкуется всегда с libncurses.
Предположим, я хочу написать программу на Перле, с текстовым интерфейсом через curses, с поддержкой вывода в разных кодировках, в том числе (самое простое и идеальное) utf-8, если терминал поддерживает. Я это не могу сделать, потому что libncurses портит некоторые мультибайтные символы, вставляя вместо них мусор. Стандартный интерфейс к curses-библиотеке ОС, который будет установлен там, где будет бежать моя программа - какой-нибудь линукс или BSD - будет заранее слинкован с libncurses (та часть интерфейса, которая написана на C и компилируется в динамическую библиотеку, которую перл подгружает в рантайме - Curses.so - динамически слинкована с libncurses). Что я могу сделать? Написать новую версию интерфейса Curses, которая линкуется с libncursesw если такая есть, и послать ее мейнтейнеру? Там всего-то менять - список библиотек для поиска, потому что на уровне API библиотеки ncurses и ncursesw совместимы. Но не факт, что он примет; если да, пройдет еще полгода, пока выпустит новую версию, и еще год после этого, пока она войдет в стабильные пакеты основных дистрибутивов. Написать полностью свой интерфейс к libncursesw и включить его в пакет программы? Идиотизм. Включить в пакет программы измененную версию стандартного Curses, которая линкуется с libncursesw, и устанавливать ее в отдельном месте под другим именем? Идиотизм. Ах да, есть еще прелестная возможность хака, скажем, скопировать системный /lib/libncursesw.so.5.5 в отдельную копию в свою директорию, назвать копию libncurses.so.5 (без w), и поставить LD_LIBRARY_PRELOAD так, чтобы она загрузилась вместо обычной libncurses.so.5, когда будет загружаться стандарнтый интерфейс Curses. Причем все работает тогда, я проверил. Но это ж несерьезно.
2006 год на дворе, типа.
Ну есть еще...
Date: 2006-09-22 09:22 pm (UTC)Re: Ну есть еще...
Date: 2006-09-22 09:49 pm (UTC)no subject
Date: 2006-09-22 09:25 pm (UTC)no subject
Date: 2006-09-23 07:06 am (UTC)Ну я, в общем, говорю мастдай. ИМХО Перл - это оно и есть. Заметочка - дополнительное (очень небольшое) подтверждение. И что?
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:Re: Reply to your comment...
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2006-09-22 09:32 pm (UTC)Будет работать всегда и везде ;)
PS Я уже думаю списочек делать -- библиотек которые на Pure Perl написаны.
no subject
Date: 2006-09-22 09:56 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Re: Ну есть еще...
Date: 2006-09-22 09:41 pm (UTC)А maintainer-у надо послать патч, который позволит при инициализации модуля выбирать, с какой ncurses линковаться.
Btw, кто заставляет в 2006 году писать строго через ncurses? %) (про slang тут уже сказали)
Re: Ну есть еще...
Date: 2006-09-22 09:51 pm (UTC)Re: Ну есть еще...
From:Re: Ну есть еще...
Date: 2006-09-22 09:54 pm (UTC)Re: Ну есть еще...
Date: 2006-09-22 09:58 pm (UTC)no subject
Date: 2006-09-22 09:45 pm (UTC)В Альлинуксе вроде уже добавили в стейбл.
Я думаю проблема в том, что на UTF-8 далеко не все дистрибутивы ещё перешли по умолчанию. Да и ncurses уже не так активно используется, как Qt :-)))
no subject
Date: 2006-09-22 09:52 pm (UTC)(no subject)
From:(no subject)
From:Пересобрать пакет
From:no subject
Date: 2006-09-22 09:52 pm (UTC)no subject
Date: 2006-09-22 10:10 pm (UTC)no subject
Date: 2006-09-22 10:13 pm (UTC)no subject
Date: 2006-09-22 10:38 pm (UTC)no subject
Date: 2006-09-23 03:20 am (UTC)no subject
Date: 2006-09-23 04:37 am (UTC)no subject
Date: 2006-09-23 06:42 am (UTC)(no subject)
From:(no subject)
From:no subject
Date: 2006-09-22 11:08 pm (UTC)no subject
Date: 2006-09-23 04:33 am (UTC)no subject
Date: 2006-09-23 05:27 am (UTC)По теме: LD_PRELOAD можно заменить на -rpath. правда, тогда библиотеку надо ставить в заранее извеснтое место.
no subject
Date: 2006-09-23 05:30 am (UTC)no subject
Date: 2006-09-23 08:47 am (UTC)Re: Ну есть еще...
Date: 2006-09-23 02:48 pm (UTC)(no subject)
From: