четверг, 5 мая 2011 г.

низкоуровневость

c++ такой...

За последний год я программировал не более 5 раз, все остальное время я отношу к понятию "разработка". 3 раза можно с полной уверенностью назвать "программированием", остальное - с натяжкой. Да, я конечно же каждый рабочий день хожу на работу и пишу код, но это "разработка".

Программирование - это то что по ночам, дома, когда посещает Муза. Муза может посещает немного чаще, но хрен знает как она выглядит, и сосчитать количество посещений довольно затруднительно. А факт программирования - коммиты в 2 ночи, нетривиальные вещи (для меня сильно не тривиальные), неделю/месяц/полгода думаешь и наконец-то собираешься и добиваешь - можно посчитать.

Выжимаю что могу, даже переписал на плюсах. На решетке (С#) пробил построение динамического суффиксного массива в 100кб/с (на первых ста килобайтах :) , дальше сказывается log^2(n)). Предыдущие алгоритмы жирноваты, там чуть ли не 3/4 времени вычисляю lcp (DRMQ). А сейчас даже lcp вычислять не обязательно, только добровольно. По константе раз 5-6 лучше.

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

Низкоуровневость и отсутствие инструментов бесит. Хотя я на это сознательно шел - это про первое. Приходится мыслить терминами "кусок памяти" и указатель. На чистый С не буду переходить, ибо у меня сплошные массивы деревья, их довольно много и объектность с виртуальностью позволяют это как-то целостно видеть. Иначе будет ад.

Дайте мне нормальную строку - мне много не надо, всего лишь: индексный доступ, возможность удаления/вставки/замены в любой позиции. Все за O(log(n)). (С) рекламный слоган. Вроде бы немного хочу, ан нету. Видимо, максимум что нужно остальным - это stringBuilder с потоковой записью в конец. А мне надо все и сразу и везде.

Год назад я "жаловался" на отсутствие простых массивов. Ну нету нигде нормальных. А нужно мне опять немого: индексный доступ, удаление/вставка/замена в любом месте и опять же за логарифм. Правда, еще нужно пару плюшек.

А везде массивы и строки - кусок памяти. Такое ощущение, что кусок чего-то такого густого и оно так на полу на кухне лежит. Даже трогать не хочется. Это блин, кусок памяти. Хочется чего-то гибкого и быстрого, а не кусок.

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

Несколько дней избавлялся от ошибки. На маленьких строках все работает, на баааальших падает с полной фигней. Если бы в языке было понятие выхода за границы массива, или хотя бы что я не пишу в "получужую" память, то мне бы хватило и 5 минут. А так как выделение памяти для переменных/объектов есть кусок памяти, то случайный выход за границы можно уловить только через пару дней. Или я совсем не знаю ключей компиляции.

А если использовать всякие stl и прочее непонятное типа boost, то мы похоже ничего кардинального не выиграем. Ну, будет некоторая константа по скорости, но по всему остальному преимуществ уже не будет. Тогда стоит и переходить на более высокоуровневые инструменты.

Поэтому у меня всего один #include < string > , в одном не критичном месте, и никакого использования даже stl-я.

Комментариев нет: