Zmatení (programovacích) jazyků

  • Co předcházelo Prologu

    Tentokrát něco málo z informatické prehistorie. Prolog zná asi každý programátor, i když většina jen ze školy jako příklad deklarativního logického programování. Svou největší slávu si užil nejspíše v době, kdy japonská vláda uvažovala o počítačích páté generace a Prolog měl být jazykem operačního systému. Z projektu nakonec víceméně sešlo a Prolog se vrátil do akademické sféry.
    30. 11. 2011 19:22 (aktualizováno)
  • Dynamické jazyky podruhé

    V diskusi pod článkem o smalltalkovském doesNotUnderstand a jeho ekvivalentech v jiných jazycích se objevilo pár nepřesností, takže zde je stručně napravím. Především je zcela zřejmé, že v C++ žádné dynamické volání nikdy implementovat nemůžeme. To by mělo být jasné každému studentovi po prvním semestru C++. Dynamický dispatch vždy vyžaduje podporu překladače a/nebo runtimu.
    30. 11. 2011 14:15 (aktualizováno)
  • Rychlost různých implementací STL

    Nedávno jsem kompiloval kód pro vyhodnocování pravidel (business rules engine) pro různé platformy. Při složitějších pravidlech a velkých datech je vyhodnocování poměrně výpočetně náročné, takže se nabízí srovnání rychlosti výsledného kódu: clang 720 ms GCC 4.6 810 ms VC++ (verifikovatelný kód) 2200 ms / 3400 ms (VS2011) VC++ (nativní kód) 5500 ms / 3300 ms (WinRT) VC++ (řízený kód, neřízená data) 7200 ms / 4600 ms (VS2011)
    24. 11. 2011 18:14 (aktualizováno)
  • Nerozumím...

    Významnou vlastností některých dynamických jazyků je schopnost flexibilně reagovat na volání metody, která u daného objektu neexistuje. Jak známo, Smalltalk má zprávu doesNotUnderstand, kterou objekt dostane, pokud neumí obsloužit jinou zprávu. Předaný objekt aMessage rozumí zprávám selector (vrací onu neznámou zprávu) a arguments (argumenty volání). Tímto způsobem je možné implementovat jakousi záchrannou síť, která se aktivuje v případě zaslání zprávy neznámé v době překladu.
    20. 11. 2011 23:26
  • Je Objective-C moderní jazyk?

    Objective-C získalo v posledních letech díky rozšíření iOS na popularitě (viz Tiobe index). Pokud jste ObjC kdysi (před ObjC 2.0) viděli a stále soudíte podle tehdejšího dojmu, možná vás překvapí, že současná verze jazyka  je podstatně jiná. Nejprve se velice stručně podívejme na vývoj ObjC: původní verze (Cox, Love), verze NeXTu, verze Sunu (OpenStep), zde šlo ovšem spíše o změny v knihovnách, ne jazyka jako takového, první verze Applu (zde šlo také ne o jazyk, ale knihovny a runtime), ObjC 2.0
    19. 11. 2011 18:49
  • Sběr odpadků

    Vzhledem k serveru, na kterém toto čtete, je asi každému zřejmé, že tento článek není o komunálních službách. Ano, uhodli jste, jde o garbage collection (GC). Především je nutné zmínit, že správa zdrojů se netýká jen paměti, ale například i souborů, připojení k databázi apod. GC řeší pouze správu paměti, o ostatní zdroje musí postarat vývojář…
    19. 11. 2011 15:44 (aktualizováno)
  • Your Language Sucks

    Zajímavá stránka o programovacích jazycích: http://wiki.theory.org/You­rLanguageSucks Pochopitelně je nutné brát ji s nadsázkou, ale jedná se o zajímavé (a zábavné) čtení. Trochu zamrzí, že chybí např. Objective-C (a jeho ideový předchůdce Smalltalk), zajímalo by mě, co by si autoři vymysleli.
    18. 11. 2011 11:04
  • The Tale of Two (.NET) Heaps

    Každý programátor pracující v .NET (resp. každý dobrý, ty podprůměrné snad ani nenazývejme programátory) ví, že .NET používá dvě řízené haldy (a jednu neřízenou), jednu pro malé objekty (SOH) a jednu pro objekty větší než malé (LOH). SOH se dále dělí podle generací. Zastánci nedeterministického GC slepě tvrdí, že .NET nemá problém s fragmentací paměti a že alokace objektů je levná (rozuměj deterministická). Nic není dále od pravdy…
    4. 11. 2011 13:46
  • Chytrý a chytřejší

    Každý vývojář jistě ví, co je počítání referencí a k čemu je dobré (pokud to nevíte, ani nečtěte dál). S tím úzce souvisí pojem chytrý ukazatel (angl. smart pointer). V C++11 se třída shared_ptr dostala do standardu, takže ji lze používat v platformně nazávislém kódu na všech překladačích (odpadá nutnost použít knihovnu Boost).
  • Nevtíravý paralelismus

    Není třeba zdůrazňovat, že asynchronní provádění kódu ve více vláknech je mnohdy užitečné. Jedním z případů, kdy se velmi často používá, je síťová komunikace. Mějme tyto funkce: std::string download(const std::string&); void process(const std::string&); První funkce dostane URL a vrátí jeho obsah jako řetězec. Druhá s výsledkem něco provede. Použití těchto funkcí je zřejmé.
    31. 10. 2011 7:18 (aktualizováno)