Санкт-Петербургский государственный университет
Опубликован: 25.07.2014 | Доступ: свободный | Студентов: 1039 / 81 | Длительность: 17:26:00
Лекция 16:

Перспективы Visual Studio

19.3. Анализ и рекомендации по развитию Visual Studio

В заключение курса сформулирую некоторые мои идеи по расширению Visual Studio, которые, надеюсь, могут оказаться полезными. Они могут быть реализованы как в виде плагинов, так и, если Microsoft сочтет это целесообразным, их реализация может быть включена в будущие версии Visual Studio.

19.3.1. Развитие поддержки trustworthy computing

В "Visual Studio 2013 и ее возможности для надежных и безопасных вычислений (trustworthy computing)" рассмотрена существующая поддержка надежных и безопасных вычислений в Visual Studio 2013. Она достаточно удобна и развита. Однако хотелось бы высказать идеи и предложения по ее развитию.

Как видно из описаний в "Visual Studio 2013 и ее возможности для надежных и безопасных вычислений (trustworthy computing)" , концепция trustworthy очень широка. К сожалению.многие ее важные рекомендации по разработке кода существуют только "на бумаге", хотя и в таких выдающихся трудах, как книга "Writing Secure Code". Хотелось бы, чтобы сама среда Visual Studio рекомендовала и подсказывала в ходе разработки соответствующие элементы TWC разработчику, обеспечивая создание "только надежных и безопасных" программных продуктов, без необходимости впоследстии "задним числом" реализовывать требования и элементы TWC, тратя на это гораздо больше времени.

Под моим руководством один из дипломников разработал подобное экспериментальное расширение (plug-in) к Visual Studio 2010, обеспечивающее поддержку шаблонов "правильного" надежного и безопасного кода для некоторых типовых ситуаций, представляющих сложность при программировании.

Это лишь первый шаг. Хотелось бы, чтобы среда Visual Studio, аналогично тому, как она подсказывает возможные завершения кода (синтаксиса конструкции, выбор имен вызываемых методов и т.д.), подсказывала бы надежные и безопасные продолжения кода в некоторых ситуациях. Например, при программировании на C++ среда не давала бы возможности использовать потенциально небезопасные операции пересылки строк, чреватые атакой "переполнение буфера". При программировании на C# многопоточных приложений среда не допускала бы даже набора в редакторе кода, содержащего потенциальный deadlock, и многое другое. Эти идеи могут быть реализована в экспериментальных версиях Visual Studio, созданных на базе инструментов интеграции (Visual Studio SDK и др.), рассмотренных выше в данной лекции.

Также, на мой взгляд, могут быть значительно расширены возможности анализатора кода. Он может быть реализован на основе расширяемой базы знаний, содержащей расширяемый набор правил, по которым производится проверка кода. В частности, хотелось бы иметь возможность выполнения проверок, набор которых не менее полон, чем набор проверок, выполяемых классическим инструментом lint, разработанным еще в 1970-х годах. Необходимо, чтобы среда исключала возможность "проваливания" (fall through) в операторе switch на C++, чтобы выполнялись проверки достижимости условий, и многое другое. Все это значительно повысило бы надежность и безопасность кода, разрабатываемого в среде Visual Studio.

19.3.2. Расширения языков, реализованных в Visual Studio

Я уже неоднократно писал в статьях и книгах о том, что любой современный язык программирования, в том числе - реализованный в среде Visual Studio, - это "айсберг", полученный путем наслоения новых идей и заимствования старых. Поэтому хотелось бы, чтобы старые, но полезные заимствованные идеи в части языков программирования получали бы в среде Visual Studio свое наиболее полное воплощение.

Отмечу в связи с этим две идеи, которые, на мой взгляд, заслуживают реализации в языках Visual Studio и поддержки в виртуальной машине .NET (CLR).

  1. Параметры-константы в параметризованных типах (generics). В настоящее время в языке C# в параметризованных типах реализованы только параметры-типы. Между тем, в первоначальной идее generics, реализованной в языке CLU, кроме параметров-типов, имелись также параметры-константы. На мой взгляд, они были бы полезны и в C# - например, параметризованный тип Stack с двумя параметрами: первый - тип элементов стека, второй - максимальный размер (глубина) стека. Я имел возможность обсудить эту идею с представителями Microsoft в 2002 г. во время семинара Microsoft Research в Кембридже, но пока, к сожалению, мне не удалось их убедить в целесообразности такого расширения C#
  2. Cопрограммы (coroutines). Механизм сопрограмм широко известен еще с 1960-х гг. Он заключается в особого рода взаимодействии параллельно или квазипараллельно выполняемых процессов (или потоков). Если условно обозначить два процесса через process M и process N, то сопрограммное взаимодействие можно представить следующим образом. Внутри каждого процесса имеется локальное управление (ссылка на текущую команду). Процесс M может переключить управление на процесс N оператором: resume N. При этом локальное управление в M запоминается, и активизируется процесс N, начиная с начала, если он пока не исполнялся, либо с приостановленного места, если он был ранее приостановлен. Обратная операция ("возврат" в M) не обязательна, в отличие от подпрограммной (процедурной) взаимосвязи. Например, процесс N может выполнить оператор resume K, и т.д. Другой оператор, который может быть выполнен для каждого из процессов, - это оператор detach. Этот оператор останавливает сценарий выполнения процесса и превращает его в пассивные данные, доступ к которым возможен через поля (атрибуты) процесса. Описанный механизм удобен для задач моделирования систем с дискретными событиями и впервые использован в языке SIMULA 67 в 1960-х гг. Несмотря на свою важность, сопрограммы пока не представлены в общем виде в .NET CLR. Пока в языке C# реализован лишь частный случай сопрограммного взаимодействия - взаимосвязь заголовка цикла по коллекции с его телом, при котором очередной обрабатываемый элемент коллекции передается от заголовка цикла к его телу оператором yield return (обозначения и семантика почти совпадают с оператором yield, используемым в итераторах языка CLU). Мне кажется, было бы целесообразно реализовать сопрограммы в общем виде в языке C#, либо даже в .NET CLR. Опять-таки, мне довелось рассказывать о сопрограммах представителю Microsoft в 2002 г., входящему в команду CLR, на семинаре Microsoft Research в Кембридже. Он заинтересовался, но пока никаких конкретных шагов по реализации сопрограмм не было предпринято.

Вот мой скромный вклад в развитие Visual Studio.

Разумеется, можно было бы предлагать для расширения Visual Studio и .NET еще очень многие полезные идеи и механизмы. Будущее покажет, насколько все это будет признано целесообразным, и по какому пути пойдет развитие Visual Studio.

Несомненно одно: уже сейчас Microsoft Visual Studio - выдающийся программный продукт и современнейший инструмент, которым пользуются многие миллионы программистов во всем мире, и круг пользователей и ценителей Visual Studio (к которым, конечно, отношусь и я, и представители моей научной школы) будет еще более расширяться.

Желаю разработчикам Visual Studio (среди которых у меня есть добрые знакомые и друзья) новых выдающихся успехов. Мы благодарны вам за чудесный программный продукт, использовать который для специалиста-разработчика - поистине профессиональное и эстетическое наслаждение.

19.4. Резюме

Visual Studio - выдающийся программный продукт, у которого замечательные перспективы. Одно из недавних его расширений - инструмент, который так и называется Перспективы (Perspectives), монитор управления конфигурациями часто используемых окон. Разработчики Visual Studio предлагают различные формы расширения Visual Studio - плагины, инструментальные комплексы (SDKs) для расширения самой среды Visual Studio, Team Foundation Server и Visual Studio Online. Поддерживается программа VSIP - Visual Studio Industrial Partner.

Среди расширений функциональности, которые я предлагаю, - расширенная поддержка надежных и безопасных вычислений, а также ряд важных расширений языков .NET и виртуальной машины .NET CLR: параметры-константы в generics; сопрограммы.

Ключевые термины

Perspectives - расширение Visual Studio для управления конфигурациями часто используемых окон.
VSIP (Visual Studio Industrial Partner) - программа сотрудничества Microsoft и фирм-пользователей Visual Studio.
Сопрограммы - классический механизм взаимодействия процессов, при котором управление явно передается от одного процесса другому оператором resume.

Краткие итоги

Visual Studio - выдающийся программный продукт, у которого замечательные перспективы. Одно из недавних его расширений - инструмент, который так и называется Перспективы (Perspectives), монитор управления конфигурациями часто используемых окон. Разработчики Visual Studio предлагают различные формы расширения Visual Studio - плагины, инструментальные комплексы (SDKs) для расширения самой среды Visual Studio, Team Foundation Server и Visual Studio Online. Поддерживается программа VSIP - Visual Studio Industrial Partner.

Среди расширений функциональности, которые я предлагаю, - расширенная поддержка надежных и безопасных вычислений, а также ряд важных расширений языков .NET и виртуальной машины .NET CLR: параметры-константы в generics; сопрограммы.

Набор для практики

Вопросы

  1. Что такое Perspectives?
  2. Что такое VSIP?
  3. Что такое сопрограммы?
  4. Какое расширение параметризованных типов предлагается в курсе?
  5. Какие идеи по развитию поддержки надежных и безопасных вычислений предлагаются в курсе?

Упражнения

  1. Найдите в сети, инсталлируйте и попробуйте в действии расширение Visual Studio под названием Perspectives.
  2. Разработайте простой add-in среды Visual Studio.
  3. Сформулируйте свои предложения по развитию Visual Studio.

Темы для курсовых работ, рефератов, эссе

  1. Перспективы Visual Studio и предложения по развитию данной среды (реферат).

Дополнительные материалы, презентации

Презентация к данной лекции: VS_2013_Course_19.pptx.

Александр Калинин
Александр Калинин

Осенью прошёл курс и получил ключ. Но т.к. уже имел действующую подписку, то ключом не воспользовался. Сейчас захожу сюда, а про DreamSpark вообще ни слова. Где же мой ключ?