Jan. 4th, 2008

yigal_s: (Default)
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)
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, потом отложить её в сторону и... снова заняться расстановкой критических секций в коде. Чтоб не сбоил, ага.