Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Python Tools для Visual Studio, о новинках из первых рук

Anna | 16.06.2014 | нет комментариев
Эта статья написана Павлом Минаевым int19h — разработчиком из команды PTVS намеренно для публикации в нашем корпоративном блоге на Програпрогре. Делитесь вашими ощущениями в комментариях. Все отзывы будут переданы команде.

Здравствуйте! Я – разработчик из команды Python Tools for Visual Studio. На днях мы выпустили новую бета-версию нашего продукта, и, воспользовавшись причиной, в данный раз я хотел бы поподробнее рассказать о том, что из себя представляет PTVS, и что он может вам предложить.

image

Что такое PTVS?

Если лаконично, то Python Tools for Visual Studio (дальше по тексту – PTVS), как, в всеобщем-то, и следует из наименования – бесплатное растяжение для Visual Studio 2010 и выше, добавляющее в эту IDE полновесную поддержку Python. Поставив его себе, вы получаете редактирование кода на Питоне с подсветкой и продвинутым автозавершением, навигацией по коду, рефакторингом, отладкой, профилированием, и помощью Django с вероятностью публиковать веб-сайты на Windows Azure в два клика. При этом поддерживаются все редакции Visual Studio, разрешающие установку растяжений – как платные Professional, Premium и Ultimate, так и безвозмездный Shell. В сочетании с последним, PTVS составляет полновесную бесплатную среду разработки на Python под Windows – и в этой версии мы сделали комфортный составной установщик для VS Shell PTVS. Если же вы теснее поставили себе Visual Studio 2013 Preview, то в диалоге New Project вас ожидает славный сюрприз:

clip_image001

Наш план, в некотором роде, уникален для Microsoft. Открытыми (под Apache License 2.0) исходниками ныне никого не поразишь, но мы не легко публикуем исходники на CodePlex, но и приглашаем всех желающихколлективно трудиться над планом. Да-да, мы принимаем сторонний код!

И напоследок, от того что с этим моментом Почаще каждого появляется путаница: PTVS – это не IronPython, и это не среда, ориентированная экстраординарно на IronPython. Мы поддерживаем фактически все реализации Питона в той либо другой степени – CPython, IronPython, Jython, PyPy, Stackless – но приоритетным является помощь стандартного, и используемого множеством разработчиков на Питоне, интерпретатора CPython.

Дальше я разгляжу ряд особенно увлекательных и уникальных вероятностей PTVS больше детально.

Работа с кодом

Вероятно, для всякого разработчика, в первую очередь именно удобство работы с кодом является определяющем в выборе IDE. Именно следственно продвинутый движок для разбора питоновского кода — на котором реализованны автодополнения, рефакторинг, символьный поиск и прочие ключевые фичи — был первым, что было сделано в рамках плана PTVS. С всякой новой версией мы улучшали качество разбора, и бета 2.0 – не исключение.

Простым автодополнением для динамически типизированных языков сегодня теснее никого не поразишь, но многие редакторы «буксуют» на даже на банальных примерах применения динамических вероятностей языка. Возьмем, скажем, вот такой код:

def f(x):
    def g(y):
        return x   y
    return g

a = f(1)(2)
b = f(3.0)(a)
c = f(u'a')(str(b))
d = (a, b, c)[input()]

От того что оператор сложения в Питоне полиморфен, то тип значения, возвращаемого g – и, как следствие, тип значений в a, b и c – зависит экстраординарно от типов передаваемых доводов. Тип d особенно труден, от того что он неявно зависит от типов всех 3 предыдущих переменных – при этом редактору необходимо вначале собрать, а потом разобрать кортеж.

PTVS пытается однозначно определить тип при всяком определенном вызове, рассматривая ранее выведенные типы передаваемых доводов. Вот подсказки и дополнения, которые выдаются в редакторе для разных переменных в этом коде:

clip_image002

clip_image003

clip_image004

clip_image005

Как видите, в последнем случае у переменной несколько возможных типов, и автодополнение отображает их все.

На итог итога типов дозволено посмотреть и с иной стороны, если запросить подсказку для параметра функции в её теле:

clip_image006

Тут собраны все типы доводов, с которыми функция вызывается где-либо в коде – автодополнение для них в теле функции будет трудиться соответствующим образом. У этого есть увлекательное следствие – если вы используете TDD, и вначале пишете тесты для ваших функций и классов, а потом теснее их реализации, то вы механически получите правильное автодополнение для всех параметров.

Помимо автодополнений, работает также и поиск объявлений и ссылок на переменные. Тут у PTVS есть одно увлекательное дополнение – если переменная, с которой начался поиск, ссылается (либо может ссылаться) на функции либо классы, то в итогах поиска, помимо строки, на тот, что этой переменной было присвоено значение, будут также и начальные объявления этих функций и классов – даже если значение было присвоено не напрямую. Скажем, если добавить к коду выше такие строки:

h = f if input() else f(a)
print h(b)

и исполнить команду Find All References на h, то получим дальнейший итог:

clip_image007

Как видите, в списке фигурирует функция g, от того что именно её вернул вызов f(a). Разумеется, это отражается и в итогах автодополнения при попытке вызвать h – в предлагаемых вариантах сигнатур будут фигурировать все вестимые варианты для f и g:

clip_image008clip_image009

Отладка смешанного кода

Эксклюзив в бете 2.0 – такого огромнее нет нигде. Это тот самый случай, когда одна картинка стоит тысячи слов. Вот она:

clip_image010

На скриншоте – отладчик, присоединенный к программе на C#, которая загружает в себя CPython, тот, что, в свою очередь, загружает модуль растяжения, написанный на C — и все эти три вещи вызывают друг друга достаточно-таки запутанным образом, тот, что дозволено исследовать в окне стека вызовов. Разумеется, дозволено создавать breakpoints во всех планах, но самое основное, что дает такой составной режим – вероятность пошаговой отладки межъязыковых вызовов. Скажем, если исполнить команду Step In на строке питоновского кода, которая вызывает способ класса, реализованного в C , то вы попадете в исходник этого способа. Верно так же это работает для кода на C либо C#, вызывающего PyObject_CallObject для функции, написаной на Питоне. Поддерживаются также и вызовы нативного кода в обыкновенных динамических библиотеках через ctypes.

Правда на скриншоте показана одновременная отладка 3 языков, на практике Почаще каждого дело ограничивается двумя – Питоном и C (либо C) – либо это программа на Питоне, в которой применяются модули растяжения, либо программа на C , использующая Питон в качестве скриптового языка. По этой причине мы добавили в отладчик ряд вероятностей, доступных только для C/C . Обратите внимание на окно Locals на скриншоте, и развернутое представление значения переменной a_natobj, которая ссылается на объект класса, реализованного на C : единовременно с питоновским представлением объекта она показывает и C -представление конструкции, которая реализовывает его класс. Есть и зеркальное отображение питоновских объектов со стороны C — вот как выглядит то же самое окно Locals в функции frob:

clip_image011

Как видите, значения переменных, объявленных в C как PyObject (либо какой-либо иной типовой тип из Python API), отображают питоновские представления этих объектов единовременно с полями соответствующих C-конструкций.

Отладочный REPL

Присутствие обыкновенного REPL для Питона является стандартным в IDE для него, и PTVS не является исключением – разумеется, мы поддерживаем также и подсветку синтаксиса, и автодополнение (причем последнее, по вероятности, работает напрямую со значениями в памяти, Дабы давать для них опрятные подсказки). Но мы пошли дальше, и сделали поддержку «живого» REPL при отладке кода – то есть REPL работает непринужденно над данными в отлаживаемом процессе, дозволяя вам на лету вычислять трудные выражения и переопределять классы и функции. Вот скриншот с отладочным REPL для первого примера из этой статьи:

clip_image012

Django и Windows Azure

PTVS поддерживает создание веб-приложений на Django, предоставляя подсветку синтаксиса, автозавершение кода и отладку для образцов отображений:

clip_image013

И, начиная с этой версии PTVS, сделанные таким образом приложения дозволено опубликовать на веб-сайт вWindows Azure с легкостью, которая ранее была доступна только для ASP.NET:

clip_image014

Et voilстранице документации плана, либо посмотреть обзорное видео.

Ваше суждение дюже значимо для нас

Нет, серьезно, оно подлинно значимо! У нас есть открытый баг-трекер, и мы неизменно рады увидеть в нем баг-репорты и предложения от пользователей. Насчет предложений – это не пустой звук. Когда мы начинаем трудиться над новой версией, и решаем, что именно в ней будет, то первое, что мы делаем – открываем список feature requests в трекере, сортируем по голосам пользователей, и глядим, что оказалось наверху. Так, в версии 2.0 мы реализовали пять фич из top 10 по голосам, в том числе три, которые были на первых 3 местах. Если же вы хотите легко задать вопрос либо обсудить что-то, это дозволено сделать на нашемфоруме. И, разумеется, я буду рад ответить на всякие ваши вопросы в комментариях к этой статье.

 

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB