Sprog klasse distribueret, dataorienteret
Udførelsestype kompileret til MSIL
Dukkede op i 2005
Forfatter Nick Benton, Gavin Bierman, Luca Cardelli, Erik Meijer, Claudio Russo, Wolfram Schulte
Udvikler Microsoft Research
Type system streng, syntaktisk
Større implementeringer Microsoft Cω compiler forhåndsvisning
Blev påvirket C# , polyfonisk C#
Internet side microsoft.com/en-us/rese...

Cω (udtales: si omega , normalt skrevet: Cw eller Comega ) er et programmeringssprog, en udvidelse af programmeringssproget C# , udviklet af Microsoft Research . Tidligere kendt under kodenavnene X# og Xen, blev det omdøbt til Cω efter at være blevet integreret med Polyphonic C#  , et andet sprog under udvikling.

Målet med Cω er at give naturlig adgang til eksterne kilder til semi-strukturerede og strukturerede data, såsom databaser eller XML-dokumenter , lige så praktisk som traditionelle datatyper (såsom streng eller array). Mange af ideerne blev arvet fra det tidligere X#-projekt. Cω inkluderer også nye strukturelle komponenter til at understøtte parallel programmering; disse funktioner var stærkt lånt fra de tidlige stadier af Polyphonic C# .

Sprogfunktionerne blev brugt til at skabe LINQ -komponenten i .NET Framework, de parallelle programmeringskomponenter, i en let modificeret form, distribueres som Joins Concurrency Library til C# og andre .NET-sprog.

Funktioner af sproget

Sproget beskrives af Microsoft som [1] stærkt skrevet, datacentreret og designet til at kombinere semi-strukturerede data ( XML ), relationelle data ( SQL ) og .NET CTS .

Eksempler på integration af sprogsyntaks med data:

Nogle syntaktiske træk ved sproget

Flowtype

En strøm [4] ( engelsk  strøm ) i Cω er ligesom et array et sæt af objekter af samme type. I modsætning til data i et array, oprettes data i en strøm direkte, når den tilgås ved hjælp af generatorer . Syntaktisk ser en generator ud som en almindelig metode, bortset fra at en generator kan returnere flere objekter. En strømtype erklæres ved at tilføje en stjerne efter typenavnet - T*.

// Trådgenerator int * OneToTen () { for ( int i = 1 ; i <= 10 ; i ++) giver retur i ; } // Brug af en generator til at udlæse en stream int * IntStream = OneToTen (); foreach ( int j i IntStream ) { Konsol . WriteLine ( j ); };

Valgtype

Vælg typen [2] er defineret af nøgleordet choice, og angiver, at data kan defineres på forskellige måder. For eksempel en strukturerklæring Address:

struct Adresse { struct { choice { string Gade ; int POBox ; }; stringCity ; _ int? Postnummer ; streng Land ; }; }

betyder, at den kan gemme enten et vejnavn som en streng ( string Street) eller et postkassenummer som et nummer ( int POBox), men ikke begge dele. Medlemskaldet Address::Streetreturnerer enten gadenavnsstrengen, hvis strukturen indeholder en, eller nullhvis strukturen indeholder et postkassenummer.

Mulige nulværdier

Klassenavnet, når en variabel erklæres, kan skrives som T?. Med en sådan erklæring, i tilfælde af adgang til klassemedlemmer i et ikke-initialiseret objekt, vil en nul-reference-undtagelse ikke blive kastet, men i stedet vil værdien blive returneret null.

Knap b = null ; bool d = b . TilladDrop ; // NullReferenceException knap ? b = null ; bool? d = b . TilladDrop ; // returnerer null

Anonyme strukturtyper

Anonyme typer svarer til et element xs:sequencei XML-skemaet . Anonyme struct-typer ligner almindelige struct-typer i C#, men har en række væsentlige forskelle:

  • der er ikke noget eksplicit typenavn for en anonym struktur
  • medlemmer i en anonym struktur er ordnet, hvilket giver adgang til dem gennem et indeks
  • medlemmer af en anonym struktur er ikke forpligtet til at have et navn, de kan kun have en type
  • en anonym struktur kan have flere medlemmer med samme navn, i hvilket tilfælde en stream vil blive returneret, når den tilgås med det navn
  • anonyme strukturer med samme struktur (medlemmer af samme klasser i samme rækkefølge) er kompatible og værdier kan tildeles.
struct { int ; streng _ streng _ DatoTid dato ; string ;} x = new { 47 , "Hello World" , "Dare Obasanjo" , date = DateTime . Nu , "Dette er min første historie" }; Konsol . WriteLine ( x [ 1 ]); // Hej Verden

Brug af XML-konstruktioner

I Cω kan du oprette objekter ved hjælp af XML-syntaks, og XML-enheder kan indeholde inline-kode til at beregne en værdi. Men da Cω er et stærkt maskinskrevet sprog, skal navnene på objektmedlemmer såvel som deres typer være kendt på kompileringstidspunktet. Eksemplet nedenfor viser, hvordan XML-syntaksen kan bruges:

public class NewsItem { attribute string title ; struct { DateTime date ; streng krop ; } public static void Main () { NewsItem news = < NewsItem title = "Hej verden" > < dato >{ DateTime . Nu }</ date > < body > Jeg er det første indlæg i det nye år .</ body > </ NewsItem >; Konsol . WriteLine ( nyheder . titel + "på" + nyheder . dato ); } }

Adgang til medlemmer

Med fremkomsten af ​​strømme og anonyme strukturer, der kan indeholde flere medlemmer med samme navn, kan selv simpel adgang til et medlem ved hjælp af prikoperatoren i Cω behandles som en forespørgsel. For eksempel vil det books.Book.titlereturnere egenskaberne titlefor alle objekter Bookfra books.

Operatoren " .*" bruges til at få alle felter i en type. Returnerer for eksempel books.Book.*en strøm af alle medlemmer af alle objekter Bookfra books.

Cω understøtter også transitiv medlemsadgang via " …"-operatøren. Operationen books…titlereturnerer en strøm, der indeholder alle de medlemmer title, der er indeholdt i klassen bookseller i dens indhold (ved rekursion). Den transitive adgangsoperatør kan også bruges til at få adgang til medlemmer af en bestemt type: …typename::*. Returnerer for eksempel books…string::*en strøm, der indeholder alle medlemmer af typen stringindeholdt i klassen bookseller i dens indhold (ved rekursion).

Filtrering kan anvendes på resultaterne af en transitiv adgangsoperatør. Filteret anvendes på forespørgslen ved hjælp af [expression]operatoren " ".

struct { int a ; int b ; int c ;} z = ny { a = 5 , b = 10 , c = 15 }; int * værdier = z ... int ::*[ it > 8 ]; foreach ( int i i værdier ){ Konsol . WriteLine ( i + " er større end 8" ); }

SQL-operationer

Cω introducerer følgende SQL-operationer som sprognøgleord:

  • projektion( select, from);
  • filtrering ( distinct, top, where);
  • sortere( order by, asc, desc);
  • gruppering( group by, having, Count, Min, Max, Avg, Sum, Stddev);
  • fagforeninger ( inner join, left join, right join, outer join);
  • modifikation ( insert, update, delete, transact, commit, rollback);

Denne tilgang giver dig mulighed for at arbejde med data ved hjælp af SQL-lignende forespørgsler.

offentlig klasse Test { enum CDStyle { Alt , Classic , HipHop } static struct { string Title ; strygekunstner ; _ CDStyle stil ; int Year ;}* CD'er = new { new { Title = "Lucky Frog" , Artist = "Holly Holt" , Style = CDStyle . Alt , Year = 2001 }, new { Title = "Kamikaze" , Artist = "Twista" , Style = CDStyle . HipHop , Year = 2004 }, new { Title = "Stop Light Green" , Artist = "Robert O'Hara" , Style = CDStyle . Alt , år = 1981 }, }; public static void Main (){ struct { string Title ; string Artist ;}* resultater ; resultater = vælg titel , kunstner fra cd'er , hvor stil == cd- stil . hiphop _ resultater .{ Konsol . WriteLine ( "Titel = {0}, Kunstner = {1}" , det . Titel , det . Kunstner ); }; } }

Noter

  1. Microsoft brobygning af relationelle, objekt-, XML-datamodeller Arkiveret 16. juni 2008.  (Engelsk)
  2. 1 2 Comega Hjemmeside: Vælg type selvstudie Arkiveret 27. marts 2008 på Wayback Machine 
  3. 1 2 MSDN: An Overview of Cω Arkiveret 10. februar 2009 på Wayback Machine 
  4. Comega Hjemmeside: Streams Tutorial Arkiveret 11. april 2008 på Wayback Machine 

Links