Andrew
там сишечка, чего хотеть
Cinder
Square
Там ansi c и колбэки на макросах )
Cinder
все на макросах там
ovf
а если один очень умный человек придумал набор макросов, абстрагирующих предметную область, и все их используют -- то очень круто
Andrew
хех, в ядре linux их тоже очень много
Andrew
но это ничего не значит
Vladislav
Vladislav
это костыли для недостаточно экспрессивной сишечки, которые зачем-то перетянули в новый язык
ovf
ну во-первых лисповые макросы это скорее staged compilation, во-вторых, может, потому и не пишут особо на лиспах, что все макросы рисуют. :-)
Cinder
да, dsl - это хорошо
Andrew
вот и я о том же. Надо хотя бы очень умеренно их использовать. При наличии других средств
Cinder
но крестовые макросы не могут в дсл
Cinder
они вообще ни во что не могут
ovf
про c++ ничего не знаю, в си макросистема отличная и очень полезная
ovf
т.е. скажем так, проблемы с экспрессивностью у c++ не от макросистемы
Cinder
только Андреям Богрянцевам кипятить мозг
ovf
ну я не согласен с этой импликацией
ovf
благодаря этому свойству я могу писать макросы, не имеющие по частям синтаксического смысла
Andrew
я слышал, кстати, что в C99, вводят исключения (пичалька)
Andrew
лучше бы деструкторы запили
ovf
запить, это, в целом, идея
Cinder
што?
Cinder
какие исключения?
Vladislav
Cinder
setjmp
longjump
Cinder
никаких исключений
ovf
вводят в c99? :-) ретроактивно?
Cinder
весь гну код в этом. исключения без деструкторов - это лол
Cinder
контроллеры вообще обычно без ревью пишут. очень по разному бывает, нообычно без
Cinder
так что никого не выгонят
Cinder
да и за что выгонять?
Andrew
за то что твой код не поддерживаемый
ovf
кстати, за всю мою жизнь по-моему *jmp я использовал один раз, для написания корутин. через пару часов выкинул и заменил на ассемблерные вставки собственного сочинения (т.к. у этих *jmp гигантский оверхед)
Andrew
и что рядом с тобой коллеги, которые должны понимать, что ты колбасишь и действуешь ты в команде
Cinder
ну дак это же макросом обернули, не переживай
Cinder
Да и где ты видел поддерживаемый код на си?
Andrew
а если ты написал, а через 2 года сам же делаешь хотфикс с критикал багой, то это плохой код
Cinder
по твоему лучше клубок ифов нафигачить?
Cinder
чем имитировать исключеня через лонгджамп?
Vladislav
Cinder
да, должны
Andrew
Cinder
но многие не считают себя страдающими
Cinder
одного поля ягода
Andrew
не одного. goto переходит по области видимости
ovf
ну с исключениями примерно как с автоматическим управлением памятью по-моему. либо ты знаешь, какие функции у тебя могут вернуть ошибку и какие ресурсы тебе при этом надо освободить, либо пиши на жабе
Andrew
а лонг дажмп это вообще такая ебень, что можно не просто себе в ногу выстрелить, а взорвать всех рядом
Cinder
волка боятся - в лес не ходить
ovf
(и да, продуманные макросы позволяют писать аккуратный и красивый код на тему проверки результатов функций и освобождения ресурсов)
Cinder
+++
Cinder
Продуманные макросы говоришь? Вототлаживать то такие продуманные макросы и не удобно
Andrew
да кто же боится
Cinder
Ну а так то да, теже волки и лес
Andrew
я о том, что любое стрельба из базуки должна быть оправданна
Andrew
вот я бы на вас посмотрел, когда нужно модуль-либу отлаживать, а там джампы
ovf
а зачем отлаживать макросы? в них баги?
ovf
тогда это не очень продуманные макросы
Andrew
а причём тут вообще макросы?
ovf
ну ты зачем-то жалуешься на отладку макросо
ovf
*макросов. что бы это ни значило
Andrew
про отладку макросов я не говорил ни слова
ovf
извини, это не ты, а сергей
Vladislav
ADDRESS alloc(nbytes)
POS nbytes;
{
REG POS rbytes = round(nbytes+BYTESPERWORD,BYTESPERWORD);
LOOP INT c=0;
REG BLKPTR p = blokp;
REG BLKPTR q;
REP IF !busy(p)
THEN WHILE !busy(q = p->word) DO p->word = q->word OD
IF ADR(q)-ADR(p) >= rbytes
THEN blokp = BLK(ADR(p)+rbytes);
IF q > blokp
THEN blokp->word = p->word;
FI
p->word=BLK(Rcheat(blokp)|BUSY);
return(ADR(p+1));
FI
FI
q = p; p = BLK(Rcheat(p->word)&~BUSY);
PER p>q ORF (c++)==0 DONE
addblok(rbytes);
POOL
}
Vladislav
кусок кода sh. Они знают толк в продуманных макросах)
ovf
да, борн был большой фанат алгола
Andrew
вот например давно уже думаю — зачем люди плодят макросы, когда в большинстве случаев можно вызвать inline функцию
Vladislav
Vladislav
ovf
например, нельзя, когда я на макросе изображаю свой control flow
ovf
или вообще всё что угодно, кроме тупого выражения
Cinder
иногда в макросе генерят код или даже не генерят, а пихают в параметр макроса, а там он где-то подставляется внутри макроса и разворачивается в кусок функции, функцию или объект.
Vladislav
Cinder
пришло время отлаживать макросы