tak já jsem se brát s přepravou přednášku programovacích jazycích z jednoho prostého důvodu

protože vlastně už šumem brání

sem kdysi měl problémy se učit cizí jazyky jakékoli další jazyky

ale přesto se měl velké nutkání jsem velice tak zaktivněn velice přesně vyjadřovat a dost

často se nenacházel slova gramatiku sémantiku a podobně tomu aby se mi to podařilo

aha

tak jsem se zajímal o jazyky

běžné řekněme nejprve

nám o to jsem se rozhodl strach informatiku tak já jsem se zajímal jako programovací

jazyky

jako takové

a

právě

v průběhu mých studií zrovna na této fakultě

sem nehledal jakýsi mezi ve kterém jsem pracoval příjemně ve kterém bych se mohl velice

stručně a přitom jasně vyjadřovat

který by splňoval moderní požadavky to znamená pokud tak ajťáci tak tušíte co tím asi

mám na mysli

pro ostatní co to může odnášet tak je to nějaká rychlost jednoduchost použití čitelnost testovatelnost

a kromě rozšiřitelnost pochopitelně tak dále

takže

to sou asi tu peníze odrážky a teď bych se dostal k té třetí suše

jakási ideologie kultura s tím jazyky souvisejí

možná se si všimli že jazyky nejenom programovací obecně jsou velice úzce navázané na kulturu

v ip jelikož to je velice mladý obor tak se nám většinou zrodily takzvané ideologické

jazyky které vycházejí z nějaké velice

strukturované

ideologie například funkcionální programování kde se na všechno díváte jako na matematickou funkci a snažíte

se veškerý ekosystém přizpůsobit právě tomuto

vnímání

a ukazuje se že tento přístup není úplně vhodný protože

pro programovací jazyk s ty stejně jako běžné jazyky jednoho dne se vymkl kontrole kozlovka

a dostanou se do míst kde s ním nikdo nikdy nepočítal a kam se podstatě

jen tolik nehodí ale z nějakého důvodu

je někdo nucen je tam použít

a vtom prostor těchto případech vznikají velké problémy a právě proto vlastně ip se říká

že třeba nejhůře benešova tell me obor protože nikdo neví jak přistoupit právě tomdlectom problému

a kdy se všechno mění a vlastně to není kompatibilní nefunguje vám to a je

to strašně složité

takže

todlecto je vlastně jazyk ohledně toho dál který se snaží těmto problémům aspoň trochu předcházet

snaží se podchytit tyto situace snaží se

aha vcítit do těch lidí do jejich potře

a nějakým způsobem se s tím vyrovnat dozvíme se o tom dále

a

jazyk je podstatě pro ty kteří tady naprogramovali případně program umí tak je to podstatě

něco

kde

my se snažíme přenést informaci naších hlavy

do počítače a to po pokud možno nějaké strukturované formě aby to bylo zase zpětně

námi čitelné a pochopitelné

ale zároveň aby to bylo dostatečně formální

aby ten počítač přesně věděl co s tím má dělat

objevují se programovacích jazycích pochopitelně další něco jako fráze nějak něco jako idiom je prostě

nějaký jakoby korektní způsob jak dělat nějakou malou činnost

a

toto vy vlastně podobnosti s nima běžným jazykem takže to se týká tohodlectoho prvního slajdu

který měl

říct nějak něco o tom jaký je vztah mezi programovacím jazykem

a možným rizikem

tak teďka se nepřestanete ip části a začneme se trochu více zabývat

je na konkrétním a věci na

takže my sme se snažili aby ten jazyk byl velice jasný aby se v něm

dalo vyjadřovat velice stručně

a konkrétně

a aby umožňoval různé typy kontroly

pod tou kontrolou si programátor představí jak tom sou flow to znamená nějaké wifi podmínky

before a tak dále

ale může si po tím představit i nějaké vyšší konstrukce

objektové programování

modularitu a tak dále

a všimli jsme si že

na velkou výhodu dnešním světě jazyku tvoří něco jako interfejsy to znamená vás nezajímá co

je té černé krabičce ale zajímá vás jak s tou krabičkou vlastně chcete komunikovat a

co ji chcete před a za informaci a co si vodní zase chcete vybrat

další věc která je dneska

pravděpodobně největším problémem software a římě je to souběžný paralelizmus

když se podíváte na dnešní jazyk jako mají podporu pro paralelizmus tak se většině programátorů

zježí všechny chlupy na těle protože ovládnout pro vezmu si dneska složité a hlavně z

důvodu bezpečnosti

vy musíte hlídat ohromné množství proměnných ohromné množství prostě různejch tácků který se můžou a

nemůžou dělit a tak dále

takže todlecto je další z velká z velkých věcí tedy ten to pro tento programovací

jazyk dalo chce řešit a řeší

dále i přes to všechno co to ne programovací jazyk

jasně zvládá nebo nějakým způsobem řeší tak a je tam pořád ten silný asi tak

že se musí že sme chtěli tento pro práci jazyk zabudovat řadu nějakého zařízení to

znamená ta programovací jazyk musí mít malý

případně když není malý tak musí mít jednoduše možné z něho nějakou funkci no to

vyhodit

představte si například javu které se říká že to jakoby nejrozšířenější jazyk na všech možných

je zařízení tak vlastně java opravdu funguje

třeba i nějaké sim kartě kterou máte

na mobilním telefonu a podobných zařízeních opravdu se to programuje java podstatě tamtý java není

ani žádný ty tam že není ani nic tam není nic takového tam vlastně sou

jenom třídy

no takže dělá se dá použít i to prostředích a my sme se snažili aby

možná ne tak extrémních prostředích ale vy i na těch byly systémech jak se nazývají

tak by tento jazyk byl velice dobře použitelný

no a v neposlední řadě pochopitelně si to musíte užít to programování pro vás to

bavilo aby to nebylo jenom jazyk kterej vypadá jak něco ze středověku ale vás to

bavilo vás donutilo

ne tím přemýšlet a užívat se to programování samotné

a pochopitelně k tomu kdo se žení všech to těsto ip uspět a ip cílu

tak a ten jazyk musí splňovat hodně kritérií například musí mít perfektní knihovnu připraveno protože

podle toho se stalo například pipe no

kdy neexistovala knihovna a víte že vpadni dvojce tak dál a byli knihovny nějak navržené

a momentálně se pak mu pračce docela hodně předělávali

pak no trojce sou zase třeba jeho kdy pěkně navržené a zjistíte že díky skládání

a tak dále různým těm

klička

a spojování tak se třeba voláte stát na nějakej soubor třikrát za sebou úplně zbytečně

takže má to své pro a proti takže kvalitní knihovna nějaké utility okolo našem případě

té například automatické generování byte dingů existenci knihovny nebereme přepisovat nesmysl vygenerujeme automaticky blendingy další

věc kterou třeba většina jazyků nemám vůbec ani to třeba nejde

my máme protože my máme nativní podporu pro cc plus další knihovny

a krom toho můžeme bylo tydlecty knihovny přímo s

ze s prostředí toho jazyka měl takže

to na možně docela velkou

docela velkou různorodou

skupinu činností

a nějaké aplikace ještě která nemá mé to bych tady vás rád poprosil kdyby vás

to zaujalo tak se určitě podívejte ani se napište máme tam spíš takové ukázky na

iphone nějakou jednoduchou před aplikaci grafice a tak dále

a

nebo webové stránky se sqlite back and a tak dále takže různé věci máme ale

sou to spíš že malinkaté věci je nás málo takže

není to úplně rozšířené

jaké hry komerční systémy nemá vlastně zatím žádné

a to je to co bychom chtěli vlastně dosáhnout v budoucnu aby se tento program

si jazyk rozšířil komerční sféře takže komerční sféra je přesně to co udržuje aniž se

vám to přál znáte to je to se udržet jazyky na životě podívejte strana nebo

jestli někdo víte něco málo historii programovací jazyk ergo tak zjistíte

že kdysi dávno se používá ten devítce hodně zvláštní formě já tobě jakejsi nástupce céčka

potom se začal používat jeho vylepšená variantách operačním systému

a

tady vycházel stipple ste bandity každopádně tento jazyk se menoval mimo

a

nyní se ten lindu vlastně přetransformovat někdo v roce dva tisíce šest tak dál tak

na tom začal inženýři znova dělat a přetransformovat hladomor i know do moderního světa funguje

na všech počítačích a je to poměrně moderní jazyk takže ta jako ukázka toho že

penězi do té doby skomíral nebylo ně komerční zájem a proto mě nikdo neviděl přitom

to je velice schopný a zajímavé velice pěkný jazyk určitě by bylo dobré se tím

zabývat pokud vás jazyky zajímají jako takové takže to je příklad proč vlastně vůbec tady

chceme mít i komerční systém

tak

a nyní teda

jak se vlastně přistoupili tvorbě toho jazyk programovací jazyk a dal

a pochopitelně

a něco vymýšlet na zelené louce problém tak sme se nejdříve podívali na koncepty které

se používají ostatních programovacích jazycích zažili jsme se to dělá velice kriticky to znamená že

jsme se stali nějaké vlastnosti

například paralelní programování ve skále

řekli jsme si dobře víme že ve skále když potřebuju napsat právní program je to

sice čisté programování a napíšu strašně moc řádků co je tam za problém začali jsme

hledat ty všechny matky jednotlivé problémy které s tím nehod čitelnosti přes ukecaná host a

škol nějaké třeba i bezpečnostní problémy výkonnostní problémy a tak dále

a zkusili jsme se na to podívat je na ano líbí se nám třeba koncert

future to znamená že

jaká paralelní úloha okamžitě vrátí hodnotu a ta hodnota nám zatím říká ano někde na

pozadí se nám něco počítat paralelně a tu hodnotu si můžeš vyznal ve zvednout hash

a teď tam nějakým způsobem vyřešeno kdy

takže například tento konce a přetransformovat ho tak aby byl pokud možno jednodušší použitelnější rychlejší

a vůbec zapadalo celkové konce tutoho jazyka

takže takto jsme postupovali dostali sme se přes mnoho různých věcí trenéra příklady které jsou

viditelné hlavně pro uživatele jsme se zabývali i tvorbou samotné virtuální mašíny protože jazyk dal

je

momentálně interpretovaný jezy

byly nějaké pokusy a počítá se s tím do budoucna že prej kompilovanými ale zatím

na to nemáme čas takže předpokládám třeba horizontu pěti let že se ti někdo začne

zabývat ale zatím nemáme takové kapacity

takže to co je viditelné pro programátora tak to můžou bejt třeba enumerace můžu tobě

dekorátory může to bejt takzvaný defer kdo z vás prosím vás zná co je třeba

differs programovacích jazycích tady

nikdo

tak takže rychle zkusím přiblížit

tak to je taková zajímavou vlastnost například verzi jazyka kdo

tady označíte nějakou se chci kódu nebo nějakej jako posloupnost nějak nějaký k o že

se má provést až na konci nějakého name space nějaké houskou obecně znamená se na

konci funkce a vy můžete kdekoliv tý funkci označit jakejkoli kus kódu který se má

takhle provést

z toho psa abstraktně a dám příklad například budou mít funkci která pracuje se souborem

vím že když odevřu soubor že ho potřebuju zavřít busy me garantovaný že ho zavřou

ne že je to hodí výjimku nebo že někde něco return ne prostě se vrátí

nebo že něco spadne zůstaneme vodevřenej faly světa nemůžu si to dovolit

právě z tohoto důvodu hnedka na první řádek napíšu declare klaus ten file for deskriptor

to znamená že tu chvíli mě ten default a klauzule rychle garantuje že někde na

konci úplně provedení celý ty funkce a když to bude vyskočení ven zeptaj nebo by

mi provedení celý funkce rutiny a teda na ten garantuje že se zavolá ten klaus

na ten soubor

takže tímto způsobem se dají modelovat různé transakční problémy různé

podkládání třeba víme chytání výjimek různé další věci halasně to velice elegantní způsob jak se

vyhnout například samotnému nějakýmu try switch a tak dále

a nakonec třeba jak jsem říkal stesk ale tak tam máme tepen týče

tak

co se dneska vlastně od jazyku

čeká a

co se objevuje na to umí

já jsem to nazval market

a na tom trhu jazyků

potřebujete s něčím prorazit

tak potřebujete mít něco nového něco co prostě ty ostatní zaujme a jinými slovy vytlačí

a momentálně to je

jakýsi návrat funkcionální programování možná jste zaregistrovali mnoho jazyků které vznikají nebo aspoň

se dal vyvíjí tak se začínají zabývat tím konceptem té piju dnes prostě té čistoty

byl asi máte čistou funkci která nemá vedlejší efekty nebude víra soubory

nic takového

potom dále s tím souvisí tipovací systémy

které

máme tady takové dvě odvětví nemáme

říkám volně typované jazyky

a máme velice střelec ale se silně typované jazyky

a tydlecty odvětví je problém skloubit každej má něco každé vede k různým problém například

volně typované

zvyšují výrazným způsobem

testovat testování

to znamená

když vy vlastně

netrefíte co se jedná o pět netrefíte

přesně

tam dané komponenty děje

tak přesunete tu responsible titulu

a pardon

transmisemi

hodin

tak a přesunete veškerou to nese zodpovědnost

ná toho pestrá který chudák prostě musí otestovat a prvním jestli jsou a stejně nikdy

nebude mít garantovaný

že ten program se bude chovat korektně

naopak tady máme ty šílené systém je někteří říkají ta svá sklá pro mě které

jsou čistě funkcionální

případně naprosto čisté jazyky ve kterých je zase problém udělat změnu pokud se někde provést

takové riziko například webové stránky

poměrně běžná záležitost dneska

tak zjistíte že pro nějakou změnu přidání třeba nějakého tlačítka nebo nějakou malou změnu musíte

udělat tom zdrojovém kódu prasklo

na deseti různých místech

netriviální změny

a přesně tahle sem problém

ne

a přesně tohle sem problém sme se snažili

jak vyřešit zamyslet se nad tím co s tím dělat

protože my vlastně chceme voboje my chceme aby ten programátor vodevzdával kolovat

který je plně korektní pokud možno

chceme aby tester neměl tolik co dělá a zároveň chceme aby ten programátor moh napsat

rychle protože pokud bude psát maskou tak prostě bude porvali něco někde měnit a bude

se těm akorát trápit

no řešil jsme to tak

je podporuje oba tipovací systém je dál máme volné typování i pevné typování je to

čistě z unixové dohromady můžete si vlastně vybrat co bude tipovaným co nebude

a

tímhle vlastně dáme plno s tou programátor vybrat si pochopitelně

to volné typování

je pomalejší to znamená protože se kontrolují všechny ty typy přímo pane přímou za běhu

aplikace

pokud použijete to silné typování

zkontroluje se to přímo ještě před kompilací to znamená že to zjistíte hned

a

ale zase toho napíšete trošku víc takže tohle se naše jakési řešení funguje to velice

dobře

a

krom toho problému že se musí třeba upravovat na mnoha místech kolo případě silně typovaných

tak se tam mobil

tak já jsem se na

tak se tam objevuje ještě

další problém

a tím je

a tímto problémem je a

vraťte se k tomu za chvilku momentálně na tady není vhodná chvíle

a

zmíním ještě rychle něco o

nevím je to byly ty

a všimli jste si že celá těch funkcionálních jazycích je to jeden ze způsobů jak

zaručit právě tu korektnost

rád kdo z vás tady používalo něco jako vím je to bylo ta věc prosím

vás

zvedněte ruku

to vše lepší děkuju

tak dál

víte že tím si vlastně předem garantuje pevně danou hodnotu kterou si někam ukládat se

kterou pracujete už nikdy nemůžete změnit

a kupodivu se ukazuje že opravdu programátor hodnoty zase tak často nemusí měnit a právě

proto kdyby se předem označíte že tuhle hodnotu

jedno z middle tý doby už nikdy nebojí nastavíte už nikdy potom ní nebudete měnit

tak se ukazuje tenhlecten způsob kontroly je velice výhodný

a hle jak jsem řekl

tak to vlastně dále klade nároky na to programátor moc se předem zamyslím gui muset

měnit nebudu a tak dál

a všimli jste si dále ve světě okolo že pochopitelně nám rostou skriptovací jazyky s

tohoto důvodu jsme se zaměřili zase na interpretovaný skriptovací jazyk vlastně to jazyk někde mezi

skriptování na řekněme systému programováním ať oba což nevím kdo z vás by řekl že

to je skriptovací jazyk

definice že to má virtuální mašinu pro mě by to asi byl

a je poměrně

nízkoúrovňový a pravé slovo důvodů bychom asi neradi říkali skriptovací

takže

na našem případě design dál konkrétně

takže virtuální mašina sběr když kolektorem protože se zabýváme tím paralelizmem a dalšíma věcma takže

tam bychom si vůbec stručný prací paměť a tak dále

neporadili je to orlici

tím se má na mysli

takže tento jazyk je velice jednoduše rozšířit to znamená dá se vložit do jiného jazyka

dá se vložit do jakékoli aplikace policie vše velice malý ten jazyk porovnání třeba s

partnerem perla ruby javou a tak dále

a zároveň to funguje i naopak to znamená do dalo můžu volit další jazyky může

volat na ty mě c plus programy pro ten je dále

auto bandy kdy všechno

funguje perfektně

a jazyk je postavení s tím že by v budoucnu měl byt velice dobře optimalizovatelné

ní a to tele i samotnou kompilaci tak je pomocí třeba ti kompilace že sem

tam kopa

a další rozhodnutí bylo jaké vlastně kódování zvolit zvol jsme u tech osum protože

mám dvě výhody za základní jedna věc je velice úsporné

to znamená vlastně šetří bejt i

a to se nám o ní druhá věc je plně kompatibilní sazky

to znamená

můžeme to využít na jakékoli string k

a máme vyřešeno polívka na jakékoli masky string

tak o našem sofistikované typu systému sem mluvil a hlavní věcí a to je k

čemu sem se dostal před chvilkou chtěl dostat řekl jsem že probrat později tak to

je typová inference znamená odvozování typů

a my máme vlastně

porovnání s ostatníma jazyka jazyky jeden z nejsilnějších

a inferenčních džínů vtom jazyce to znamená

moc se snaží velice dobře odhadnout podle toho jak používáte proměnné jaký typ asi používáte

a jakmile to odhadne tak o té doby už ho potom ten typni nemůžete

a jestli se pracovali perlu tak je to trochu podobný možná pro vás

ze zkušenosti

a to podaří po poradí si to i se speciální a ty pomatené tady mám

jmenované

některé z nich

ty piny ta je právě ten ty které vlastně

a vyhodnocovány přímo tom partaje

a nebo třeba python girls co jsou speciální typy ne si přímo na místě kde

ty potřebujete specifikovat vyberete něco co ho zastoupí ten ty a to něco toho zástupce

po tak použijte někde jinde kódu šéf vlastně slinkujete tyhle tři části kódu a řeknete

je na všech třech bude muset být za každou cenu

toužit stejný typ je to výhodné například pro makra pro různé template i a tak

dál

template jsem se smířil a přesuneme se modularitě

na jazyk má podporu pro objektové pro programování pro moduly a oddělení různými name space

s tak dál

a poslední zmínka ještě to dal bude probrána dalším slon slajdu

tak je konce oflo

a k tomu takovou malou poznámku

a že se k tomu dají psát speciální makra

a makra v jiném smyslu než schumachera která přímo jako generují ten jazyk ale která

spíš pozmění u jí syntaxi jazyka a sice píšou se pdfka notaci o kus nahoru

ve formě

a tím se stávají velice dobře čitelný například měli sme tam teďka nějaký ruskej s

jednoduchý nějaký vyvolá čtyři chtěl

automatické aplikovat

na některé jeho funkce případně

metody

já chtěl aplikovat

nějaký dekorátor

a měl ten deklarátor vždycky spojení se jménem té funkce

a tomto případě to nechtěl pokaždé vypisovat dekorátor funkci a po to zavolání toho té

funkce s dekoratérem

a tom případě použil makro a měl to prostě jako kdyby se zadefinovat speciální funkci

a měl to velice hezky to vypadalo fungovalo to nám naprosto bezproblémově takže takové jednoduché

věci to makro byl schopnej napsat za dvě tři minuty a ulehčil motorový množství práce

a je to plně kompatibilní

moduly různé typy modulů podporujeme pochopitelně samotné meze central jak jsem říkal cc plus já

se propojit s čímkoli protože dneska když se podíváte tak má téměř všechno nějaké propojení

na cc plus a pokud si budete hrát pokus kontra má tak prostě docílit do

toho cíle které pro potřebujete

a pravor function

to asi víte co je kousek šest to je zajímavá věc kdo z vás tady

program ale někdy v ruby například

super

aspoň jeden

tak já du bist netuší co sou to něco jako konce všem s protože v

ruby je a taková hezká věc si můžete

vlastně volat nějakou sekvenci nějaký k o

a přímo na místě

přímo na místě kde ten kód byste chtěli položit

ale může toho volat takle ty repetitive ně

no a vlasně my jsme řešili to nastane problém

takže jsme zavedli speciální typ rutiny kecání ty funkce

kterou se nazývá na kousek šel

a ale konce června může předávat do té sekce ve které jako další proměnné ne

jenom přes hlavičkou a na proměnné které jsou vlastně vyhodnocují přímo té sekci

a v ruby se to zapisuje tuším nějakými zatím si myslíte něco takového jestli se

dobře pamatuji

a

todlecto je velice užitečná věc protože například pomocí tohoto konceptu ukážeme si později

máme implementovaný ten defer

to odkládání volání nějakejch těch sekcí kódu např na konci rutiny

a další užitečné věci potřeba různé funkcionální pojetí práce se seznamy

se mapami a tak dále

takže můžete přát zavolá sort a přímo do té kousek čem po té sekce kódu

dát akorát x je větší než ypsilon

a on se to nula pro každý ten

dvojici sou seznamu podle algoritmu řadí cíl a porovnávat přesně podle toho co vrací vlastně

zase chce takže takové různé věci se s tím bejt dělat hezky se s tím

dá vyhrát

podpora tříd třídní systém podpora interfejsu máme speciální dva typy

a to vám asi myslím radši na příkladech které má na konci protože to není

úplně nechám na pochopení

a mixy my podporujeme

a pomalované typy

to se hodí například pro ty node ulice plus kód pro mě vlastně ten typ

si něčem obalíte aby to bylo čistě kompatibilní s tím dal spekulacím systémem

je nedá nebo s to je ta implementace táhněte byly ty

jak jsem o tom mluvil kasty další věc také se někomu ještě z ježí chlupy

když si představím jak se kastu je tady přetypována řekněme

a řádce plus

tak my máme poměrně jednoduchý ne

systém jak toho docílit ta se cena implementujete metodu která vrací daný ty pokud nejen

talentem tam metrů kerá vracím tý že tak prostě budete moct napsat okamžitě přetypovat danou

hodnotu na ten integer zavolá se metoda a ta něco vrátí

takže tímto spíš se to způsobený mám implementovaný krásným je to velice užitečná věc například

když pracujete s různými jednoduchými typy potřete dost často před i po mezi finta s

těmi dvěma směry potřebujete mezi časem zase pošlete převážně čas do interní a formátu

a do nějakého lidsky čitelného formátu a tak dál takže byli se užitečná věc

pan nepotřebuje to vlastně vůbec žádné zásah ze strany programátora

a já jsem tady snad vyplynulo zhruba sto sem říkal tak dál

na interně

implementováno podporu pro vyjímky tímto způsobem se řeší veškeré neřešitelné situace když třeba se něco

porouchá jako vevnitř

ne ani tak dál ale třeba po otevírání souborů při nějaké práci po síti prostě

vytáhnout ve spojení a podobně takže to se řeší přes výjimky se kterými se dá

perfektně zacházet díky tomu dyž prachy tání možná ne to si neukážeme protože to příliš

a potom

konečně ten paralelizmus

tak máme takový zavedený nový operátor tvůj vykřičník

o vykřičník za sebou

který dělá jednoduchou věc že spustí danou skupinu

v dalším vlákně

takže když to pustí tak cyklu jak se tam že to pustit řád deset tisíc

vláken a všechno zpracovala pro ně deseti tisíc krát a ta vlákna si můžu spustit

další vlákna a tato vlákna jsou namapovaná dycky na vlákna přímo do tom systému ve

kterém to běží používám být retz takže to multiplatformními že to všude

a je to velice rychle předáme si pomocí

různých metod ale nejraději má metadatech tím že hodnoty to znamená by to mělo ten

funkcionální tvar

je to prostě vrátí hodnotu a toho případně tam mám zabudovanou podporu pro černou to

je zase zbylo

jestli ste někdo poslouchal aspoň někdy nebo slyšel ten konce

takže se vlastně kanálem dají posílat

a naprosto kdes použití nějakých explicitních synchronizačních nech mechanismu tak si může to posílat hodnoty

mezi vlákny úplně mezi sebou ústně stačí před a ten samý kanál pokud dva dvě

vlákna nebo dvě funkce dvě metody vyvolání ty instance budou mít ten samý kanál tak

můžu přes ten kanál komunikovat

tak to nešel jsou těch u těch příkladu ten jazyk má trošku céčkovou neboce plus

plusku syntaxi

a tady obligátní halo kterým by si měl napsat jako a jo white lajn holt

ale dá se za copy zjednodušeně protože interpret to jako takový vrací defaultní stavu poslední

vykonanou poslední hodnotu kterou dostal to zas poslední instrukce takže se dá zapsat jen s

krásnější formě

tak

trošku zajímavější možná ukázka je pracovat s prostředím vnějším

a

určitě znáte koncept mi není třeba vysvětlovat tři tečky znamená jakýkoliv počet a jakýchkoliv parametrů

takže předáme celému programu extern a teďka dalo

předáme nějaké parametry a ony vypíše pokud žádné tak vypíše prostě prázdný ta o

tak to je intuice a je to zase jeden se zabudovaných typů stejně jako na

i seznamy a tak dále ste linky a podobně

takže je to použitelné velice jednoduše

jo návratu hodnotu stav jde to

tak z dostaneme se konečně to paralelizmu

a

paralelizmus se tady neimplementované je příklad pomocí funkce vrece

a používáme klíčové slovo ty protože ve skutečnosti se může jednat nečisté funkce a my

sme se mu začátku byl jsem se chtěj co nejvíce přiblížit o intuitivním chápání jazyků

takže některé věci jsou zde pojmenovány jinak míša lezete dalších jazycích když dělají velice podobnou

nebo někdy stejnou věc

protože

function vy řeknete matematikovi

tak pro očekávat čistou funkci

a holá díky tomu že si tady můžeme takle posílat někde něco vám a mít

ve ty vedlejší efekty něco napsat na obrazovku a podobně

tak to radši ani nazýváme rutinou

a

vidíte tam ten vlastně ten kanál té ty

je to není ste jsou té

taková zajímavost mezi není space a nějakým klíčovým slovem

a můžeme psát volitelně dvojtečku zdvojenou dvojtečku a nebo jenom jednoduchou tečku

ale je to jediný případ kde je tam

tadlecta volba je ne ve všech ostatních případech vtom jazyce všechno napevno dál a nemůžete

si vymýšlet

a

takže co tam já jsem to udělala

co šíření roznásobím udělat

taková otázka do pléna řekl jsem tady něco málo o konceptu differ a řekl jsem

tady něco málo kanálech řekl jsem tady něco

o posílání a deklaraci a o cyklech podstatě se nám řekl téměř všechno co je

potřebné pro tento příklad pro pochopení zkusil by to někdo rozšifrovat prosím vás zvedněte ruku

nebo to na mě rovnou vykřikne

pan tady dyž taky odměnu pro vás takže vás můžu i materiálně

motivovat

že prej získáte dva citní procentní slevu na nějaký z nich produktu či služeb nevím

přesně jaký ale to se dozvíte po přednášce tady pravděpodobně

takže

někdo

nevadí zatím si to necháme stranou

nám

jednoduchým způsobem declare sítě

nula znamená že se předá že se zavírá kanál to znamená ten kanál pošle jako

by poslední zprávu to bude na

řekne tím ano zavírám se

a ve fort cyklu po tím se vlastně vygeneruju ty kanály

a dokáže jsi něco uložíme a pak zavolám paralelně to abecedu ty no s těma

parametrová s tím kanálem a s nějakým tím číslem abych měl nějakou informaci kterou si

budu potom vyčítat jak vypadá výsledek tak vypadá právě takhle

vyčítám hodnoty takže si nějaký nekonečném cyklu všimněte si máme tam povinností o hodnoty jako

true a false sou přímo implementovány v jazyce takže se dají krásně použít

tak v nekonečném cyklu se já dívám

já ten kanál

a pokud ten kanál push něco zpracovává protože ten kanál běží paralelně

tak o tom král pokud něco pracoval tak status něho níže vrátí že finished a

pokud je finished tak můžu zavři

ten cyklus protože ten finished status se objeví vtom kanálu případě jsem si poslal to

že sem uzavřel tou nulou to kapacity je to cena byla zkratka pro tebe se

ty

a pokud ne

tak si píšu tu hodnotu sto kanál

a

to xml ju je bloko bylo neblokující ale tu

tomto případě to vždycky vrátí hodnotu protože se jedná o primitivní ty in takže není

s tím žádný problém

takže vidíte že to ví co vlastně všechny ty čtyři čísla které jsem se tady

které jsem si tady tom for cyklu vlastně vod nuly do té trojky

poslal

a všechny sem dostal jsem tak informaci o tom že se všechny ty kanál zavřeli

tak

další příklad trošku složitější

přesuneme se k těm rozhraním která jsem říkala že máme byly může máme dvou typu

tady vám ukazuji

právě a oba typy

a nejprve si na definuje běžné rozhraní

interfejs na z muselo bejt imax

a mladejch je z new si

tom rozhraní pouze rutinu aby byl která má nějaké parametry mají nějaké tipy

abych explicitně si ho hlídal co tam teda předávám

a má něco vracet

ta vlasta rutina podstatě interfejs nic jinýho neříká to je ta komunikace dovnitř

a potom

a vím že to modulu time

existuje ty date time

a já si ho chci právě

nějakým způsobem pozměnit tenhleten ty

a udělám to jednoduše tak

že tenhleten interfejs aplikuju

na tento ty

a teďka možnost jsou vlastně dvě možnosti buď se vytvoří bicí tak interfejs a použiju

jako

jenom jako interfejs to znamená jenom chci říct že někam budu předávat něco

co má metodu a debil

a nebo z něj udělal takzvaný konkrétní interfejs se všeta novinka

kterou tady máme čímž po změním ten původní ty

na vždycky o změním ten původní ty ale vlastně jeho koupi přesně řečeno pozmění jeho

koupi

a konci dál bude chovat podle toho co bylo nadefinované to interfejs

interfejs konkrétní

se definuje nejen vektorové definuje pomocí té na praze for to znamená interfejs ty ten

název toho existují jsou interfejsu pro a teďka nějakej ten typ kterej taky musí existovat

a pak se tam objeví celá definice toho co vlastně ten interfejs má dělat

a co to tady dělá tak je

že to přidá sama k sobě tak to přidá to co předám parametry

a vrátí to samo sebe

čím jsem se vlastně momentálně změnil dá se říct a chování té metody a debil

protože metoda a debil v případě typu date time

nevrací nic vrací nám

to znamená já jsem si to vlastně jo takže vrátí sebe

to je jediný co dělá a do cíl jsem to těm že sem se nadefinoval

vlastně interfejs

prima vlastně dá se říct shodnou uplně shodnou a deklaraci

a

potom jsem si nadefinoval co která má vlastně ten interfejs pro ten tým dělat

použití vypadá

například následovně trošku sem to tam ze složitě ale ještě abych ukázalo že máme takové

mach rovinky jako třeba nepoznala modulu který jednodušším způsobem může přímo vypisovat ten děj hlídá

za vás vlastně veškerou korektnost těch pinů a tak dále

aby si do přímo do kódu v dalo korektním kódů můžete zkontrolovat krom prohánět typově

zapsat celé je to malá

se vším všudy

takže když to přeskočit a podíváte se mašina toho co vlastně se má objevit tom

aha jedna nadpisu cože obsah máj jejíž pět a něco tak vidíte krásný přetypování na

string takže výsledek toho c právo tak bude vždycky s tady plus je tomhle případě

přetížený operátor který připojuje string k tomu předchozímu stringu

a přetypovávat si něco co vrací metoda null z modulu tá jen to vrací aktuální

čas konkrétní před pusy nedej tam x přidám k ní něco tady přidávám tři roky

a tydlecty tři roky ten celej výsledek tak úplně novej novou hodnotu vlastně

tak si přetypovaná string a nějaký vyšel přetypování na string to tady vypisuje hezkém uživatel

lidsky čitelného formátu tady se můžete podívat jak vypadá výsledek mi podle toho to mel

moduly generoval pěkného to mela

a do toho nevložil ten malej patch a teď ten

celý čas se vším všudy

nám

taková poznámka tento čas je podle erekce

a všimněte si že na desetinná místa

prováděli jsme že bude nejlepší v reprezentovat těma a začít s čísly s plovoucí desetinnou

čárkou

protože v budoucnu jak se nám rozšiřují ty hardwerove architektury dala tak to bude nejlepší

formát na reprezentaci času má prostě největší rozpětí a přesnost je dostatečná

a reprezentovat to integer bylo pro nás velice nevýhodné minimálně natřel těch empiric systémech kde

mám jenom třiceti dvou bitové instrukce s indií ženy

a

práce to že bychom potřebovali minimálně šedesát čtyři bitů na to jak práci by byla

pomalá a nevýhodná

takže proto to reprezentujeme takhle a zjistil jsem že práci s těma floating point číslama

a není zas tak pomalá takže v důsledku se nám to opravdu vyplatí

tak

todlecto nula si těch ohledně těch příkladů měl bych tady pochopitelně mnohem detailnějšího to můžeme

probrat potom diskuzi koukám že za chvíli už bych měl pomalu končit

eště vám

no takže tady mám jenom řekl teďka zhruba a něco o tom projektu samotném ten

projekt funguje zhruba od roku dva tisíce šest takže to opravdu dlouhá doba ten projekt

není nestabilní projekce pořád vyvíjí pracoval na tom šest hlavních vývojářů a sedum řekněme takových

vedlejší kteří

doplnili nějaké moduly nebo něco takže to stále poměrně malý projekt a máme tam podprojekty

které se zabývají především těmi moduly zajímavost je třeba máma module končit prostě akorát na

načtete modul a najednou vám všechno jede přes ten ta prostě tom kole se to

paměti a jede vám to rychle

grafické modulu pro přide grafiku tam máme ten například používá náš hlavní vyvolá ste ho

používá na svém jako iphony si proto programátory což si myslím že je velice zajímavé

naneštěstí nemam ukázku

nemám ani iphone

a skrýval pro ty kteří dělají web a řeknu tak to roste úplnej základ takže

máme tam nějak jednoduchej modul pro hezky velkej podporuje s téměř celé celý snad se

nebo celej standard hezký well

devadesát s úmyslem

a z ní jel

a znáte asi zase grafika celníci je právě ta zajímavost kdy díky tomuto modulu vy

můžete nečte se simonu pak si označíte nějakej is trying se chce že se že

se týká zdrojový kód v nějakém daném jazyce a z toho daného jazyka

se potom vytvoří ste sekce pomocí dat chtěl jazyka se vytvoří spustitelná část programovat a

se vloží přímo dodal a tím způsobem se dají volat externí rutiny

to celníci chci jet můžete procent plus takže je to způsobem můžete vložit přímo do

kódu dal nějakej c plus plusku jako a pomocí tohoto modulu prostě genů spoustě a

všechno se vyřeší na pozadí

za vás

a studio máme tam nějaké jednoduchý programovací prostředí pro to dal ve skutečnosti to ale

není moc potřeba spíše to jenom takový jako pro ty lidi kteří opravdu potřebují programovací

prostředí se vším všudy s divadlem a tak dále pak to máme také

a mnoho dalších modulech sem tady zmínil ta vymejšlí jenom máme tam procesy systémový máme

tam

kupu dalších prostě vopravdu jich je docela hodně několik desítek takže stanislaviny vyjmenuju

no a jenom taková zajímavost nakonec ta virtuální mašina referenční protože my víme paralelně referenční

virtuální mašinu to znamená

přímo ten program

a zároveň vidím jaký jazyk

co jsou dvě udělaný věci ideologické jazyky většinou vyvinuli jenom ten jazyk samotný a pak

se nedívali tolik ani na to implementaci a nebo naopak jsou jazyky kde se dívají

pouze na implementaci jako je asembler třeba jako takže otázka při přívětivost a ideologie a

tak dále zatím může trošku slabší

no a abys to snažíme skloubit proto paralelně vyvíjíme jak jazyk taky to virtuální mašinu

a zjišťujeme zpětně že todle špatně implementovatelný že to bude pomalý nebo nějakým způsobem se

to nehodí

tak to s tou jazyka buď vyhodíme nebo se to snažíme nějak po změny pokud

to je opravdu

byly obou pokud nějaký přínosný koncept

no a naopak

takže ta naše virtuální mašina momentálně podporuje celej ten jazyk kterej momentálně mám nějaký verzi

a na ten ta samotná binárka přímo tak má jenom devět tisíc bajtů takže devět

kilo

a knihovna dalo

to znamená bez modulů a samotná knihovna dál a nula celá devět megabajtů takže je

to opravdu maličkatý jazyk který je použitelný téměř všude je to napsané či stránce devadesát

devět

a tím pádem je to velice rychlé pro na ní třás a jak onen tak

je to minimálně dva a půl krát rychlejší při běžných operacích takže s to sem

se může docela dobrý úspěch na to že to dělá jenom pár lidí