Ruby dobre pracuje so znakom Unicode v súborových cestách a názvoch súborov v systémoch Mac OS X a Linux, ale prečo fungovať v systéme Windows, trvalo viac ako 2 roky?
Práve som sa pozeral na kód Google Jam. Ľudia riešia netriviálne problémy do niekoľkých hodín. V práci si dokážem predstaviť riešenie problému s názvom súboru alebo cesty, ktorý má znaky unicode, aj keď ho potrebujeme napísať do štandardnej knižnice, aby bolo možné vyriešiť ho za deň alebo dva, pár dní alebo 1 alebo 2 týždne? Ale 2 roky?
Čo by mohlo byť dôvodom? Myslím, že Mac OS X a Linux môžu fungovať tak, ako to bolo, pretože používali utf-8 a veľa programových kódov ASCII môže dobre fungovať s utf-8 bez akýchkoľvek úprav.
Systém Windows možno vracia názvy súborov alebo cestu v UTF-16, takže je to komplikovanejšie, ale existujú funkcie na prevod UTF-16 na utf-8 a naopak, takže nejde o celkom riešiteľný problém?
odpovede:
2 pre odpoveď č. 1Je to určite riešiteľný problém, ale myslím si, že niktov jadre tímu používa Windows na vývoj. Pre takéto témy je riešenie OSX / Linux / BSD / ... dostupné rýchlo, pretože vo väčšine prípadov je to len jedno riešenie pre všetky tieto platformy a práve tie platformy používajú hlavne vývojári jadra a ľudia jadro uzatvárajú (tj. ochotný prísť s opravou a ponúknuť podporu). Majte tiež na pamäti, že hlavným prípadom použitia Ruby je pre webové aplikácie, a prinajmenšom v krajine Ruby je nasadenie systému Windows neobvyklé.
Na pomoc desktopovým / konzolovým aplikáciám je Rubypopulárne iba na OSX, ako to vidím ja. Na Linuxe je v tejto oblasti pomerne dominantný Python a na Windows nič také neexistuje (možno aj VBScript), pretože často nemáte malé aplikácie, ktoré by navzájom interagovali (konzolové programy, rúry, princíp KISS, princíp UNIX, všetko nie veľmi časté v systéme Windows, musíte napísať službu pre čokoľvek atď.). Ale to nemôžem naozaj posúdiť, pretože som Windows roky nepoužíval. Preto máte len zopár ľudí, ktorí majú skutočne tento problém. A ak nikto z týchto ľudí nie je ochotný problém vyriešiť, trvá to dva roky.
2 pre odpoveď č. 2
Pretože na vykonanie každej triviálnej operácie musíte mať medzi OS a vašim programom obrovskú vrstvu.
i fopen()
nefunguje s utf-8 v systéme Windows. Inými slovami, dôvod je ten, že Windows Unicode API je ... svinstvo (prepáčte všetkým vývojárom Windows)
Takže podpora Unicode v systéme Windows je veľmi ťažká, zatiaľ čo všetky ostatné operačné systémy žijú šťastne s utf-8.