Portál AbcLinuxu, 10. května 2024 18:23

Na velikosti nezáleží!

4.11.2005 19:17 | Přečteno: 1365× | Plané filozofování

Tuhle jsem seděl ve školní knihovně a četl dobrou knížku o návrhových vzorech, která byla ovšem příšerně přeložena*. Když v tom jsem od vedlejšího stolu zaslechl jakou si "technickou" diskusi. Seděla tam parta lidí, evidentně zobáci-prváci, měli před sebou notebook a nějakou knížku o Linuxu pro začátečníky. Na noťasu běžely obligátní XPéčka a na nich cygwin.

Ti lidi se hádali, jestli je Linux case-sensitive při práci se soubory, či nikoliv. V příručce psali, že ano, ovšem chlapečkovi před notebookem se podařilo vymazat soubor příkazem rm POKUS soubor, jež před tím vytvořil příkazem touch pokus. A nešlo mu to do hlavy.

Měl jsem sto chutí vstát a vysvětlit těm talentům, že cygwin prostě není Linux a že bash přenesený na Wokna nic nemění na tom, že Wokna jsou case-insensitive. Jako obvykle jsem se udržel. Ale ono je to docela zajímavé téma.

Case-sensitivness (nebo česky: kejssensitivnes) totiž souvisí jednak se souborovým systémem, druhak se samotným operačním systémem.

Trocha definic

Pokud je systém case-sensitive, tak to znamená, že vedle sebe můžou existovat soubory readme.txt, Readme.txt a README.TXT. Každý z těchto souborů je zcela nezávislý, písmenko R nemá nic společného s r.

Pokud je systém case-preserve, tak to znamená, že si pamatuje velikost písmen ve jménech. Tedy ReadMe.txt se vždy zobrazí jako ReadMe.txt, ale neznamená to, že vedle něj může existovat soubor README.TXT.

Případové rádobystudie

Nejjednodušší je situace v klasických Unixech a derivátech (deviacích). Nativní souborové systémy (ext2/3, Reiser) jsou přísně case-sensitive a programy taktéž. Například doplňování jmen souborů v bashi vyžaduje uvedení správného počátečního písmen(e) správné velikosti.

Souborový systém FAT (český překlad TUK, Tabulka Umístění Kousků) je case-insensitive, ale case-preserve. Ovšem starý MS DOS case-preserve nebyl. Mlhavě si pamatuji typické zobrazování v M602: adresáře velkými, soubory malými.

Jména souborů ve Windows nad FAT jsou case-insensitive, ale case-preserve. Program Files jsou Program Files. Ovšem souborový systém NTFS je dokonce case-sensitive, ale z důvodu kompatibility Wokna odmítají vytvořit vedle sebe soubory lišící se jen velikostí písmen.

Zajímavě se chová můj Debian na oddílu s FAT. touch Pokus a touch pokus sice vede k očekávaným výsledkům, ovšem touch POKUS vede k vytvoření souboru jménem pokus.

Co s tím?

Osobně si myslím, že case-sensitive systémy jsou pěkná blbost. Je to nepřirozené, opravdu nevím, k čemu je mít v jednom adresáři Životopis.odt a životopis.odt. Co když někomu budete potřebovat říct jmého souboru po telefonu?

Ono totiž case-sensitive systémy jsou nejjednodušší na implementaci. Tato "fíčura" nestojí vůbec nic, prostě řetězce se ukládají (a vyhledávají) jako binární data. Z tohoto pohledu každý souborový systém, který je case-preserve "umí" i case-sensitive.

Nejlepší je systém, který je přísně case-preserve, jako třeba Windows NT 4.0 Workstation :-)


* Schválně, víte, co jsou to "jazyky bez sběru odpadků"?-)

       

Hodnocení: -

zatím nehodnoceno
        špatnédobré        

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

Komentáře

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

Vložit další komentář

4.11.2005 20:03 pasmen | skóre: 45 | blog: glob | Praha
Rozbalit Rozbalit vše Re: Na velikosti nezáleží!
Odpovědět | Sbalit | Link | Blokovat | Admin
Nejenze je implementace case sensitive jednodussi, ale ve vysledku i rychlejsi. V tom, ze se rozlisuji velka a mala pismena nevidim problem, to se prece uci deti v prvni tride. Jde prece o to, ze slova se stejnymi pismeny lisici se jen velikosti muzou mit ruzne vyznamy.
4.11.2005 20:08 paskma | skóre: 13 | blog: Paskmův blog
Rozbalit Rozbalit vše Re: Na velikosti nezáleží!
Jde prece o to, ze slova se stejnymi pismeny lisici se jen velikosti muzou mit ruzne vyznamy.

Například?

4.11.2005 20:32 pasmen | skóre: 45 | blog: glob | Praha
Rozbalit Rozbalit vše Re: Na velikosti nezáleží!

SOS - volani o pomoc
sos - omacka

No to je samozrejme prehnany a mozna i spatny priklad, ale neco v tom smyslu. BTW, co je to case-preserve ?
4.11.2005 20:51 paskma | skóre: 13 | blog: Paskmův blog
Rozbalit Rozbalit vše Re: Na velikosti nezáleží!
No v DOSu se stávalo, že šlověk pojmenoval soubor dopis.txt a program to uložil jako DOPIS.TXT. Tak to *není* case-preserve.
6.11.2005 00:02 doubleZ | skóre: 24 | blog: smazano
Rozbalit Rozbalit vše Re: Na velikosti nezáleží!
No, dáš si do prezervativu omáčku, a pak budeš křičet o pomoc :-)
Luk avatar 4.11.2005 20:42 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
Rozbalit Rozbalit vše Re: Na velikosti nezáleží!
Co třeba bool a BOOL? To jsou sice názvy typů, nikoli souborů, ale je to ukázka toho, že to význam má. Navíc, case-insensitive řešení vede k tomu, že se case-preserve bere na lehkou váhu, resp. si se špatnou implementací nikdo neláme hlavu. Kvanta aplikací pod Win jsou toho důkazem.
Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
4.11.2005 22:02 paskma | skóre: 13 | blog: Paskmův blog
Rozbalit Rozbalit vše Re: Na velikosti nezáleží!
BOOL a bool? Co to má znamenat? Je hromada programovacích jazyků, kde se velikost písmen neřeší. Ale tam to má jakýs takýs smysl, i když identifikátory by se neměly lišit jen velikostí písmenek.

Pos Wokny se mi nestalo, že by mi program zmršil písmenka.
Luk avatar 4.11.2005 23:31 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
Rozbalit Rozbalit vše Re: Na velikosti nezáleží!
BOOL a bool? Co to má znamenat?
To jsou různé datové typy. BOOL - typicky 4 B dlouhý (většinou definován jako int, v některých případech jako long), oblíbený hlavně u Microsoftu (jak v C, tak v C++). bool - dlouhý obvykle 1 B, specifický pro C++, hojně využívaný ve standardních knihovnách C++.
Pos Wokny se mi nestalo, že by mi program zmršil písmenka.
To mně už mockrát. Některé programy s tím nakládají dost svérázně.
Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
4.11.2005 20:24 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: Na velikosti nezáleží!
Nevím, sice to jde, ale imho si nikdo nepojmenovává soubory
foo foO fOo fOO Foo FoO FOo FOO
Tady se příkláním k tomu, že case-preverse je logičtější řešení. Ale case-sensitive nejspíš bude v POSIXu, takže se ho nejspíš nezbavíme :-).
When your hammer is C++, everything begins to look like a thumb.
4.11.2005 21:45 VícNežNic | skóre: 42 | blog: Spáleniště | Ne dost daleko
Rozbalit Rozbalit vše Re: Na velikosti nezáleží!
Case-perverse?
Copak toho není dost?
Pavel Stárek avatar 4.11.2005 21:07 Pavel Stárek | skóre: 44 | blog: Tady bloguju já :-) | Kolín
Rozbalit Rozbalit vše Re: Na velikosti nezáleží!
Odpovědět | Sbalit | Link | Blokovat | Admin
Souborový systém FAT (český překlad TUK, Tabulka Umístění Kousků)
FAT - File Allocation Table určitě není v překladu "Tabulka umístění kousků", nýbrž něco jako Tabulka umístění souborů.
Kdo chce, hledá způsob; kdo nechce, hledá důvod.
4.11.2005 21:42 Spike | skóre: 30 | blog: Communicator | Praha
Rozbalit Rozbalit vše Re: Na velikosti nezáleží!
Asi nemáš moc smysl pro humor, co? ^_~
4.11.2005 22:52 #Tom
Rozbalit Rozbalit vše Re: Na velikosti nezáleží!
(FAT) file allocation table = (SRP) stůl na rozdělení pilníků :-)
4.11.2005 22:31 Miloslav Ponkrác | blog: miloslavponkrac
Rozbalit Rozbalit vše Re: Na velikosti nezáleží!
Odpovědět | Sbalit | Link | Blokovat | Admin
Já si myslím, že case insensitive filesystém přináší jenom problémy. Možná tomu špatně rozumím, ale v každém jazyce jsou jinak postavená velká a malá písmena a pak by se takový filesystém měl chovat v závislosti na nastaveném locale.

Pokud by se do názvů souborů dostávaly i písmenka s diskritikou, pak se může stát, že v jednom jazyce by měl filesystém povoleny určité dva názvy souborů, zatímco v jiném jazyce by tyto názvy souborů měly problém, protože by se lišily jen velikostí písma.

Myslím si, že mít case sensitive filesystémy je lepší a přináší definovatelné chování bez závislosti na nastaveném jazyce.

Na druhé straně si myslím, že vyrábět názvy souborů, které se liší jenom velikostí písmen je špatný zvyk. Z tho důvodu mě naštvalo, když třeba kdosi vymyslel, že zdrojové kódy pro jazyk C budou mít příponu .c, zatímco pro jazyk C++ to bude .C. To se naštěstí neujalo.
http://ponkrac.net
4.11.2005 22:45 paskma | skóre: 13 | blog: Paskmův blog
Rozbalit Rozbalit vše Re: Na velikosti nezáleží!
Locale s tím nemá co dělat. Slušné systémy ukládají jména v unicode. No a pokud je mezi nějakými unicode-znaky definován vztah malé - velké, pak by nemělo být možné vytvořit dvě jména, které se liší jenom takto.

Jo, je to složitější.
5.11.2005 04:24 Miloslav Ponkrác | blog: miloslavponkrac
Rozbalit Rozbalit vše Re: Na velikosti nezáleží!
Nikoli, to že je to Unicode Tě nezachrání. Převod na malá/velká písmena, stejně tak jako porovnávání řetězců s ignorováním velikostí písmen je závislé na jazyku. A to i když použiješ Unicode.

Tím Ti chci jenom naznačit, že Tvůj návrh na to, aby filesystémy byly case insensitive nemá jednoduché řešení. Pokud začneš takový filesystém budovat, začneš se zamotávat do problémů a nakonec zjistíš, že takový filesystém navrhneš jenom s určitými kompromisy a s rizikem, že se sem tam prostě nedostaneš k důležitému souboru jenom proto, že někdo přepnul aktuální jazyk. To není dobrá vlastnost pro filesystémy a proto tvrdím, že budovat case insensitive filesystémy je blbost. A tyto popsané problémy jsou prosím problémy, které mohou nastat na Windows, které case insensitive používají (a názvy souborů samozřejmě ukládají v Unicode).
5.11.2005 11:23 paskma | skóre: 13 | blog: Paskmův blog
Rozbalit Rozbalit vše Re: Na velikosti nezáleží!
Asi jo, může to být závislé na jazyku. Uznávám, dostanu se tím do problémů.

Mě by vlastně stačilo, kdyby bylo case-insensitive doplňování jmen souborů v bashi :-). To se dá samozřejmě zajistit.
5.11.2005 14:43 paskma | skóre: 13 | blog: Paskmův blog
Rozbalit Rozbalit vše Re: Na velikosti nezáleží!
mně! paskmo!
5.11.2005 16:07 Premilek
Rozbalit Rozbalit vše Re: Na velikosti nezáleží!
Nějak nevidím tu závislost na jazyku. Nebyl by nějaký příklad?
5.11.2005 16:23 paskma | skóre: 13 | blog: Paskmův blog
Rozbalit Rozbalit vše Re: Na velikosti nezáleží!
Je to jen teoretické nebezpečí.

Třeba malé psací g je v ruštině d, takže D. Ale to je blbý příklad, protože ruské znaky Д a д majá jiný kód, než české D :-)

Spíš by to mohlo nastat u nějakých variant latinky (všelijaké ty ocásky, čárky, háčky).
5.11.2005 17:08 Miloslav Ponkrác | blog: miloslavponkrac
Rozbalit Rozbalit vše Re: Na velikosti nezáleží!
Příklad? První co mi okamžitě vyhodil google:

The most obivous example is that the ordinary ASCII character I is lowercased to i in most languages, but in Turkish is lowercased to ı = U+0131 = LATIN SMALL LETTER DOTLESS I.

Jinak pravdědpodně nejvíce příkladů ohledně problematičnosti převodů lower/upper/insensitive comparing najdete na vývojářských stránkách Microsoftu, včetně příkladů, které ukazují jak naprosto rozdílné výsldky můžete dostat v závislosti na nastavení jazyka.
5.11.2005 19:52 premilek
Rozbalit Rozbalit vše Re: Na velikosti nezáleží!
Hmm, tak nevezmem Turky do EU a prosadime EUropsky standard ;-)

... Hypotetickym resenim by bylo, kdyby byly (nejlepe primo ve standardu Unicode) definovany skupiny ekvivalentnich znaku. Napr.: {a, A}, {i, I, ı = U+0131}, ...

(pokud by vubec slo zohlednit timto zpusobem vice mene vsechny locale)
5.11.2005 19:52 premilek
Rozbalit Rozbalit vše Re: Na velikosti nezáleží!
Hmm, tak nevezmem Turky do EU a prosadime EUropsky standard ;-)

... Hypotetickym resenim by bylo, kdyby byly (nejlepe primo ve standardu Unicode) definovany skupiny ekvivalentnich znaku. Napr.: {a, A}, {i, I, ı = U+0131}, ...

(pokud by vubec slo zohlednit timto zpusobem vice mene vsechny locale)
5.11.2005 02:47 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: Na velikosti nezáleží!
Odpovědět | Sbalit | Link | Blokovat | Admin
Pokud se nepletu, tak odpadky po sobě sbírá Java. (Nemám rád Javu.)
Quando omni flunkus moritati
5.11.2005 04:31 Miloslav Ponkrác | blog: miloslavponkrac
Rozbalit Rozbalit vše Re: Na velikosti nezáleží!
Odpadky po sobě sbírá prakticky každý intepretovaný jazyk, a že jich je!
5.11.2005 16:25 paskma | skóre: 13 | blog: Paskmův blog
Rozbalit Rozbalit vše Re: Na velikosti nezáleží!
Musím konečně napsat ten oslavný blogspot na GC...
5.11.2005 12:39 Ladislav Thon
Rozbalit Rozbalit vše Re: Na velikosti nezáleží!
Odpovědět | Sbalit | Link | Blokovat | Admin
Sběr odpadků je taky úžasný příklad skvělého výběru překladatelů odborné literatury, ale můj oblíbený "návrat košíku" tedy určitě nepřekonává :)
wake avatar 5.11.2005 15:01 wake | skóre: 30 | blog: wake | Praha
Rozbalit Rozbalit vše Re: Na velikosti nezáleží!
to jako CR? to je návrat vozíku.
Tento příspěvek má hlavičku i patičku!

Založit nové vláknoNahoru

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