Hlavní navigace

Mono občasník :)

13. 10. 2006 20:35 | yakeen

Tak tu máme další dávku novinek z vývoje Mona. Je-li to pro Vás zajímavé, pokračujte ve čtení :)

mcs a gmsc znovu sdílejí stejný kód
Po dlouhé době (asi 3 roky) se kód obou těchto C# kompilerů potkal v jednom repozitáři. Kompilátor gmcs se oddělil jako experimentální, specifikace generik a jiných vlastností jazyka C# verze 2.0 tehdy nebyla dokončena. Nyní byl prohlášen jako stabilní. Od vydání Mono 1.1.18 budou oba kompilátory založeny na stejném kódu.

Mono na platformě Alpha
Sergey Tikhonov pracoval několik měsíců na portu Mono JIT pro platformu Alpha. Port už umožňuje běh aplikací včetně grafických založených třeba na Gtk#. Momentálně port postrádá podporu debugeru, globálních registrů a některých optimalizací, na ty si budeme muset ještě počkat. Nicméně kód je již v repozitáři a bude zařazen do vydání Mono 1.1.18.

Mono portability layer
Spousta vývojářů nikdy nepočítala s tím, že by jejich program někdy měl běžet pod jiným operačním systémem než Windows. V drtivé většině naleznete ve většině programů natvrdo napsané cesty s označením disku např. „c:“ a o oddělovačích adresářů ani nemluvě. Standartní knihovny sice mají funkcioalitu pro tyto případy, málokdo ji však využívá. Ne vždy se však dá program upravit aby fungoval všude správně (autor nejeví zájem, společnost nechce investovat peníze do vývoje, atp.), proto Dick Porter naimplementoval vrstvu pro zajištění přenositelnosti programů. Tato funkce bude aktivována, pokud v prostředí je nadefinována proměnná MONO_IOMAP. A ta může nabývat těch to hodnot:

  • case – zajistí, že názvy souborů a adresářů budou brány bez ohledu na velikost znaků, oddělovače cesty budou transformovány na systémové
  • drive – odstraní názvy disků z cest
  • all – zapne obě předchozí možnosti zároveň

Tato funkcionalita bude obsažena také v Monu 1.1.18, které je již za dveřmi.

Perlička dne
V C# kompilátoru (gmcs) přibyla nová funcionalita související s definicí nullable typů. Operátor ?? umožňuje zkrácený zápis následujícího tenaru:

    a ?? b se evaluuje jako a == null ? b : a