уторак, 13. март 2012.

C++ 2011

Управо читам шта је ново у C++ стандарду 2011.

http://en.wikipedia.org/wiki/C%2B%2B11#Changes_from_the_previous_version_of_the_standard

Време лети, а нисам пратио ни мало шта се дешава. Сада се одједном осећам застарело.

Чини ми се да је направљен огроман помак. Проширење синтаксе да подржи програмирање шаблонима је интересантно (али и очекивано).

Међути, изгледа ми да је најсмелији и највећи помак направљен на подршци конкурентном програмирању. На пример, "futures and promises" (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf)

Сада назад на читање, има доста тога.




среда, 15. фебруар 2012.

Детерминистички коначни аутомат

Наишао сам на интересантан практичан проблем.

Уколико имам низ познатих стрингова, хоћу да конструишем ДКА који ће препознавати да ли је дати стринг дат на улазу унутар низа.

Интересује ме само најбржа могућа варијанта. За вежбу сам направио мали генератор switch исказа али то даје веома велики бинарни код, а вероватно и даље није оптималан (на пример, поређење се врши на појединачним бајтовима иако би на 32-битним процесорима 32-битно поређење било далеко брже).

Ручно, вероватно бих пришао проблему овако:

(конструкција машине - генерисање кода):
а) Одреди најмању и највећу дужину стринга из фиксног скупа
б) Сортирај и рангирај према дужини, а у поређењу са ширином регистра на циљној машини (на пример, за 32 битне, 4 бајта).

Генерисани код би реадио отприлике овако:
1) Одреди дужину улазног стринга.
2) Изврши елиминацију на основу мин. макс. дужине.
3) на основу ранга (дужине) стринга а у функцији мин. дужине, врши одговарајућу претрагу сортираног ранга (на пример: дужина улазног стринга је 5, а најмања дужина константи је 4 а највећа 10, изабери ранг константи дужине веће од 4 а мање од 9, и врши претрагу поређењем првих 4 бајта дужине):

extern const char *const ulaz;
switch (*(uint32_t*)ulaz) {
case konst1:
...
case konst2:
...
}

где су konst1 и konst2 израчунате приликом генерисања кода на основу циљне машине и ендијана.


Ипак, претпоставио бих да ово већ негде постоји, само треба наћи.