Portál AbcLinuxu, 24. říjen 2017 06:32

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ář
alblaho avatar 10.1.2012 11:08 alblaho | skóre: 17 | blog: alblog
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Odpovědět | Sbalit | Link | Blokovat | Admin
atributy (in, out, ref, lazy, const, immutable, scope) se mi moc nelíbí. Na první pohled mi to přijde moc nabubřelé, složité. Uvidím dál.
q66 avatar 10.1.2012 12:14 q66 | skóre: 32 | blog: Q's CZ devblog
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
mohou se zdát nabubřelé na začátku, ale později se ukážou dost užitečnými :) Vše se lépe vysvětlí v průběhu dalších dílů.
10.1.2012 16:01 mikro
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Odpovědět | Sbalit | Link | Blokovat | Admin
"Spousta lidí si plete v jazyce C pointery a pole. Jsou to ale dosti odlišné věci." -- no ja by som skor povedal, ze zakladnym problemom ludi, co pridu k C od nejakeho uber-cool jazyka je to, ze nechapu, ze to tie iste veci su.
q66 avatar 10.1.2012 16:09 q66 | skóre: 32 | blog: Q's CZ devblog
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
C byl můj v podstatě první jazyk (po Pythonu) a ty samé věci to nejsou; pointer může možná tak ukazovat na první element pole, ale pole je jen soubor po sobě jdoucích hodnot. Tudíž pointer je pouze možnost, jak k poli přistupovat (resp. k jeho jednotlivým elementům, pomocí dereference a offsetu)
oryctolagus avatar 10.1.2012 21:45 oryctolagus | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Technicky (pod kapotou) to to samé v podstatě opravdu je. Pole je taky pointer na první prvek. Jediný rozdíl je v tom, že u (statického) pole kompilátor zná jeho velikost a může s ní nakládat (statická inicializace, sizeof(),...).

Jinak ale práce s polem je opravdu jen pointerová aritmetika.

Tenhle kus kódu by to mohl snad objasnit, je to alternativní zápis přístupu k prvku pole:
#include <iostream>
using namespace std;
int main()
{
  int a[3] = {1, 2, 3};
  cout << 2[a] << endl;
  return 0;
}
Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
q66 avatar 10.1.2012 22:21 q66 | skóre: 32 | blog: Q's CZ devblog
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce

Záleží na tom, co si představíš pod pojmem pole; v mém případě je to ten soubor hodnot; v tvém případě je to de facto syntaktický prvek jazyka C (resp. interface k pointerový aritmetice na vyšší úrovni). O tom tvém alternativním zápisu vím, ale nepoužívám jej.

10.1.2012 23:52 paskma | skóre: 13 | blog: Paskmův blog
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Lidi jako ty v tom dělají nepořádek a matou začátečníkům hlavy.

Pole je opravdu řada prvků poskládaných za sebou. Pro většinu operací v C se ale toto pole konvertuje na ukazatel na první prvek a takto se s ním pracuje.*

Myslím, že Virius (nebo Herout?) to ve své knížce psal takto: Pole je automobil. Ukazatel na první prvek je volant. Auto se řídí volantem, ale tvrdit, že volant a auto jedno jsou, je nesmysl.

*Proto funguje tvůj zápis, protože *(a+2) a *(2+a) je to samé. Ale výjimku tvoří tebou zmíněný sizeof.
10.1.2012 16:35 Sten
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Záleží, jestli se bavíte o teorii, resp. vysokoúrovňových jazycích (tam to jsou dvě různé věci) nebo o praxi, resp. nízkoúrovňových jazycích (tam je to totéž).
10.1.2012 20:12 mnn | skóre: 1
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Odpovědět | Sbalit | Link | Blokovat | Admin
Nejako sa mi nepozdáva popis atribútu ref:
ref funguje podobně, ale nedojde ke změně hodnoty venku, pokud se explicitně nezmění vevnitř
A za tým je potom:
reference jsou většinou implementované pomocí pointerů, ale jako pointery se nechovají, protože není možné změnit hodnotu, na kterou ukazují
čo sa celkom vylučuje. :-)
q66 avatar 10.1.2012 20:31 q66 | skóre: 32 | blog: Q's CZ devblog
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce

No, je to myšleno tak, že posílání po referenci je v podstatě posílání aliasu; pokud se nezmění hodnota argumentu uvnitř funkce, tak se venku nic neděje; pokud ano, tak se projeví změna i venku.

Tudíž zápis:

void foo(ref int bah) { bah = 10; }; int x = 5; foo(x);

vyústí v to, že x bude pak 10, ale kdyby foo bylo

void foo(ref int bah) {}

tak se nic neděje, hodnota zůstává 5. Tak to není v případě "out" atributu, který by v prvním případě fungoval stejně, ale v druhém případě by po zavolání foo bylo x 0. Zápis:

void foo(ref int bah) { bah = 10; }; int x = 5; foo(x);

je ekvivalentní s

void foo(int* bah) { *bah = 10; }; int x = 5; foo(&x);

Reference jsou proto implementovány většinou pomocí pointerů, ale sémanticky se chovají jako aliasy.

11.1.2012 17:03 extremni lama | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
reference jsou většinou implementované pomocí pointerů, ale jako pointery se nechovají, protože není možné změnit hodnotu, na kterou ukazují
myslim ze touhle vetou chtel rict ze neni mozne zmenit referenci tak aby ukazovala na novou adresu. Ale je pravda ze ta veta to nerika :-)
The enemy of my enemy is still my enemy.
q66 avatar 11.1.2012 17:40 q66 | skóre: 32 | blog: Q's CZ devblog
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
ano, myslel jsem reseating.
14.1.2012 10:35 Program
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
V tom případě bych poprosil, jestli by to nešlo přepsat. Ta věta budí pocit, že nemůžu pomocí reference změnit hodnotu proměnné na kterou reference odkazuje.
q66 avatar 14.1.2012 12:28 q66 | skóre: 32 | blog: Q's CZ devblog
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Dobrá. Nechám to co nejdřív změnit.
10.1.2012 21:54 Martin
Rozbalit Rozbalit vše Re: Programování v jazyce D:
Odpovědět | Sbalit | Link | Blokovat | Admin
Cčkaři vědí, že hodnoty různých typů se automaticky neinicializují a je třeba explicitně specifikovat hodnotu. Toto neplatí v případě D. Všechny integrální typy jsou implicitně 0.
To je z poloviny pravda.

Hodnoty nejsou inicializované, jedná-li se o lokální proměnou, čili proměnnou alokovanou na zásobníku, kdy hodnota je náhodná (viz vývojáři Debianu a generování certifikátů).

Jde-li o globální, či statickou proměnnou, je inicializována na binární 0 (není-li hráno s přepínači překladače, apod.).

Martin
q66 avatar 10.1.2012 22:19 q66 | skóre: 32 | blog: Q's CZ devblog
Rozbalit Rozbalit vše Re: Programování v jazyce D:

Globální proměnné jsou trochu jiná kapitola, a já se nechtěl rozepisovat; nepíšu seriál o jazyce C :)

10.1.2012 22:51 Radovan Garabík
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Odpovědět | Sbalit | Link | Blokovat | Admin
Typ char je jedna UTF-8 jednotka
Nie je mi to jasné. Vôbec mi to nie je jasné.
q66 avatar 10.1.2012 22:56 q66 | skóre: 32 | blog: Q's CZ devblog
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
http://unicode.org/glossary/ viz. "Code Unit" To přesně reprezentuje typ char (pro UTF-8). wchar a dchar dále reprezentují code units pro UTF-16 a UTF-32.
Bystroushaak avatar 11.1.2012 01:36 Bystroushaak | skóre: 32 | blog: Bystroushaakův blog | Praha
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Tohle je dost dobře vysvětlené v knize The D programming language, kde je to i s příběhem kterak bylo UTF vymyšleno :)

Jde o to, že znaky s diakritikou, jenž mají vyšší kód znaku než 127 (nikoliv 255, protože 1b se používá k signalizaci UTF-8 znaků s větší hodnotou, ten 1b říká že následující znak je součástí aktuálního) jsou zapsány jako vícero znaků typu char.

Jeden znak, například 'č' tak zabere dva bajty - 0xc4 0x8d, tedy dvě jednotky UTF-8. Pokud použiješ UTF-16 (wchar), jedna jednotka představuje 16b, takže se ti do jedné jednotky vejde jeden český znak. To je rozdíl oproti UTF-8, kde se ti jeden znak vejde buď do jedné (klasický ASCII), dvou (čeština), nebo čtyř jednotek (hieroglyfy a mimozemská písma) typu char.

Tohle je dobré vědět, protože když pak jednoho dne v programu použiješ UTF-8 string (char[]), může se ti stát, že při nízkoúrovňových operacích nebudeš tušit wtf.
pavlix avatar 11.1.2012 01:45 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Jde o to, že znaky s diakritikou, jenž mají vyšší kód znaku než 127 (nikoliv 255, protože 1b se používá k signalizaci UTF-8 znaků s větší hodnotou, ten 1b říká že následující znak je součástí aktuálního) jsou zapsány jako vícero znaků typu char.

Snažíš se zmást nepřítele termilologií z ASCII? V popisu UTF-8 nemůžeš používat slovo znak jako synonymum bajtu, když jeho základní vlastností je, že znak nemá vždy stejný počet bajtů.

Bystroushaak avatar 11.1.2012 01:47 Bystroushaak | skóre: 32 | blog: Bystroushaakův blog | Praha
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
oryctolagus avatar 11.1.2012 02:15 oryctolagus | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Pokud použiješ UTF-16 (wchar), jedna jednotka představuje 16b, takže se ti do jedné jednotky vejde jeden český znak.
Český znak sice jo (vlastně jakejkoli ne-obskurní ;-)), ale jinak obecně utf-16 není fixed-width...
Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
Bystroushaak avatar 11.1.2012 02:30 Bystroushaak | skóre: 32 | blog: Bystroushaakův blog | Praha
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Hm. To jsem zapomněl zmínit - UTF-16 je na tom podobně jako UTF-8, pokud si chce být člověk fakt jistý, měl by použít UTF-32 (dchar). Na druhou stranu, UTF-16 by měl na většinu stačit.

TODO: Nevysvětlovat nic ke konci bdělého cyklu.
pavlix avatar 11.1.2012 09:19 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Proto považuju UTF-16 za tu nejhorší možnost. Zatímco s UTF-8 se na chyby přijde už při běžných evropských jazycích, s UTF-16 to vydrží až do hodně obskurní části Unicode. Integer/UTF-32 pro znaky, výjimečně krátké řetězce, UTF-8 pro řetězce, UTF-16 nebrat, právě kvůli těžko odhalitelným chybám.

UTF-16 je v tomhle něco jako automatická konverze kódování v Pythonu 2 (naštěstí v Pythonu 3 opraveno). Způsobí chyby, které programátor ani vzdáleně neočekával.
12.1.2012 03:00 __dark__
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Na druhou stranu je UTF-16 z hlediska pameti nejlepsi volba, a z hlediska spoluprace s OS asi taky (Windows/Mac). Moc nechapu ten boj za fixed width, kdyz ani UTF-32 nemusi byt fixed width z pohledu vykresleneho znaku - Viz unicode annex 15, treba zminena sekvence 0x0071 0x0323 0x0307 je jeden znak, a je jedno, jestli se to napise v UTF-16 nebo UTF-32 (sezere vic pameti). Prace s textem je obecne velmi komplikovany proces a rozdil mezi zpracovanim UTF-16 nebo UTF-32 kodovani je zanedbatelny, hlavne dnes, kdy si clovek muze udelat iterator.

A to ani nemluvim a dalsich jazycich - arabstina (RTL), korejstina (jamo vs syllables), indicke skripty, atd...
oryctolagus avatar 12.1.2012 14:15 oryctolagus | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
+1

Ono se tady už o tom flejmovalo v diskusi o Qt. Utf-16 představuje dost dobrý paměťově-výkonový optimum při práci s řetězci. Na serializaci (fs, přenosy,...) bych zas osobně preferoval utf-8...
Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
pavlix avatar 12.1.2012 23:39 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Utf-16 představuje dost dobrý paměťově-výkonový optimum při práci s řetězci.
To jistě, hlavně při práci s východoasijskými jazyky. Ale ty výkonově-paměťové nároky podle mě nepřeváží rizika chyb včetně bezpečnostních, které UTF-16 může při špatném otestování na proměnnou délku představovat.

A přecijen riziko neobjevení chyb daných proměnnou délkou znaku je u UTF-8 podstatně menší než u UTF-16, srovnej kolik uživatelů se nevejde do ASCII a kolik se nevejde do BMP.
oryctolagus avatar 13.1.2012 00:37 oryctolagus | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
To je pravda, určitý riziko tam je. Nicméně pokud někdo píše aplikaci a není ochoten dostatečně se zabývat bezpečnostní zpracování textu, dá se mu důvěřovat ohledně ostatních aspektů bezpečnosti?
Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
13.1.2012 21:07 __dark__
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Ale ty výkonově-paměťové nároky podle mě nepřeváží rizika chyb včetně bezpečnostních, které UTF-16 může při špatném otestování na proměnnou délku představovat.
Jako vsechny bezpecnostni rizika pri praci s polem, toto neni argument.
A přecijen riziko neobjevení chyb daných proměnnou délkou znaku je u UTF-8 podstatně menší než u UTF-16, srovnej kolik uživatelů se nevejde do ASCII a kolik se nevejde do BMP.
Od toho jsou unit testy, popripade jina forma testovani.
pavlix avatar 14.1.2012 08:24 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Jako vsechny bezpecnostni rizika pri praci s polem, toto neni argument.
Díky za upozornění, že to není argument.
Od toho jsou unit testy, popripade jina forma testovani.
Bylo na tom, co jsem napsal, něco nesrozumitelného?

Mimochodem, doporučuju někdy konfrontovat teorii s praxí.
12.1.2012 16:16 extremni lama | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Na druhou stranu je UTF-16 z hlediska pameti nejlepsi volba
tady nekdo po ranu jedl ftipnou kasi...
The enemy of my enemy is still my enemy.
pavlix avatar 12.1.2012 23:35 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
pavlix avatar 12.1.2012 23:34 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Na druhou stranu je UTF-16 z hlediska pameti nejlepsi volba
Kecy nemaj cenu. Zkus si to tvrzení aspoň obhájit. Zjevně podle tebe platí obecně, tak to zkus třeba s češtinou, to je taková zlatá střední cesta.

Nicméně, doporučím ti k přečtení ten příspěvek, u kterého jsi omylem klikl na odkaz „odpověďět“.
13.1.2012 21:03 __dark__
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Mam pocit, ze tve reakce se spis zameruji na mou osobu, nez na dane tema. O prednosti UTF-16 je zminka i na unicode.org, ale to jsou asi jenom kecy.
14.1.2012 00:33 extremni lama | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
tak jsem nasel a precetl nejakej clanek na unicode.org o vyhodach utf-16 proti utf-8 a utf-32. Maji to napsany jako pohadku. Celou dobu jsem s napetim cekal jestli se tam teda objevi aspon jeden argument a nakonec se precejenom objevil - pouziva se to ve vidlich...

Takze tohle jenom potvrdilo muj predchozi nazor...
The enemy of my enemy is still my enemy.
oryctolagus avatar 14.1.2012 01:07 oryctolagus | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
A co třeba tohle?
Q: How should I handle supplementary characters in my code?

A: Compared with BMP characters, the supplementary characters are relatively uncommon in most contexts. That fact can be taken into account when optimizing implementations for best performance: execution speed, memory usage, and storage. This is particularly useful for UTF-16 implementations, and to a lesser degree in UTF-8 implementations.
Utf-16 ti umožňuje rychlý stringy - v 99% procentech případů má přístup ke znakům složitost O(1), což výrazně zjednodušuje i další stringové operace. Zároveň oproti utf-32 zabírá pouze (téměř, v 99%) polovičku paměti. Takže pro práci s řetězci je to imho dost optimální.

(Jinak ale na serializaci jsem osobně pro utf-8).
Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
14.1.2012 02:26 __dark__
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Ja si tez myslim, ze pro serializaci je UTF-8 nejvhodnejsi, ale mel jsem pocit, ze se tu bavime o reprezentaci textu v pameti, se kterym je mozne pracovat - v takovem pripade tu neni zadny byte-order problem, a je to velmi pohodlne, protoze zpracovani surrogate pairu je trivialni oproti zpracovani multi-byte charu v UTF-8. Neberu nikomu, ze nejpohodlnejsi je UTF-32, ale v praxi je to malo pouzivane, a rekl bych, zbytecne nenazrane. Ono ani nevim o runtime, kde by se UTF-32 vyuzivalo.
oryctolagus avatar 14.1.2012 11:20 oryctolagus | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Amen.
Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
14.1.2012 12:41 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Ono ani nevim o runtime, kde by se UTF-32 vyuzivalo.
Dart. Teda, tam jsou Stringy v paměti vždycky s fixní velikostí znaku, a to buď jednobajtovou, nebo dvoubajtovou, nebo čtyřbajtovou.
Ještě na tom nejsem tak špatně, abych četl Viewegha.
pavlix avatar 14.1.2012 20:54 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Utf-16 ti umožňuje rychlý stringy - v 99% procentech případů má přístup ke znakům složitost O(1), což výrazně zjednodušuje i další stringové operace.
Což je právě až příliš dobrý výsledek, viz výše.
oryctolagus avatar 14.1.2012 22:13 oryctolagus | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Ta složitost O(1) je samozřejmě pro string bez surrogate párů. Když tam jsou, použiješ složitější algo. Jak poznat, který algo zvolit? Můžeš si třeba nastavovat flag. Kdy se nastaví? Při změně dat ve stringu.
Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
pavlix avatar 14.1.2012 22:17 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
oryctolagus avatar 14.1.2012 22:31 oryctolagus | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
A tím se pokoušíš říct co?
Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
pavlix avatar 14.1.2012 22:43 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Trefa. Stejný dojem mám z tvého příspěvku.
oryctolagus avatar 14.1.2012 23:15 oryctolagus | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Ok, proč je to teda příliš dobrý výsledek?
Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
pavlix avatar 14.1.2012 23:31 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Ok.

GOTO 20
oryctolagus avatar 14.1.2012 23:44 oryctolagus | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Nechápu, mnou navrhované řešení je přeci proti chybám se surrogate pairy odolné...
Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
pavlix avatar 14.1.2012 23:54 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Já měl za to, že jsi právě navrhoval tu odolnost proti chybám úplně zabít tím, že se budou používat dvě samostatné implementace, tedy zavedeš jeden celý algoritmus, který se běžně nebude provádět, a přitom bude stále otevřený různým pokusům o přetečení, nebo ne?
oryctolagus avatar 15.1.2012 00:21 oryctolagus | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Ne ne, myslel jsem to tak, že třída reprezentující utf-16 string bude mít vevnitř nějaký private flag, který říká, jestli současný string obsahuje surrogate pairs, nebo ne. No a podle toho flagu potom pro takové operace jako přístup ke znaku, zjišťování délky, apod., použije vnitřně buď rychlé, nebo pomalé algoritmy.

(A ten flag se aktualizuje vždy při změně stringu, což nepřidá žádnou algoritmickou složitost navíc).

Toto řešení by imho v praxi v 99 (nebo kolika) procentech případů znamenalo O(1) složitost přístupu ke znaku utf-16 stringu při zachování plné bezpečnosti.
Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
15.1.2012 00:31 extremni lama | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
sorry ze to tak musim rict, ale tohle je fakt blabol. Proste mas kodovani s promenou delkou a tak s nim tak musis pracovat. A ne se to snazit zamest pod koberec, tvrdit uzivateli tridy ze operace maji slozitost O(1), pak tam nekdo zada "nespravny" retezec a cely se to sesype...

dalsi vec je ze dost podcenujes overhead spojeny s udrzbou toho flagu. sice se tim nezmeni asymptoticka slozitost ale to neznamena ze se to nezpomali...
The enemy of my enemy is still my enemy.
oryctolagus avatar 15.1.2012 00:37 oryctolagus | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
sorry ze to tak musim rict, ale tohle je fakt blabol. Proste mas kodovani s promenou delkou a tak s nim tak musis pracovat. A ne se to snazit zamest pod koberec, tvrdit uzivateli tridy ze operace maji slozitost O(1), pak tam nekdo zada "nespravny" retezec a cely se to sesype...
Ale né, ve chvíli, kdy někdo zadá "nesprávný řetězec", tak se akorát změní ten flag, použijí se příslušné algoritmy a nic se nesesype...
dalsi vec je ze dost podcenujes overhead spojeny s udrzbou toho flagu. sice se tim nezmeni asymptoticka slozitost ale to neznamena ze se to nezpomali...
Tak jasný, ten flag nějakou režii mít bude, pořád je to ale ještě imho o řád lepší než pracovat se všemi stringy jako by obsahovaly surrogate pairs...
Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
15.1.2012 00:47 extremni lama | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
problem je v tom ze tim predstiranim ze indexace ma slozitost O(1) rikas uzivateli ze je ok pouzit tohle:
for (i = 0; i < s.len(); ++i)
{
   ... s[i] ...
}
a to ok v zadnym pripade neni, muzes si to prat sebevic...

a pri nespravnym retezci se to sice technicky vzato nesesype, jenom se nedockas vysledku.
The enemy of my enemy is still my enemy.
oryctolagus avatar 15.1.2012 00:51 oryctolagus | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Proč by to jako nemělo být ok? operator[]() se přece postará o správné procházení stringem právě na základě toho flagu, od toho ten flag je. To vlastní pole, ve kterém jsou uložena syrová data, je zapouzdřeno.

(To se tady opravdu snažim sdělit tak složitou myšlenku, nebo co se děje?)
Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
15.1.2012 01:02 extremni lama | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
ok to neni protoze pri nespravnym retezci to ma kvadratickou slozitost misto linearni. (To se tady opravdu snazim sdelit tak slozitou myslenku, nebo co se deje?)

pritom je tady jednoduchy reseni - nepredstirat ze je to kodovani s pevnou delkou, kdyz neni, a pouzit iterator. Sice tim programatora trochu omezis a u nekterych veci se bude muset trochu vic zamyslet, ale vysledek bude rychlejsi a bude mit predvidatelnou slozitost.

Jenomze ve chvili kdy si prizname ze UTF-16 je kodovani s promennou delkou tak si taky musime priznat ze proti utf-8 a utf-32 ma jenom nevyhody... a to si tady nekdo nechce priznat ze...
The enemy of my enemy is still my enemy.
oryctolagus avatar 15.1.2012 01:06 oryctolagus | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
ok to neni protoze pri nespravnym retezci to ma kvadratickou slozitost misto linearni.
Cože?!? Proč?
pritom je tady jednoduchy reseni - nepredstirat ze je to kodovani s pevnou delkou, kdyz neni, a pouzit iterator.
Nic nepředstírám, plně počítám s tím, že to kódování s proměnnou délkou je, a pro (vhodně implementované) iterátory jsem všema deseti.
Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
15.1.2012 08:43 __dark__
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Cože?!? Proč?
On asi myslel to, kdybys ten operator[] volal pro kazdy znak v poli (pouzil to jako iterator).
oryctolagus avatar 15.1.2012 12:43 oryctolagus | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Jo tak. No tak to je ale špatné použití (navíc ta kvadratická složitost by opravdu byla jen pro speciální stringy). Jinak od toho je iterátor, ten by měl složitost nižší.

Přijde mi, že se nám tu snaží pánové pavlix a extremni lama dokázat, že když se utf-16 stringy špatně použijí, vzniknou potíže. Což je tedy skutečně objev...
Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
pavlix avatar 15.1.2012 15:15 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Přijde mi, že se nám tu snaží pánové pavlix a extremni lama dokázat, že když se utf-16 stringy špatně použijí, vzniknou potíže. Což je tedy skutečně objev...
Jsem rád, že jsi to alespoň po takové době objevil. Teď ještě vypilovat porozumění textu, protože já jsem bohužel od začátku předpokládal, že toto ti bude jasné.

Co se týče uživatele __dart__, tak tomu jsem vyvracel cca tři nesmyslná tvrzení:

1) Že UTF-16 má (obecně) nejmenší paměťovou náročnost z trojice UTF-8, UTF-16 a UTF-32, což je celkem triviální matematika.

2) Že se na Unicode.org tvrdí (1), nacož je myslím dostatečné to, že se to vůbec netvrdí v citaci, kterou on nakonec použil.

Co se týče toho sdělení tobě. Už nevěřím, že bys to vůbec mohl či dokonce chtěl pochopit... ale ještě jednou, a jednodušeji:

Implementace UTF-16 bude IMO obsahovat podstatě více extrémně málo používaného kódu než implementace UTF-8. A ten extrémně málo používaný kód se týká zpracování textových řetězců proměnné délky a výpočtu délky řetězcové proměnné v paměti.

Případné chyby vedou na zranitelnosti v buffer overflow.

Když bude do kódu zasahovat lama, která si v roce 2012 myslí, že v Unicode mají znaky 16 bitů neboli dva bajty (a že takových je!), tak je velká pravděpodobnost, že lama vytvoří bezpečnostní díru. U UTF-8 toto neplatí.

Pokud u UTF-8 lama přecijen použije předpokladu, že počet kódových jednotek je stejný jako počet znaků, tak si toho možná angličtí kolegové bez zájmu o typografii nevšimnou. Ale všimnou si toho češtní, fracouzští, španělští, němečtí a jiní.

A ty, jsi navrhl, že by se používaly dva různé algoritmy, jeden pro BMP řetězce a jeden pro řetězce s aspoň jedním ne-BMP znakem. A navíc jsi tvrdil, že tím je problém vyřešený, což je tak zřejmý nesmysl, že kdybys měl koule, tak bys to dávno uznal. Tím množství rizikového kódu zvyšuješ a pravděpodobnost objevení chyby, která se v něm nachází, snižuješ.

Q.E.D.
pavlix avatar 15.1.2012 15:19 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
vyvracel cca tři nesmyslná tvrzení:
3) Že mu vyvracím nesmyslné tvrzení č. 1, protože jsem si na něj zasedl :).
oryctolagus avatar 15.1.2012 15:29 oryctolagus | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Achjo...
Implementace UTF-16 bude IMO obsahovat podstatě více extrémně málo používaného kódu než implementace UTF-8. A ten extrémně málo používaný kód se týká zpracování textových řetězců proměnné délky a výpočtu délky řetězcové proměnné v paměti.
S extrémně málo používaným kódem se setkáš v bezpečnosti na každém kroku. O tom v podstatě velká část bezpečnosti ošetření vstupu je. Viz např.
Když bude do kódu zasahovat lama, která si v roce 2012 myslí, že v Unicode mají znaky 16 bitů neboli dva bajty (a že takových je!), tak je velká pravděpodobnost, že lama vytvoří bezpečnostní díru. U UTF-8 toto neplatí.
Pokud bude do kódu zasahovat lama, napáchá pravděpodobně řadu dalších problémů než jen zpracování textu. Pokud bude do kódu zasahovat lama, nedá se na bezpečnost toho kódu spolehnout. A to platí ať už použiješ utf-8, utf-16, utf-32, utf-over9000 anebo i když vůbec nebudeš zpracovávat text. Takže toto opravdu není argument.
A ty, jsi navrhl, že by se používaly dva různé algoritmy, jeden pro BMP řetězce a jeden pro řetězce s aspoň jedním ne-BMP znakem. A navíc jsi tvrdil, že tím je problém vyřešený, což je tak zřejmý nesmysl, že kdybys měl koule, tak bys to dávno uznal.
Ale prd, tys akorát absolutně nepochopil, jak jsem to myslel. Místo toho tady mlátíš ostatní koulema...
Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
oryctolagus avatar 15.1.2012 15:34 oryctolagus | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Jinak ještě k tomu málo používanému kódu: Od toho jsou edge case tests.
Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
pavlix avatar 15.1.2012 16:00 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Praxi teorií neumlátíš.
pavlix avatar 15.1.2012 15:38 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Pokud bude do kódu zasahovat lama, napáchá pravděpodobně řadu dalších problémů než jen zpracování textu. Pokud bude do kódu zasahovat lama, nedá se na bezpečnost toho kódu spolehnout. A to platí ať už použiješ utf-8, utf-16, utf-32, utf-over9000 anebo i když vůbec nebudeš zpracovávat text. Takže toto opravdu není argument.
Pokud rozdíl v náročnosti revize celého kódu i jednotlivých patchů, případně napsání smysluplných testů, a daších věcí nevidíš, tak to pak naprosto chápu tvé „ach jo“.

Ona je jedna věc, když je to implementace unicode pro python, javu nebo jiné vysokoúrovňové jazyky, a jiná věc, pokud je to třeba pro céčko a programátor má přímý přístup ke všemu.

V tom druhém případě jsi v prdeli asi podobně, jako jsi byl v prdeli s Pythonem 2 a automatickými konverzemi, s tím rozdílem, že ty vždycky vedly „jenom“ na vyhození výjimky a v případě neošetření „jenom“ na pád serveru.
Ale prd, tys akorát absolutně nepochopil, jak jsem to myslel.

A čí je to chyba? Moje nebo tvoje?
Místo toho tady mlátíš ostatní koulema...
Ty jsi schizofrenik, že pro sebe používáš množné číslo a slova jako „ostatní“? Nebo to má být plural majestaticus nebo jak se tomu říká?
oryctolagus avatar 15.1.2012 15:55 oryctolagus | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Pokud rozdíl v náročnosti revize celého kódu i jednotlivých patchů, případně napsání smysluplných testů, a daších věcí nevidíš, tak to pak naprosto chápu tvé „ach jo“.
Nějak se mi nedaří z týhle věty vydestilovat smysl. Rozdíl mezi čím a čím?
Ona je jedna věc, když je to implementace unicode pro python, javu nebo jiné vysokoúrovňové jazyky, a jiná věc, pokud je to třeba pro céčko a programátor má přímý přístup ke všemu.
Tak, a teď se zeptej sám sebe: Týká se tento problém s nízkoúrovňovostí céčka pouze UTF-16, nebo se týká prakticky čehokoli v céčku?

Já musím prostě souhlasit s kolegou Darkem v tom, že jsi zřejmě proti UTF-16 zaujatý, protože mi přijde, že sveřepě hledáš problémy, které s podstatou UTF-16 ani moc nesouvisí - jako například to, že programátor je lama nebo to, že v C je problematické zapouzdření.

Tyto problémy jsou v zásadě off-topic.
A čí je to chyba? Moje nebo tvoje?
Nejspíš na obou stranách...
Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
15.1.2012 17:35 __dark__
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Kasli na ne;-)

Ja vlastne ani moc nechapu, o tady resi. Nejdulezitejsi knihovny/prostredi pouzivaji UTF-16 (vcetne API ruznych mobilnich zarizeni) a pavlix ani extremni lama s tim nic neudelaji. To, co tady predvadi je demagogie a zamerne nepochopeni prispevku. Ja uz teda nemam silu, ani vuli :)

UTF-16 je zkratka zlaty stred - pametove nejefektivnejsi:) nejvykonnejsi:) nejodolnejsi vuci chybam:) Nejbezpecnejsi (neplati pro pavlixe:)) A jako bonus, nepouzivaji ho silenci:)
15.1.2012 18:04 extremni lama | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
puvodne jsem si myslel ze se to mozna snazis pochopit, jenom tvoje omezena mentalni kapacita na to nestaci. Ted vidim ze jsi obycejny troll.
The enemy of my enemy is still my enemy.
15.1.2012 18:40 __dark__
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
To je zajimave, ze to rikas zrovna ty :)
pavlix avatar 15.1.2012 19:17 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Ale zas na druhou stranu, aspoň víme, že se v tomhle vlákně už maximálně tak zasmějem, když s tebe nic rozumného nevypadne :).
oryctolagus avatar 15.1.2012 19:44 oryctolagus | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Sorry, ale úplně stejný pocit mám já z tebe...
Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
pavlix avatar 15.1.2012 19:55 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Čím to, že já mám pocit, že lama tady celkem srozumitelně vysvětloval, jak se věci mají.

Třeba:
pritom je tady jednoduchy reseni - nepredstirat ze je to kodovani s pevnou delkou, kdyz neni, a pouzit iterator. Sice tim programatora trochu omezis a u nekterych veci se bude muset trochu vic zamyslet, ale vysledek bude rychlejsi a bude mit predvidatelnou slozitost.

Jenomze ve chvili kdy si prizname ze UTF-16 je kodovani s promennou delkou tak si taky musime priznat ze proti utf-8 a utf-32 ma jenom nevyhody... a to si tady nekdo nechce priznat ze...
Tomuhle člověku říkáš troll? To je fakt jak házet perly sviním, takové pěkné vysvětlení. Už to nehul.
oryctolagus avatar 15.1.2012 20:02 oryctolagus | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Ale vždyť já jsem s ním v tomhle zrovna souhlasil, především s tím prvním odstavcem, pod ten se můžu podepsat. Jestli jste ty nebo lama měli dojem, že se snažim tvářit, že je utf-16 fixed-wdith, tak došlo k dost hrubému nedorozumění (a nebudu řešit, kdo za to může).

Co se týče druhého odstavce, tak bohužel ty "nevýhody utf-16" tady zatím ani jeden z vás moc nerozvedl - viz níže.
Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
15.1.2012 20:34 extremni lama | skóre: 14 | blog: e_lama
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Co se týče druhého odstavce, tak bohužel ty "nevýhody utf-16" tady zatím ani jeden z vás moc nerozvedl - viz níže.
UTF-8:

+ kompatibilni s ASCII

+ nizka spotreba pameti

+ nejsou problemy s little/big endian

+ nejsou potreba zadny konverze pro IO, v podstate staci zkopirovat blok pameti na vystup (souvisi s kompatibilitou s ascii)

- variable length

UTF-32:

- nekompatibilni s ASCII

- vysoka spotreba pameti

- nevhodny pro IO (problemy s little/big endian, programy pracujici s ascii budou UTF-32 retezec povazovat za binarni data)

+ fixed length

celkove UTF-32 muze byt za urcitych okolnosti vhodny pro interni reprezentaci a pro urcity algoritmy

UTF-16:

- nekompatibilni s ASCII

- vysoka spotreba pameti

- nevhodny pro IO (problemy s little/big endian, programy pracujici s ascii budou UTF-16 retezec povazovat za binarni data)

- variable length

jedina castecna vyhoda utf-16 je ze nektery knihovny to z historickych duvodu jeste stale pouzivaji...
The enemy of my enemy is still my enemy.
oryctolagus avatar 15.1.2012 20:43 oryctolagus | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Ok, dejme tomu, ale úplně férové to není, u UTF-8 jsi vůbec nevzpomněl na negativum hodně složitého algoritmu v porovnání s ostatními dvěma (ano, i v porovnání se zpracováním surrogate pairs v UTF-16). Dále píšeš u UTF-16 vysokou spotřebu paměti, přitom ale má menší (skoro dvakrát) než UTF-32. No a UTF-8, pokud máš smůlu, zabere víc než UTF-16.

Že je UTF-16 nevhodný pro I/O, to určitě souhlasim, osobně bych také serializoval do UTF-8.
Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
pavlix avatar 16.1.2012 10:00 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Ok, dejme tomu, ale úplně férové to není, u UTF-8 jsi vůbec nevzpomněl na negativum hodně složitého algoritmu v porovnání s ostatními dvěma (ano, i v porovnání se zpracováním surrogate pairs v UTF-16).
Od toho tu jsi ty, abys to doplnil, ne? Jak jsem říkal, nehledej hned špatný úmysl.

Ale když jsem ho implementoval, tak vůbec složitý nebyl, aspoň při použitá shl a and to bylo úplně na pohodu. Ale ve srovnání s UTF-16 či bych ti to uznal. Ve srovnání s UTF-32 to je přímo obsaženo v tom, že UTF-32 je fixed.
No a UTF-8, pokud máš smůlu, zabere víc než UTF-16.
Tak ta smůla dost závisí na volbě jazyka.
Že je UTF-16 nevhodný pro I/O, to určitě souhlasim, osobně bych také serializoval do UTF-8.
Pokud serializuju do UTF-8, tak potřebuju vážný důvod, abych v paměti měl něco jiného :).
16.1.2012 08:26 __dark__
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Trosku cernobile videni vhledem k kontextu, ale popravde jsem nic lepsiho od tebe necekal.
pavlix avatar 15.1.2012 20:40 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Jestli jste ty nebo lama měli dojem, že se snažim tvářit, že je utf-16 fixed-wdith
My ten dojem ještě máme, že se pro 99% procent případů chceš chovat k UTF-16 jak fixed width, a na ten zbytek dělat special case.

Mimochodem, doporučuju ti se podívat na dohady o special casing konverze mezi čísly a jejich textovou reprezentací v různých soustavách v Pythonu. Tam je to čistě kvůli optimalizaci a už teď jsou ohlasy, že je tam special cases tolik, že pokrývají celou škálu reálného užití té funkce (jsou tam special cases pro mocniny dvou a pro desítku :D). Jen zajímavost.
Co se týče druhého odstavce, tak bohužel ty "nevýhody utf-16" tady zatím ani jeden z vás moc nerozvedl
Ok, tedy nevýhody nasazení UTF-16 oproti UTF-8

1).Nevýhodou je paměťová náročnost, to lama pokud vím psal. U češtiny možná o 70%, nepočítám, jen odhaduju.

2) Nevýhodou je naprostá nekompatibilita s ASCII. Kde UTF-8 funguje samo od sebe, UTF-16 se musí doimplementovat. Příkladem budiž programovací jazyky. ASCII znaky fungují, non-ASCII znaky se při kompilaci vůbec nemusí řešit. Navíc to tak už funguje díky dlouhé tradici osmibitových kódování kompatibilních s ASCII.

3) Nevýhodou je problém s endianess při serializaci.

3a) Tím pádem nemůžeš identický formát používat v souboru i v paměti, což způsobuje, že musíš konvertovat data při čtení i zápisu.

3b) Tím pádem potřebuješ udržovat informaci o kódování souboru, například ve značce na začátku souboru, čímž ztratíš funkcionalitu klasických shellovských příkazů včetně třeba cat!

3b) Ztratíš všeobecně uznávaný předpoklad, že nulový bajt ukončuje řetězec, což asi není tak zásadní, ale je to nepříjemnost.

4) Mnou zmíněný special casing, který ty jako nevýhodu neuznáváš. Nicméně děláš chybu, protože v případě nízkoúrovňových jazyků se to dotýká bohužel i kódu aplikací.

5) Takovou menší nevýhodou je že si programátoři UTF-16 pletou se starším šestáctibitovým Unicode, a při použití aplikace v běžných jazycích si toho nikdo nemá šanci všimnout. Ale jde to proti smyslu Unicode.

Jsem si jistý, že by se těch nevýhod našlo i víc, ale mě osobně 2 a 3 přijdou kritické, 4 zásadní, 5 nepříjemná, a 1 zbytečná, když není vyvážena dostatečnou výhodou.

Kvůli kterékoli z 2, 3 a 4 bych u nového projektu volil UTF-8. U staršího projektu bych měnil kódování jedině při nějakém velkém rewritu, jinak bych upgradoval starý unicode na UTF-16 a zakázal vývojářům zpracovávat UTF jinak než jednou sadou otestovaných rutin a snažil se vymyslet další způsoby, jak jim zabránit v tom to zkurvit.

Když se podíváš normálníma očima, zjistíš, že se __dark__ projevuje jako troll a když ho s tím pošleš do háje ty, akorát tím stoupneš. Já na tebe nebudu používat argumenty typu „my jsme dva, tak víme líp“, tak špatně na tom ještě nejsem :). Extremni lama se jako troll nechová a má u mě oběd za trpělivost, pokud se někde potkáme třeba na konferenci.
oryctolagus avatar 15.1.2012 21:06 oryctolagus | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Ad 1. Ano, utf-16 je náčročnější na paměť, považuju to za výměnu za rychlost.

Ad 2. a 3. Souhlasím, pro serializaci preferuju utf-8. Konverze utf-8/utf-16 při čtení/zápisu mi nepřipadá jako problém...

4. Proč vnímáš special casing jako takovou nevýhodu? A tím myslim konkrétně u utf-16, ne obecně...
Když se podíváš normálníma očima, zjistíš, že se __dark__ projevuje jako troll
"Normální oči" bych chtěl vidět, ty budou asi vedle prototypu metru v Paříži (sarkastický smajlík).

Jinak mně Darkovy komentáře nepřijdou o nic víc trolující než tvoje Lorem Ipsum nebo lamův kód s operátorem [], který byl zcela mimo mísu - uznávám, že to ale bylo možná jen nedorozumění.
Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
pavlix avatar 15.1.2012 22:05 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Ad 1. Ano, utf-16 je náčročnější na paměť, považuju to za výměnu za rychlost.

Zase vágní kecy. Ve spoustě věcí je UTF-8 rychlejší :).
Ad 2. a 3. Souhlasím, pro serializaci preferuju utf-8. Konverze utf-8/utf-16 při čtení/zápisu mi nepřipadá jako problém...
Před chvíli jsi psal něco o tom, že dáváš přednost rychlosti :).
4. Proč vnímáš special casing jako takovou nevýhodu? A tím myslim konkrétně u utf-16, ne obecně...
Special casing je nevýhoda obecně kvůli náchylnosti na chyby. Konkrétně u UTF-16 jsem to několikrát popsal, ale že seš to ty... protože v tomhle případě je to special casing pro velikost přidělené paměti a zavání to stack overflow a podobnými.
Jinak mně Darkovy komentáře nepřijdou o nic víc trolující
To je mi líto.
Lorem Ipsum
Lipsum jsem ti napsal jen jednou a měl bys uznat, že to bylo na příspěvek, ve kterém nešlo najít souvislost s příspěvkem, kde jsi kliknul na tlačítko odpovědět. Ale dejme tomu, že to bylo na hraně :). Zase mě omlouvá to, že aspoň vím, o čem píšu.
lamův kód s operátorem [], který byl zcela mimo mísu - uznávám, že to ale bylo možná jen nedorozumění.
Pokud nevíš, máš předpokládat dobrý úmysl, ne špatný. V tomhle případě neshledávám jediný náznak špatného úmyslu. IMO má k trollování dál než ty, který opakovaně tvrdíš, že jsi neviděl žádný argument, když jsi ho opakovaně dostal :). Sáhni si taky do vlastního svědomí.

Dokonce mi ani jeho příklad nepřipadá jako blbost, prostě chtěl jenom nějakou ukázku, na které to půjde porovnat. Její relevanci jste ani moc nediskutovali.
oryctolagus avatar 15.1.2012 22:22 oryctolagus | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Zase vágní kecy. Ve spoustě věcí je UTF-8 rychlejší :).
A tohle vůbec není vágní tvrzení, že...
Před chvíli jsi psal něco o tom, že dáváš přednost rychlosti :).
Při serializaci je imho typicky úzké hrdlo jinde.
Special casing je nevýhoda obecně kvůli náchylnosti na chyby. Konkrétně u UTF-16 jsem to několikrát popsal, ale že seš to ty... protože v tomhle případě je to special casing pro velikost přidělené paměti a zavání to stack overflow a podobnými.
Sorry, ale ani teď ani předtím jsi to nepopsal dostatečně konkrétně. Že to někomu něčím "zavání" to je možné, ale jestli to má mít váhu, budeš opravdu muset být konkrétnější. V jakém případě by tam mohl nastat ten overflow?

(Ad trolling: myslim, že nemá smysl se přetahovat o to, kdo víc troluje...)
Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
pavlix avatar 16.1.2012 10:10 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
A tohle vůbec není vágní tvrzení, že...
Je :). Ale nejsou to takové kecy, jako že přechodem na UTF-8 získáš rychlost. To by totiž byl úplně stejný kec jako že ji získáš přechodem na UTF-16. Něco je rychlejší a něco je pomalejší, nehledě na to, že pochybuju, že by to bylo nějak významné (v obou případech).
Sorry, ale ani teď ani předtím jsi to nepopsal dostatečně konkrétně. Že to někomu něčím "zavání" to je možné, ale jestli to má mít váhu, budeš opravdu muset být konkrétnější. V jakém případě by tam mohl nastat ten overflow?
Kolikrát ti to mám ještě napsat? Overflow hrozí ve chvíli, kdy se zamění počet kódových jednotek s počtem znaků.

Když se budeš snažit, najdeš to minimálně v pěti komentářích, spíš více. Nepřipadáš si trochu natvrdlý? Mě teda v téhle diskuzi docela jo.

Budu pomalu končit, už se mi zobrazují příspěvky po slovech, což naznačuje, že jsem se pustil do jirsákovské diskuze a to mi přijde jako ztráta času.
oryctolagus avatar 16.1.2012 13:20 oryctolagus | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Kolikrát ti to mám ještě napsat? Overflow hrozí ve chvíli, kdy se zamění počet kódových jednotek s počtem znaků.
Ale vždyť ten special casing nic takového nedělá... Pouze interně volí různé algoritmy pro výpočet počtu znaků pro různé stringy, to je všechno... Ne, asi máš recht, tohle opravdu ztrácí smysl...
Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
pavlix avatar 15.1.2012 19:16 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Nejdulezitejsi knihovny/prostredi pouzivaji UTF-16 (vcetne API ruznych mobilnich zarizeni) a pavlix ani extremni lama s tim nic neudelaji.
Nemůžu mluvit za lamu, kterýžto vůbec lamou není, ale mě nijak nevadí, že knihovny, které jsou pro tebe nejdůležitější, používalí z historických důvodů původní šestnáctibitový Unicode, a možná některé znich už stihli cestou nejmenšího odporu upgradovat na UTF-16, ale dost možná z nich většina o UTF-16 ještě ani nezavadila.

Nejdůležitější knihovni s jejichž kódem jsem se setkal, používají UTF-8, a ani __dark__, který tak rád převádí IT oblast na emocionální úroveň, aby nedej bože nemusel používat kritické myšlení, natož přiznat, že napsal totální blbost, která by platila jen pokud by 1.2 bylo větší než 2.0.
UTF-16 je zkratka zlaty stred - pametove nejefektivnejsi:) nejvykonnejsi:) nejodolnejsi vuci chybam:) Nejbezpecnejsi (neplati pro pavlixe:))
Prostě něco jako Windows (co si tak pamatuju instalační obrazovky).
A jako bonus, nepouzivaji ho silenci:)
Chápu, že ti připadám jako šílenec, když si umím spočítat relativní četnosti a takové věci. Holt „vyšší level“ (z mého pohledu ale základy).
oryctolagus avatar 15.1.2012 19:58 oryctolagus | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
„Vyšší level“? :-D Tobě asi nedošlo, že tuhle četnost jsme si tu spočítali úplně všichni, jenom ty máš potřebu z ní vyvozovat podivné závěry. Shrňme si tvoje argumenty proti UTF-16:
  • Používají to Windows (emocionální argument)
  • Když to použije lama, je dost možné, že to zkazí
  • V jazyce C jsou s tím podobné problémy jako se vším ostatním
(Zapomněl jsem na něco?)

Co z toho se dá brát jako seriózní argument? Snad jen možná to druhé, ale když už teda, pak nechápu proč navrhuješ řešení typu "zameteme to pod koberec", když vhodnější by byla osvěta ohledně UTF-16.

Kromě toho, opravdu by mě zajímalo, jak by to dopadlo, kdyby lama implementovala UTF-8. Imho by to nebylo lepší, možná spíš ještě horší, ono UTF-8 taky není úplně triviální dobře implementovat a má svoje záludnosti.
Existuje 10 druhů lidí: Ti, co nerozumí binární soustavě, ti, co ano, a ti, kteří znají i balancovanou ternární.
pavlix avatar 15.1.2012 21:05 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Používají to Windows (emocionální argument)
Moc se ti omlouvám, za to, že jsem ti výše ptal slušně a chápavě.

Takže pokud teď nenajdeš citaci, kde tvrdím, že UTF-16 je špatné, protože to používají Windows, budu tě považovat za blbce.
Když to použije lama, je dost možné, že to zkazí
To není argument, ale platný předpoklad pro argument, který záměrně vynecháváš, protože sis zřejmě už vnitřně uvědomil, že mám pravdu.

Jinak bys rozporoval můj skutečný argument.
V jazyce C jsou s tím podobné problémy jako se vším ostatním
To slova tvá jsou.
(Zapomněl jsem na něco?)
Napsal jsi tři argumenty, které jsi mi lživě přisoudil pro to, abys mě následně mohl shodit. Jenže, tady nejsi před šéfem, kde potřebuješ sbírat laciné body za to, že někoho neprávem shodíš. Tady shazuješ jen sebe a to nejen odborně, ale i charakterově.
Kromě toho, opravdu by mě zajímalo, jak by to dopadlo, kdyby lama implementovala UTF-8. Imho by to nebylo lepší, možná spíš ještě horší, ono UTF-8 taky není úplně triviální dobře implementovat a má svoje záludnosti.
Na UTF-8 se IMO dřív umlátí vlastníma testama na nějakém Evropském jazyce. Na UTF-16 ne.

Ale to je detail, spíš než problém v UTF knihovně bych viděl problémy v aplikaci, kde v 99% půjde použít oběcně mylný předpokad, že počet kódových jednotek je stejný jako počet znaků.

U dynamických jazyků mě zajímá prakticky jenom API, takže vnitřní UTF-16 implementace mi přijde sice zbytečná, ale pokud se to neprojevuje navenek ani na bezpečnostních chybách, je mi to upřímně jedno.
Bystroushaak avatar 16.1.2012 15:46 Bystroushaak | skóre: 32 | blog: Bystroushaakův blog | Praha
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Místo toho tady mlátíš ostatní koulema...
Tak to bych fakt chtěl vidět v praxi. Je to jedna z těch věcí, u které mi vůbec nedochází jak by se měly prakticky implementovat. Možná kdyby si uřízl péro a jednu nohu, nebo nevim :)

PS: Teď mě napadá že by mohl mít nějaké ufiklé na provázku/klacku a mlátit s nimi ostatní, což by mohlo být docela efektivní.
pavlix avatar 16.1.2012 15:57 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
pavlix avatar 15.1.2012 01:12 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Jenomze ve chvili kdy si prizname ze UTF-16 je kodovani s promennou delkou tak si taky musime priznat ze proti utf-8 a utf-32 ma jenom nevyhody... a to si tady nekdo nechce priznat ze...
Myslím, že teď jsi na to kápnul :).
15.1.2012 08:39 __dark__
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Ja osobne bych vubec nezavadel takovy zpusob indexovani, a ani nevim, jestli se nekde pouziva;)
pavlix avatar 14.1.2012 11:01 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Mam pocit, ze tve reakce se spis zameruji na mou osobu, nez na dane tema.
Nemám ponětí kdo jsi, ani co jsi, takže neshledávám žádný důvod zaměřovat své reakce osobně.

Zato tvé obvinění z mé zaujatosti mi osobní připadá, takže se můžeš představit a sdělit mi, co jsem ti udělal zlého :).

Teda teď už o tobě vím, že neumíš počítat, což lze přímo odvodit od toho, že považuješ UTF-8 za obecně efektivnější než UTF-16. Ale takových, co neumějí počítat znám mnoho, takže ani to ti nezajišťuje jedinečnost.
O prednosti UTF-16 je zminka i na unicode.org, ale to jsou asi jenom kecy.

Argumentum ad verecundiam. Tím zde neoslníš.

Vzhledem k tomu, že jsi necitoval konkrétní znění, a vzhledem k tomu, že mi ještě nedorazila křišťálová koule, kterou jsem si objednal, můžu jenom tipovat. A osobně tipuju, že zrovna toto na unicode.org mají napsáno správně, pouze že jsi to špatně pochopil.
15.1.2012 08:23 __dark__
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Nemám ponětí kdo jsi, ani co jsi, takže neshledávám žádný důvod zaměřovat své reakce osobně. Zato tvé obvinění z mé zaujatosti mi osobní připadá, takže se můžeš představit a sdělit mi, co jsem ti udělal zlého :).
Tak si asi zaujaty jen vuci UTF-16;-)
Teda teď už o tobě vím, že neumíš počítat, což lze přímo odvodit od toho, že považuješ UTF-8 za obecně efektivnější než UTF-16. Ale takových, co neumějí počítat znám mnoho, takže ani to ti nezajišťuje jedinečnost.
Nechapu, proc sem pises takove vylevy a jeste mi podsouvas neco, co jsem nikde nenapsal.
Argumentum ad verecundiam. Tím zde neoslníš.
...
Vzhledem k tomu, že jsi necitoval konkrétní znění, a vzhledem k tomu, že mi ještě nedorazila křišťálová koule, kterou jsem si objednal, můžu jenom tipovat. A osobně tipuju, že zrovna toto na unicode.org mají napsáno správně, pouze že jsi to špatně pochopil.
Stacilo napsat, ze chces link, treba v poznamkach UTF-16: http://unicode.org/notes/tn12/ . Mi osobne z hlediska zpracovani textu prijdou nejzajimavejsi tento:
UTF-8 was mainly designed to store Unicode filenames in an ASCII-friendly way. It is suitable for processing, but it is significantly more complex to process than UTF-16. Lead bytes have a relatively complex encoding, and up to three trail bytes (or five to cope with the original definition) must be counted, read and range-checked, then the resulting code point must be range-checked as well.
a
UTF-16: From a programming point of view it reduces the need for error handling that there are no invalid 16-bit words in 16-bit Unicode strings. By contrast, there are code unit values that are invalid in 8/32-bit Unicode strings. All pairs of lead/trail surrogates in UTF-16 represent valid supplementary code points, and reading 16-bit Unicode requires to look ahead at most one unit.
Conclusion:
Unicode is the best way to process and store text. While there are several forms of Unicode that are suitable for processing, it is best to use the same form everywhere in a system, and to use UTF-16 in particular for two reasons:

The vast majority of characters (by frequency of use) are on the BMP.
For seamless integration with the majority of existing software with good Unicode support.
At si to kazdy prebere jak chce.
pavlix avatar 15.1.2012 09:00 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
Tak si asi zaujaty jen vuci UTF-16;-)
Kolik takových uhozených teorií máš ještě v zásobě?
Nechapu, proc sem pises takove vylevy a jeste mi podsouvas neco, co jsem nikde nenapsal.
Zapomněl jsem tam napsat „z hlediska paměti“, jinak viz tvé:
Na druhou stranu je UTF-16 z hlediska pameti nejlepsi volba
Nebo to psal někdo jiný pod tvoji přezdívkou?
At si to kazdy prebere jak chce.
Díky za prostor k interpretaci. Vidím to tak, že můj tip byl naprosto správný. Že je UTF-16 z hlediska paměti nejlepší, se tam nepíše ani zdaleka.

Naopak se tam píše o důvodu z hlediska kompatibility s původním, jinak definovaným, Unicode, což se týká právě serializace.

Řetězce v programovacích jazycích můžou používat abstrakci, která interní reprezentaci vůbec neexponuje (pole znaků například tak jak se používá v Pythonu 3).
14.1.2012 02:31 __dark__
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce
BTW: Cestina a zlata stredni cesta me celkem pobavila, diky :)
pavlix avatar 14.1.2012 20:56 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: Programování v jazyce D (3): Typy, proměnné, práce s čísly, literály a funkce

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.