Zmatení (programovacích) jazyků - Témata označená nálepkou Pokročilé techniky

  • Casablanca

    Nedávno Microsoft zveřejnil knihovnu Casablanca pro jednoduchou a výkonnou HTTP komunikaci. Projekt je inspirován node.js, vše je asynchronní a využívá moderní C++11. Napsat si vlastní HTTP server je otázkou pár řádků: http::listener::http_listener::create("http://localhost:8899/", _[](http::listener::http_request request) { __request.reply(http::status_codes::OK, "Hello, World!"); __std::cout << "Request processed: " << request.request_uri().to_string() << std::endl; }).listen
    14. 6. 2012 12:07
  • Postavte si jazyk

    Vývojáři jsou lid kreativní, a jak lépe vybít svou kreativitu, než vytvořením vlastního jazyka? Teď nechci nabádat k vynalézání kola, sám jsem vymyslel v životě kdysi dávno jen jeden jazyk, a to jen proto, že to bylo nutnou podmínkou pro zápočet, všechny ostatní překladače, které jsem kdy napsal, měly za cíl jazyky již existující a nanejvýš mírně upravené. Zde stručně popíšu, jak jednoduše napsat vlastní parser a s ním interpret nebo transpiler.
  • Jak (ne)optimalizovat spotřebu paměti v .NET

    Dnes jen krátce a ke konkrétnímu tématu. Jak známo, velké objekty GC na haldě nepřesouvá, takže pokud si je budete alokovat a uvolňovat sami, nezpůsobíte svým počínáním větší fragmentaci než GC. Právě velké objekty je vhodné uvolnit co nejdříve a pokud možno deterministicky. To není v .NET problém, na neřízené haldě lze alokovat třeba i sto MB a díky IDisposable paměť uvolnit, jakmile objekt nepotřebujeme. Můžeme mít tedy ve třídě nějaký pointer…
    13. 12. 2011 23:13
  • Rozdíly v lambda výrazech v různých jazycích

    Podle posledního indexu Tiobe jsou nejpopulárnějšími jazyky Java, C, C++, C# a Objective-C. Je zajímavé porovnat implementaci a omezení lambda výrazů v těchto jazycích, člověk tak snáze porozumí, jak to uvnitř funguje. Java Java lambda výrazy nemá (existuje experimentální implementace, objevit se mají v osmé verzi). Má ale anonymní třídy, které je snadno nahradí. S tím se pojí určitá omezení. Chceme-li použít lokální proměnnou uvnitř lambda výrazu, musí být deklarována jako final…
  • Animační proxy

    V Cocoa můžeme každé instanci třídy NSView poslat zprávu animator, která vrátí objekt chovající se jako objekt původní, ale animující některé vlastnosti. Například setAlphaValue nastaví průhlednost prvku UI. Pokud použijeme setAlphaValue na animační objekt, nastaví se průhledost animovaně (s interpolovanými hodnotami). Protože více čtenářů zná pravděpodobně .NET než Cocoa, zde je jednoduchá ukázka, jak takový proxy objekt implementovat v C#.
    30. 11. 2011 23:39 (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
  • 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)
  • 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)
  • Lambda Prolog

    Před nějakou dobou jsem narazil na projekt nazvaný Yield Prolog. Jedná se o implementaci Prologu v C# s využitím yield pro emulaci nedeterminismu. Autor uvádí, že výkon je srovnatelný s moderními stroji WAM, na nichž jsou založeny v podstatě všechny současné Prology. Víceméně z dlouhé chvíle jsem se rozhodl vyzkoušet něco podobného v C++. Protože C++ nemá yield, použil jsem lambda výrazy z nového standardu C++11 (odtud název článku jako analogie k „Yield Prolog“) podle schématu…
    26. 10. 2011 21:08