Cω | |
---|---|
Jazyková třída | distribuované, orientované na data |
Typ provedení | zkompilován do MSIL |
Objevil se v | 2005 |
Autor | Nick Benton, Gavin Bierman, Luca Cardelli, Erik Meijer, Claudio Russo, Wolfram Schulte |
Vývojář | Výzkum společnosti Microsoft |
Typový systém | přísný, syntaktický |
Hlavní implementace | Náhled kompilátoru Microsoft Cω |
Byl ovlivněn | C# , polyfonní C# |
webová stránka | microsoft.com/en-us/rese… |
Cω (vyslov: si omega , obvykle se píše: Cw nebo Comega ) je programovací jazyk, rozšíření programovacího jazyka C# , vyvinutý společností Microsoft Research . Dříve známý pod kódovými názvy X# a Xen byl přejmenován na Cω poté, co byl integrován s Polyphonic C# , dalším vyvíjeným jazykem.
Cílem Cω je poskytnout přirozený přístup k externím zdrojům polostrukturovaných a strukturovaných dat, jako jsou databáze nebo dokumenty XML , stejně pohodlný jako tradiční datové typy (jako je řetězec nebo pole). Mnoho nápadů bylo zděděno z dřívějšího projektu X#. Cω také zahrnuje nové strukturální komponenty na podporu paralelního programování; tyto rysy byly těžce vypůjčeny z raných fází Polyphonic C# .
Jazykové vlastnosti byly použity k vytvoření komponenty LINQ v .NET Framework, komponenty paralelního programování jsou v mírně upravené podobě distribuovány jako Joins Concurrency Library pro C# a další jazyky .NET.
Jazyk je Microsoftem popsán jako [1] silně typovaný, datově orientovaný a navržený tak, aby kombinoval semi-strukturovaná data ( XML ), relační data ( SQL ) a .NET CTS .
Příklady integrace syntaxe jazyka s daty:
Proud [4] ( anglicky stream ) v Cω je, stejně jako pole, množina objektů stejného typu. Na rozdíl od dat v poli se data v proudu vytvářejí přímo, když se k nim přistupuje, pomocí generátorů . Syntakticky generátor vypadá jako běžná metoda, kromě toho, že generátor může vrátit více objektů. Typ proudu je deklarován přidáním hvězdičky za název typu - T*.
// Generátor vláken int * OneToTen () { for ( int i = 1 ; i <= 10 ; i ++) yield return i ; } // Použití generátoru k výstupu proudu int * IntStream = OneToTen (); foreach ( int j v IntStream ) { Console . WriteLine ( j ); };Typ výběru [2] je definován klíčovým slovem choicea označuje, že data lze definovat různými způsoby. Například deklarace struktury Address:
struct Adresa { struct { volba { string Ulice ; int POBox ; }; stringCity ; _ int? PSČ ; řetězec Země ; }; }znamená, že může uložit buď název ulice jako řetězec ( string Street) nebo číslo poštovní schránky jako číslo ( int POBox), ale ne obojí. Členský hovor Address::Streetvrátí buď řetězec názvu ulice, pokud jej struktura obsahuje, nebo nullpokud struktura obsahuje číslo poštovní schránky.
Název třídy při deklaraci proměnné lze zapsat jako T?. S takovou deklarací v případě přístupu ke členům třídy v neinicializovaném objektu nebude vyvolána výjimka nulové reference, ale místo toho bude vrácena hodnota null.
Tlačítko b = null ; bool d = b . AllowDrop ; // Výjimka NullReference tlačítko ? b = null ; bool? d = b . AllowDrop ; // vrátí hodnotu nullAnonymní typy odpovídají prvku xs:sequenceve schématu XML . Anonymní typy struktur jsou podobné běžným typům struktur v C#, ale mají řadu významných rozdílů:
V Cω můžete vytvářet objekty pomocí syntaxe XML a entity XML mohou obsahovat vložený kód pro výpočet hodnoty. Protože je však Cω silně typovaný jazyk, jména členů objektů a také jejich typy musí být známy v době kompilace. Níže uvedený příklad ukazuje, jak lze použít syntaxi XML:
public class NewsItem { atribut string title ; struct { DateTime date ; tělo struny ; } public static void Main () { NewsItem news = < NewsItem title = "Hello World" > < date >{ DateTime . Nyní }</ date > < body > Jsem první příspěvek nového roku . < / body > < / NewsItem > ; Konzole . WriteLine ( news . title + "on" + news . date ); } }S příchodem proudů a anonymních struktur, které mohou obsahovat více členů se stejným jménem, lze i jednoduchý přístup ke členu pomocí operátoru tečka v Cω považovat za dotaz. Například books.Book.titlevrátí vlastnosti titlevšech objektů Bookz books.
Operátor " .*" se používá k získání všech polí v typu. Například books.Book.*vrátí proud všech členů všech objektů Bookz books.
Cω také podporuje přístup tranzitivních členů přes …operátor " ". Operace books…titlevrací proud obsahující všechny členy title, které jsou obsaženy ve třídě booksnebo v jejím obsahu (rekurzí). Operátor tranzitivního přístupu lze také použít pro přístup k členům určitého typu: …typename::*. Například books…string::*vrátí proud obsahující všechny členy typu stringobsažené ve třídě booksnebo v jejím obsahu (pomocí rekurze).
Filtrování lze použít na výsledky operátora tranzitivního přístupu. Filtr je aplikován na dotaz pomocí [expression]operátoru " ".
struct { int a ; int b ; int c ;} z = new { a = 5 , b = 10 , c = 15 }; int * hodnoty = z ... int ::*[ it > 8 ]; foreach ( int i v hodnotách ){ Konzole . WriteLine ( i + "je větší než 8" ); }Cω zavádí následující operace SQL jako klíčová slova jazyka:
Tento přístup umožňuje pracovat s daty pomocí dotazů podobných SQL.
public class Test { enum CDStyle { Alt , Classic , HipHop } static struct { string Titulek ; smyčcový umělec ; styl CDStyle ; int Rok ;}* CD = new { new { Název = "Lucky Frog" , Umělec = "Holly Holt" , Styl = CDStyle . Alt , Rok = 2001 }, nové { Název = "Kamikaze" , Umělec = "Twista" , Styl = CDStyle . HipHop , rok = 2004 }, nové { Title = "Stop Light Green" , Artist = "Robert O'Hara" , Styl = CDStyle . Alt , Rok = 1981 }, }; public static void Hlavní (){ struct { string Titulek ; string Artist ;}* výsledky ; výsledky = vyberte Název , Umělce z CD kde Styl == CDStyle . hip- hop výsledky . Konzole . WriteLine ( "Název = {0}, Interpret = {1}" , it . Název , it . Umělec ); }; } }C# | |
---|---|
Verze |
|
NA |
|
Příbuzný |
.SÍŤ | |
---|---|
Implementace | |
Architektura | |
Infrastruktura | |
jazyky Microsoft | |
Jiné jazyky | |
Základy Windows | |
Komponenty | |
Srovnání |
|
Budoucí technologie | |
Informační zdroje |
Microsoft Research (MSR) | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Hlavní projekty |
| ||||||||||||||
Laboratoře MSR |
| ||||||||||||||
Kategorie |