C#7 — інтерв'ю з Jesse Liberty і Андрієм Акиньшиным



Jesse Liberty відомий як автор численних книг. Крім того, він є автором безлічі курсів на Pluralsight, сертифікованим Xamarin Developer, а також Microsoft і Xamarin MVP. Останнім часом в область його уваги потрапили Xamarin, Angular 2 і ASP.NET Core. Джессі веде подкаст під назвою Yet Another Podcast, в якому спілкується з цікавими особистостями зі світу розробки та ігор.

Нам вдалося поговорити з ним про майбутнє релізі C# 7.0 і про його виступ на DotNext в Москві. Крім того, на цю е тему нам вдалося поставити кілька несподіваних запитань і Андрію Акіньшину, розробнику З нової# IDE Rider JetBrains.

Андрій Акіньшин

.NET MVP, к. ф.-м. н., срібний призер ACM ICPC, один з розробників Rider в JetBrains.
Захоплюється микрооптимизациями. Мейнтейнер проекту BenchmarkDotNet.
У вільний час любить розбиратися в нутрощах .NET і ділитися знахідками з спільнотою.

– Коли нарешті планується реліз 7-ої версії мови?

– Складно сказати, коли. Робота над 7-кою ведеться вже давно. Більш або менш відомий список фіч, які повинні увійти в 7-ку. Є різні штуки, які ще обговорюються, і незрозуміло, чи будуть вони доступні чи ні. У випадку з Microsoft передбачити якісь реальні терміни досить складно. Робота ведеться, команда розробників постійно вносить якісь зміни. Від якихось рішень відмовляються, вводять деякі нові цікаві речі. Але дуже сподіваюся, що в найближчому майбутньому версія буде випущена.

– Але що-то вже доступно?

– Так, якщо ви встановите preview наступної версії студії під кодовою назвою Visual Studio '15 (не плутати з 2015-ої), то там є прев'юшки, з якої вже можна погратися, але, пам'ятаючи про те, як розроблялася 6-ка, я цим не займався і чекаю офіційного релізу, щоб розважатися зі стабільною версією.

Можна залишити фідбек команді розробників. Що мені дуже подобається в новій політиці Microsoft – це те, що зараз вони дуже активно взаємодіють з community. Якщо раніше вся розробка йшла за закритими дверима і ми дізнавалися про нові фичах мови після його виходу, то зараз реально ведеться робота з community. Розробникам цікаво думку звичайних людей, які будуть користуватися цією мовою. Які фічі більш зручні, які менш. Що краще включити в мову.

І далі вже на основі того, що важко додати, що легко додати, вони приймають рішення про те, як мова буде виглядати. Тому, якщо є ентузіасти, які дуже люблять розважатися з превьюшки і яким хочеться вплинути на фінальну версію C# 7, то можна завантажити превью, подивитися і залишити на github-е feedback.

– Це ви передбачали друге питання. Як можна дізнатися про нові можливості заздалегідь? Можливо, існують якісь секретні ресурси або програми? Я зміг знайти тільки гілку дискусії на github.

– Є один центральний репозиторій на github, в якому і проводяться всі обговорення. Всі обговорення ведуться публічно, є робочий список фіч, які пропонується ввести в мову, і я думаю, що вже якихось нових фіч, які взялися нізвідки, не буде.

Більш або менш зрозуміло, чого хоче народ, залишилося тільки зрозуміти, як правильно реалізувати, щоб всім було зручно. І реалізувати.

Тому що багато фічі досить складні саме з точки зору імплементації в компіляторі Roslyn.

А так ніяких секретів немає, все повністю відкрито. Будь ласка – будь-хто може взяти участь в обговоренні.

Jesse Liberty

– Коли буде реліз C# 7-ої версії?

C# 7.0 буде випущений з тим, що зараз називається Visual Studio 15. Поки що прямої дати релізу ніде немає. Але він превью 4 прямо зараз.

Примітка: Розмова відбувалася буквально за пару днів до релізу VS 15 preview 5.

– Як багато вже доступно для ознайомлення?

– Що ж, прев'ю 4 доступно вже досить, але деякі фічі поки реалізовані лише частково

– Мені завжди було цікаво, як можна дізнаватися про нові можливості заздалегідь. Можливо, існують якісь закриті групи або програми, в яких можна взяти участь? Все, що я зміг знайти, це гілка дискусії на github.

– Є дуже хороший посада в блозі, який написав Mads Torgersen. Це те, на чому я обгрунтовую свою презентацію. Я неодноразово говорив з Мэдсом, у мене є і подкаст з ним, це буде, мабуть, гарною відправною точкою.

– Спасибі! У мене в скарбничці вже є це посилання. І мій наступний питання про цьому топіку в блозі. Якщо я її прочитаю (і що важливо, зрозумію), то чи зможу я почути багато нового на вашому доповіді? Або, може бути, мені навпаки бажано почитати і вникнути заздалегідь, інакше я не зможу зрозуміти, про що ви будете розповідати?

– Що ж, ця стаття, якщо ви говорите про цієї самої статті Мэдса, була написана в серпні. Так ось, вже було кілька оновлень з тих пір, і буде ще більше оновлень до часу презентації. Крім того, подкаст вийшов пізніше статті, так що є інформація, яка є в подкасті, але якої немає в статті. Сподіваюся, моя презентація дасть вам більш свіжі знання.

– ГАРАЗД. Спасибі. Я теж думаю, що на презентації буде щось нове.
– Ага.

– Я знаю, що ви використовуєте C#, починаючи з першої версії цієї мови.

– Так, я перейшов на C# в 2000-му.

Відмінності 7-ї версії
– Може бути, ви можете якось порівняти версію 7 і попередні версії? У 7-ої більше можливостей чи, можливо, вони більш важливі?

– З 6-ої до 7-ої є кілька дуже важливих змін. Патерни і tuples, мабуть, два найбільш важливих з них. Крім того, є кілька зручних доповнень, але tuples і патерни вносять у мову вельми значні зміни.

Патерни дозволяють колосально скоротити сам спосіб програмування, дозволяючи нам, крім всього іншого, збіги за типом, такі як if, switch або конструкціях.
Інша ключова фіча C# 7 це tuples – можливість повернути більше, ніж одне значення методу. Ми завжди могли це зробити раніше з допомогою out-араметра, але tuples:
  • більш зрозумілі
  • ви можете декларувати їх типи
  • більш гнучкі і високоефективні
Ще ви можете розділити tuples з допомогою процесу, званого Deconstruction, який дозволяє вам розділити tuple або якесь інше значення на складові частини.

– Я слухав ваш подкаст і приклад з приводу використання tuples. Зараз tuples стали мені набагато зрозуміліше. Зазвичай якісь функції набагато простіше зрозуміти з допомогою «use case-ів». Може бути, ви збираєтеся розповісти про якісь прикладах під час виступу в Москві?

– Так. Безумовно.

– В C# 6 можливість використання await була додана в блок catch. У 7 вона буде додана в метод Main?

– Я не бачив цього в планах на 7, але може бути.

Нові можливості
Є ще одна новинка в 7-ке – функції в межах функцій.

– Це чудово. Так само, як і в Javascript, вірно?

– Так.

– Якась фіча вам подобається найбільше з цього релізу або, можливо, з наступного?

– Я думаю, що ті дві, які я вже згадав, найбільш значні і цікаві – додавання tuples і додавання патернів. Ці дві, я думаю, змінять сам стиль нашого програмування на манеру, яка більш цікава, на відміну від безлічі інших додатків. Наприклад, out-параметри зручні, але вони не змінять стилю програмування.

Поліпшення літералів будуть досить хорошою фичей, але на стилі програмування теж не позначаться. Deconstruction, як я вже згадував. Deconstruction відноситься до tuples.

Я чекаю з нетерпінням наступного превью, коли якийсь функціонал з описаних вище нарешті буде працювати. Зараз у деяких з цих фіч все ще є деякі обмеження.

– Для пошуку інформації я використав цю github-посилання

Наскільки я зрозумів, автор – Медс Торгерсен. І це дискусія з приводу нових фіч.


– Це ще від червня, так. Але деякі фічі, які там обговорюються, не будуть представлені у 7-ої версії. Давайте подивимося: повинні зробити локальні функції, tuples хочуть зробити, патерни зроблять, reference locals і reference returns – не впевнений, replace/original (part of generators) – не впевнений навіть, що в курсі, що це таке. Подивимося, що там ще: digital separators – думаю, зроблять, і out змінні зроблять. І я не знаю, що щодо асинхронного Main і «адресація статичного методу для небезпечного interop коду» – не думаю, що це в 7-ке.

Wildcards
– В тексті, що ви згадали, деякі пункти розглядаються тільки мигцем. Наприклад, мені не зовсім зрозуміло, що таке «wildcards» в якості out-параметрів.

– Ідея в тому, щоб вставити символ зірочки, що дозволить вам ігнорувати будь-out-параметр, про який ви не хочете турбуватися. Ще не ясно, чи будуть wildcards в C# 7 чи ні.

– Є (плануються) які-небудь зміни або нові фічі в C#, необхідні з причини того, що мова є кросплатформним (я маю на увазі, після виходу .NET Core і придбання Xamarin)?

– Я думаю, немає. C# вже працює ідентично на MacOS. Ви можете бачити це Xamarin Studio для Mac. На мою думку, ключова зміна, що необхідно, це перенесення Visual Studio на Mac.

– Новим функціям завжди раді, але зміни мови можуть іноді замутити воду. Я знаю, що в конструкції switch порядок виконання був змінений. Якщо якісь ще зміни в C#, які можуть заплутати?

– Порядок виконання в конструкції case не був змінений у конструкції switch, але він став важливий при використанні умов when. Це не критичне зміна.

І, так, є нові функції. І люди повинні вирішувати, чи будуть вони використовувати нові функції або почекають.

Немає жодних критичних змін, з ядра функції не віддалялися, але щось було покращено. Наприклад, зараз ви можете виключити case-и відповідності конструкції switch, так що ви можете вказати case типу number, де number більш, ніж 100. Це досить високоефективне зміна в конструкції switch.

– Виходить, що ніяких нових багів не буде по причині змін?

– Ні, немає. Це ніяк не поламає код. Ніяких критичних змін немає.

– Велике вам спасибі! Був радий з вами поговорити.

– Thank you. Спасибі.



Якщо ви хочете почути тільки перевірену інформацію з поясненнями та прикладами про нововведення, які точно будуть у новій версії C#, тоді приходьте на конференцію DotNext, яка буде проходити в Москві 9 грудня.

Список доповідей:

.NET Core: State of the art
Squeezing the Hardware to Make Performance Juice
Інтелектуальні чатботы і когнітивні сервіси
Stack Overflow — it's all about performance!
Advanced Xamarin.Forms
C++ через C#
Продовжуємо говорити про арифметику
ASP.NET SignalR: Why it's Getting Really Crucial for Web Development
Exceptional Exceptions in .NET
Модифікація коду .NET у рантайме
End-to-end JIT
Performance tuning Stack Overflow tags
C# Scripting — why and how you can use your C# in places you never thought of before!
Multithreading Deep Dive
Зібрати все, або Знайомимося з Cake (C# Make)
WinDbg Superpowers for .NET Developers
Overview of the new .NET Core and .NET Platform Standard
Які знаходять уразливості в .NET платформі і як не повторити їх в своїх додатках
what's new in C# 7?
ETW — Monitor Anything, Anytime, Anywhere
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.