Cω | |
---|---|
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.
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:
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 ); };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.
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 nullAnonyme 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:
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 ); } }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" ); }Cω introducerer følgende SQL-operationer som sprognøgleord:
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 ); }; } }C# | |
---|---|
Versioner |
|
PÅ |
|
Relaterede |
.NET | |
---|---|
Implementeringer | |
Arkitektur | |
Infrastruktur | |
Microsoft sprog | |
Andre sprog | |
Windows Foundations | |
Komponenter | |
Sammenligninger |
|
Fremtidige teknologier | |
Informationsressourcer |
Microsoft Research (MSR) | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Hovedprojekter _ |
| ||||||||||||||
MSR Labs |
| ||||||||||||||
Kategori |