Archive for July, 2007

RAII and destructor exceptions

Tuesday, July 31st, 2007

Rakstot dažus RAII prototipus nonācu konfliktā ar aizliegumu lietot izņēmumus destruktorā. Googlē atradās pāris raksti par to, kāpēc tas ir slikti un nepabeigts raksts par to, ka tas nav nemaz tik slikti.

Es nepārstāstīšu visu, ko var atrast sekojot saitēm, tādēļ mans konspekts par problēmu ir apmēram šāds:

  • destruktoram nevajag darīt pārāk daudz, tikai pašu minimumu
  • ļaunums: ja destruktors rada izņēmumu brīdī, kad tiek apstrādāts kāds cits izņēmums, programma beigs darbu ar std::terminate
  • hipotēze: jebkurš ne-triviāls destruktors potenciāli var radīt izņēmumu
  • viens risinājums: aizliedzot izņēmumu radīšanu destruktorā par kļūdu nākas ziņot globālajā mainīgajā (piemēram, errno), tādā veidā atgriežoties gadus 30 senā pagātnē
  • otrs risinājums: rakstot metodi, kas veic destruktora pienākumus un var radīt izņēmumus, zūd destruktora jēga

Izlasot visus “par” un “pret”, tomēr sliecos atbalstīt šādu variantu:

T::~T() {
    // ... do cleanup
    if (error) {
        if (!std::uncaught_exception())  {
            throw Something();
        } else {
            fprintf(stderr, "Something happened\n");
        }
    }
}

Ja jau notiek izņēmuma apstrāde (std::uncaught_exception), tad pietiks ar kļūdas izdruku destruktorā vai klusēšanu, jo īstais programmas kļūdas cēlonis ir cits izņēmums. Ja izņēmumu apstrāde nenotiek, tad var radīt izņēmumu un ziņot par kļūdu. Š āds destruktors zemāk redzamajā kodā neradīs izņēmumu, lai gan to drīkstētu darīt, tomēr hei – arī daudzām citām klasēm ir nosacījumi, kad tās strādā un kad tās nedrīkst lietot, kaut vai std::auto_ptr.

U::~U() {
    try {
        T t;
        // do work
    } catch( ... ) {
        // clean up
    }
}

Pārējie argumenti pret šo variantu ir pārāk līdzīgi “neveikt aritmētiskas operācijas ar rādītājiem”, “neoptimizēt (pagaidām)”, utml. Jāņem vērā, jāuzmanās, nav jālieto vienmēr, nav pilnīgi viss darbs jādara destruktorā, bet izņēmumu radīšana destruktorā nav nāves grēks vai kaut kas amorāls.

Padomāšu par to W:O:A viskija sapņos.

TBB

Wednesday, July 25th, 2007

Threading Building Blocks – Intel template bibliotēka, kas ļauj vienkāršāk rakstīt vairākpavedienu programmu: augstākā abstrakcijas līmenī, nedomājot par pavedieniem, un ar mazāku koda daudzumu. Tagad ir pieejama šīs bibliotēkas GPL2 versija un nesen ir iznākusi arī grāmata par šo produktu.

Papētīju un tas šķiet pietiekoši interesanti, lai es pasūtītu grāmatu.

Abstraction is selective ignorance

Monday, July 23rd, 2007

Nesen manā GoogleReader iekrita saite uz Andrew Koenig blogu, kura vārds ir atrodams starp 5 svarīgākajiem C++ cilvēkiem. Bloga galvenais temats ir abstakcija, abstrakcijas cena un daudzas ar to saistītas lietas (1, 2). Pareizais abstrakcijas daudzums: ja abstrakcija ir tuvu pētāmam objektam, tad abstrakcijai ir maz jēgas; ja abstrakcija ir pārāk tālu, tad abstrakcija var radīt jaunas kompleksas problēmas. Vēl man iepatikās divi raksti par garbage ingarbage out principiem dzīvē. Interesanta lasāmviela, tomēr rodas iespaids, ka autors C programmētājus mēģina pārvilkt uz C++ pusi un izskaidrot kur pazūd pāris papagaiļsekundes – pirms gadiem 20 tas varēja būt aktuāli.

Labākā pēcpusdiena

Sunday, July 22nd, 2007

Atpakaļceļā no kompānijas sporta spēlēs gadījās vēl viens pasākums. Joprojām pilnīga sajūsma no peldēšanas, laivošanas, vēžošanas, ekstrēmām sajūtām turot roku ar vēžiem pilnā spainī, … Daži mazie, kas ceļos uz citu ezeru:

Ä’damie:

Food:

Wednesday, July 18th, 2007

oh
my
god

(atradies šeit)

Tuesday, July 17th, 2007

Paskat’, ko es sastapu vienā no Irbenes radiolokatoriem radioteleskopiem:

Lai gan gide nespēja atbildēt vai viņi lieto Linux, tas tik un tā bija pārsteigums. Bet pirms tam es ar atbrīvojos no stresa izdemolētajā armijas pilsētiņā un šoreiz neviena klaviatūra necieta.

Papagaiļi

Thursday, July 12th, 2007

Papagaiļi ir vislabākā universālā mērvienība! Piemēram:

  • jaunā programmas versija ir 800 papagaiļus ātrāka par iepriekšējo
  • šodien manas pusdienas izmaksāja par 5 papagaiļiem mazāk
  • jaunai fīāai man vajadzēs 18 papagaiļ-dienas
  • utt.

Vienīgā problēma ir tāda, ka daži cilvēki atsakās lietot papagaiļus kā mērvienības un to vietā lieto zilonīšus. Diemžēl, šobrīd konvertācijas algoritms nav standartizēts un eksistē vairākas nesimetriskas funkcijas “parrots2elephants” un “elephants2parrots”. Tā gadās, kad cilvēkiem galvā pietrūkst dažu papagaiļu.

make

Thursday, July 12th, 2007

Vāāāh, es pārāk ilgi esmu racies Makefile un bash skriptos, piedaloties jaunās versiju kontroles sistēmas radīšanā. Tas viss uz Subversion bāzes ar ccache un jaunu Python rakstītu instalēšanas un atkarību atsekošanas sistēmu. Un tad vēl mēģināju to iedzīvināt uz riebīgā AIX, kā rezultātā iemācījos kaut ko jaunu, pētot `make -d` rezultātu.

  1. make mēģina pārbūvēt visus Makefile un pēc tam tos atkārtoti ielasīt. To var novērst (globālajā) Makefile pierakstot tukšu likumu, semikols ir obligāts: Makefile Makefile.global: ;
  2. Vēsturisku iemeslu dēļ make mēģina katru failu izveidot no aizvēsturiskām versiju kontroles sistēmām, meklējot tos RCS un SCCS mapēs. Lai make to nedarītu, var norādīt papildus komandrindas parametrus `make -r` jeb `make –no-builtin-rules`.

1000110100100110010100110111010

Tuesday, July 10th, 2007

Dažas dienas pasaule saraujas, kļūst tālāka un klusāka. Liekas, ka man galvas vietā ir kamera, kas filmē visu notiekošo, bet es to vēroju TV ekrānā tumšā istabā. Apkārtējos trokšņus slāpē austiņās skanošie drones, tikai ātrās palīdzības sirēnas un āīkstošas bremzes pārvar skaņas izolāciju. Sireāli. Varbūt es aizmigu pie galda vai joprojām neesmu pamodies no nakts miega?

Cilvēki bez skaņas virina mutes un žestikulē, bet es savu acu priekšā turpinu bīdīt koda klucīšus tāpat kā pirms piecām minūtēm darbā. Man priekšā ir datora monitors kā fantastikas filmās, kuram cauri spīd vājas cilvēku un māju kontūras. Es paceļu acis virs monitora un tur, arhitekta vietā, luksoforā iedegas zaļa cilvēka figūra. Es atsāku iet… Nē, patiesībā es atrodos datorizētā un motorizētā stikla kūniņā. Smadzeņu impulsi liek tai kustēties uz priekšu un tā viegli slīd virs zemes, itkā asfaltā nebūtu bedres. Paātrinās mūzikas ritms un mana sirds, šķiet, arī sāk pukstēt ātrāk un es vēl ātrāk slīdu pa ielu. Pie melnā cauruma teleportējos un attopos maršruta taksometrā. Kāds ir tā numurs? Es pats to nezinu, tādēļ satraukums vēl uzkavējas kādu brīdi, līdz atpazīstu ierasto maršrutu.

Joprojām esmu savā telpā, izolēts no apkārtnes un manipulēju ar dažādiem attēliem savā priekšā, kamēr fonā zib tilta margas. Izskatās līdzīgi pirmajām filmām, kur var manīt kadru maiņu. Dzēst visu šodien redzēto, nav nekā atmiņas vērta, tikai šos pāris ielikt mapē “~/black” – visu cilvēku mīlēšana ir mātes Terēzes izvēle, nevis mana. Kā teica kāds matricai pieslēgts atkarīgais ar kaimiņu IP adresi: “visi humanoidi ir stulbi, kamēr nav pierādījuši pretējo”.

Un tad, jau ārpasaules krēslā, es meklēju īsāko ceļu starp cilvēkiem jakās uz savām mājām. Jakas. Tiešām – ārā ir vēss, bet es tikai t-kreklā, kurš man mugurā uzrodas pēc inerces, nevis laika prognozes. Vai tiešām jau rudens? Ja es šo klucīti noliktu divus metrus tālāk, izdzēstu 250, varētu naktī gulēt mierīgi. Un “alus” patiesībā ir “sula”, ja uz to paskatās savādāk. Par ko es iepriekš domāju?… Ä€, vai tiešām jau rudens? Atkal kaut kādi bināri traucējumi…

Tā arī nespējot rast atbildi uz šo nesvarīgo jautājumu, es jau zvanu pie durvīm un pēc maza mirkļa izlienu no savas futūristiskās kūniņas, lai būtu vienkārši cilvēks.

Nekas nav skaidrs

Monday, July 9th, 2007

Stulbākais visā referenduma pasākumā ir tas, ka labi ja 1% no balsotājiem saprata likuma izmaiņu būtību, par ko paši balsoja. Iet uz referendumu, lai izteiktu neuzticību valdībai, atbalstu bijušai prezidentei, kas pēdējos mēnešos ir pamodusies un pievērsusies iekšpolitikai, vai ieriebt cūkmenam? Tas ir tas pats, kas atteikties no pusdienām, lai pandas pi**os sugas glābšanai. Var jau to darīt, bet naivi cerēt, ka tam būs vēlamais rezultāts.

Referendumā jāatbild uz jautājumu, nevis jādod slēpti un bezjēdzīgi mājieni, bet (ne)uzticību beidzot jāmācās izteikt vēlēšanu laikā. Š…emot vērā, ka pēdējās aptaujās TP joprojām ir populārākā partija, nāksies mācīties arī sadzīvot ar vairākuma viedokli.

Avast!

Tuesday, July 3rd, 2007

Flow control is an important instrument to avoid overloading a router with messages. Flow control is an important instrument to secretly slow down the system even more when it’s under heavy load.

Alas! How I wish I were a pirate! To be at sea, to wear regalia, to have a cutlass, to reduce global warming. Oh what a wonderful life!