yigal_s: (Default)
2010-09-18 01:28 pm
Entry tags:

мультитред

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

Это куда как проще оказывается. :-)))

У меня, скажем, как-то валялась статья, в которой я года 3 не мог разобраться. Ну не простой там был код, не простой. Пока, наконец, за одно утро, сидя в очереди к врачу, я не понял, что код - просто туфта. Т.е. показатель эффективности (отношение времени потраченного на разбор кода ко времени потраченному на его разгром) - несколько сотен. И если б это было единожды...
yigal_s: (Default)
2010-08-20 09:54 pm
Entry tags:

шифером шурша (программистское)

Интересно было б придумать два таких интерфейса A и B, состоящие из поднабора методов A1, A2 и B1 и B2, таких что по подинтерфейсам A1 был бы подтипом B1, а A2 был бы супертипом B2.

Вот, скажем, с точки зрения константных методов, квадрат есть подтип прямоугольника, Read more... )
yigal_s: (Default)
2009-04-26 05:38 pm
Entry tags:

программистское: В сущности, это ужас

А не забавно ли, мягко говоря, что начинающий программист на Win32 мало того, что не способен написать thread-safe синглетон, но и, в сущности, вряд ли сможет понять мало-мальски эффективное решение, не прослушав перед этим получасовую, как минимум, лекцию?

http://community.livejournal.com/ru_cpp/366267.html

Что важно, ситуация такая имеется только под Win32, поскольку на юниксовых pthreads есть статичиски-инцициализируемые критические секции, не говоря уже о давно существующем pthread_once, и программист может просто тупо пользоваться этими вещами и не забивать себе голову всякой платформенной эзотерикой.


Кстати 1: на Висте вещи вроде pthread_once тоже есть.
Кстати 2: fast_pthread_once
yigal_s: (Default)
2008-12-09 08:38 pm
Entry tags:

Лёд тронулся!

Оказывается, год назад Intel опубликовало спек на модель упорядочивания доступов к памяти своих процессоров IA-32 и x64 . Подробно описала каким образом доступы к памяти могут переупорядочиваться и как их можно насильно упорядочить.

И вот тут

http://www.justsoftwaresolutions.co.uk/threading/intel-and-amd-memory-ordering-defined.html

даже написали, что теперь из этого документа достоверно известно, что

Read more... )
yigal_s: (Default)
2008-12-09 05:43 pm
Entry tags:

(no subject)

В который раз немножко поговорили про тонкости мультитрединга на С и виндах.

http://community.livejournal.com/ru_cpp/347512.html
yigal_s: (Default)
2008-11-28 02:17 pm
Entry tags:

Микрософт - ты всегда думаешь о нас (программистское)

В кои-то веки я дорвался до GUI.

Удачным решением порадовал Микрософт программистов новой 64-битной платформы.
Теперь, если окно обрабатывает оконное сообщение, пришедшее из другой аппликации или даже из другого треда той же аппликации, и при этой обработке случается исключение (ну, например, такая мелочь как Access Violation), то аппликация пользователя вовсе не крешится, а продолжает себе работать как ни в чем не бывало.

Подробнее - исключение долетает до участка кода, пробрасывающего в окно "внешние" сообщения, и там окончательно поглощается, вообще не долетая до основного кода аппликации. Излишне говороить, что при поглощении UnhandledExceptionFilter не вызывается.

Кажется, подобной надежностью (толерантностью к исключениям) обладали раньше и COM сервера, теперь же и обычные пользовательские апплкации 64-х битной платформы. К сожалению, если оконное сообщение было послано тем же самым тредом, как это обычно бывает в GUI-программировании, то аппликация всё-таки может закрешиться, так как исключение уже никто по дороге не словит. Это может создать ложное впечатление о неработоспособности аппликации у QA и даже конечного пользователя. Надеюсь, в будущих версиях этот недочет будет исправлен.
yigal_s: (Default)
2008-01-16 06:18 pm
Entry tags:

Об ООП

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

1. Типы (интерфейсы, наследование классов от интерфейсов, правила переопределения функций в производных классах) есть более или менее удачная попытка реализовать строгую типизацию языков ООП. Неудачная типизация ограничивает возможности языка и ограничивает мышление программиста, воспитанного на основе её изучения. Чтобы разобраться в ООП, типизацию необходимо послать подальше.

2. Наследование (классов от других классов) есть некоторый (со своими возможными граблями) паттерн повторного использования кода, поддерживаемый языком. Вообще, ввод понятия класса есть опять же некий паттерн реализации минимальных функциональных элементов в ООП. Чтобы разобраться в ООП, идею наследования и классов желательно подвинуть в сторону.

3. ООП не универсально. Не всё ложится в его схему, и не должно ложиться. Даже моделирование объектов внешнего мира может не уложиться в конкретную ООП-схему. Может ли уложиться хоть в какую-то -- вопрос открытый. Им стоит заняться.

4. Правильное построение механизма наследования и типизации есть крайне нетривиальная задача. Только после проработки первых трёх пунктов имеет смысл ей как-то заняться.
yigal_s: (Default)
2008-01-04 12:13 pm
Entry tags:

мультитредные бурчалки

1. поразительно, как много людей, особо заточивших свой моск под MS Windows(tm) считают, что достаточно критических секций (на крайняк, read-write lock-ов) для того, чтобы писать практически что угодно в мультитреде. В чем они правы, так это в том, что на критических секциях действительно можно написать немало, и порой, можно написать относитльно нетривиальные вещи. И всё же... если такого человека спросить, хватит ли ему критических секций, чтобы написать всё, что угодно, то он, конечно же, немедленно вспомнит об...

2. Об Event-ах. Интересно было бы узнать детальную историю, кто и как додумался включить автоматические и мануальные Eventы в Windows. Кто. И как. И кто. Кто этот враг рода человеческого, и о чем думали в это время его коллеги? Наверное, Events появились в PL/1. Впрочем, были ли там мануальные Events? Были ли Events в DEC-овских операционных системах, откуда (из DEC) пришли разработчики NT Kernel? Придумал ли Events человек с хорошим бекраундом в электронике? (ведь ожидание event так напоминает ожидание фронта или уровня сигнала!)

3. Уж сколько лет существует .NET, Java, не говоря уже о POSIX. Но стоит произнести слово "conditional variable", в ответ, как правило, видишь лишь недоуменный взгляд. Потому что, как уже было отмечено, критических секций достаточно. Практически на всё. И это почти правда.

4. Попробуйте реализовать condvar под Windows. Ну попробуйте! Создатели ACE попробовали, даже статью написали об этом. О шести неправильных вариантах реализации и о седьмом. Потом оказалось, тоже неправильном. Всё-таки, другие люди потом придумали правильную реализацию. Они так говорят. Я им не очень верю, но всё равно преклоняюсь, ибо в том, что они написали, я вообще ничего пока понять не могу.

5. Впрочем, всё это суета. Ибо всё это уже давно очень слегка подустарело. О чем, опять же, промышленному кодеру знать и не обязательно. Промышленному кодеру освоить хотя бы The Little Book of Semaphores, потом отложить её в сторону и... снова заняться расстановкой критических секций в коде. Чтоб не сбоил, ага.
yigal_s: (Default)
2008-01-04 04:01 am
Entry tags:

Эвереттика от программирования

the term spaghetti stack is closely associated with implementations of programming languages that support continuations. Spaghetti stacks are used to implement the actual run-time stack containing variable bindings and other environmental features. When continuations must be supported, a function's local variables cannot be destroyed when that function returns: a saved continuation may later re-enter into that function, and will expect not only the variables there to be intact, but it will also expect the entire stack to be there, so it can return again! To resolve this problem, stack frames can be dynamically allocated in a spaghetti stack structure, and simply left behind to be garbage collected when no continuations refer to them any longer. This type of structure also solves both the upward and downward funarg problems, so first-class lexical closures are readily implemented in that substrate also.

via wikipedia
yigal_s: (Default)
2008-01-02 01:36 am
Entry tags:

научный программизм

http://mustread.ru/isbn/013507245x.html

"Фишка такая. Программы следует писать, не используя рекурсии, циклов и их заменителей. Вообще. Вместо этого следует использовать хрень под названием "катаморфизм"."

http://vewacs.livejournal.com/

кстати, обнаружилась:

The theory and practice of concurrency, Prentice Hall, 1998 [pdf]

вряд ли я это одолею, но вдруг?

+страница автора
http://web.comlab.ox.ac.uk/oucl/work/bill.roscoe/pubs.html
yigal_s: (Default)
2007-12-29 05:27 pm
Entry tags:

лямбда, я назову его лямбда

ой, какой раритет появился:
Пильщиков. "Язык Плэнер" (советская серия "библиотечка программиста")
[link]
да еще скан экземпляра за подписью автора.

Сейчас медитирую перед четырьмя небезынтересными и там-сям рекомендованными книшками:

Хендерсон П. - Функциональное программирование, применение и реализация -- пока напечатал и прочитал несколько десятков страниц, вводит в тему на неплохой очень скорости, изложение строится вокруг Лиспа. Интересно. Но пока мало прочитал.

А.Филд, П.Харрисон - Функциональное программирование -- вводят свой, кажется, язык Hope, чисто функциональный с возможностью ленивых вычислений и строгой типизацией. В общем, тоже про реализацию в основном. Прочитал где-то четверть, введение в тематику. Слегка нудновато, порой не очень ясно, но в целом смысл очень наличествует.

John Harrison - Introduction to Functional Programming -- пока не открывал. Обсуждаемый язык - ML

Хювёнен, Сеппянен - Мир Лиспа. -- пол-первого тома мне показались фатально скучными. Потуги автора на оригинальность (какие-то иконки на полях книги) не вдохновили. Пожалуй, если бы не имел отрывочной информации по Common Lisp, то и не осилил бы. Второй том, впрочем, обещает быть очень насыщенным чем-то вполне нетривиальным. Кажется. Будет время - буду вычитывать дальше. Со стоном.

Вообще, с поправкой на слабое знакомство с темой, такое ощущение, что применение лично я ей вряд ли найду. Некая вещь в себе, спрос на рынке минимальный, и, очевидно, там где этот спрос есть, профессионалов хватит, а неучи, не разбирающиеся, скажем, в алгоритмах AI особо и не нужны. Надо бы еще, впрочем, Эрланг поглядеть. Он может оказаться чуток ближе к актуальной мне практике.

Вообще, забавно, что в тематику функционального программирования я мог бы влезть очень давно. Но... что из чтения книги по Плэнеру, что по Лиспу (та же "библиотечка программиста"), еще в студенческие времена, идея чистого функционального программирования у меня не выкристализовалась. Никак. Ну скобки и скобки (интересно, конечно), ну присваивание, ну бектреккинг... То ли главного не уловил, то ли в Пленнере и Лиспе это и не главное. :-) Как не странно, идею точечной пары, прочих конструкторов типа и программирования с использованием чистых функций без изменяемых переменных я усвоил из... Пролога. В котором это, впрочем, опять же, видимо, не главное.
yigal_s: (Default)
2007-12-19 06:21 pm
Entry tags:

программизм: вечерний гон о темплейтах и светлом будущем языка С++

давным давно, когда boost еще не было, а меня еще не уволили с одной весьма хайтековской фирмы за использования макросов, темплейтов, исключений и мультитрединга (в совокупности) на любимом С++, я начал пробовать (не в реальных проектах, упаси бох) разные странные вещи. Вроде темплейтизированного определения константности, темплейтизированных указателей (не smart poiners с накрученной run-time функциональностью, а просто обычных указателей, но завернутых в темлпейты) и чего-то там еще.

Вот скажем, вам не приходило в голову, что Read more... )
yigal_s: (Default)
2007-12-18 03:55 pm
Entry tags:

программизм

На знаменитом ныне sql.ru (где ксеноцефал) я недавно обнаружил упоминание работ Luca Cardelli из Microsoft Research.

На мой вкус, колоссальный чувак. Read more... )
yigal_s: (Default)
2007-12-10 06:35 pm
Entry tags:

программизм

немного поработал над пониманием глубокой философии уродств прекрасного С++

здесь

Вкратце, каждый уважающий себя объект должен имплементировать метод

C& C::takeme() 
{ 
    return *this; 
} 

Ой.

----
Upd: впрочем, можно и так:

C::operator C&( ) 
{ 
   return *this; 
} 

Не сверялся со стандартом, но, похоже, это преобразование вызывается implicitly. Где надо.

Жить стало лучше, жить стало веселее.

Впрочем, как мне было указано здесь, где не надо это преобразование тоже может неявно вызваться. Как жаль... Впрочем, это уже хорошо знакомая мне тенденция - плюсы сначала поманят призрачным счастьем, но всегда обламывают в самый последний момент.
yigal_s: (Default)
2007-11-30 07:59 pm

"дейкстра? а кто это?" (не совсем программизм)

Был на курсе по мультитреду. Лектор оказался не вполне владеющим этим непростым материалом, да и вообще, по прочим сопряженным темам я узнал на лекциях много того, чего нет на самом деле. Некоторые ошибки имелись даже в письменных материалах к курсу. Ну, всё же, полезно потрепаться по теме, даже так. Активизирует. Даже очень (там ведь не совсем полная лажа была). Особо полезно когда платишь за курсы не ты, а фирма (хотя, в год меня по дефолту могут послать лишь на один курс, так что я не вполне эффективно пожег и некий личный ресурс). В общем, впечатления смешанные.

Задумался, стоило ли его, этого лектора, поправлять. Даже постфактум. Я и сейчас могу прислать ему список ошибок, отсутствующих существенных тем, итд итп. Но с другой стороны, зачем? Как бы не нанимался я ему помогать. Сделал неудачный курс? Вышел с ним на аудиторию? Так зачем МНЕ подчищать за ним, зарабатывающим, поди, раза в четыре больше, чем я, признанным мастером своего дела) его ошибки? Прими он (а можно и просто отмахнуться ведь, мол, пипл же хавает) все замечания во внимание, у него получится более добротный курс, но почему я должен делать добротный курс для него? Это, пожалуй, и просто смешно выйдет, если я, после того как меня вот слегка "развели", побегу помогать ИМ более качественно делать свой бизнес.

Вроде, парень неплохой, возможно, искренне ошибается относительно своей готовности читать курс по такой вот теме. Но всё равно... кто его заставил так халтурить!? Там даже иные не вполне крутые как я товарищи недоумевали от некоторых высказываний (я-то помалкивал - неинтересно поправлять, когда лектор просто очевидно лажается).

В бланке отызвов поставил лектору пятерку за уровень владения материалом.

Всё равно как-то непонятно, как надо было в такой ситуации правильно поступить.
yigal_s: (Default)
2007-10-30 02:11 am

программистское: Мордой об стол

Где ООП явно не в тему - это ГУИ (пример правильного построения гуя - Fudgets).

[link]

Я так-сяк повертел это заявление (и прочие, прочитанные на sql.ru), вспомнил некоторые почему-то не получившиеся для написания задачи из своей практики, равно как и некоторые "гениальные ООП решения", и сформулировал супер-радикальный тезис:

Объектно ориентированное программирование менее всего подходит для отображения объектов реального мира (включая сюда и объекты - элементы GUI) в объекты (в терминологии OOP/D) программы.

Пожалуй, истиннонсть этого тезиса мне пока трудно всерьез обосновать (ложность же напрашивается). Но что-то в этом есть. По крайней мере, стоит об этом тезисе вспоминать, прежде чем бросаться всё и вся выражать в виде объектов и протокола их взаимодействия, а потом тупо думать - что ж оно всё никак не выражается?

Почитать, что ли Симулу какую... Для избавления от ереси неверия в то, во что верил последние 14 лет.
yigal_s: (Default)
2007-10-30 12:10 am
Entry tags:

банальности (программирование)

Видимо, написание самодокументируемого кода в принципе невозможно (а казалось ведь, что да).

1. Мало мальски нетривиальный алгоритм или математическую формулу возможно внятно запрограммировать, но никак невозможно разобрать среднему человеку. К формуле должен быть приложен её вывод (то есть, отсылка к тексту учебника), то же самое (отсылка к изложению идей алгоритма, обоснованию его правильности) и во втором случае.

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

3. Мало того, некоторые вещи можно, на первый взгляд, сделать разными способами, но выбираешь именно "вот этот способ", потому, что более очевидный приведёт к каким-то неочевидным сразу проблемам. И причину этого выбора придется комментировать, увы.

Смешно, что ранее этого четко не сознавал.
yigal_s: (Default)
2007-10-26 04:49 am
Entry tags:

биореактор в действии

Я даже не знаю, как это отрекламировать.

Короче, если Вы не гениальный программист, возможно, Вам стоит это почитать

избиение младенцев

на 6-й странице из 66 я понял, что мертв профессионально. Собственно, это и раньше подозревалось, но не с такой ощутимой ясностью.

Продолжаю читать дальше. Весело. Конспектируя ссылочки.

via potan

xref

upd: прочитал всё полностью. жутко доволен
yigal_s: (Default)
2007-10-24 12:27 am
Entry tags:

Десять ножей в спину С++

http://yosefk.com/c++fqa/

Эт сильно. Очень сильно. Чую, я буду это читать и перечитывать.

via link