После того как погрузился в C++ проект с зашкаливающим количеством ООП, захотелось посмотреть на ST и его средства разработки.
Мельком покопался в Squeak и задался сабжем.
Также интересует, возможно ли ST-приложению с GUI придать нативный look'n'feel?
Здешние смолтокеры, просветите, а то инфы как-то маловато. :3
Можно конечно поменять местами декларации B и A, но хотелось бы сохранить такой порядок. Вопрос - как?
struct B;
struct B::C;
struct A {
typedef B::C DataPtr;
DataPtr c;
};
struct B {
struct C {
int ololo;
};
...
};
Такое мой фю^W^W компилятор отказывается проглатывать.
Причина по которой не нравится менять местами декларации: структуре B может понадобиться подструктура A - получаем пиздец.
P.S. никому не кажется лишним правило о строгом порядке объявления?
В конечно счёте хочется получить последовательность берущуюся из БД по курсору. В принципе, наверное можно не замарачиваться на call/cc, ибо haskell ленивый, в endless loop не уйдёт, но интересно всё таки, да и прозрачно с сохранием контекста в котором бесконечная красота получается, ящитаю.
Пока что не получается сделать даже такое:
nums :: Cont r [Int]
nums = do
ns <- callCC $ \k -> do
k [1..]
return $ take 5 ns
> runCont nums print
[1,2,3,4,5]
А вот как продолжить вычисления до 10, т.е. выполнить этот continuation второй раз? Просветите люди умные и добрые. (:
Но! тут начинаются галлюцинации: процесс sbcl съедает всё процесорное время, принимающий процесс блокируется на select()-е (неважно какой таймаут), через минут 10 программа отвисает, цпу расслабляется, вектор отправлен.
При повторной отправки этого же вектора галлюцинации снова не появляются.
- включить libstdc++ в исходники проекта и пересобрать его с --enable-libstdcxx-allocator=mt (много телодвижений, да и поддерживать такой libstdc++ нет желания)
- везде явно указывать аллокатор (явный изврат)
Будет ли достаточно перед всеми инклюдами написать такой хак?