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í