[00:04:47] <vlad2> Я тыкнул посмотреть скриптинг - а там жабаскрипт вылез.
[00:05:08] <vlad2> Плагины на плюсах писать грустно.
[00:05:29] <vlad2> ты только билд процесс будетшь день настраивать
[00:05:37] <vlad2> а плагин хочется здесь и сейчас
[00:15:23] <vlad2> http://kate-editor.org/2009/10/29/extending-kate-with-scripts/
[00:19:55] <valexey'> http://paul.giannaros.org/pate/
[00:19:57] <valexey'> например
[00:20:14] <valexey'> по моему, там плагины и без этого можно на питоне писать
[00:35:08] <valexey'> гм. интересно, а тот факт, что Scala мне начинает казаться извращением нездоровым, означает что я старею?
[00:41:00] <vlad2> О да. Самое страшное что может случиться (помимо того самого) - это стать info21 :)
[00:41:36] <vlad2> застыть на чем-то одном :)
[00:41:42] <valexey'> угу.
[00:42:17] <valexey'> хотя чисто эстетически скала мне никогда не нравилась. слишком она какая-то грязная. намешано туда всего подряд..
[00:42:29] <valexey'> хаскель в этом плане лучше. намного. чище.
[00:43:14] <valexey'> хотя, у меня ощущение, что оптимим лежит где-то между D2, dylan, c++
[00:44:20] <valexey'> ну а java - для самых маленьких :-)
[00:45:14] <vlad2> :)
[00:46:48] <valexey'> ну, реально java (если не допускать разрастания в проекте j2ee) позволяет запустив студента в код, сразу от него получать профит.
[00:47:25] <valexey'> а вот j2ee программистов частенько нужно лечить. электрошоковой терапией.
[00:47:57] <vlad2> От фабрик ффбрик фабрик? :)
[00:48:04] <vlad2> Вопрос на засыпку:
[00:48:34] <vlad2> расстаить скобки !a || b && c
[00:48:38] <valexey'> ладно бы фабрики. там класслоадеры кастомные. точнее сторонне-либные.
[00:48:52] <valexey'> vlad2: в каком языке?
[00:48:55] <vlad2> C++
[00:50:30] <valexey'> (!a) || (b && c)
[00:50:33] <valexey'> так вроде
[00:50:50] <vlad2> Я тоже так думал.
[00:51:05] <valexey'> а в чем засада?
[00:51:07] <vlad2> Просто строчкой выше  все три a/b/c инитятся нулем.
[00:51:33] <valexey'> и-и? ну понятно что из за лени оно сразу 1 вернет.
[00:51:53] <valexey'> до b и с дело не дойдет
[00:51:54] <vlad2> Поэтому я задумался - может я чего-то не понимаю. Короче, убивать :)
[00:52:31] <valexey'> а шо, народу таки лень скобочки расставить? :-)
[00:52:54] <vlad2> А. Не. там x.b и x.c :)
[00:52:58] <vlad2> Не заметил x.
[00:53:33] <valexey'> ну, у точки еще выше приоритет чем у всех остальных
[00:53:39] <valexey'> вроде как не должно влиять :-)
[00:54:27] <vlad2> Да, просто код однородный, копипастили, глаз замыливается.
[00:54:53] <valexey'> копипаста зло!!1
[00:55:04] <valexey'> (хотя я не представляю как в том же обероне без нее жить)
[04:13:32] <valexey'> дас. похоже что в D можно относительно просто сделать bit syntax аля ерланг.
[04:16:41] <valexey'> пример использования bit-синтаксиса на ерланге:
[04:16:46] <valexey'>   -define(IP_VERSION, 4).
       -define(IP_MIN_HDR_LEN, 5).

       DgramSize = size(Dgram),
       case Dgram of
       <<?IP_VERSION:4, HLen:4, SrvcType:8, TotLen:16,
       ID:16, Flgs:3, FragOff:13,
       TTL:8, Proto:8, HdrChkSum:16,
       SrcIP:32,
       DestIP:32, RestDgram/binary>> when HLen >= 5, 4*HLen =< DgramSize ->
       OptsLen = 4*(HLen - ?IP_MIN_HDR_LEN),
       <<Opts:OptsLen/binary,Data/binary>> = RestDgram,
       ...
       end.

[04:17:11] <valexey'> прикидка как оно может выглядеть на D (оно уже компиляется, но "мяса" еще нет):
[04:20:21] <valexey'> const auto IP_VERSION = 2;
const auto IP_MIN_HDR_LEN = 2;
byte[] dgram;
match(dgram,
           ( _!(IP_VERSION, 4), _!(4, "hlen>=5 && 4*hlen <= drgam.size") hlen,
             _!(8) srvcType, _!(16) totLen,
             _!(16) id, _!(3) flgs, _!(13) fragOff,
             _!(8) ttl, _!(8) proto, _!(16) hdrChkSum,
             _!(32) srcIp,
             _!(32) destIp, byte[] rest)
           {
               int optsLen = 4*(hlen - IP_MIN_HDR_LEN);
               byte[] opts = rest[0..optsLen];
           }   
     );

[04:26:15] <valexey'> похоже на D получится сделать то, что у меня (и у других тоже) так и не получилось сделать на хаскеле
[04:26:26] <valexey'> даже используя template haskell
[04:32:30] <valexey'> вот так на хаскеле пытаются делать: http://hackage.haskell.org/packages/archive/BitSyntax/0.3.2/doc/html/Data-BitSyntax.html
[04:33:32] <valexey'> там это в три этапа:
[04:33:35] <valexey'> decodeOptions bs ([_, hlen], _, _, _, _, _, _, _, _, _)
  | hlen > 5  = return $ BS.splitAt (fromIntegral ((hlen - 5) * 4)) bs
  | otherwise = return (BS.empty, bs)
[04:33:41] <valexey'> ipDecode = $(bitSyn [PackedBits [4, 4], Unsigned 1, Unsigned 2, Unsigned 2,
                     PackedBits [3, 13], Unsigned 1, Unsigned 1, Unsigned 2,
                     Fixed 4, Fixed 4, Context 'decodeOptions, Rest])
[04:35:09] <valexey'> в результате получаем тупл, об который обпаттернматчившись можно получить именованные переменные
[04:35:26] <valexey'> "This function has several weaknesses compared to the Erlang version: The elements of the bit structure are not named in place, instead you have to do a pattern match on the resulting tuple and match up the indexes. The type system helps in this, but it's still not quite as nice."
[13:13:26] <_valexey_> xxx: а ведущий программист, это такой программист, который может решить любую посталвенную задачу его профиля самостоятельно
yyy: но не хочет )

[19:03:09] <valexey'> ня. это индусское говно не умеет спать в ad-hoc режиме
[19:03:15] <valexey'> /me бьеццо головой апстену
[22:11:25] <vlad2> /me ненавидит дизайн, в котором объект может быть непроиничен или проиничен частично: class X { public: X():inited(false){} X(...args...):inited(true){...} bool empty() const { return !this->inited; } void f() { if ( !this->inited ) throw exception(); }  private: bool inited; };
[22:12:49] <vlad2> Ну не можешь создать полноценный объект - не создавай. Зачем калеку-то делать???
[22:15:21] <vlad2> Пусть такой объект лучше по указателю ходит и будет в каких-то случаях NULL. Зато мемберы не будут завалены проверками ASSERT( this->inited ); и не будут глючить при отсутствии проверки - все будет однозначно и гарантировано падать по разыменованию нулевого указателя.
[23:16:04] <valexey'> угу
[23:16:08] <valexey'> и тормозов будет меньше
[23:16:39] <valexey'> vlad2: вообще, такое ощущение, что это сейчас с твоей стороны был камень в огород КП :-)
[23:32:32] <vlad2> Не, это я тут опять занимался рефакторингом в отрицательное количество строк.
[23:33:03] <vlad2> КП тут постольку поскольку в нем нормальных объектов нет  :)
[23:33:23] <vlad2> Либо голые структуры, либо ООП по полно программе.
[23:34:39] <vlad2> С практической точки зрения такой дизайн опрадывается обычно чем-то вроде:
[23:34:43] <vlad2> X x;
[23:34:52] <vlad2> if (...) x = ...
[23:35:06] <vlad2> Типа проинитили объект по условию.
[23:35:47] <vlad2> А так бы пришлось на куче размещать (если по указателю).
[23:35:48] <vlad2> Но оно того не стоит.
[23:36:21] <vlad2> Не говоря о том, что есть boost::optional<>, который избавляет от кучи.
[23:38:25] <vlad2> Причем задним числом такую херню исправить нереально, если оно расползлось по проекту - можно целый день рефакторить.
[23:38:40] <vlad2> Да, до кучи еще выкинул кучку темплейтов.
[23:39:15] <vlad2> С частичной специализацией и т.д.
[23:40:04] <vlad2> А все ради того, чтобы в _одном_ месте не написать явно вызов функции convert_to_obj2( obj1 ).
[23:40:34] <vlad2> Короче я рву и мечу :)