Hlavní navigace

Ruby a unicode: co přinese chystané Ruby 1.9?

Jakub Šťastný 19. 11. 2007

V posledním díle miniseriálku o unicode v Ruby vezmeme do rukou křišťálovou kouli a nahlédneme do budoucnosti jazyka – podíváme se na podporu unicode v chystaném Ruby 1.9 a pro zajímavost si také řekneme pár slov o podpoře unicode v alternativních implementacích Ruby.

Unicode teprve teď?!

Podpora unicode je slibována do příští stabilní major verze, která bude díky změně číslování označována jako Ruby 1.9. Věřím, že mnozí z vás si pokládají otázku, proč trvalo tak dlouho rozhoupat se k dodání tak důležité technologie do jazyka. Odpověď je prostá – Matz, otec Ruby, stejně jako velká řada dalších programátorů ovlivňující budoucnost Ruby, nejsou nakloněni konverzi různých druhů kódování do unicode, zejména mělo-li by se potom zase konvertovat zpět do výchozího kódování. Hledala se šetrnější alternativa a nakonec bylo rozhodnuto, že řetězec ponese automaticky údaj o svém kódování a žádné konvertování z a do unicode se konat nebude. Defaultní kódování bude zřejmě UTF-8, samozřejmě nebude žádný problém jej změnit například na kódování CP-1250 nebo ISO-8859–2, Ruby si s tím už poradí. Řetězec bude sledem znaků, ať použijete jakékoliv kódování.

"hola hej"[0]
=> h # místo 104

Tato změna se logicky dotkne metod zpracovávajících vstup, takže napříkad při otevírání souboru půjde určit, v jakém kódování očekáváme jeho obsah. Změny lze očekávat také v některých metodách řetězce, jako například v metodě [], která bude logicky vracet znak místo ASCII hodnoty znaku.

Určení kódování

Aby bylo jasné, v jakém kódování skript je, bude nově třeba přidat do skriptu komentář nesoucí informaci o jeho kódování:

#!/usr/bin/env ruby
# coding=utf-8

Je důležité, aby byl tento komentář na prvním nebo druhém řádku skriptu, jinak nebude fungovat. V unixových systémech je logické jeho umístění hned za informaci o použitém interpretu, kterou systém očekává na prvním řádku

A jak to vypadá v praxi?

Zkoušel jsem zkompilovat snapshot vývojové verze Ruby, výsledky jsou poměrně pozitivní:

#!/usr/bin/env ruby
# coding=utf-8

puts("čeština".length)
puts("čeština".reverse)
"čeština".each_char { |char| print("#{char} ") }

=> 7
=> anitšeč
=> č e š t i n a

Jak je vidno z ukázky, již skutečně platí, že řetězec je sousledností znaků, takže spoustu dříve nefunkčních metod třídy String již funguje bez potíží. Do Ruby byla též vrácena metoda each_char, kterou lze používat k procházení jednotlivých znaků řetězce. Bohužel, metody upcase, downcase, capitalize a swapcase mi v době psaní článku stále nefungovaly, snad se dočkáme později.

JRuby

MRI není jediná implementace Ruby. Nejpokročilejší z alternativních implementací Ruby je dozajista JRuby, implementace Ruby v Javě, nad níž drží ochrannou ruku i velký Sun. Ta od verze 1.0 unicode podporuje. Protože JRuby běží pod JVM, je logické, že implementace unicode je dělána pomocí javovských řetězců kódovaných do UTF-16. JRuby umožňuje jak použití řetězců reprezentovaných jako sekvence bytů, stejně jako je tomu v současné implementaci Ruby, tak právě použití javovských unicode řetězců.

IronRuby

IronRuby je jedna ze dvou implementací Ruby pro platformu .NET. Je ve fázi intenzivního vývoje, unicode v něm každopádně podporováno bude – pomocí CLR stringů, které jsou unicodové. Jak bude řešena kompatibilita s chystaným Ruby 1.9.1, je zatím otázka.

Závěr, aneb co z toho a kdy to přijde?

Zdá se, že ohledně unicode se konečně začíná blýskat na lepší časy. Řešení, které je ohleduplné k těm, kteří nepoužívají UTF-8, mi připadá jako rozumná volba a v japonském prostředí, kde penetrace UTF-8 je stále poněkud problematická, se jeví logicky. Co se týče termínů vydání nového Ruby 1.9.1, Matz prohlašuje, že se můžeme těšit na letošní Vánoce. Sláva!

Odkazy

Našli jste v článku chybu?

26. 11. 2007 17:45

LO (neregistrovaný)
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

20. 11. 2007 17:11

Rejpal (neregistrovaný)

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 ja…

120na80.cz: Rakovina oka. Jak ji poznáte?

Rakovina oka. Jak ji poznáte?

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

Vitalia.cz: Jak vybrat ořechy do cukroví a kde mají levné

Jak vybrat ořechy do cukroví a kde mají levné

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Vitalia.cz: Znáte „černý detox“? Ani to nezkoušejte

Znáte „černý detox“? Ani to nezkoušejte

Lupa.cz: Google měl výpadek, nejel Gmail ani YouTube

Google měl výpadek, nejel Gmail ani YouTube

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy

Podnikatel.cz: Na poslední chvíli šokuje výjimkami v EET

Na poslední chvíli šokuje výjimkami v EET

Vitalia.cz: Baletky propagují zdravotní superpostel

Baletky propagují zdravotní superpostel

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Podnikatel.cz: Babiš: E-shopy z EET možná vyjmeme

Babiš: E-shopy z EET možná vyjmeme

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...