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.

Kielen ominaisuudet

Microsoft kuvailee kieltä [1] vahvasti kirjoitetuksi, datakeskeiseksi ja suunniteltu yhdistämään puolistrukturoitua dataa ( XML ), relaatiodataa ( SQL ) ja .NET CTS :ää .

Esimerkkejä kielisyntaksin integroimisesta dataan:

Jotkut kielen syntaktiset ominaisuudet

Virtaustyyppi

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

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.

Mahdolliset nolla-arvot

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 nollan

Nimettömät rakennetyypit

Anonyymit tyypit vastaavat XML Schemaxs:sequence - elementtiä . Nimettömät rakennetyypit ovat samanlaisia ​​kuin tavalliset C#:n rakennetyypit, mutta niissä on useita merkittäviä eroja:

  • anonyymille rakenteelle ei ole selkeää tyyppinimeä
  • Nimettömän rakenteen jäsenet järjestetään, jolloin niihin pääsee käsiksi hakemiston kautta
  • Nimettömän rakenteen jäseniltä ei vaadita nimeä, heillä voi olla vain tyyppi
  • anonyymisessä rakenteessa voi olla useita jäseniä samalla nimellä, jolloin virta palautetaan, kun sitä käytetään tällä nimellä
  • anonyymit rakenteet, joilla on sama rakenne (saman luokan jäsenet samassa järjestyksessä) ovat yhteensopivia ja arvoja voidaan määrittää.
struct { int ; merkkijono _ merkkijono _ DateTime päivämäärä ; string ;} x = new { 47 , "Hello World" , "Dare Obasanjo" , date = DateTime . Nyt " Tämä on ensimmäinen tarinani" }; konsoli . WriteLine ( x [ 1 ]); // Hei maailma

XML-konstruktioiden käyttäminen

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

Pääsy jäsenille

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

SQL-toiminnot

Cω esittelee seuraavat SQL-toiminnot kieliavainsanoina:

  • projektio( select, from);
  • suodatus ( distinct, top, where);
  • lajitella( order by, asc, desc);
  • ryhmittely( group by, having, Count, Min, Max, Avg, Sum, Stddev);
  • ammattiliitot ( inner join, left join, right join, outer join);
  • muutos ( insert, update, delete, transact, commit, rollback);

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

Muistiinpanot

  1. Microsoftin siltausrelaatio-, objekti-, XML-tietomallit Arkistoitu 16. kesäkuuta 2008.  (Englanti)
  2. 1 2 Comega Home Page: Choise Type -opastus arkistoitu 27. maaliskuuta 2008 Wayback Machinessa 
  3. 1 2 MSDN: Yleiskatsaus Cω:stä Arkistoitu 10. helmikuuta 2009 Wayback Machinessa 
  4. Comega kotisivu: Streams Tutorial arkistoitu 11. huhtikuuta 2008 Wayback Machinessa 

Linkit