Cω | |
---|---|
Kieliluokka | hajautettu, datasuuntautunut |
Toteutustyyppi | koottu MSIL :lle |
Esiintyi | 2005 |
Tekijä | Nick Benton, Gavin Bierman, Luca Cardelli, Erik Meijer, Claudio Russo, Wolfram Schulte |
Kehittäjä | Microsoftin tutkimus |
Tyyppijärjestelmä | tiukka, syntaktinen |
Tärkeimmät toteutukset | Microsoft Cω -kääntäjän esikatselu |
Vaikutettu | C# , polyfoninen C# |
Verkkosivusto | microsoft.com/en-us/rese… |
Cω (lausutaan: si omega , kirjoitetaan yleensä: Cw tai Comega ) on Microsoft Researchin kehittämä ohjelmointikieli, C# -ohjelmointikielen laajennus . Se tunnettiin aiemmin koodinimillä X# ja Xen, ja se nimettiin uudelleen Cω:ksi sen jälkeen, kun se oli integroitu Polyphonic C# -kieleen , joka on toinen kehitteillä oleva kieli.
Cω:n tavoitteena on tarjota luonnollinen pääsy ulkoisiin puolistrukturoidun ja strukturoidun tiedon lähteisiin, kuten tietokantoihin tai XML-dokumentteihin , yhtä kätevästi kuin perinteiset tietotyypit (kuten merkkijono tai taulukko). Monet ideat periytyivät aikaisemmasta X#-projektista. Cω sisältää myös uusia rakenteellisia komponentteja tukemaan rinnakkaisohjelmointia; nämä ominaisuudet lainattiin voimakkaasti Polyfonisen C# :n alkuvaiheista .
Kieliominaisuuksia käytettiin .NET Frameworkin LINQ -komponentin luomiseen , rinnakkaisohjelmointikomponentit, hieman muokatussa muodossa, jaetaan Joins Concurrency Library -kirjastona C#:lle ja muille .NET-kielille.
Microsoft kuvailee kieltä [1] vahvasti kirjoitetuksi, datakeskeiseksi ja suunniteltu yhdistämään puolistrukturoitua dataa ( XML ), relaatiodataa ( SQL ) ja .NET CTS :ää .
Esimerkkejä kielisyntaksin integroimisesta dataan:
Virta [4] ( englanniksi stream ) Cω:ssä on, kuten taulukko, joukko samantyyppisiä objekteja. Toisin kuin taulukon tiedot, virran tiedot luodaan suoraan, kun niitä käytetään generaattoreiden avulla . Syntaktisesti generaattori näyttää tavalliselta menetelmältä, paitsi että generaattori voi palauttaa useita objekteja. Virtatyyppi määritetään lisäämällä tähti tyypin nimen perään T*.
// Lankageneraattori int * OneToTen () { for ( int i = 1 ; i <= 10 ; i ++) tuottotuotto i ; } // Generaattorin käyttäminen virran tulostamiseen int * IntStream = OneToTen (); foreach ( int j IntStreamissa ) { Konsoli . _ WriteLine ( j ); };Valintatyyppi [2] määritellään avainsanalla choice, ja se osoittaa, että tiedot voidaan määrittää eri tavoin. Esimerkiksi rakenneilmoitus Address:
struct Osoite { struct { valinta { string Katu ; int PL ; }; stringCity ; _ int? Postinumero ; merkkijono Maa ; }; }tarkoittaa, että se voi tallentaa joko kadun nimen merkkijonona ( string Street) tai postilaatikon numeron numerona ( int POBox), mutta ei molempia. Jäsenkutsu Address::Streetpalauttaa joko kadunnimen merkkijonon, jos rakenne sisältää sellaisen, tai nulljos rakenne sisältää postilaatikon numeron.
Luokan nimi muuttujaa määritettäessä voidaan kirjoittaa muodossa T?. Tällaisella ilmoituksella, jos luokan jäseniä käsitellään alustamattomassa objektissa, null-viittauspoikkeusta ei heitettä, vaan arvo palautetaan null.
Painike b = tyhjä ; bool d = b . AllowDrop ; // NullReferenceException painiketta ? b = nolla ; bool? d = b . AllowDrop ; // palauttaa nollanAnonyymit tyypit vastaavat XML Schemaxs:sequence - elementtiä . Nimettömät rakennetyypit ovat samanlaisia kuin tavalliset C#:n rakennetyypit, mutta niissä on useita merkittäviä eroja:
Cω:ssä voit luoda objekteja käyttämällä XML-syntaksia, ja XML-entiteetit voivat sisältää sisäistä koodia arvon laskemiseksi. Koska Cω on kuitenkin vahvasti tyypitetty kieli, objektin jäsenten nimet ja niiden tyypit on tiedettävä käännöshetkellä. Alla oleva esimerkki näyttää, kuinka XML-syntaksia voidaan käyttää:
public class NewsItem { attribuuttimerkkijono otsikko ; _ struct { DateTime date ; merkkijono runko ; } public static void Main () { NewsItem news = < NewsItem title = "Hei maailma" > < päivämäärä >{ DateTime . Nyt }< / date > < body > Olen uudenvuoden ensimmäinen viesti . < / body > < / NewsItem > ; konsoli . WriteLine ( news . title + " on " + news . date ); } }Kun ilmaantuu virtoja ja anonyymejä rakenteita, jotka voivat sisältää useita samannimisiä jäseniä, jopa yksinkertainen pääsy jäseneen käyttämällä Cω:n pisteoperaattoria voidaan käsitellä kyselynä. Se esimerkiksi books.Book.titlepalauttaa titlekaikkien objektien ominaisuudet Booktiedostosta books.
Operaattoria " .*" käytetään hakemaan kaikki tyypin kentät. Palauttaa esimerkiksi books.Book.*virran kaikkien objektien kaikista jäsenistä Bookkohteesta books.
Cω tukee myös transitiivista jäsenen pääsyä …operaattorin " " kautta. Toiminto books…titlepalauttaa virran, joka sisältää kaikki jäsenet title, jotka sisältyvät luokkaan bookstai sen sisältöön (rekursiolla). Transitiivista pääsyoperaattoria voidaan käyttää myös tietyn tyyppisten jäsenten käyttämiseen: …typename::*. Esimerkiksi books…string::*palauttaa virran, joka sisältää kaikki stringluokan jäsenet bookstai sen sisällössä (rekursiolla).
Suodatusta voidaan soveltaa transitiivisen pääsyoperaattorin tuloksiin. Suodatinta käytetään kyselyyn [expression]operaattorilla " ".
struct { int a ; int b ; int c ;} z = uusi { a = 5 , b = 10 , c = 15 }; int * arvot = z ... int ::*[ it > 8 ]; foreach ( int i arvoissa ) { Konsoli . WriteLine ( i + " on suurempi kuin 8" ); }Cω esittelee seuraavat SQL-toiminnot kieliavainsanoina:
Tämän lähestymistavan avulla voit työskennellä tietojen kanssa SQL:n kaltaisten kyselyjen avulla.
public class Test { enum CDStyle { Alt , Classic , HipHop } staattinen rakenne { merkkijono Otsikko ; merkkijono Taiteilija ; CDStyle Style ; int Vuosi ;}* CD = uusi { uusi { Otsikko = "Lucky Frog" , Artist = "Holly Holt" , Style = CDStyle . Alt , Vuosi = 2001 }, new { Otsikko = "Kamikaze" , Artist = "Twista" , Tyyli = CDStyle . HipHop , Vuosi = 2004 }, uusi { Otsikko = "Lopeta vaaleanvihreä" , Artisti = "Robert O'Hara" , Tyyli = CDStyle . Alt , vuosi = 1981 }, }; public static void Main (){ struct { string Otsikko ; string Artisti ;}* tulokset ; tulokset = valitse nimi , artisti CD - levyltä , jossa Style == CDStyle . hip -hop tulokset .{ Console . WriteLine ( "Otsikko = {0}, Artisti = {1}" , se . Nimi , se . Artisti ); }; } }C# | |
---|---|
Versiot |
|
PÄÄLLÄ |
|
Liittyvät |
.NETTO | |
---|---|
Toteutukset | |
Arkkitehtuuri | |
Infrastruktuuri | |
Microsoftin kielet | |
Muut kielet | |
Windows Foundations | |
Komponentit | |
Vertailut |
|
Tulevaisuuden teknologiat | |
Tietolähteet |
Microsoft Research (MSR) | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Pääprojektit _ |
| ||||||||||||||
MSR Labs |
| ||||||||||||||
Kategoria |