metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2010-08-21 05:55 am

Зло какое-то

Школьный Линукс и входной порог разработки

Борландовские Паскали, С и тому подобное работали под досом без плясок с бубном и ставились простым копированием.
Дельфи в 1997 году поставилась на 95 винду и заработала сразу. За день можно написать прототип DB приложения, вообще видя среду разработки в первый раз. Visual C в то же примерно время - то же самое, разве что писать чуть сложнее, это вам не RAD.
Вижуал студия с дотнетом в 2006 вроде бы году - аналогично, поставил, за день разобрался.

А в линуксе до сих пор какое-то вуду, стоит только выйти за рамки стандартных задач.

[identity profile] theiced.livejournal.com 2010-08-21 11:36 am (UTC)(link)
в стуктуре тупо есть char[xxx] __dump; в отладочном режиме - простейшее решение. есть эзотерические решения на диких макросах (выделение памяти специальным макросом, заносящим выделенный адрес в __dumps и освобождение "своих" строк в конце вызова LOG (написал лет так 8 назад, использую до сих пор).

[identity profile] metaclass.livejournal.com 2010-08-21 11:41 am (UTC)(link)
а, т.е. huita_dump __dump заполняет и возвращает его?

[identity profile] theiced.livejournal.com 2010-08-21 11:59 am (UTC)(link)
в простейшем случае

struct huita {
#ifdef TRACE
 char __dump[100500];
#endif
....


#ifdef TRACE
char *huita_dump(huita *h) {
....
return h->__dump;
}


в случае хитровыебанных макросов это будет что то типа (очень упрощённо, в код ша не полезу, лень):

char **__dumps;

char *huita_dump(huita *h) {
  char *d = dump_malloc(...);
  ...
  return d;
}

#define LOG(level, fmt, ...) \
  ...
  char *fmt_s; \
  while (fmt_s = dump_next_fmt_string(fmt, fmt_s)) { \
    if (dump_is_string(fmt_s)) { \
      dump_free(s); \
    } \
  } \


ну идея понятна, да.

вообще у меня LOG и необходимые говнофунки занимают строк под 300. умеет дохуя чего, в том числе и отложенную запись. да - выполнение типичной проги с моими типичными полными трэйс логами замедляется примерно в два раза, с необходимыми продакшн логами прОцентов на 5-10 (депендс). оно того стоит - сэкономлена пара ваговов моих драгоценных нервных клеток.

вообще, может причешу, документирую и выложу на гугелькод если интересно. в текущем виде даже показывать никому не буду - там ад и израиль ;)

[identity profile] theiced.livejournal.com 2010-08-21 12:07 pm (UTC)(link)
добью танцем - у меня есть ещё специальный хидер который хукается на все операции аллокации и деаллокации памяти и в конце репортит какая сука выделила неосвобождённую память. такой свой валгринд клёвый встроенный.

[identity profile] metaclass.livejournal.com 2010-08-21 12:11 pm (UTC)(link)
У меня есть то же самое, но для дельфи :)

[identity profile] w00dy.livejournal.com 2010-08-21 01:02 pm (UTC)(link)
оно ж не thread safe ни разу. Или у тебя самая елементарная ситуация - один объект, один поток и никакого шаринга.

PS И эти люди нам рассказывают о сотнях потоках и запрещают в носу ковыряться

[identity profile] theiced.livejournal.com 2010-08-21 01:05 pm (UTC)(link)
вот тупой, а. я ж написал - _упрощённо_. всё thread safe, с необходимыми мутексами и прочей радостью (опционально есессно - ибо бывают очень часто и single thread проги).