Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Názory k článku
Ruby a unicode: co přinese chystané Ruby 1.9?

python
python (neregistrovaný)
19. 11. 2007 0:17 Nový

pozn.

celé vlákno
vaše problémy bych chtěl mít :)
LO
LO (neregistrovaný)
19. 11. 2007 0:56 Nový

špatně...

celé vlákno
Jsem jediný, komu se zdá, že držet string s informací o kódování je zbytečně složité? Nebylo by lepší pracovat interně v Unicode (kódování dle preferencí autora), a vše do něj převádět?
ja
ja (neregistrovaný)
19. 11. 2007 1:12 Nový

Re: špatně...

celé vlákno
Japonci nemaju radi Unicode a specialne UTF-8. Stringy v UTF-8/16/32 zaberaju viac pamate ako Shift-JIS & co., takze sa im ani necudujem.
Inkvizitor
Inkvizitor (neregistrovaný)
19. 11. 2007 1:28 Nový

Re: špatně...

celé vlákno
Má to ale dnes ještě reálný význam, nebo je to bezvýznamná optimalizace? Dá se u (J)Ruby aplikace předpokládat, že bude šetřit každý bajtík?
LO
LO (neregistrovaný)
19. 11. 2007 1:48 Nový

Re: špatně...

celé vlákno
Japonci nemají rádi Shift-JIS & co., protože uprostřed streamu ani nepoznáte, jestli jste na začátku znaku, nebo ne. Takže 'A' může být prosté A, nebo kus nějakého japonského znaku.

Japonci také nemají rádi UTF-16. Z důvodu výše popsaných zkušeností se jim vůbec nelíbí myšlenka rozšiřování Unicode nad 16 bitů. Ani nevím, jestli se japonské verze Windows dodávají se zapnutou podporou Surrogate Pairs.
Rejpal
Rejpal (neregistrovaný)
19. 11. 2007 6:57 Nový

Re: špatně...

celé vlákno
Třeba Japonci nechtějí v první řadě roundtripy...přinejmenším jsem je slyšel nadávat, že nejsou bezztrátové... :o)
LO
LO (neregistrovaný)
19. 11. 2007 14:05 Nový

Re: špatně...

celé vlákno
V Linuux se round tripům nelze vyhnout. Například Qt používá UTF-16, kdežto glibc používá UTF-8 a omezeně i UTF-32. Efektivně se překládá všechno pořád dokola mezi jednotlivými prezentacemi Unicode.

Japonci to ale řešit nemusí. Znaky z Shift-JIS jsou podmnožinou Unicode (viz http://www.microsoft.com/globaldev/reference/dbcs/932.mspx), a Japonci dnes používají Windows. Windows jedou komplet v UTF-16 (Win32, .NET, aplikace). Shift-JIS se používá stejně, jako u nás ANSI 1250 - tedy pro importy starých věcí, a v pár prehistorických aplikacích.
Rejpal
Rejpal (neregistrovaný)
19. 11. 2007 14:43 Nový

Re: špatně...

celé vlákno
Například Qt používá UTF-16, kdežto glibc používá UTF-8 a omezeně i UTF-32.
To ale nejsou znakové sady.
Japonci to ale řešit nemusí. Znaky z Shift-JIS jsou podmnožinou Unicode (viz http://www.microsoft.com/globaldev/reference/dbcs/932.mspx), a Japonci dnes používají Windows. Windows jedou komplet v UTF-16 (Win32, .NET, aplikace). Shift-JIS se používá stejně, jako u nás ANSI 1250 - tedy pro importy starých věcí, a v pár prehistorických aplikacích.
Děláš si srandu? "Japonci dnes používají Windows"? Víš, jaký je absolutně nejrozšířenější OS v Japonsku (co do počtu instalací) a jakou znakovou sadu a kódování používá? Ne, Windows to opravdu nejsou, a Microsoft proti tomu systému bojuje někdy od roku 1989, ale zatím se mu to nepovedlo.
LO
LO (neregistrovaný)
19. 11. 2007 15:38 Nový

Re: špatně...

celé vlákno
Já měl co do činění jen s mezinárodními firmami (byť třeba pocházejícími z Japonska), a ty jedou Windows.
Inkvizitor
Inkvizitor (neregistrovaný)
19. 11. 2007 1:15 Nový

Re: špatně...

celé vlákno
To si myslí hodně lidí. Nedávno se tady na toto téma docela obsáhle diskutovalo.
Miloslav Ponkrác aura:59
19. 11. 2007 11:02 Nový

Re: špatně...

celé vlákno
Taky si myslím, že tohle řešení je poněkud, no poněkud - zkrátka ne moc dobré. Není nad to držet to uvnitř v rozumném Unicode formátu. Tento recept Ruby - vyřešíme to 50x složitěji, než je to potřeba, je poněkud no poněkud nic moc. Ale uznávám, že fungovat to bude, ale o eleganci a efektivitě se tedy rozhodně mluvit nedá.
Rejpal
Rejpal (neregistrovaný)
19. 11. 2007 12:03 Nový

Re: špatně...

celé vlákno
"...50x složitěji, než je to potřeba..."
Jste si jist, že kdyby si mysleli, že s Unicode jako jediným interním formátem by fungovalo všechno, co potřebují, že by to neudělali?
LO
LO (neregistrovaný)
19. 11. 2007 12:53 Nový

Re: špatně...

celé vlákno
Funguje tak Win32, Qt, .NET, Java... Myslíte, že kdyby to nešlo, tak by to tak udělali?
Rejpal
Rejpal (neregistrovaný)
19. 11. 2007 13:36 Nový

Re: špatně...

celé vlákno
Ne, nefunguje. Nefungují roundtripy s kódováními, která nejsou podmnožinami Unicode. To by pochopila dokonce i bulharská striptérka.
LO
LO (neregistrovaný)
19. 11. 2007 13:59 Nový

Re: špatně...

celé vlákno
A vy znáte nějaké kódování, které popisuje znaky, jež nejsou podmnožinou Unicode? Já ne. A když takové kódování najdete, jste si opravdu jistý, že ho chcete podporovat? ;)
Rejpal
Rejpal (neregistrovaný)
19. 11. 2007 14:45 Nový

Re: špatně...

celé vlákno
Ano, znám. A ano, jeho uživatelé ho podporovat chtějí.
LO
LO (neregistrovaný)
19. 11. 2007 15:43 Nový

Re: špatně...

celé vlákno
Kde vás sebrali? Na otázku "kolik je hodin" také odpovídáte "vím"?

Jaké znáte kódování, které není podmnožinou Unicode? Prosím o lepší odpověď, než "jedno takové je". Kdo ho používá?
Rejpal
Rejpal (neregistrovaný)
19. 11. 2007 15:56 Nový

Re: špatně...

celé vlákno
Inkvizitor
Inkvizitor (neregistrovaný)
19. 11. 2007 21:57 Nový

Re: špatně...

celé vlákno
Historické ekvivalenty stávajících znaků? To snad řeší změna fontu, ne? Neměly by se do unicode narvat zvláštní kódy pro Times New Roman a Helveticu?
Makovec
Makovec (neregistrovaný)
19. 11. 2007 22:49 Nový

Re: špatně...

celé vlákno
obavam se to neni tak jednoduche... analogie: preklad Bible Kralicke do moderni cestiny take neni mozny pouhym jejim vytistenim jinym fontem...
Inkvizitor
Inkvizitor (neregistrovaný)
19. 11. 2007 23:09 Nový

Re: špatně...

celé vlákno
Překlad Bible Kralické mám doma a je vytištěný normálním fontem a obsahuje výhradně písmena české abecedy. Jestliže máš konkrétní vysvětlení, proč nelze ty znaky prostě nahradit novými a obalit je tagem <dynastieming>, budu rád. Vycházel jsem z informací, které byly napsané v té Wikipedii, na kterou odkazoval Rejpal. Tam psali, že se mimo jiné jedná o ekvivalenty dnešních znaků (stejná sémantika, jiný tvar).
Makovec
Makovec (neregistrovaný)
20. 11. 2007 7:05 Nový

Re: špatně...

celé vlákno
myslim ze ten stub ve wiki je zavadejici... ty archaicka, stara nebo alternativni verze znaku ma i posunutou semantiku.... s fonty to nejde take proto, ze u kazdeho znaku existuje jiny pocet historicky variant z jinych obdobi (nejde tedy treba udelat font pro "kazdou dynastii")...

v principu jde o rozpor toho, co znamena "psat" u nas a u nich.
LO
LO (neregistrovaný)
26. 11. 2007 17:45 Nový

Re: špatně...

celé vlákno
Jednak mi přijde problém poněkud teoretický (jaký má TRON obchodní potenciál?), a potom OpenType umožňuje pro jeden znak více alternativních reprezentací. Viz třeba zde (v latince): http://www.typophile.com/node/8122
repulsive
repulsive (neregistrovaný)
19. 11. 2007 10:41 Nový

převod sad

celé vlákno
jak tedy ruby provádí převod znakových sad, když pro ně nemá žádný "společný jazyk" - to má pro každou dvojci sad překladovou tabulku ?
xtr
xtr (neregistrovaný)
19. 11. 2007 12:23 Nový

nevim, skoly nemam

celé vlákno
To jsou problemy.. vzdy, kdyz prectu nejaky clanek o Ruby, jsem rad, ze pouzivam Python. (ne ze bych chtel rozjidet flame), muj osobni strucny nazor na vec jmenem Ruby.
LO
LO (neregistrovaný)
19. 11. 2007 12:54 Nový

Re: nevim, skoly nemam

celé vlákno
+1, C#
uživatel si přál zůstat v anonymitě
20. 11. 2007 0:57 Nový

Re: nevim, skoly nemam

celé vlákno

No to bude tym, ze z nejakeho dovodu sa tu v suvislosti s Ruby riesi uz dlho unicode (co je pre zmenu mne uplne ukradnute).

Python obcas pouzivam, zrovna nedavno som v nom pisal nieco dlhsie a oproti Ruby mi vadi/chyba (co ma zrovna momentalne napada):

  1. hlavne slabsia podpora uzaverov (closures) v pythone, je tam sice lambda keyword na pisanie lambda funkcii, ale AFAIK sa daju pisat len funkcionalne a nie deklarativne, napr. python nezozere v lambda funkcii if/while (v ruby v uzaveroch v klude, podobne aj v perl).
  2. python ma podivne pisanie tried/metod (self musi byt vzdy uvedeny explicitne, hacky typu __iter__, __str__, ohackovana podpora privatnych memberov - vyzera to ze vznikal podobne jak perl - objekty tam boli dohackovane neskor (old style classes/new style classes)
  3. v dosledku toho v pythone raz syntax vyzera ako metoda objektu, inokedy ako globalna funkcia, napr.:
    s = set()
    t = set()
    s.add(3) #"lokal"
    s = s.union(t) #"lokal"
    l = len(s) #"global", podobne str(), repr()
    
    V ruby (bez miesanie niecoho co vyzera "globalne" a "lokalne", az na trik s Kernelom pre parriadkove skripty):
    s = Set.new()
    t = Set.new()
    s.add(3)
    s.merge(t)
    l = s.length()
    
  4. python nema ternarny operator (cond) ? a : b a nevedia sa dohodnut ci bude, a ak ano, jak bude vyzerat (silny zvyk z C++, Java apod.)
  5. reflection v ruby sa mi zda lepsia

uživatel si přál zůstat v anonymitě
20. 11. 2007 1:11 Nový

Re: nevim, skoly nemam

celé vlákno
Len poznamka k tym uzaverom/lambda: hodi sa to trebars dost na visitorov (prechadzanie/manipulacia grafov, napr. syntax tree), staci par kratkych uzaverov miesto pisania kopu zbytocneho balastu okolo parriadkovych metod dedenim nejakej classy.
Rejpal
Rejpal (neregistrovaný)
20. 11. 2007 1:29 Nový

Re: nevim, skoly nemam

celé vlákno
Ač se mi v mnoha věcech líbí víc Ruby, musím se zastat i Pythonu:

2) __str__ není vlastně nic jiného, než #to_s.

4) Ale má, sice trošku podivně, ale má: a ? b : c => c if a else b

5) Jo, tak to se líbí i mým kolegům pythonistům. :-) Vůbec by bylo skvělé, kdyby třeba PyPy mohl jednou podporovat alternativní knihovnu, tu bych si _velice_ rád udělal podle sebe. ;-)

uživatel si přál zůstat v anonymitě
20. 11. 2007 11:33 Nový

Re: nevim, skoly nemam

celé vlákno
2) jasne, str(x) vola x.__str__(), mne sa proste nepacia tie stvorpodtrzitkove metody (__iter__, __str__, __class__, ...) - vyzera to, ze nechceli name clash s existujucimi metodami (neviem, hadam ;-) - akurat viem, ze vyvoj tried tam zanechal nejake stopy)

4) aha dik, vedel som len o 'cond and a or b', ktore sa neda pouzit ak a aj b su vyrazy, ktore sa vyhodnotia na False (aj ked ide q=lambda a,b,c: (a and [b] or [c])[0], ale to je skor hack, aj ked funkcny). Ale python 2.4.4 mi 'c if a else b' zozrat nechce...je to az od 2.5?
Rejpal
Rejpal (neregistrovaný)
20. 11. 2007 12:47 Nový

Re: nevim, skoly nemam

celé vlákno
Tak tak, od 2.5... Mno, mne prijde, ze jediny opravdu konzistentni objektovy system je CLOS, ale ja jsem divnej. ;-)
JS
JS (neregistrovaný)
20. 11. 2007 13:49 Nový

Re: nevim, skoly nemam

celé vlákno
Ad 1. Misto uzaveru ma Python proste funkce. Jde zkratka o dve moznosti jak implementovat tutez vec, pricemz obe moznosti maji stejnou silu. Podobne je to i s Ruby continuations vs. Python coroutines.

Ad 2. Ve skutecnosti tam byly objekty od zacatku. Akorat Python nebyl planovany jako ciste objektovy, a to ma sve vyhody (ja napriklad obvykle programuji pouze proceduralne, je to casto rychlejsi). O psani self lze vest spory, ale tezko najdete lepsi (a citelnejsi) reseni. __iter__, __str__ apod. neni hack, ale standardni konvence metod, kterym odpovida nejaka operace v syntaxi jazyka (viz tez odpoved na bod 3).

Ad 3. Muzete to chapat tak, ze len(), str() apod. jsou jen dalsi operatory (podobne +, -, <, ...). Akorat se nahodou pisou stejne jako funkce.

Ad 5. To je ponekud nekonkretni namitka (reflection muze znamenat mnoho vlastnosti jazyka). Ma Ruby metatridy nebo dekoratory?
Rejpal
Rejpal (neregistrovaný)
20. 11. 2007 17:11 Nový

Re: nevim, skoly nemam

celé vlákno

1) Funkce nejsou totéž co uzávěry, a uzávěry nejsou totéž, co anonymní funkce. A Python má všechny tři. Budiž mu to připočteno k dobru (přestože bindingy v obklopujícím bloku jsou neměnné, ale to stejně zas až tolik nevadí, a navíc, jestli to chápu správně, se to změní s příchodem klíčového slova nonlocal).

2) Procedurálně programujete tak jako tak. Neprocedurálně byste programoval v Prologu s využitím predikátové logiky nebo v SQL. Osobně nevidím problém v tom, že člověk má možnost použít jak funkci, tak i přímo implementující metodu, jelikož funguje oboje, ale spíš v tom, že to přispívá k celkovému "bordelu". Pokud jde o implicitní self, rubí model mi rozhodně nepřijde špatný, ale na pythoní se dá zvyknout celkem bez problémů. :-) To zvyknutí mi usnadňuje značná podoba Pythonu a Lispu (resp. ten CLOSový feel z toho, že příjemce zprávy je parametr funkce, byť v případě Pythonu stále ještě ptrivilegovaný).

5) Jde o to, že Ruby má (dle soudu mnoha lidí, a nejen rubistů :-)) velmi pěkně ošetřené možnosti programového vrtání se v objektech a třídách. Ne že by Python tohle postrádal, to si samozřejmě také nemůže dovolit, jen je to podivně rozházené všude možně po standardní knihovně. Tohle Ruby podědilo ze Smalltalku, který by bez toho ani nefungoval, protože už třicet let mění za chodu sám sebe, aniž by kdy byl jakožto 24/7 program ukončen. :-))) Já to vidím tak, že Ruby reflexi v podstatě bezpracně zdědilo ze Smalltalku již vyřešenou a tak působí mírně konzistentnějším dojmem - však se podívejte sám do dokumentace, třeba na instanční a třídní metody třídy Class. Otázku na metatřídy si jistě zodpovíte sám, když Vám položím protiotázku: Objektový programovací jazyk, jehož třídy mají prvotřídní status, metatřídy mít může nebo musí?

Zasílat nově přidané příspěvky e-mailem