Cω | |
---|---|
Clasa de limba | distribuite, orientate pe date |
Tipul de execuție | compilat în MSIL |
Aparut in | 2005 |
Autor | Nick Benton, Gavin Bierman, Luca Cardelli, Erik Meijer, Claudio Russo, Wolfram Schulte |
Dezvoltator | Cercetare Microsoft |
Tip sistem | strict, sintactic |
Implementări majore | Previzualizarea compilatorului Microsoft Cω |
A fost influențat | C# , C# polifonic |
Site-ul web | microsoft.com/en-us/rese… |
Cω (pronunțat: si omega , scris de obicei: Cw sau Comega ) este un limbaj de programare, o extensie a limbajului de programare C# , dezvoltat de Microsoft Research . Cunoscut anterior sub numele de cod X# și Xen, a fost redenumit Cω după ce a fost integrat cu Polyphonic C# , un alt limbaj în curs de dezvoltare.
Scopul Cω este de a oferi acces natural la surse externe de date semi-structurate și structurate, cum ar fi baze de date sau documente XML , la fel de convenabil ca și tipurile de date tradiționale (cum ar fi șir sau matrice). Multe dintre idei au fost moștenite din proiectul X# anterior. Cω include, de asemenea, noi componente structurale pentru a sprijini programarea paralelă; aceste caracteristici au fost foarte împrumutate din primele etape ale Polyphonic C# .
Caracteristicile limbajului au fost folosite pentru a crea componenta LINQ în .NET Framework, componentele de programare paralelă, într-o formă ușor modificată, sunt distribuite ca Joins Concurrency Library pentru C# și alte limbaje .NET.
Limbajul este descris de Microsoft ca [1] puternic tipizat, centrat pe date și conceput pentru a combina date semi-structurate ( XML ), date relaționale ( SQL ) și .NET CTS .
Exemple de integrare a sintaxei limbajului cu date:
Un flux [4] ( English stream ) în Cω este, ca un tablou, un set de obiecte de același tip. Spre deosebire de datele dintr-o matrice, datele dintr-un flux sunt create direct atunci când sunt accesate, folosind generatoare . Sintactic, un generator arată ca o metodă obișnuită, cu excepția faptului că un generator poate returna mai multe obiecte. Un tip de flux este declarat prin adăugarea unui asterisc după numele tipului - T*.
// Generator de fire int * OneToTen () { for ( int i = 1 ; i <= 10 ; i ++) randament return i ; } // Folosind un generator pentru a scoate un flux int * IntStream = OneToTen (); foreach ( int j în IntStream ) { Consolă . WriteLine ( j ); };Tipul de selectare [2] este definit de cuvântul cheie choiceși indică faptul că datele pot fi definite în moduri diferite. De exemplu, o declarație de structură Address:
struct Adresa { struct { alegere { string Strada ; int POBox ; }; stringCity ; _ int? Cod poștal ; șir Țara ; }; }înseamnă că poate stoca fie un nume de stradă ca șir ( string Street) fie un număr de cutie poștală ca număr ( int POBox), dar nu ambele. Apelul membrului Address::Streetva returna fie șirul numelui străzii dacă structura conține unul, fie nulldacă structura conține un număr de cutie poștală.
Numele clasei la declararea unei variabile poate fi scris ca T?. Cu o astfel de declarație, în cazul accesului la membrii clasei într-un obiect neinițializat, o excepție de referință nulă nu va fi aruncată, ci în schimb valoarea va fi returnată null.
Butonul b = nul ; bool d = b . AllowDrop ; // NullReferenceException butonul ? b = nul ; bool? d = b . AllowDrop ; // returnează nulTipurile anonime corespund unui element xs:sequencedin Schema XML . Tipurile de structuri anonime sunt similare cu tipurile de structuri obișnuite în C#, dar au o serie de diferențe semnificative:
În Cω, puteți crea obiecte folosind sintaxa XML, iar entitățile XML pot conține cod inline pentru a calcula o valoare. Cu toate acestea, deoarece Cω este un limbaj puternic tipizat, numele membrilor obiectului, precum și tipurile acestora trebuie să fie cunoscute în timpul compilării. Exemplul de mai jos arată cum poate fi utilizată sintaxa XML:
public class NewsItem { atribut șir titlu ; struct { DateTime date ; corp șir ; } public static void Main () { NewsItem news = < NewsItem title = "Bună ziua, lume" > < data >{ DateTime . Acum }</ date > < body > Sunt primul post al Anului Nou . </ body > < / NewsItem > ; Consola . WriteLine ( știri . titlu + " pe " + știri . dată ); } }Odată cu apariția fluxurilor și a structurilor anonime care pot conține mai mulți membri cu același nume, chiar și accesul simplu la un membru folosind operatorul punct în Cω poate fi tratat ca o interogare. De exemplu, books.Book.titleva returna proprietățile titletuturor obiectelor Bookdin books.
Operatorul „ .*” este folosit pentru a obține toate câmpurile dintr-un tip. De exemplu, books.Book.*returnează un flux de toți membrii tuturor obiectelor Bookdin books.
Cω acceptă, de asemenea, accesul tranzitiv al membrilor prin …operatorul " ". Operația books…titlereturnează un flux care conține toți membrii titlecare sunt conținute în clasă bookssau în conținutul acesteia (prin recursivitate). Operatorul de acces tranzitiv poate fi folosit și pentru a accesa membri de un anumit tip: …typename::*. De exemplu, books…string::*returnează un flux care conține toți membrii de tip stringconținut în clasa bookssau în conținutul acesteia (prin recursivitate).
Filtrarea poate fi aplicată rezultatelor unui operator de acces tranzitiv. Filtrul este aplicat interogării folosind [expression]operatorul " ".
struct { int a ; int b ; int c ;} z = nou { a = 5 , b = 10 , c = 15 }; int * valori = z ... int ::*[ it > 8 ]; foreach ( int i în valori ){ Consolă . WriteLine ( i + " este mai mare decât 8 " ); }Cω introduce următoarele operații SQL ca cuvinte cheie de limbă:
Această abordare vă permite să lucrați cu date folosind interogări asemănătoare SQL.
test de clasă publică { enumerare CDStyle { Alt , Clasic , HipHop } static struct { string Titlu ; string Artist ; Stilul CDStyle ; int An ;}* CD-uri = nou { nou { Titlu = „Lucky Frog” , Artist = „Holly Holt” , Style = CDStyle . Alt , An = 2001 }, nou { Titlu = „Kamikaze” , Artist = „Twista” , Stil = CDStyle . HipHop , An = 2004 }, nou { Titlu = "Stop Light Green" , Artist = "Robert O'Hara" , Style = CDStyle . Alt , An = 1981 }, }; public static void Principal (){ struct { șir Titlu ; string Artist ;}* rezultate ; rezultate = selectați Titlu , Artist de pe CD-uri unde Style == CDStyle . hip- hop rezultate .{ Consolă . WriteLine ( "Titlu = {0}, Artist = {1}" , it . Titlu , it . Artist ); }; } }C# | |
---|---|
Versiuni |
|
PE |
|
Legate de |
.NET | |
---|---|
Implementări | |
Arhitectură | |
Infrastructură | |
Limbi Microsoft | |
Alte limbi | |
Fundamente Windows | |
Componente | |
Comparații |
|
Tehnologii viitoare | |
Resurse informaționale |
Microsoft Research (MSR) | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Principalele proiecte |
| ||||||||||||||
Laboratoarele MSR |
| ||||||||||||||
Categorie |