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.

Vlastnosti jazyka

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:

Některé syntaktické rysy jazyka

Typ toku

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

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.

Možné hodnoty null

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 null

Anonymní typy struktur

Anonymní 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ů:

  • neexistuje žádný explicitní název typu pro anonymní strukturu
  • členové v anonymní struktuře jsou uspořádáni, což umožňuje přístup k nim prostřednictvím indexu
  • členové anonymní struktury nemusí mít jméno, mohou mít pouze typ
  • anonymní struktura může mít více členů se stejným jménem, ​​v takovém případě bude proud vrácen, když k němu přistoupíte pod tímto jménem
  • anonymní struktury se stejnou strukturou (členové stejných tříd ve stejném pořadí) jsou kompatibilní a lze jim přiřadit hodnoty.
struct { int ; řetězec _ řetězec _ Datum a čas datum ; string ;} x = new { 47 , "Hello World" , "Dare Obasanjo" , date = DateTime . Nyní , "Toto je můj první příběh" }; Konzole . WriteLine ( x [ 1 ]); // Ahoj světe

Použití konstrukcí XML

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 ); } }

Přístup ke členům

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" ); }

SQL operace

Cω zavádí následující operace SQL jako klíčová slova jazyka:

  • projekce( select, from);
  • filtrování ( distinct, top, where);
  • seřadit ( order by, asc, desc);
  • seskupení( group by, having, Count, Min, Max, Avg, Sum, Stddev);
  • odbory ( inner join, left join, right join, outer join);
  • modifikace ( insert, update, delete, transact, commit, rollback);

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 ); }; } }

Poznámky

  1. Microsoft přemosťování relačních, objektových, XML datových modelů Archivováno 16. června 2008.  (Angličtina)
  2. 1 2 Comega Home Page: Choise Type Tutorial Archived 27. března 2008 na Wayback Machine 
  3. 1 2 MSDN: Přehled Cω Archivováno 10. února 2009 na Wayback Machine 
  4. Comega Home Page: Streams Tutorial Archived 11. dubna 2008 na Wayback Machine 

Odkazy