Microsoft zaczyna mówić o swoim języku programowania nowej generacji, C# do programowania systemowego

Ikona czasu czytania 3 minuta. czytać


Czytelnicy pomagają wspierać MSpoweruser. Możemy otrzymać prowizję, jeśli dokonasz zakupu za pośrednictwem naszych linków. Ikona podpowiedzi

Przeczytaj naszą stronę z informacjami, aby dowiedzieć się, jak możesz pomóc MSPoweruser w utrzymaniu zespołu redakcyjnego Czytaj więcej

Joe Duffy, architekt i programista zajmujący się badaniem systemu operacyjnego w firmie Microsoft, napisał na blogu o języku programowania nowej generacji, nad którym pracowali w ciągu ostatnich kilku lat. Microsoft opisuje teraz ten nadchodzący język jako rozszerzenia „programowania systemowego” do C#. Firma Microsoft próbuje wykorzystać ten język jako skrzyżowanie C# zorientowanego na bezpieczeństwo i produktywność, języka Java itp. oraz języka C++ zorientowanego na wydajność.

Oto 6 ważnych cech języka,

) zrozumienie przez całe życie. C++ ma RAII, deterministyczne zniszczenie i wydajną alokację obiektów. C# i Java skłaniają programistów do zbytniego polegania na stercie GC i oferują tylko „luźne” wsparcie dla deterministycznego niszczenia za pośrednictwem IDisposable. Częścią tego, co robi mój zespół, jest regularne konwertowanie programów C# na ten nowy język i nie jest niczym niezwykłym, że napotykamy 30-50% czasu spędzonego w GC. W przypadku serwerów zabija to przepustowość; dla klientów degraduje doświadczenie, wprowadzając opóźnienie do interakcji. Ukradliśmy stronę z C++ — w obszarach takich jak referencje rwartościowe, semantyka przenoszenia, niszczenie, odniesienia/pożyczanie — a mimo to zachowaliśmy niezbędne elementy bezpieczeństwa i połączyliśmy je z pomysłami z języków funkcjonalnych. To pozwala nam agresywnie układać w stosy alokować obiekty, deterministycznie niszczyć i nie tylko.

2) Zrozumienie skutków ubocznych. Jest to ewolucja tego, co opublikowaliśmy w OOPSLA 2012, oferując elementy const C++ (ale znowu z bezpieczeństwem), wraz z niezmiennością i izolacją pierwszej klasy.

3) Programowanie asynchroniczne na dużą skalę. Społeczność była „w kółko” w tej sprawie, a mianowicie, czy używać współprogramów z przekazywaniem kontynuacji, czy lekkich programów blokujących. Obejmuje to C#, ale także prawie każdy inny język na świecie. Kluczową innowacją jest tutaj komponowalny system typów, który jest niezależny od modelu wykonania i może skutecznie mapować do każdego z nich. Byłoby aroganckie twierdzić, że mamy jedyny właściwy sposób na ujawnienie tych rzeczy, ale mając doświadczenie z wieloma innymi podejściami, uwielbiam to, gdzie wylądowaliśmy.

4) Programowanie systemów bezpiecznych typów. Powszechnie twierdzi się, że bezpieczeństwo typu wiąże się z nieodłączną utratą wydajności. Prawdą jest, że sprawdzanie granic nie podlega negocjacjom i że domyślnie wolimy sprawdzanie przepełnienia. Zaskakujące jest to, co może tutaj zrobić dobry kompilator optymalizujący w porównaniu z kompilacją JIT. (Wystarczy tylko od niechcenia sprawdzić kilka ostatnich biuletynów bezpieczeństwa, aby zobaczyć, dlaczego te funkcje są przydatne). Podobnie jak w przypadku interfejsów API opartych na lambda, które można wywoływać z zerowymi alokacjami (zamiast zwykłych dwóch: jeden dla delegata, jeden dla wyświetlacza). Oraz możliwość łatwego wycinania podtablic i podciągów bez przydzielania.

5) Nowoczesny model błędu. To kolejna kwestia, z którą społeczność się nie zgadza. Wybraliśmy to, co uważam za najlepsze miejsce: kontrakty wszędzie (warunki wstępne, warunki końcowe, niezmienniki, asercje itp.), szybkie niepowodzenie jako domyślna polityka, wyjątki dla rzadkich awarii dynamicznych (parsowanie, I/O itp.), i wpisywane wyjątki tylko wtedy, gdy absolutnie potrzebujesz bogatych wyjątków. Wszystko zintegrowane z systemem typów w sposób pierwszej klasy, dzięki czemu uzyskujesz wszystkie prawidłowe zachowania podtypów niezbędne do zapewnienia bezpieczeństwa i dźwięku.

6) Nowoczesne ramy. Jest to wiadro typu catch-all, które obejmuje takie rzeczy jak asynchroniczne LINQ, ulepszona obsługa enumeratorów, która konkuruje z iteratorami C++ pod względem wydajności i nie wymaga wysyłania podwójnych interfejsów w celu wyodrębnienia elementów itp. Szczerze mówiąc, jest to obszar, który mamy największa lista „zaprojektowanych, ale jeszcze nie zaimplementowanych funkcji”, obejmująca takie rzeczy, jak void-as-a-1st-class-type, typy non-null, cechy, typowanie efektów pierwszej klasy i inne. Spodziewam się, że w naszym punkcie kontrolnym w połowie 1 r. będziemy mieć kilka z nich, ale nie wszystkie.

Przeczytaj więcej z linku tutaj.

Więcej na tematy: c#, deweloperzy, Microsoft