Microsoft починає говорити про свою мову програмування наступного покоління, C# для системного програмування

Значок часу читання 3 хв. читати


Читачі допомагають підтримувати MSpoweruser. Ми можемо отримати комісію, якщо ви купуєте через наші посилання. Значок підказки

Прочитайте нашу сторінку розкриття інформації, щоб дізнатися, як ви можете допомогти MSPoweruser підтримувати редакційну команду Читати далі

Джо Даффі, архітектор і розробник дослідницької операційної системи Microsoft, опублікував блог про мову програмування наступного покоління, над якою вони працювали протягом останніх кількох років. Зараз Microsoft описує цю майбутню мову як розширення «системного програмування» до C#. Microsoft намагається представити цю мову як щось середнє між орієнтованими на безпеку та продуктивність C#, Java тощо та орієнтованим на продуктивність C++.

Ось 6 важливих особливостей мови,

) Довічне розуміння. C++ має RAII, детерміноване знищення та ефективний розподіл об’єктів. C# і Java спонукають розробників занадто сильно покладатися на купу GC і пропонують лише «вільну» підтримку детермінованого знищення через IDisposable. Моя команда регулярно перетворює програми на C# на цю нову мову, і нерідко ми стикаємося з тим, що 30-50% часу витрачається на GC. Для серверів це вбиває пропускну здатність; для клієнтів це погіршує досвід, вводячи затримку у взаємодію. Ми вкрали сторінку з C++ — у таких сферах, як посилання rvalue, семантика переміщення, знищення, посилання/запозичення — і все ж зберегли необхідні елементи безпеки та об’єднали їх з ідеями функціональних мов. Це дозволяє нам агресивно стекувати розподіляти об’єкти, детерміновано знищувати тощо.

2) Розуміння побічних ефектів. Це еволюція того, що ми опублікували в OOPSLA 2012, надаючи вам елементи C++ const (але знову ж таки з безпекою), а також першокласну незмінність та ізоляцію.

3) Асинхронне програмування в масштабі. Спільнота неодноразово обговорювала це питання, а саме, чи використовувати співпрограми з продовженням передачі чи полегшеним блокуванням. Це включає в себе C#, але також майже всі інші мови на планеті. Ключовою інновацією тут є компонована система типів, яка не залежить від моделі виконання та може ефективно відображатися будь-якій з них. Було б нахабно стверджувати, що ми маємо єдиний правильний спосіб викрити це, але, маючи досвід із багатьма іншими підходами, мені подобається, де ми потрапили.

4) Типобезпечне системне програмування. Зазвичай стверджується, що безпека типу призводить до внутрішньої втрати продуктивності. Це правда, що перевірка меж не підлягає обговоренню, і ми надаємо перевагу перевірці переповнення за замовчуванням. Дивно, що тут може зробити хороший оптимізуючий компілятор порівняно з JIT-компіляцією. (Достатньо лише побіжно переглянути деякі нещодавні бюлетені безпеки, щоб зрозуміти, чому ці функції мають переваги.) Інші сфери включають можливість робити більше без розподілу. Наприклад, мати API на основі лямбда, які можна викликати з нульовим розподілом (а не звичайними двома: один для делегата, один для відображення). І можливість легко вирізати підмасиви та підрядки без виділення.

5) Сучасна модель помилок. Це ще одне питання, щодо якого спільнота не погоджується. Ми вибрали те, що, на мою думку, є найкращим місцем: контракти скрізь (передумови, постумови, інваріанти, твердження тощо), швидка помилка як політика за замовчуванням, винятки для рідкісних динамічних помилок (аналіз, введення-виведення тощо), і типізовані винятки лише тоді, коли вам абсолютно потрібні насичені винятки. Усе це інтегровано в систему типів у спосіб 1-го класу, так що ви отримуєте всю належну поведінку підтипів, необхідну для безпечного та безпечного функціонування.

6) Сучасні рамки. Це всеохоплююче відро, яке охоплює такі речі, як асинхронний LINQ, покращену підтримку нумератора, яка конкурує з ітераторами C++ у продуктивності та не вимагає надсилання подвійного інтерфейсу для вилучення елементів тощо. Чесно кажучи, це наша сфера найбільший список «розроблених, але ще не реалізованих функцій», що охоплює такі речі, як void-as-a-1st-class-type, ненульові типи, ознаки, введення ефекту 1-го класу тощо. Я очікую, що в середині 2014 року ми матимемо кілька таких на нашому КПП, але не всі.

Детальніше читайте за посиланням тут.

Детальніше про теми: c#, розробників, Microsoft