Portál AbcLinuxu, 23. říjen 2017 03:59

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Vložit další komentář
16.6.2011 07:28 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Odpovědět | Sbalit | Link | Blokovat | Admin
Hm, tenhle přístup k polymorfizmu je zjevně odvozený z ady ;) Zajímalo by mě jestli můžu v Go odvodit nový typ např. z int? A jestli Go umí double dispatch?

Jinak ty příklady nejsou moc výchovné protože ukazují dědění implementace, což je většinou nežádoucí.
In Ada the typical infinite loop would normally be terminated by detonation.
16.6.2011 09:28 mich | skóre: 16
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Typ z int odvodit lze (a pak k němu lze i přidávat metody). Go neumí přetížení funkcí.
je to teď v módě, na žive o tom furt píšou
16.6.2011 09:25 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Odpovědět | Sbalit | Link | Blokovat | Admin
Mně to z těch příkladů připadá spíš jako kompozice než jako dědičnost. Ale nečetl jsem specifikaci.
Ještě na tom nejsem tak špatně, abych četl Viewegha.
alblaho avatar 16.6.2011 12:06 alblaho | skóre: 17 | blog: alblog
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Odpovědět | Sbalit | Link | Blokovat | Admin
Na první pohled se mi to nějak přestává líbit. Mám pocit, že vazby jsou příliš volné a nedrží to po hromadě.

Nějak jsem si oblíbil tu neskutečnou primitivnost Javy. Programování třeba v Pythonu je větší zábava, ale když má člověk udržovat kód, kde si původní autor hrál s metaprogramováním/dekorátory jiným způsobem, než je ten můj oblíbený, tak je to spíš detektivka.

Zas ale pošilhávám po Scale... :-)
16.6.2011 12:56 dopisovatel | blog: zpravicky
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Jedině Ruby
16.6.2011 14:50 Ondřej Surý | skóre: 14
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
To je ten jazyk, který programátoři používají tak, že mění API v knihovnách i mezi minor releases a nepřipadá jim to divné? :)
Nehledejte zlý úmysl tam, kde je dostatečným vysvětlením hloupost.
16.6.2011 15:25 dopisovatel | blog: zpravicky
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Chceš snad tvrdit, že Ruby nemá výborný sraz příznivců v Brně?

http://www.abclinuxu.cz/zpravicky/sraz-priznivcu-ruby-v-brne
16.6.2011 21:34 Ondřej Surý | skóre: 14
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Chci tvrdit, že medvídek kaola jede na dovolenou k mývalovi. (Toto tvrzení je relevantní asi tak stejně to první k tomu Vašemu :).
Nehledejte zlý úmysl tam, kde je dostatečným vysvětlením hloupost.
16.6.2011 21:57 Ondřej Surý | skóre: 14
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Ale trochu na vážnou notu... přebral jsem balíkování rails pro Debian a z ruby-rchardet embedované v ruby-tmail embedované v ruby-actionpack mi fakt jde hlava kolem...
Nehledejte zlý úmysl tam, kde je dostatečným vysvětlením hloupost.
q66 avatar 16.6.2011 15:32 q66 | skóre: 32 | blog: Q's CZ devblog
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Odpovědět | Sbalit | Link | Blokovat | Admin
článek hezký, ale Go se mi vůbec nelíbí..
http://q66.moe
16.6.2011 19:47 dopisovatel | blog: zpravicky
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Moje řeč... Výborná věc je Ruby.
alblaho avatar 16.6.2011 20:16 alblaho | skóre: 17 | blog: alblog
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Jenže Ruby je úplně jiný typ nástroje. Dynamické typování, interpretovaný kód... Go je statické a bude výkonově někde jinde, hlavně se snaží cílit na paralelní zpracování dat.

Já mám Ruby rád, ale není to nástroj na všechno.
Luboš Doležel (Doli) avatar 16.6.2011 22:09 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Ruby jsem hlavně strašně pomalé.
16.6.2011 23:03 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Což pod komentářem Ruby je úplně jiný typ nástroje … Go je statické a bude výkonově někde jinde dává obrovský smysl.
Ještě na tom nejsem tak špatně, abych četl Viewegha.
Luboš Doležel (Doli) avatar 16.6.2011 23:07 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Ale ono je strašně pomalé na cokoliv. Nedovedu si představit, k čemu bych to kdy použil.
17.6.2011 09:35 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Na normální skriptování je rychlé až až (u každého shellového skriptu, který má nad deset řádek, přemýšlím, že ho přepíšu do Ruby). A zdá se, že ta spousta webů v RoR taky nějak funguje, nebo ne? (Ha, už vidím argumentaci Twitterem! :-) )

Mimochodem, mezi Ruby 1.8 a 1.9 je obrovský výkonnostní rozdíl.
Ještě na tom nejsem tak špatně, abych četl Viewegha.
17.6.2011 13:34 dopisovatel | blog: zpravicky
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
A taky právě v Ruby byla napsána některá skvělá vylepšení pro některé distribuce. Pokud existuje Ruby, může jít všechno ostatní do háje.
Luboš Doležel (Doli) avatar 16.6.2011 23:12 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
(Uznávám, že jsem ten komentář nade mnou špatně přečetl)
16.6.2011 22:42 x.
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Odpovědět | Sbalit | Link | Blokovat | Admin
Zlatej Python. Tam mrknu na kod a rychle vim, co dela, k cemu slouzi. I u toho C/C++ to clovek vetsinou odhali, ale Go?? Typicka ukazka jazyka, jak nema vypadat. To neni jazyk pro lidi, ale roboty. Nebo je to programatorem-autorem, protoze zvolil nevhodne priklady?
17.6.2011 00:18 Sten
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Go používá hodně odlišný způsob myšlení. Taky se mi nelíbí, ale nezavrhoval bych jej, určitě si svoje příznivce najde (když to zvládlo Ruby :-D). Na druhou stranu to, co mi opravdu mezi jazyky chybí, je staticky typovaný jazyk (kvůli rychlosti běhu a compile-time kontrole chyb v práci s objekty) stylem podobný Pythonu (velmi jednoduchá syntaxe), ale schopnostmi blízký C++ (třeba generické programování — šablony, možnost low-level programování, logičtější přetěžování operátorů nebo vícenásobná dědičnost — Python nepotřebuje, když má duck-typing). Ano, vím, že existuje Boo, ale to je jenom pro .NET a navíc má hodně omezené schopnosti. Až budu mít čas, zkusím napsat nějaký překladač takového jazyka do C.
alblaho avatar 17.6.2011 10:42 alblaho | skóre: 17 | blog: alblog
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Scala? Má dost z toho, co chceš, ale zase to asi není z nejjednodušších jazyků.
17.6.2011 17:02 Sten
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Hmm, to vypadá hodně dobře
________________ avatar 18.6.2011 03:14 ________________ | skóre: 5 | blog: _
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Scala teda rozhodne neni minimalistický jazayk (oproti ostatným ML jazykom je najukecanejšia).
alblaho avatar 18.6.2011 13:25 alblaho | skóre: 17 | blog: alblog
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Přijde mi, že jazyk se statickým typováním vždycky bude ukecaný. Protože programátor ty typy musí nějak specifikovat. Typová inference pomůže, ale až po té specifikaci. Naproti tomu v Pythonu, Ruby je vlastně jen jeden "typ" a běhová pravidla.
________________ avatar 19.6.2011 14:08 ________________ | skóre: 5 | blog: _
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
aj staticky typovaný jazyk môže byt úsporný pre porovnanie:

statická scala:
def add(a:Int, b:Int) = a + b

dynamický python:
def add(a, b): return a + b
dynamický scheme:
(define (add a b) (+ a b))
statický F#:
let add a b = a + b
na scale mi vadí hlavne ten balast zbytočné zátvorky a aj zložené zátvorky označujúce začiatok a koniec bloku, ktoré len zneprehľadňujú kód, tektiež type inference v scale nefunguje najoptimálnejšie pretože u argumentov funkcií musím tak či tak zadávať názvy typov, pritom by si ich mohol prekladač automaticky odvodiť.
ava avatar 19.6.2011 17:14 ava | skóre: 10
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Ty závorky mi ve scale přijdou docela užitečné, nechtěl bych místo
(1 to 100).map{i => i * i}.filter{i => (i % 2) == 0} psát třeba
(1 to 100)
  .map
    i => i * i
  .filter
    i => (i % 2) == 0
nebo jak si to vlastně představuješ?

U argumentů funkcí typy dovodit nejdou, protože při překladu dané funkce nevíš, ze kterých všech modulů bude zavolaná. Nebrání to ovšem dělat generické funkce
scala> def joinStrings[T](x: T, y: T) = {x.toString + y.toString}
joinStrings: [T](x: T, y: T)java.lang.String

a tady už inference typů argumentů funguje, místo

scala> joinStrings[Int](1, 2)

klidně stačí napsat

scala> joinStrings(1, 2)
res0: java.lang.String = 12
Jinak jo, staticky typovaný jazyk může působit úsporně :)
Press any key to continue, or any other key to cancel
19.6.2011 18:25 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Scala používá lokální typovou inferenci, proto je potřeba deklarovat typy argumentů. Osobně bych šel ještě dál a vynutil deklaraci i návratového typu, ale ten už Scala odvozuje. Jazyky, které používají plnohodnotnou typovou inferenci (Hindley-Milner a spol.) umí odvodit i typy argumentů.
Ještě na tom nejsem tak špatně, abych četl Viewegha.
ava avatar 19.6.2011 22:25 ava | skóre: 10
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Asi beru tento svůj příspěvek zpět, co se týče typových systémů, jsem začátečník a tady spíše matu než osvětluji. Jak píše ládíček, je možné provádět i inferenci typů argumentů (s tím, že co je vlastně "plnohodnotná" typová inference je podle mě subjektivní, dle wikipedie např. "As of 2008, GHC, a Haskell compiler, goes beyond HM, and now uses System F extended with non-syntactic type equality, for example." - ale to už bych slovíčkařil).

Příklad s generickou funkcí joinStrings, který jsem uvedl, neukazuje na inferenci typů argumentů (lepší by bylo říci parametrů) podle těla funkce.

Pokud jsem někomu zamotal hlavu, omlouvám se :)
Press any key to continue, or any other key to cancel
________________ avatar 20.6.2011 22:49 ________________ | skóre: 5 | blog: _
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
>>Jak píše ládíček, je možné provádět i inferenci typů argumentů

ja to aj v praxi používam takže viem že to funguje, aj v mojom predchádzajúcom poste bola ukážka:
let add a b = a + b
ak funkcii add priradím 2 parametre rovnakého typu tak si z nich prekladač automaticky odvodí typy argumentov...

ak ale jednému argumentu priradím trebárs string a druhému trebárs integer tak prekladač vyhodí chybu. rovnako prekladač vyhodí chybu aj ked 2x zavolám funkciu v vždy s iným typom argumentov.
alblaho avatar 19.6.2011 21:38 alblaho | skóre: 17 | blog: alblog
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
To jsem nemyslel. Jasně že Scala umí být úsporná, vždyť se tím chvástají. Ale stejně tam musí být kód, který ty typy specifikuje. Díky typové inferenci to sice nemusíš opisovat všude, ale někde tam ten kód je.
20.6.2011 07:06 Ondra
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
jazyk se statickým typováním vždycky bude ukecaný
rekl clovek, ktery v zivote neslysel o Haskellu...
alblaho avatar 7.7.2011 08:34 alblaho | skóre: 17 | blog: alblog
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Náhodou, o Haskellu jsem přečetl celou knihu:-).

Haskell i Scala mohou být velmi úsporné, protože ta syntaxe je mocná a navíc je tam typová inference.

Ale zároveň to bude i "ukecané", protože nezanedbatelnou část programu bude tvořit specifikace typů. Srovnej třeba s Pythonem, kde je typ vlastně jen jeden ("slovník") a člověk to prostě jen používá.

To je můj dojem z typického používání, i v tom Pythonu je možné mít "typové" vifikundace řešící třeba AOP, DbC atd.
Bystroushaak avatar 17.6.2011 16:10 Bystroushaak | skóre: 32 | blog: Bystroushaakův blog | Praha
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
D, ale syntax je podobná C/Javě, z pythonu si to bere jen schopnosti.
17.6.2011 16:51 Sten
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
D znám, ale mám k němu docela dost výhrad:
  • chybí alespoň virtuální vícenásobná dědičnost, docela běžně to používám u výjimek, hlavně u těch vyhazovaných mixiny: ENetworkFileRead (chyba sítě při čtení souboru) dědí z EFileRead (obsahuje např. URL souboru) i ENetwork (obsahuje např. IP adresu)
  • přetěžování operátorů má dost divnou syntaxi a nedovoluje použití ternární (SQL) aritmetriky, třeba a != b je automaticky !(a == b) a nelze to změnit (a přitom třeba i pro podporovaný double tohle u NaN neplatí)
  • chybí podpora pro dynamicky načítané knihovny (alespoň aby fungovalo RTTI, když už nefunguje garbage collector)
  • nepochopil jsem, jak jde udělat částečná inicializace šablon (jestli to jde; ve features je napsané, že to umí, v dokumentaci to ale vůbec není)
  • zápis šablon mi přišel poněkud zmatený, protože se velmi podobný zápis používá pro imperativní i generické programování (ale pro někoho to může být výhoda)
18.6.2011 22:19 vladaf
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Vícenásobná dědičnost je právě vlastnost, které se v moderních jazycích snaží vyhýbat po otřesné zkušenosti z C++. Třeba autoři Fortranu 2003 to říkají zcela explicitně a u D to nejspíš nebude jiné, protože je to takové C++ done right.
19.6.2011 08:13 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
protože je to takové C++ done right.

To mi připomíná Linusovu hlášku o tom, že SVN je "CVS done right" ...
In Ada the typical infinite loop would normally be terminated by detonation.
q66 avatar 19.6.2011 10:23 q66 | skóre: 32 | blog: Q's CZ devblog
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
ale však ono je :) A D opravdu je "C++ done right"
alblaho avatar 19.6.2011 13:52 alblaho | skóre: 17 | blog: alblog
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Btw, "CVS dnone right" není Linusova hláška, ale přímo moto Subversion. A je to dost přesné, SVN je oproti CVS poklad, ale v porovnání s Gitem neobstojí. Proto se tomu Linus posmíval.

Vícenásobná dědičnost v C++ je fakt zlo :-).
q66 avatar 19.6.2011 16:08 q66 | skóre: 32 | blog: Q's CZ devblog
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
jojo, Git je prostě nejlepší :-)
19.6.2011 18:55 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Btw, "CVS dnone right" není Linusova hláška, ale přímo moto Subversion. A je to dost přesné, SVN je oproti CVS poklad, ale v porovnání s Gitem neobstojí. Proto se tomu Linus posmíval.
"Posmíval" není asi to pravé. Ta citace zní: if you start with that kind of slogan, there's nowhere you can go. There is no way to do CVS right. Což je přesně jak já to vidím s C++, není jak ho "udělat dobře", špatné jsou už ty koncepty za tím. Nejlepší je se na to kompletně vykašlat a udělat to celé jinak, nejlépe přesně naopak. (Analogicky k Take CVS as an example of what not to do; if in doubt, make the exact opposite decision.)
In Ada the typical infinite loop would normally be terminated by detonation.
q66 avatar 19.6.2011 20:23 q66 | skóre: 32 | blog: Q's CZ devblog
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
No, zrovna to D je perfektní jazyk, koncepčně dost dobře vymyšlený, bere určitý koncepce z Javy, určitý z Cčka a C++ a přidává své vlastní a výsledek je dobrý; zato C++ je občas designovaný dost hrozně a jediný způsob, jakým ho využívám je "Cčko s objekty"
20.6.2011 16:18 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
zrovna to D je perfektní jazyk
Za prvé nic takového neexistuje - existují jen jazyky které jsou nepoužitelné, a méně nepoužitelné... a za druhé, který případ nastal z těchto dvou se uvidí až tak za 10 let, jak u Go, tak u D. (U C++ už se vidí :P )
In Ada the typical infinite loop would normally be terminated by detonation.
q66 avatar 20.6.2011 18:00 q66 | skóre: 32 | blog: Q's CZ devblog
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
pojmem "perfektní jazyk" myslím dobře navržený jazyk s dobrou použitelností
19.6.2011 22:21 extremni lama | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Což je přesně jak já to vidím s C++, není jak ho "udělat dobře", špatné jsou už ty koncepty za tím.
to ze necemu nerozumis neznamena ze je to spatne ;-)
The enemy of my enemy is still my enemy.
q66 avatar 19.6.2011 23:06 q66 | skóre: 32 | blog: Q's CZ devblog
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Ale ono to špatně je. :-)
20.6.2011 07:30 extremni lama | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
nerad bych se opakoval :)
The enemy of my enemy is still my enemy.
q66 avatar 20.6.2011 13:58 q66 | skóre: 32 | blog: Q's CZ devblog
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
jojo, C++ fanboys to nikdy neuznají :-D
20.6.2011 15:21 extremni lama | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
nene, ale C++ haters to nikdy neuznaji :-D
The enemy of my enemy is still my enemy.
q66 avatar 20.6.2011 15:48 q66 | skóre: 32 | blog: Q's CZ devblog
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
já nejsem hater, C++ používám :-D Jen nepoužívám stdlib, exceptions, multiple inheritance :-)
20.6.2011 16:16 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
to ze necemu nerozumis neznamena ze je to spatne

To samozřejmě ne, ale oba jevy najednou nastat můžou. A to je právě případ C++.
In Ada the typical infinite loop would normally be terminated by detonation.
19.6.2011 16:18 Sten
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Zajímavý, že třeba v té Scale vícenásobná dědičnost je a bez těch problémů (pomocí mixinů), co má C++. Takže D to má spíše stylem „nevíme, jak to rozumně udělat, tak to prohlásíme za vlastnost, která není potřeba/je špatná/se nedá implementovat/...“
19.6.2011 16:33 Jablíčko
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Přijde mi, že asi hledáš právě Go :-) (až na ty generiky). Dokonce bych řekl, že Go duck-typing povyšuje na další úroveň (je to teda ještě pořád o trochu nižší level než mají některý funkcionální jazyky, viz například typový třídy v Haskellu).
Freeman avatar 17.6.2011 08:38 Freeman | blog: freeemans
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Odpovědět | Sbalit | Link | Blokovat | Admin
Já se také přikláním k Pythonu, nicméně mě na Goo těší, že tam nejsou středníky a dolary :-)
________________ avatar 18.6.2011 03:21 ________________ | skóre: 5 | blog: _
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Odpovědět | Sbalit | Link | Blokovat | Admin

mám jednu otázku na autora článku:

panic("<img alt=":-(" class="emo" src="/images/smile/smutek.gif" />")

ako prekladač jazyka zistí kde končí reťazec keď aj vo vnúti reťazca sa používa znak ukončenia reťazca bez escapovania?

Luboš Doležel (Doli) avatar 18.6.2011 13:23 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Google Go v příkladech 2.
Dal jsem do kódu jiného smajlíka. Je zjevné, že engine Ábíčka nahrazuje sekvenci ":-(" obrázkem...

Založit nové vláknoNahoru

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

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.