metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-04-24 05:50 pm

Запретите мне

Мне нельзя писать на C, по причине психологических проблем. Я начинаю от входа изобретать велосипеды, писать какие-то свои строки, массивы строк и прочую хрень.
Впрочем, в целях самообучения оно, конечно, полезно, но потом надо заставить себя взять готовые библиотеки и переписать на них.
Тогда возникает следующая проблема: какую из 100500 библиотек взять?
А вообще это я пытаюсь сделать общение с девайсом в continuation-passing style с трамплином, но начав его делать, я углубился в строки и списки строк )

PS: Наверно возьму glib. Код строк у них там внезапно почти идентичен тому, что я тут наколхозил.
PPS: Хотя уже есть и альтернативное мнение в комментариях. Ну и спрашивается, как жить в языке, где на каждую тему есть половина мнений за и половина мнений против?:)

[identity profile] jakobz.livejournal.com 2012-04-24 02:52 pm (UTC)(link)
Ну плюсы - это же язык для написания библиотек для работы со строками. Так что все ок, правильно все делаешь.

[identity profile] x-den.livejournal.com 2012-04-24 03:04 pm (UTC)(link)
сравнивать си с плюсами -- это почти как сравнивать джаву с джаваскриптом: слова однокоренные, но как-то не о том.

[identity profile] nealar.livejournal.com 2012-04-24 03:07 pm (UTC)(link)
В случае ребе М ну никто совершенно не мешает взять кресты. Потому что взрослый комп и GCC.

[identity profile] falcrum.livejournal.com 2012-04-24 03:09 pm (UTC)(link)
Ну так ты задачу интересно обозначил: "внезапно я получаю по com-порту строку в несколько гигабайт"... :)

[identity profile] permea-kra.livejournal.com 2012-04-24 03:27 pm (UTC)(link)
в сях нет, не было и не будет нормальных строк, поскольку все стандартные апи хотят нуль-терминированные строки. Там нужно все выкидывать на свалку и переписывать. Начать желательно с написания нового unicode (чтобы вся диакритика была всегда отдельным code point), потом переписать все апи на строки с информацией о длине в байтах перед строкой и использованием нормального utf8 и только после этого выпускать язык из психушки.

[identity profile] tzirechnoy.livejournal.com 2012-04-24 03:44 pm (UTC)(link)
Если человек считает utf8 нормальным -- то выпускать его из психушки пока рановато.

[identity profile] permea-kra.livejournal.com 2012-04-24 03:51 pm (UTC)(link)
Кодировка в любом случае должна быть 1)байт-ориентированная (чтобы не было идиотизма с LE/BE) 2)с нормальным расходом памяти, сниженным для частых символов 3)желательно, являться надмножеством ascii. 4)хотя бы миллионом кодпойнтов.

Итого, альтернатив UTF8 в общем нет.

[identity profile] tzirechnoy.livejournal.com 2012-04-24 04:08 pm (UTC)(link)
>Кодировка в любом случае должна быть

настраиваемой пользователем.

>1)байт-ориентированная (чтобы не
> было идиотизма с LE/BE)

Транспортная -- да. Со внутренней в принцыпе могут быть варианты, это в общем скорее дело библиотеки.

>с нормальным расходом памяти, сниженным для
> частых символов

preliminary optimisation. Если нужэн снижэнный расход памяти -- используйте хаффмана. А вообще написать столько настоящего текста, который займёт существенную память -- нетривиально.

>желательно, являться надмножеством ascii.

Вообще хорошо бы. Хотя лучшэ, чтобы поддержка не-ascii тожэ была.

>хотя бы миллионом кодпойнтов

Вы столько не выучите.
То есть транспортная и системная инфраструктура должна поддержывать расшыряемый набор кодировок, по очевидной причине. В расшыряемом наборе будет неограниченное количество кодпоинтов. С другой стороны, мне часто хватает windows-1251 с парой эскейпов.

Вообще, мне бы подошла rfc2047, если чо.

[identity profile] permea-kra.livejournal.com 2012-04-24 06:03 pm (UTC)(link)
>preliminary optimisation.
Это ярлык.

>Если нужэн снижэнный расход памяти -- используйте хаффмана.
Не всегда вариант. Зачастую совсем не вариант.

>А вообще написать столько настоящего текста, который займёт существенную память -- нетривиально.
Банально. Сериализованная база имя-телефон-адрес.

>Вы столько не выучите.
Мне и не надо. Юникод просто один должен быть.

[identity profile] esil0x.livejournal.com 2012-04-24 07:03 pm (UTC)(link)
> 2)с нормальным расходом памяти, сниженным для частых символов
Это зависит. По мне так лучше 4 байта на символ и высокая производительность.

[identity profile] nealar.livejournal.com 2012-04-25 11:16 am (UTC)(link)
Производительность так часто утыкается в память, что это почти взаимоисключающие параграфы.

[identity profile] esil0x.livejournal.com 2012-04-25 07:32 pm (UTC)(link)
В каком смысле? Вы хотите сказать, что какие-нибудь кэш-миссы будут обходиться дороже, чем дополнительный код для вычисления положения следующего символа, который ко всему процему делает невозможным анализ и оптимизацию таких циклов?

[identity profile] jakobz.livejournal.com 2012-04-24 06:13 pm (UTC)(link)
Это хотя-бы лучше UTF16.

[identity profile] theiced.livejournal.com 2012-04-24 03:31 pm (UTC)(link)
я тебе уже ответил - глиб. но ты предпочитаешь слушать бабуинастов и прочую пидорасню почему то.

[identity profile] mend0za.livejournal.com 2012-04-24 03:59 pm (UTC)(link)
+1 за glib

если конечно не нужно потом утилитку ужимать в остродиетическую прошивку, где лишние 500KB на .so уже больно.

[identity profile] theiced.livejournal.com 2012-04-24 05:18 pm (UTC)(link)
ты как бабуинаст должен кричать за крестики или ещё какой ад.

[identity profile] mend0za.livejournal.com 2012-04-24 05:27 pm (UTC)(link)
Я на С++ практически не пишу, и не хочу рекомендовать ни его, ни либы. С тем же Qt огрёб по полной, полгода-год назад, хотели по-быстрому редактор для базы наклепать. Сейчас мой преемник на проекте страдает от того же, переняв код.

[identity profile] metaclass.livejournal.com 2012-04-24 05:40 pm (UTC)(link)
Уупс. А что такое с Qt?

[identity profile] mend0za.livejournal.com 2012-04-24 05:49 pm (UTC)(link)
с нами случился QSqlRelationalTableModel, QSqlTableView и драйвер Sqlite3.

Пока ты показываешь поля так, как по дефолту хочет эта шняга - всё ок. Как только хочешь сделать показ и редактирование 16-ричных значений, или поле Description с длинными строками, выходящими за экран - наступает умца-умца.

В драйвере Sqlite3 для Qt были утрачены по дороге foreign keys - они не отрабатывают при удалении, которое должно быть каскадным. Пришлось хардкодить удаление записей из всех связанных таблиц (помимо главной).

Короче - в Qt всё изумительно, пока ты остаёшься в пределах функиционала демок. Как только реальные задачи - начинается фейерия, когда кастомизируешь дефолтное поведение.

Подгрузка значений из базы тоже странновато сделана. Хорошо что не всё грузит во model сразу, но странно дёргается и сбрасывает почём зря текущие значения положения активной ячейки при сохранении изменений.

[identity profile] metaclass.livejournal.com 2012-04-24 05:56 pm (UTC)(link)
Хм, foreign keys по идее не должны зависеть от драйвера. Хотя зная практику статической сборки sqlite во что попало, вполне могли и поломать.

[identity profile] mend0za.livejournal.com 2012-04-24 05:58 pm (UTC)(link)
Я предполагаю что проблемы гдето внутри драйвера qt для sqlite. Там где производится отображение их диких абстракций на реальные БД.

Консольный клиент (без qt) отрабатывал ок.

[identity profile] metaclass.livejournal.com 2012-04-24 06:03 pm (UTC)(link)
sqlite вообще говоря, может быть вкомпилен прямо в драйвер. Т.е. движок внутри драйвера и движок внутри консольного клиента - два разных движка )

[identity profile] mend0za.livejournal.com 2012-04-24 06:08 pm (UTC)(link)
Я понимаю на что вы намекаете. Нет, тут не такой случай :)

Package: libqt4-sql-sqlite
Depends: libsqlite3-0 (>= 3.5.9)

Package: sqlite3
Depends: libsqlite3-0 (= 3.7.9-2)

Package: libsqlite3-0
Description: SQLite 3 shared library

[identity profile] theiced.livejournal.com 2012-04-24 06:32 pm (UTC)(link)
бабуинасты могли что то сломать. они всегда что то ломают. я бы потестил на нормальном дистре сначала (хотя признаю что в данном случае хуйни понаделали кутисты скорее всего).

[identity profile] fkng-stupid-lj.livejournal.com 2012-04-24 06:33 pm (UTC)(link)
foreign keys включаются прагмой, после чего работают как ожидается.

[identity profile] theiced.livejournal.com 2012-04-24 06:35 pm (UTC)(link)
если это наломали бабуинасты - я буду долго ржать ;]

[identity profile] fkng-stupid-lj.livejournal.com 2012-04-24 06:48 pm (UTC)(link)
Там ломать нечего -- в sqlite они действительно из коробки не работают, это описано, плюс можно их включить, так что это, по всем признакам, не бага, а фича. :) А кто такие бабуинасты?

[identity profile] theiced.livejournal.com 2012-04-24 06:50 pm (UTC)(link)
это те которым важнее воздрочка на бороду столлмана чем реально работающие продукты ;]

[identity profile] metaclass.livejournal.com 2012-04-24 07:05 pm (UTC)(link)
Более того, наиболее продвинутые дрочат не только на бороду столлмана, но еще и на существ, живущих в ней, а так же на портрет торвальдса.

[identity profile] mend0za.livejournal.com 2012-04-24 06:37 pm (UTC)(link)
Вот это 'query.exec("PRAGMA foreign_keys = ON;"); ' ?

Коллега, это реальная уличная магия :). Спасибо, попробуем.



[identity profile] metaclass.livejournal.com 2012-04-24 06:44 pm (UTC)(link)
фак мой мозг. :)

[identity profile] perepertoz.livejournal.com 2012-04-24 10:46 pm (UTC)(link)
срочно отпишитесь о результатах лечения
тут все очень переживают!

[identity profile] mend0za.livejournal.com 2012-04-26 07:42 am (UTC)(link)
всем как обычно пофиг

[identity profile] perepertoz.livejournal.com 2012-04-26 09:01 am (UTC)(link)
я не все. мне не пофиг :)

[identity profile] mend0za.livejournal.com 2012-04-26 04:06 pm (UTC)(link)
к сожалению - у нас в коде больше этот кусок не используется, как я выяснил вчера.

[identity profile] perepertoz.livejournal.com 2012-04-26 05:01 pm (UTC)(link)
ну почему же "к сожалению"? надо радоваться : меньше кода - меньше багов :)

[identity profile] thedeemon.livejournal.com 2012-04-24 03:50 pm (UTC)(link)
На Си надлежит написать рантайм хаскеля, а дальше - монады-монады-монады. :)

[identity profile] mend0za.livejournal.com 2012-04-24 05:30 pm (UTC)(link)
Наиболее православен будет рантайм хаскеля на TCL.

"Создатели Хабла не ошибались"

[identity profile] tzirechnoy.livejournal.com 2012-04-24 04:22 pm (UTC)(link)
Да, glib -- это феерическое говно. Они собрали все херовые концэпцыи, которые только смогли скомпилировать в Си: unicode, XML, threads, dynamic loading of code, stdio-like streams interface, null-terminated strings и собрали это в одну монолитную библиотеку.

[identity profile] metaclass.livejournal.com 2012-04-24 04:34 pm (UTC)(link)
А GString же не null-terminated

[identity profile] tzirechnoy.livejournal.com 2012-04-24 06:02 pm (UTC)(link)
Нудаконечно.

[identity profile] slonopotamus.livejournal.com 2012-04-25 05:44 am (UTC)(link)
Не слушай его, бери глиб. Только не бери gobject. Даже не смотри в его сторону.

[identity profile] juan-gandhi.livejournal.com 2012-04-24 06:41 pm (UTC)(link)
Ха. Я когда-то полгода писал всякие объекты, мапы, хеши, стринги, иквалзы. А потом вышла джава, я всё бросил и пошел туда, где всё уже есть.

[identity profile] blackyblack.livejournal.com 2012-04-24 07:08 pm (UTC)(link)
Уже кложура вышла же. Пора всё бросать и идти туда.

[identity profile] metaclass.livejournal.com 2012-04-24 07:15 pm (UTC)(link)
Так все уже давно там :)

[identity profile] juan-gandhi.livejournal.com 2012-04-25 12:00 am (UTC)(link)
Да мне и на скале хорошо.

[identity profile] blackyblack.livejournal.com 2012-04-24 07:14 pm (UTC)(link)
"PPS: Хотя уже есть и альтернативное мнение в комментариях. Ну и спрашивается, как жить в языке, где на каждую тему есть половина мнений за и половина мнений против?:)"

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

[identity profile] justy-tylor.livejournal.com 2012-04-24 07:28 pm (UTC)(link)
Ребе, это уже было про Хаскель!