abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

dnes 00:22 | Bezpečnostní upozornění

Společnost ZONER informuje o bezpečnostním incidentu, při kterém došlo ke zcizení a zveřejnění části přihlašovacích údajů zákazníků k elektronické poště a webhostingu CZECHIA.COM.

Ladislav Hagara | Komentářů: 0
včera 23:44 | Nová verze

Byla vydána nová stabilní verze 1.13 (1.13.1008.32) webového prohlížeče Vivaldi (Wikipedie). Z novinek vývojáři zdůrazňují možnost zobrazení otevřených i uzavřených listů pomocí ikonky Okno na postranní liště a vylepšené stahování (YouTube). Nejnovější Vivaldi je postaveno na Chromiu 62.0.3202.97.

Ladislav Hagara | Komentářů: 8
včera 20:55 | Nová verze

Byla vydána verze 2017.3 dnes již průběžně aktualizované linuxové distribuce navržené pro digitální forenzní analýzu a penetrační testování Kali Linux. Aktualizovat systém lze pomocí příkazů "apt update; apt dist-upgrade; reboot". Z novinek lze zmínit 4 nové nástroje: InSpy, CherryTree, Sublist3r a OSRFramework.

Ladislav Hagara | Komentářů: 0
včera 01:55 | Bezpečnostní upozornění

Společnost Uber potvrdila bezpečnostní incident a únik dat v roce 2016. Unikly údaje o 57 milionech cestujících (jména, emailové adresy a čísla mobilních telefonů) a 600 tisících řidičích (navíc čísla řidičských průkazů).

Ladislav Hagara | Komentářů: 1
21.11. 23:44 | Humor

Co vypíše příkaz man půl hodiny po půlnoci? Text "gimme gimme gimme". Jedná se o virtuální velikonoční vajíčko připomínající skupinu ABBA a její hit Gimme! Gimme! Gimme! (A Man After Midnight). Problém nastane, pokud gimme gimme gimme nabourá automatizované testování softwaru. To se pak příkaz man musí opravit [Bug 1515352] [reddit].

Ladislav Hagara | Komentářů: 10
21.11. 18:11 | Zajímavý článek

Mozilla.cz informuje, že Firefox na Fedoře podporuje Client Side Decorations. Firefox na Linuxu se vykresluje včetně standardního záhlaví okna, které je v případě webového prohlížeče většinou nadbytečné a ubírá drahocenné vertikální místo na obrazovce. Verze distribuovaná uživatelům Fedory však nyní obsahuje experimentální podporu pro takzvané Client Side Decorations, které umožňují vykreslování „oušek“ panelů do záhlaví okna.

Ladislav Hagara | Komentářů: 12
21.11. 05:00 | Bezpečnostní upozornění

Maxim Goryachy a Mark Ermolov ze společnosti Positive Technologies budou mít v prosinci na konferenci Black Hat Europe 2017 přednášku s názvem "Jak se nabourat do vypnutého počítače, a nebo jak v Intel Management Engine spustit vlastní nepodepsaný kód". O nalezeném bezpečnostním problému informovali společnost Intel. Ta bezpečnostní problém INTEL-SA-00086 v Intel Management Engine (ME), Intel Server Platform Services (SPS) a Intel

… více »
Ladislav Hagara | Komentářů: 41
21.11. 01:33 | Zajímavý projekt

Na Humble Bundle byla spuštěna akce Humble Book Bundle: Java. Za 1 dolar a více lze koupit 5 elektronických knih, za 8 dolarů a více 10 elektronických knih a za 15 dolarů a více 15 elektronických knih věnovaných programovacímu jazyku Java od nakladatelství O'Reilly. Peníze lze libovolně rozdělit mezi nakladatelství O'Reilly, neziskovou organizaci Code for America a Humble Bundle.

Ladislav Hagara | Komentářů: 0
21.11. 00:11 | Zajímavý projekt

Článek na OMG! Ubuntu! představuje rodinu písma IBM Plex. Jedná se o open source písmo (GitHub) navržené a uvolněné společností IBM (YouTube, Carbon Design System). Ukázka na Font Squirrel.

Ladislav Hagara | Komentářů: 13
20.11. 23:22 | Komunita

Na Humble Bundle lze získat počítačovou hru Brütal Legend (Wikipedie, YouTube) běžící také v Linuxu zdarma. Speciální akce končí ve středu v 19:00.

Ladislav Hagara | Komentářů: 0
Jak se vás potenciálně dotkne trend odstraňování analogového audio konektoru typu 3,5mm jack z „chytrých telefonů“?
 (9%)
 (1%)
 (1%)
 (1%)
 (75%)
 (14%)
Celkem 752 hlasů
 Komentářů: 37, poslední 21.11. 15:21
    Rozcestník

    Programování v jazyce Vala – úvod

    1. 8. 2012 | Vratislav Podzimek | Programování | 7252×

    Už jste vyzkoušeli několik programovacích jazyků, ale od každého jste utekli s tím, že jste objevili nějaký nový zajímavý? Pokud ano, pak jste na tom jako já, pokud ne, určitě se i na vašem oblíbeném jazyce najde něco, co vám tak úplně nevyhovuje. Nebojte, nehodlám vám tvrdit, že mám pro vás spásu v podobě programovacího jazyka Vala, který je naprosto dokonalý. To, s dovolením, jako obyčejný smrtelník přenechám lidem vesmírným.

    Rozhodně ale můžu říct, že mě jazyk Vala hodně zaujal již po přečtení prvních odstavců tutoriálu a několikrát mě u toho napadlo, že přesně takové konstrukce se mi na tom a tom jazyce, odkud si je Vala vypůjčila, hodně líbí. Pojďme se alespoň na některé podívat trochu podrobněji, ať vás trochu navnadím na nejen další programovací jazyk do sbírky. Pokud byste měli pocit, že příliš kritizuji zrovna vašeho oblíbence, nemějte obavy, žádný z jazyků užitých pro příklady nevyjde ze souboje jako vítěz. Tím bude samozřejmě Vala. Chtěl bych poděkovat autorům tutoriálu k Vale za skvělý text se spoustou příkladů, ze kterých si některé dovolím použít.

    Nejdříve konstrukce zmíníme jen pro ukázku, později si ukážeme konkrétní použití v programu.
    Patříte mezi ty, kolem kterých ostatní chodí s obdivem, ale přece jen kousek stranou, tedy znalce Perlu? A už jste si někdy říkali, že byste pro větší projekty a zejména UI aplikace zkusili něco jiného, ale nehodláte se vzdát některých bezkonkurenčních výhod, které Perl nabízí? Vala zvládá infixový zápis expandovaných proměnných v řetězcích, můžete tedy psát:

    Vala jako Perl

    @"Pro zadaneho uzivatele $input_user neznam udaje."
    

    a pokud máte někde dříve v programu definovánu proměnnou input_user, bude její hodnota dosazena do řetězce. Vala jde dokonce v těchto konstrukcích ještě o kousek dál, ale o tom až později. Stejně jako mnoho ostatních programovacích jazyků je i Vala ve srovnání s Perlem mnohem méně benevolentní. A tak vám např. ekvivalent klasického Perlovského "výhružného idiomu"

    open(FILE, "file.txt") || die ("Cannot open file file.txt, exitting.");
    

    projde, pouze pokud návratové hodnoty metod open a die budou typu bool. Vala totiž za pravdivostní hodnoty považuje opravdu jen hodnoty typu bool a mezi žádné jiné typy vám logický operátor || dát nedovolí. Pro mě vždy byly největší zbraní Perlu regulární výrazy a ať jsem je používal v jakémkoliv jiném jazyce, vždy jsem s láskou vzpomínal na Perl a zoufal si, jaká by to byla krása zrovna tu část kódu psát v Perlu. No a odpověď Valy?

    if (/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.match(email))
    {
       /* nejaky kod */
    }
    

    Zde se sluší dodat, že takový zápis regulárních výrazů je zatím experimentální funkcionalitou a při překladu o tom budete varováni.

    Vala jako Python a C#

    Pokud máte právě pocit, že jsem začal poněkud zostra, nebojte, žádná horší změť znaků už vás nečeká. Podívejme se na další pěkné možnosti, které nám Vala nabízí. Máte rádi Python a často používáte výřezy z řetězců či listů, ale někdy si říkáte, že byste přece jen interní atributy a metody své třídy chtěli chránit více než jen použitím podtržítka jako prvního znaku jejich identifikátoru? A jak se vám líbí tato kombinace?

    class Example
    {
        private string second_three_chars(string str, ...)
        {
            return str[3:6];
        }
    }
    

    Přiznávám, ten středník a složené závorky jsou z pohledu znalce Pythonu škaredé a naprosto zbytečné; na druhou stranu, všimli jste si parametrů? Žádný self, i když se jedná o metodu třídy. A co ty tři tečky? No přece proměnný počet parametrů ve stylu C. Další věc, která se mi na Pythonu hodně líbí, je možnost používání mnoha konstrukcí, pokud si pro svou třídu vytvoříte ty správné metody. __str__ je klasikou, jejíž ekvivalent má snad každý moderní jazyk, ale že vám vytvoření metod get a set dovolí používat výrazy jako a[4] = 5, to už tak obvyklé nebývá. Právě takové možnosti (později si ukážeme konkrétní příklady) poskytuje i Vala.

    Pokud jste si nad prvními dvěma ukázkami zoufali, že sice vypadají dobře, ale určitě to bude další dynamický jazyk, který po vás sice nebude chtít typy proměnných ani návratových hodnot, ale za to vás neupozorní na některé zřejmé chyby, kdy do proměnné místo čísla budete „rvát“ řetězec znaků, doufám, že vás předchozí ukázka potěšila. Jak si mnozí z vás jistě všimli, Vala je silně typovaná. Co se však při pohledu na ukázku jistě vybavilo ještě více čtenářům je podobnost Valy s Javou případně s C#. Na podobnost s těmito „sourozenci“ se nyní podíváme, protože právě od nich si toho Vala vypůjčila opravdu hodně. Nicméně máte-li syndrom „antijavisty“ a každá sebelepší aplikace napsaná v Javě by vám připadala hrozně pomalá, i kdyby běžela rychleji než nativní C, už jen proto, že víte, že je napsaná v Javě, můžu vás uklidnit. Vala nevyužívá žádný virtuální stroj, není nijak zvlášť paměťově náročná a už vůbec ne pomalá. Později si v tomto textu vysvětlíme proč.

    V čem se však s těmito milovanými i nenáviděnými sourozenci téměř dokonale shoduje, je syntaxe. Ta je na první pohled od Javy, a tedy i C#, k nerozeznání. Troufám si říct, že to bylo od tvůrců tohoto jazyka velmi moudré rozhodnutí, protože i když se může Vala někomu jevit jako poměrně upovídaná, čitelnost kódu je velmi dobrá. No a kdo zná např. téměř až „pohádkové zdrojové kódy“ v Adě, ten takovou vlastnost dokáže ocenit. Vala je vysokoúrovňový jazyk, který byl od počátku navrhován jako objektově orientovaný, takže na rozdíl např. právě od Ady používá klasickou tečkovou notaci pro volání metod objektů. Nemusíte tedy volat funkci, která jako první argument bere odkaz na objekt typu, nad kterým pracuje. Vala si však od Javy a C# vypůjčila i další užitečné konstrukce. Umožňuje používat abstraktní třídy i rozhraní a všechny třídy mají společného předka (k tomu vás sice Vala přímo nenutí, ale o tom až později). Oproti Javě však stejně jako C# nabízí možnost definovat a používat vlastnosti objektů a to, řekl bych, ideálním možným způsobem. Pokud z Javy znáte „nádhery“ typu

    person.set_age(person.get_age() + 1);
    

    pak vězte, že ve Vale by odpovídající kód vypadal následovně

    person.age++;
    

    a to při zachování jakékoliv funkcionality, která byla v případě Javy součástí metod set_age resp. get_age. Definice vlastnosti age by pak v nejjednodušším případě (což je, troufám si říct, většina) vypadala např. takto

    public int age { get; set; }
    

    Přidám ještě jednu velmi hezkou a užitečnou konstrukci. Všichni asi známe definici proměnné vypadající asi takto

    HashMap<String, HashMap<String, ArrayList<Int>>> myvar = new HashMap<String, HashMap<String, ArrayList<String>>>();
    

    A někteří z nás už si možná mnohokrát říkali, že by kompilátor/interpret mohl být natolik chytrý, že z pravé strany, kde konstruujeme objekt, zjistí, jaký je jeho typ, a nebudeme mu ho tedy muset říkat dvakrát. Vězte, že Vala (resp. její tvůrci) je natolik chytrá a stačí psát

    var myvar = new HashMap<string, HashMap<string, ArrayList<string>>>()
    

    přičemž lze tuto konstrukci použít kdekoliv, kde dokáže Vala odvodit typ proměnné, tedy např. i u zástupné proměnné ve foreach cyklu.

    Pozn.: Omlouvám se, pokud jsem předchozími otevřenými srovnáními někoho z vás naštval, zároveň bych chtěl poprosit všechny, kteří by chtěli oponovat, že to či ono již v nových verzích jazyků není, případně to není vlastností jen mnou uvedených jazyků, aby své umírněné poznámky přidali ke komentářům. Stejně jako čtenáři tohoto článku se rád dozvím něco nového, ale troufám se považovat za dobrý příklad někoho, kdo se v prostředí programování v různých jazycích pohybuje dostatečně na to, aby se k němu všeobecně známé novinky dostaly poměrně brzy.

    Další vlastnosti

    Na závěr popisu dobrých vlastností Valy se ještě podívejme na některé další, které prozatím jen zmíníme. Všechny řetězce ve Vale jsou implicitně v kódování UTF-8 a nemusíte si tedy lámat hlavu s problematikou různých národních abeced. Jak již bylo vidět z příkladů, můžeme používat tzv. generické datové typy (kontejnery), do kterých lze ukládat objekty různých typů. Nemusíme se bát ani vláken, protože i pro ně Vala poskytuje dobré nástroje, jež značně usnadňují práci. Co se týče efektivního využívání zdrojů, máme ještě jednu možnost – asynchronní volání. Tedy zatímco metoda čeká na data z disku, může již své volající proceduře vrátit alespoň jejich část, která může být zpracována a např. zobrazena. Než je toto provedeno, má již volaná procedura opět připravená data z disku, která může poskytnout.

    Další velmi užitečnou možností je snadné psaní aplikací poskytujících nebo využívajících služby na sběrnici DBus, stačí kód dobře „oanotovat“. No a co potřebuje aplikace, má-li poskytovat nějaké asynchronně používané služby? Přece hlavní smyčku, kterou lze ve Vale vytvořit velmi snadno. Vše, co jsem doposud zmínil, známe i z jiných běžně používaných jazyků. Co však pro mě bylo v případě Valy novinkou, byla implicitní kontrola parametrů, jestli nejsou rovny hodnotě null. Samozřejmě toto chování může být někdy více na škodu než k užitku, a tak již prosté přidání otazníku k typu (tedy např. string?) tuto kontrolu vypíná. Existují i další metody, ale o těch až někdy příště. Další pro mě novou věcí byla přímo jazykem poskytovaná možnost zápisu vstupních a výstupních podmínek metod. Zde si přece jen dovolím krátkou ukázku

    public int rectangle_volume(int a, int b)
       requires (a >= 0 && b >= 0)
       ensures (result > 0 && (result == a * b))
    {
       return a * b;
    }
    

    kde result je speciální identifikátor zastupující návratovou hodnotu.

    Pod pokličkou

    Nyní se pojďme Vale společně podívat trochu „pod pokličku“. Až doteď jsem totiž před vámi tajil tu možná nejdůležitější věc. Zhluboka se nadechněte... Zdrojový kód ve Vale je totiž se všemi těmi krásnými vysokoúrovňovými konstrukcemi nejdříve přeložen do C se značným využitím GObject a GLib a teprve až tento „mezikód“ je přeložen do binární podoby spustitelné na tom či onom operačním systému. Z toho vyplývá mnoho pozitivních i negativní důsledků. Příkladem pozitivních je jistě rychlost běhu programů (pro ukázku viz Vala Benchmarking), které je dosaženo překladem do binární podoby navíc s využitím již dlouhou dobu zkoumaných optimalizací pro jazyk C.

    Absence mezilehlé vrstvy v podobě interpretu nebo virtuálního stroje s sebou však kromě pozitivního vlivu na rychlost přináší i negativum v podobě nepřenositelnosti binární podoby programu. Máte-li zdrojové kódy, pak máte samozřejmě na přenositelnost mnohem lepší šance, protože GLib i GObject jsou k dispozici pro mnoho platforem. Velkou výhodou a dokonce i jedním z důvodů pro  vytvoření Valy je možnost psaní vysokoúrovňových knihoven využitelných v mnoha programovacích jazycích. Ať už je to Python, Perl, Java nebo třeba Haskell, využití „Cčkových“ knihoven je ve všech těchto jazycích relativně snadné. V případě využití GObject introspekce, která je ze zdrojových kódů ve Vale velmi dobře generovatelná, např. v Pythonu ani nemusíte poznat, že najednou používáte zkompilovanou knihovnu původně napsanou v úplně jiném jazyce.

    Dost už bylo povídání. Programovací jazyky jsou tu přece od něčeho úplně jiného, než od toho, aby se o nich povídalo a byly vzájemně srovnávány. Zkusíme si napsat náš první program ve Vale, zkompilovat ho a spustit. Zároveň si tak ukážeme, jak vypadá vygenerovaný mezikód v C. Všechny zdrojové kódy k tomuto seriálu o programování ve Vale budou postupně v git repozitáři na GitHubu. Aby se v repozitáři lépe orientovalo, budu pro každý díl tohoto seriálu dělat tag. Ještě jedna poznámka ke zdrojovým kódům – protože by se mohlo stát, že by je chtěl použít někdo jiný, omezím se na angličtinu, a to nejen v případě identifikátorů, ale i komentářů. I když do budoucna budou v textu jen ty nejdůležitější fragmenty zdrojových kódů, pro tentokrát si ukážeme kompletní program

    /* file compile_test.vala */
    
    //define our namespace
    namespace compile_test
    {
    
        /**
         * Example class showing Vala syntax and serving as a compile test.
         *
         * This class named CompileTest is inherited from the Object from GLib.
         */
        class CompileTest : GLib.Object
        {
            /**
             * The main method that is invoked when this program is run.
             *
             * @param args command line arguments
             */
            public static int main(string[] args)
            {
                //call method printf of the object stdout (standard output)
                stdout.printf("I have been successfully compiled and run.\n");
                return 0;
            }
        }
    
    }
    

    Nyní si tento program zkusíme zkompilovat a spustit. Budeme k tomu, překvapivě, potřebovat kompilátor – program valac. Ten byste ve většině distribucí měli najít v balíku s prostým názvem vala. Věřím, že teď už nikoho nepřekvapí, že následujícím krokem bude příkaz valac compile_test.vala, čímž dostaneme binární program. Protože si však chceme ukázat i „Cčkový“ mezikód, spustíme kompilátor ještě jednou, tentokrát s přepínačem -C. Vznikne tak soubor compile_test.c. Zkuste si jej otevřít a prohlédnout, věřím, že znalým GLib a GObject bude kód připadat dobře čitelný, všem ostatním snad alespoň ukáže jak jednoduchý je kód ve Vale ve srovnání s jeho ekvivalentem v nativním C.

    Pokud máte rádi editor Vim, musím vás bohužel zklamat. Protože je Vala poměrně nový jazyk, tento editor si neporadí se zvýrazňováním syntaxe. Tedy dokud si s ním trochu nepohrajete. Pro Emacs bývá „zabalíkováno“ rozšíření emacs-vala a pokud budete mít štěstí a program Vala IDE zrovna nebude padat jako sníh, můžete použít dokonce editor vytvořený speciálně pro tento jazyk. Na závěr bych vám ještě doporučil otevřít, prohlédnout a zkompilovat soubor features.vala, který na poněkud umělých příkladech demonstruje některé z výše uvedených vlastností jazyka Vala. Snažil jsem se do něj umístit dostatek komentářů, aby nebylo třeba žádné další vysvětlování, ale pokud by se přece jen něco našlo, prosím o přidání komentáře pod článek. Pokusím se co nejdříve odpovědět.

    Závěr

    A to je tedy pro tentokrát vše. Doufám, že se mi ve vás podařilo projevit zájem o tento moderní programovací jazyk a rádi se se mnou v příštích dílech tohoto seriálu (příp. dalších článcích) podíváte na příklady jeho použití. Příště již začneme vytvářet opravdovou aplikaci, kterou budeme postupně rozšiřovat a zdokonalovat. Společně si tak ukážeme další konstrukce programovacího jazyka Vala, ale především použití různých knihoven.

           

    Hodnocení: 71 %

            špatnédobré        

    Nástroje: Tisk bez diskuse

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    1.8.2012 00:14 anon
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Valu bych nepouzival na nic jinyho nez aplikace nad gobject.

    Na druhou stranu vala misto gobject sadomasochismu v C je paradni a hrozne se mi libi jak nad gobject dokazali postavit takovy hezky jazyk ktery se do C gobjectu krasne prekompiluje.
    pavlix avatar 5.8.2012 13:33 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Valu bych nepouzival na nic jinyho nez aplikace nad gobject.
    Tak nad GObject se dá postavit cokoli a spousta věcí je na tom reálně postaveno. Má to spoustu (většinu?) vlastností, které jinak nabízí objektové modely jazyků typu Python, je to podstatně rychlejší (pokud se využívá možností, prasit se dá všude), je to dobře ovladatelné i z C, ale i z těch dynamických jazyků jako Python a Javascript.

    Já tím, že dělám na NetworkManageru, tak tam píšem všechno nad GObjectem v C. Dá se to, nevidím v tom problém, ale fakt je, že mnohým by pomohlo psát (a hlavně číst!) tyhle věci v jazyce, který má syntaktický cukr na OOP.
    Jardík avatar 1.8.2012 00:51 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Já jsem valu odmítl proto, že pro velikost polí používá int místo size_t. Pokud chcete u pole použít size_t, musíte k tom přidávat hnusný věci, navíc pak sice vala generuje v C kódu size_t, ale vnitřně se k tomu chová stejně jako k intu, nebo alespoň to tak dělávala. Když jsem kvůli tomu prudil vývojáře, tak mě poslali do řiti, že size_t používat nebudou, s totálním blábolem typu "v každé knihovně se používá něco jiného, my jsme zvolili int a budeme tedy ignorovat typy fcí jako malloc, realloc, operátoru sizeof a budeme to tajně přetypovávat na inty a modlit se, aby nám nepřetekl".
    Věřím v jednoho Boha.
    little.owl avatar 1.8.2012 16:06 little.owl | skóre: 22 | Brighton
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Ta diskuze se odehrala pred dvema roky, hnulo se to kupredu?
    You're damned if you do, and you're damned if you don't.
    Jardík avatar 1.8.2012 22:18 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Já to od té doby nepoužil, netuším.
    Věřím v jednoho Boha.
    1.8.2012 02:20 Ondra
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Genie -- totez co Vala, jen hodne jako Python
    pavlix avatar 5.8.2012 13:34 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Na ten mám teda mnohem větší chuť se podívat ještě než na Valu, ale samotná společná myšlenka se mi dost líbí.
    1.8.2012 08:19 qwertz
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    public int age { get; set; }

    Toto je inspirovano z delphi, ze ?

    property age:integer read get write set
    Luboš Doležel (Doli) avatar 1.8.2012 09:29 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Spíš C#.
    1.8.2012 13:17 .
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    alebo lisp
    1.8.2012 13:31 Radek Miček | skóre: 23 | blog: radekm_blog
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Pomocí tranzitivity i Delphi :-)
    pavlix avatar 5.8.2012 13:42 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    To bys musel hodně zkoumat, jestli je to tranzitivně z Delphi, já bych sázel spíš na Javu.
    5.8.2012 20:24 Radek Miček | skóre: 23 | blog: radekm_blog
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Object Pascal ovlivnil C# (na prvních verzích jazyka Object Pascal pracoval Anders Hejlsberg, než odešel do MS, kde se podílí na návrhu C#) a C# ovlivnil Valu.
    já bych sázel spíš na Javu
    AFAIK Java nemá speciální syntaktickou podporu pro vlastnosti.
    pavlix avatar 6.8.2012 00:08 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Nebudu se o tom přít. Vím o tom příliš málo a byl to můj upřímný odhad.
    1.8.2012 08:26 neron
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Jenom technická, v Javě by se ty metody jmenovali getAge() a setAge(). Není to jenom coding standart, využává se to pak třeba u Java Beanů a ty metody se přesně takhle musí jmenovat. Že je to opruz ovšem souhlasím.
    1.8.2012 08:26 neron
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Nekomentovat hrubky, prosím, už teď se stydím.
    1.8.2012 12:49 JS
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Vala se inspirovala C#, ne Javou, a tam se to (gettery a settery) takto dela.
    1.8.2012 13:05 neron
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Já ale reagoval na Pokud z Javy znáte „nádhery“ typu person.set_age(person.get_age() + 1); což předpokládám měl být kód v Javě.
    xkucf03 avatar 5.8.2012 00:43 xkucf03 | skóre: 46 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    +1

    Tohle by chtělo v článku opravit, protože takhle se v Javě opravdu nepíše (podtržítkový fujtajbl).
    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-Výuka.cz, Nekuřák.net
    5.8.2012 08:19 v.podzimek | skóre: 17
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    +1

    Tohle by chtělo v článku opravit, protože takhle se v Javě opravdu nepíše (podtržítkový fujtajbl).
    Uznávám, solidní programátor by to v Javě napsal jinak, ale mám pocit, že pro ukázku možností *Valy* tohle opravdu není kritické. :-)
    McBig avatar 1.8.2012 09:46 McBig | skóre: 5 | Nymburk
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Děkuji moc za článek. Poslal sem si ho na čtečku a moc se těším až si ho přečtu. Mě osobně Vala zaujala a naprosto pohltila. Naprogramoval sem v něm zatím jen jeden projekt, ale protože jde o GTK+ ve kterém sem už něco udělal, byla to taková testovací aplikace.

    GObject se někomu může zdát obskurní, ale dle mého je lepší než Garbitch collector, který čistí paměť tak nějak až uzná z vhodné. Mimochodem, refcount používá i python.

    Javu moc neznám, v Delphi sem programoval už hoooodně dávno, a C# sem v konečném důsledku vlastně zavrhl. Mě osobně Vala připomíná C++ s tím, že některé věci jsou shodné, nebo minimálně velmi podobné novému C++0x.

    Co se GTK+ týče, kdo zkoušel C++ binding (gtkmm), nebo Python binding, tak Vala mě přijde naprosto snadná, lehká a velmi dobře použitelná. A i když má své mouchy, například při kompilaci nutné generování všech .c souborů, nebo neošetřené stavy, kdy až vygenerovaný .c kód nejde kompilovat, další desktopovou aplikaci zřejmě opět budu psát ve Vale.

    Doplním ještě můj benchmark, který sem si udělal pro představu, kolik toho na CPU s použitím Valy ztratím.
    2.8.2012 23:10 v.podzimek | skóre: 17
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Děkuji moc za článek.
    Není zač, já děkuji za nějaká ta pozitivní slova. :-)
    Co se GTK+ týče, kdo zkoušel C++ binding (gtkmm), nebo Python binding, tak Vala mě přijde naprosto snadná, lehká a velmi dobře použitelná.
    Teď budu možná trochu sám proti sobě, ale s Gtk3, a tím pádem GObject introspekcí, je použití Gtk z Pythonu v podstatě totožné s psaním programu ve Vale. Plus s jednou velkou výhodou -- TAB TAB doplňováním v ipythonu. :-)
    pavlix avatar 3.8.2012 01:19 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    3.8.2012 19:57 aubi
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Bohuzel se obavam, ze ten priklad ma dost hrubou chybu. Pokud melo jit o testovani tvorby a mazani objektu, tak si myslim, ze nemely byt vytvarene na stacku jako lokalni promenne, protoze pak jsou vytvareny a mazany sice rychleji, ale mimo funkci se nedaji pouzit. Tudiz naprosto nerealistiky scenar.

    Zkuste pouzit new/delete (a treba ne hned za sebou).
    1.8.2012 11:05 dumblob | skóre: 10 | blog: dumblog
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Dekuji za hezky clanek.

    Jenom bych chtel doplnit, ze se lze vyhnout pouziti GLib knihoven prepinacem
    --profile=posix
    Avsak za cenu ztraty nektere funkcionality (casto te podstatne :-().

    OT: Byla by moznost zahrnout do serialu i porovnani s jazykem NULLC? Chapu, ze by zde mohl mit kazdy takove prani pro kazdy existujici jazyk, ale NULLC povazuji za jeden z nejpovedenejsich vyssich jazyku dneska a snad i budoucnosti (je dost novy a neznamy, ale to se doufam zmeni :-)).
    Refundace za Windows 7 od Lenovo obchodníka - soud rozhodl, že je zákazník v právu!
    1.8.2012 11:26 Pindal
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Hm NULLC. Dva roky mrtvé na webu a rok v hg repozitáři. To nevypadá na šťastnou budoucnost.
    1.8.2012 11:30 dumblob | skóre: 10 | blog: dumblog
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Cesta open-source byva trnita, plna zvratu apod.
    Refundace za Windows 7 od Lenovo obchodníka - soud rozhodl, že je zákazník v právu!
    1.8.2012 11:53 dumblob | skóre: 10 | blog: dumblog
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Mimochodem kde ma NULLC vami zminovany "web"? To, ze dva roky nebyla vydana major verze imho neznamena, ze je projekt nejaky mrtvy.

    Posledni commit do default vetve repozitare je z Mar 25, 2012 primo od autora NULLC (ano, kazdym commitem, i kdyz to je "pouze" bug fix, projekt oziva). Krome toho tech commitu bylo v tomto roce vice :-).
    Refundace za Windows 7 od Lenovo obchodníka - soud rozhodl, že je zákazník v právu!
    2.8.2012 22:48 v.podzimek | skóre: 17
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    OT: Byla by moznost zahrnout do serialu i porovnani s jazykem NULLC? Chapu, ze by zde mohl mit kazdy takove prani pro kazdy existujici jazyk, ale NULLC povazuji za jeden z nejpovedenejsich vyssich jazyku dneska a snad i budoucnosti (je dost novy a neznamy, ale to se doufam zmeni :-)).
    Bohužel už teď můžu s klidným svědomím odhadnout, že na tohle nebudu mít čas. Samozřejmě ale budu rád, pokud někdo článek na tohle téma napíše. :-)
    1.8.2012 23:10 Duff
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    No nevím. Po prohlédnutí ukázek mi to přijde jako když pejsek s kočičkou vzali svoje oblíbené syntaktické konstrukce z různých jazyků a nacpali je do jazyku jednoho, čímz skombinovali nevíhody všech jazyků z kterých brali. Napríklad využití nedefinonané proměnné není v zásadě problém ve skriptovacím jazyce, kde jsou skripty krátké a přiřazení lze jednoduše dohledat. Na druhou stranu v jazyce pro psaní rozsáhlých projektů je to opruz, protože se nenaincluduje nějaký soubor a proměnná není nastavena a pak to dohledávej. Její nastavení lze potom zjistit jen za běhu. Příklad setNeco(getNeco()+1) je špatný případ zapouzdření. Pokud chci promennou něco jen inkrementovat, tak bych si měl napsat metodu incrementNeco(), která to provede. Pokudmse ďelá něco sožiťejšího tak by to zase měka provést nějaká metoda. Netvrdím, že psaní getrů a setrů není opruz, ale ide to umí automatizovat. Pokud se jedná o deklaraci var, tak v jave by se to mohlo řešit obráceně. Deklarací se specifikací generik a inicializaví bez nich.

    Map<String, List<Integer>> var = new HashMap(); kompilátor bude sice prskat, ale bez problému to projde. Zase nechci tvrdit, že někdy není java zbytečne ukecaná nebo používá návrhy jen pro návrhy ne pro použití. Deklarovaná proměnná var, ale přináší problémy při automatickém přetypování a přetěžování operátorů, které není schopen potom odhalit kompilátor/preprocesor. Co když tu inicializaci někdo přepíse, třeba s čísla na řetězec, to potom bude radost tu chybu hledat. Jediný příklad, krerý je k něčemu, je že logický výraz musí mít oba operandy typu bool a if, for a while musí obshovat podmínku typu bool. Potom je jednoduché odhalit chyby typu if(i=1) a je to schopný zjistit už kompilátor/preprocesor. Samozřejmě tohle je můj prvotní pocit a realita může být jiná. Ty příklady mi ale příjdou jako příklady k ruby on rails (nebo komponent k .NETu), kde vytvoří blog za půl hodiny a pak se plácají po zádech jak jeto super. Bohužel ale už nezmíní, že pokud je třeba uďekat trochu něco jiného tak to jde stuha nebo vůbec.
    2.8.2012 10:38 Dadam | skóre: 12 | blog: dadamovo
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Tyjo, no teď budu za strašného nacistu, ale po perlách typu
    nevíhody, ďelá, sožiťejšího
    jsem už dál nečetl. Odkdy je čeština složitější než Java?

    Ale jo, četl. Příklad z hash mapou je podle mě špatně. V Javě sice nedělám, ale předpokládám že něco jako typedef má. Jinak souhlasím se shodnocením blogu. Ukazuje pár detailů a prohlašuje to za "úvod". Já jsem se o tom jazyku nedozvěděl vůbec nic.

    Jinak kdybych v kódu, který mám udržovat, našel
     
    if (/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.match(email))
    {
    ....
    
    tak si autora najdu a uškrtím ho ve spánku. Co ten kód dělá? Validuje mail? Vybírá maily s číslem na začátku? Já netuším, ale hlavně že ušetřil jeden řádek kódu:
    
    bool valid_email_rfc822 = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.match(email);
    if (valid_email_rfc822)
    {
    ....
    
    Není toto o dost čitelnější?
    A i B mají svoje výhody a nevýhody. Vyberte si to, co vám vyhovuje víc, a necpěte A tam, kam patří B.
    2.8.2012 11:43 Duff
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Jo na češtinu jsem lama a taky jsem to psal na tabletu a měl nél něco popito. Jave je holt nejaky pravopis uplne jedno. Ten přiklad v jave projde, protože generiky jen rozšiřují definici typu a vubec by se nemuseli pouzit (muselo by se pretypovavat). Prekladac bude nadavat na unchecked conversion nebo tak neco.
    2.8.2012 12:41 Dadam | skóre: 12 | blog: dadamovo
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Netvrdím že je to syntakticky špatně, tvrdím že je špatně místo jednoduchého řešení typedefem vymýšlet nějaké vyfikundace v jazyku. Ale zrovna se dívám, že Java typedef nemá, wtf?
    A i B mají svoje výhody a nevýhody. Vyberte si to, co vám vyhovuje víc, a necpěte A tam, kam patří B.
    2.8.2012 14:13 Duff
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Typedef nemá. Cokoli se definuje nového musí být interface nebo class.

    dalo by se to řešit vytvořením podtřídy, která nastavuje ty generiky.
    interface MyMap extends Map<String, List<Integer>> {
    }
    
    Je to ale celkem zbytečné, protože podle definice proměnné je potom IDE schopno doplnit generiky do inicializace proměnné. A taky je otázka, jestli to nezhorší čitelnost. Po takové definici potom musí člověk dohledávat co tím myslel a pro to Map rozhraní potom musí dohledat jednotlivé implementace s java knihovny.
    3.8.2012 17:25 aaaaaaaaaaaaaaa
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod

    Ja toto riesim v Jave tak, ze mam v kode nieco ako

    public class Maps {
      public static <K, V> HashMap <K, V> newHashMap () {
          return new HashMap <K, V> ();
      }
      // atd pre ostatne mapy
    }
    
    a potom volam len
    Map<String, String> map = Maps.newHashMap();
    
    Podobne mam aj triedy Sets a Lists.

    2.8.2012 23:06 v.podzimek | skóre: 17
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Tyjo, no teď budu za strašného nacistu, ale po perlách typu
    nevíhody, ďelá, sožiťejšího
    jsem už dál nečetl. Odkdy je čeština složitější než Java?

    Ale jo, četl. Příklad z hash mapou je podle mě špatně. V Javě sice nedělám, ale předpokládám že něco jako typedef má. Jinak souhlasím se shodnocením blogu. Ukazuje pár detailů a prohlašuje to za "úvod". Já jsem se o tom jazyku nedozvěděl vůbec nic.
    Pevně věřím, že alespoň někdo se dozvěděl, jaké zajímavé vlastnosti a syntaktické zkratky Vala přináší. Tento článek je určen jen jako motivační ukázka možností Valy. Nebudeme se snad přít o tom, že programovací jazyky jsou o něčem jiném než o syntaktických zkratkách. Pokud vím, tak vyjadřovací sílu mají všechny stejnou, od (turingovsky úplných) konfiguráků sendmailu až po Javu.

    Jinak kdybych v kódu, který mám udržovat, našel
     
    if (/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.match(email))
    {
    ....
    
    tak si autora najdu a uškrtím ho ve spánku.
    Myslím, že přidání komentáře by bylo naprosto dostačující. Nicméně tento článek není o psaní "pěkného, čitelného a dobře udržovatelného" kódu a pevně věřím, že pro ukázku jednoduchosti používání regulárních výrazů není třeba zbytečných řádků navíc.
    Co ten kód dělá? Validuje mail? Vybírá maily s číslem na začátku? Já netuším, ale hlavně že ušetřil jeden řádek kódu:
    
    bool valid_email_rfc822 = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.match(email);
    if (valid_email_rfc822)
    {
    ....
    
    Není toto o dost čitelnější?
    Vzhledem k části, ve které se tato ukázka nachází, bych rád podotknul, že z této podoby by možná vstávaly vlasy na hlavě některým "Perlistům". A ať si taky trochu rýpnu -- uvádět v názvu proměnné číslo RFC mi připadá trochu overkill; když už, tak možná uložit reg. výraz jako konstantu.
    3.8.2012 11:17 Dadam | skóre: 12 | blog: dadamovo
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Nebudeme se snad přít o tom, že programovací jazyky jsou o něčem jiném než o syntaktických zkratkách.
    A snad se nebudeme přít ani o tom, že že syntaktické zkratky mají pomoct čitelnosti a udržovatelnosti kódu. Pravda je že coby člověku odchovaném na c++ mi takové
    open(FILE, "file.txt") || die ("Cannot open file file.txt, exitting.");
    mimo Bash nahání husí kůži, zatímco pro programátora v Perlu se jedná o používaný idiom. "Co je pro jednoho idiom..." :-)
    když už, tak možná uložit reg. výraz jako konstantu.
    Pravda.
    A ať si taky trochu rýpnu
    Nerýpu, kritizuju.
    A i B mají svoje výhody a nevýhody. Vyberte si to, co vám vyhovuje víc, a necpěte A tam, kam patří B.
    14.8.2012 11:41 srott
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod

    Samozrejme, že ten regex je zlý, ale ten druhý zápis nie je o nič lepší. Veľa ľudí totiž nemá tušenia aké to je komplikované.

    Jediný správny regex podľa RFC je:

    http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html  

    a tuším ani ten nie je 100% korektný :)

    14.8.2012 18:30 Dadam | skóre: 12 | blog: dadamovo
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    O správnost regulárního výrazu tu zrovna nejde. Jde o to, abych při letmém pohledu na kód odhadl, co zhruba dělá.
    A i B mají svoje výhody a nevýhody. Vyberte si to, co vám vyhovuje víc, a necpěte A tam, kam patří B.
    xkucf03 avatar 5.8.2012 10:46 xkucf03 | skóre: 46 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Map<String, List<Integer>> var = new HashMap(); kompilátor bude sice prskat, ale bez problému to projde. Zase nechci tvrdit, že někdy není java zbytečne ukecaná nebo používá návrhy jen pro návrhy ne pro použití.

    V Javě (7) můžeš napsat:
    List<String> list = new LinkedList<>();
    U toho var = … mi přijde jako hlavní nevýhoda, že se používá příliš konkrétní typ. Např. vím, že někde chci mít obecnou mapu (Map) a v aktuální verzi použiji HashMapu – kvůli var bych pak ve zbytku kódu pracoval s konkrétní implementací místo s obecným rozhraním, což komplikuje budoucí změny (např. budu chtít použít jinou mapu).

    Ale jinak nic proti této funkci – on to člověk používat nemusí a deklarovat si typy přesně, jak chce.
    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-Výuka.cz, Nekuřák.net
    7.8.2012 15:42 Brouček
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    var je asi vzato ze C#, objevilo se to tam společně (a kvůli) LINQ ve verzi 3.0
    3.8.2012 00:38 Ferdinand
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Preklad do C by se mi libil u vsech jazyku. Mozna i u C.
    3.8.2012 20:46 zxtlpn | skóre: 8 | blog: zxtlpn
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    LLVM má céčkovej bekend, ale lezou z toho strašný sra...
    3.8.2012 20:47 zxtlpn | skóre: 8 | blog: zxtlpn
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Asi jsem chtěl napsat výstup, ne backend.
    3.8.2012 16:01 Ditys
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    Zásadní problém, společný všem jazykům je, kolik práce (a kódu) je třeba na vytvoření formuláře, dvou políček - jméno, příjmení, a následně tlačítko pro uložení do SQL databáze. Doufám, že ukázka bude :-)
    pavlix avatar 5.8.2012 13:40 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Programování v jazyce Vala – úvod
    To není problém jazyka, ale knihoven či frameworků.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.