– интеграция с VS 2008 Nemerle О проекте

advertisement
Nemerle – интеграция с VS 2008
О проекте
Целью проект является интеграцию с Nemerle с Microsoft VS. В данное время поддерживается VS
2008 и Nemerle Studio (бесплатная версия основанная на VS Shell). Предыдущие версии были
рассчитаны на VS 2005, но нами было принято решение отказаться от ее поддержки. В будущем
будут поддерживаться следующие версии VS (VS 2010).
На данный момент реализованы следующие возможности:
1. Автодополнение при вводе. +
2. Отображение подсказок при наведении курсора мыши на идентификатор. +
3. Полноценная подсветка синтаксиса (с учетом макросов и типов, импортируемых в
конкретный файл). +
4. Подсказки к параметрам функций. +
5. Навигация по коду (переход к определению, поиск вхождений, комбобоксы навигации по
коду открытого файла). +
6. Простые сниппеты (шаблоны кода). +
7. Отладка. Поддерживаются базовые возможности отладки: просмотр содержимого
переменных и выражений (к сожалению, пока только в формате C#), точки останова,
пошаговое исполнение. Из проблем можно отметить не всегда корректное отображение
значений переменных при скрытии переменных переменными с аналогичными именами.+/8. Использование макросов из сборок подключенных к тому же решению (Solution). Вы
можете объединить проект содержащий макросы и проекты использующие эти макросы в
одно решение. При этом макросы будут работать во время разработки и их поведение
будет обновляться сразу после перекомпиляции сборки с макросами. +
9. Дизайнер WinForms. Дизайнер работает, но периодически могут происходить сбои. Так что
лучше сохраняться и переоткрывать форму после правок. +/10. Рефакторинг (доступен рефакторинг переименования). +/11. Поддержка визуального проектирования для Web-проектов. +/12. Поддержка WPF. +/+ – Реализовано. Работает в большинстве случаев.
+/- – Реализовано частично или частенько не работает корректно.
В последствии, возможно будет реализованы:
1. Поиск по семантическим конструкциям.
2. Поддержка автоматических сниппетов генерируемых в runtime-е для импортированных
макросов.
3. Поддержка SVN.
4. Полноценная отладка.
5. Дополнительные виды рефакторинга.
6. Intellisense и рефакторинг в коде макросов. Сейчас можно обойти их отсутствие размещая
код макроса в обычном модуле и помещая в код макроса вызов метода из этого модуля.
Лицензия
Свободная (в стиле BSD). Вы можете использовать как сам компилятор и интеграцию, так и любой
код из этого проекта. При этом вы всего лишь должны упоминать авторов в about-ах, readme и т.п.
своих продуктов, а так же изменяя код оставлять все копирайты и ссылаться на них.
Как загрузить и собрать проект
Внимательно прочитайте инструкцию до конца!
Для сборки проекта на сегодня требуется:
1. Иметь установленный клиент SVN (такой как TortoiseSVN).*
2. Иметь установленным .NET 3.5 и VS 2008 (с SP1) с установленными модулями для C# и
C++.*
3. Скачать и установить VS SDK версии 1.1. Это можно сделать здесь. SP1 можно взять
здечь. Если вы ставите VS с нуля, то имеет смысл ставить версию с интегрированным SP1
(если вы подписчик MSDN, то можете найти ее там). Внимание! Без установки VS SDK
или установив не подходящую версию вы не сможете скомпилировать проект
интеграции (но сможете собрать сам компилятор).
4. Если вы пользуетесь файловыми менеджерами, консольными окнами или другими
программами позволяющими запускать процессы, то перезапустите их. Иначе у вас могут
возникнуть проблемы с компиляцией вследствие того, что изменение в окружении не будет
видно в этих приложениях (сессиях).
5. Загрузить или обновить последнюю версию исходников Nemerle из SVN. Если вы входите
в commiters (т.е. группу разработчиков Nemerle), то следует воспользоваться следующей
ссылкой https://nemerle.googlecode.com/svn/nemerle/trunk/ (начинается с https!). Если вы не
входите в список разработчиков, то вы можете получить код доступный только на чтение
по ссылке http://nemerle.googlecode.com/svn/nemerle/trunk/. Обратите внимание на то, что
это не просто http-ссылка, но и SVN-ссыка! Для упрощения работы с SVN лучше всего
использовать TortoiseSVN (этот плагин встраивается в Windows Explorer + Total
Commander и позволяет управлять работой с SVN по средствам контекстного меню). Если
компиляция проекта не просходит, то прежде чем писать в форум попробуйте
обновить и перекомпилровать исходники как комилятора, так и интеграции. Для этого
проще всего удалить все содержимое основной директории за исключением скрытой папки
.svn или _svn (зависит от настроек TortoiseSVN) и выбрать пункт «SVN Update». *
6. Если вы устанавливали бинарные файлы Nemerle версии 0.9.3.x с помощью инсталлятора
с сайта http://nemerle.org, то нужно удалить переменную среды окружения с именем
«Nemerle» или убрать из нее кавычки (это ошибка была в инсталляторе версии 0.9.3) и
прописать туда путь в который будут класться актуальные версии компилятора (лучше
просто удалить эту переменную). Внимание! Работать с проектом можно только на
последней версии компилятора скомпилированной самостоятельно из исходников
полученных из SVN. Беря из SVN новые файлы Интеграции вы обязательноо должны
обновить и исходники компилятора. Причем после обновления исходников вам нужно
закрыть все программы которые могут блокировать исполнимые файлы компилятора
(особенно VS), перекомпилировать и перерегистрировать файлы компилятора.
7. Пред тем как приступить к компиляции закройте все копии VS 2008, так как они могут
блокировать файлы компилятора и интеграции. Так же имеет смысл деинсталлировать
Nemerle, если таковой был установлен с помощью инсталлятора. Все равно после сборки
проектов из исходников инсталлированная версии перестанет работать.
8. Скомпилировать все необходимые для использования и отладки Nemerle проекты можно
выполнив батч-файл DevBuildQuick.cmd. При этом будут собраны следующие проекты:
проект компилятора, проект интеграции с VS 2008, проекты входящие в пакет PowerPack
(набор дополнительных библоитек).
Сборка проекта под Windows Vista и Windows 7
Указанные выше ОС используют новую подсистему UAC. Так же в этих ОС ограничены
права на запись в некоторые каталоги и ветки реестра которые были доступны в просшлых
версиях ОС Windows.
Регистрация компонентов компилятора и интеграции с VS в этих ОС требует наличия прав
администратора. Более того, даже если вы обладаете правами администратора подсистема
UAC по-умолчанию будет препятствовать копированию компонентов в нужные каталоги и их
регистрации. Чтобы избежать этого вам требуется запускать сборку проектов из
процесса обладающего правами администратора. Самый простой способ добиться этого
– воспользоваться наследованием прав процессов. Если вы используете файловый
менеджер (такой как Total Commander или FAR), то проще всего будет запустить его копию с
правами администратора. Это можно сделать или выбрав пункт «Run as admonistrator» из
контекстного меню шортката, или настроив свойства шортката (лучше всего создать
специальную копию шортката).
Учтите, что шоткатов на cmd-файлы не позволяют настроить запуск этого файла из под
администратора! Но вы сможете вручную запускать их, выбирая соответствующий пункт
контекстного меню.
Если вы проделали данные шаги, но интеграция или компилятор не скомпилировались, или
не работают, то прежде чем писать вопросы в форумы еще раз ВНИМАТЕЛЬНО прочтите
перечисленные выше пункты. Они почти наверняка включают ответ на вопрос «почему у
меня не работает...».
Использование
Если вам нужно запустить интеграцию без отладки (просто для работы или тестирования),
создайте
шортка
(.lnk-файл)
содержащий
следующую
командную
строку:
«%VS90COMNTOOLS%..\..\Common7\IDE\devenv.exe /ranu /rootsuffix Exp» и запускайте VS с
интеграцией с помощью этого шортката (путь к VS можно прописать напрямую).
Запуск под отладкой
1. Если вы хотите запускать Интеграцию под отладкой (для отладки интеграции или
макросов), сделать активным (отлаживаемым) проектом проект Nemerle.VisualStudio.
2. Пропишите в свойствах проекта Nemerle.VisualStudio, на закладке Debug, в поле «Start
external program:» путь к VS «%VS90COMNTOOLS%..\..\Common7\IDE\devenv.exe».
(Примечание: путь должен быть полным! Но вы можете попытаться внести строчку
«$(VS90COMNTOOLS)..\..\Common7\IDE\devenv.exe»
непосредственно
в
файл
«Nemerle.VsIntegration\Nemerle.VsIntegration.csproj.user»*). И в поле «Command line
arguments:» значение «/ranu /rootsuffix Exp».
3. Запустить Nemerle.VSIP.sln на выполнение.
Если вы все сделали правильно, то должна открыться экспериментальная версия VS 2008, в
которой можно будет создать и протестировать Nemerle-проект (*.nproj-файлы).
Отладка компилятора или макросов
Для отладки компилятора и макросов можно применять одну из двух стратегий:
1. Вставить перед кодом, который нужно отладить инструкцию assert(false) и произвести сборку
компилятора.
2. Создать пустой C#-проект (в принципе язык не важен). В настройках проекта в качестве
запускаемого на отладку приложения прописать %ProgramFiles%\Nemerle\ncc.exe. В качестве
параметров командной строки прописать «-no-color -from-file:некоторый путь\CompilerOptions.txt».
Файл CompilerOptions.txt может содержать разнообразные настройки компилятор. Например, он
может выглядеть так:
-debug-out:E:\MyProjects\Tests\VS2010\NccDebug\NccDebug\Test.exe
-greedy-references-no-color
-r:"E:\Program Files (x86)\Reference
Assemblies\Microsoft\Framework\v3.5\System.Core.dll"
E:\MyProjects\Tests\VS2010\NccDebug\NccDebug\Main.n
Список доступных команд можно получить введя в консоли «"%ProgramFiles%\Nemerle\ncc.exe" h».
Файл CompilerOptions.txt и исходные файлы используемые для отлакди имеет смысл подключить к
данному проекту и установить им свойство Build Action в None.
Имея такой проект остается только поместить в файл исходным кодом путь к которому указан
CompilerOptions.txt, поставить точку останова в нужном месте исходников компилятора или
макросов и нажать F5.
Учтите, что для отладки компилятора нужно чтобы он был собран из исподников
(используейте для этого DevBuildQuick.cmd или DevBuildQuick-ncc.cmd).
Если при запуске в экспериментальной версии VS 2008 и у вас возникли проблемы, то
прежде чем писать об этом в форум или багтрекер прочтите раздел Q&A и еще раз
прочитайте данное руководство (от начала, до конца и очень внимательно).
Сборка компилятора из исходников с помощью MSBuild
Для сборки компилятора из исходников с помощью MSBuild можно воспользоваться пакетными
файлами лежащими в корневом каталоге проекта компилятора на SVN. Вот их описание:

DevBuildQuick.cmd – однопроходная сборка компилятора, интеграции с VS 2008 и
библиотек входящих в PowerPack. Этот батч-файл удобно использовать, когда вам нужно
собрать компилятор, интеграцию и библиотеки для непосредственного их использования
на машине (с возможности отладки всех компонентов) или когда вам требуется отлаживать
код компилятора, интеграции или библиотек.

DevBuildQuick-ncc.cmd – однопроходная сборка компилятора и базовых библиотек
(Nemerle.dll, Nemerle.Compiler.dll и Nemerle.Peg.Macros.dll). Данный батч-файл удобен при
отладке компилятора.

DevBuildQuickWithTests.cmd – делает тоже самое, что и предыдущий батч-файл, но
дополнительно прогоняет компиляторные тесты. Используйте его, когда есть сомнения в
корректности сделанных в компиляторе изменений. Учтите, что данный файл не
гарантирует полной проверки компилятора!

DevBuild2Stage.cmd – аналогичен файлу DevBuildQuick.cmd, но производит
двухпроходную сборку компилятора. Исползуйте этот файл когда меняете макросы
входящие в стандартную библиотеку. Но еще лучше использовать при этом файл
DevBuild2StageWithTests.cmd.

DevBuild2StageWithTests.cmd – делает тоже самое что и предыдущий файл, но
дополнительно производит сборку и прогон тестов (компиляторных и интеграции).

DevBuildForCommit.cmd – многопроходная сборка компилятора, интеграции и
дополнительных библиотек с прогоном всех тестов и дполнительных проверок. Работа
этого файла занимает очень много времени, по этому его нужно использовать только
перед комитом изменений в репозиторий системы контроля версий. Обязательно
прогоняйте этот файл перед комитом изменений!

BuildInstallerFast.cmd – собирает все проекты в один проход и создает инсталлятор на
основе полученных выходных файлов. Данный способ требует наличия на машине
установленного Wix, а так же ряда внешних файлов (ищите описание в русскоязычном
форуме на RSDN).

BuildInstallerFull.cmd – делает тоже самое что и предыдущий файл, но при этом
происходит много проходная компиляция и прогон всех тестов (аналогично
DevBuildForCommit.cmd).

Reg-boot.cmd – ускоряет перекомпиляцию исходников компилятора. Этот файл нужно
запускаеть если вы скачали новые boot-файлы компилятора или провели двухстадийную
компиляцию.

Reg-bins-2.cmd – пекомилируе и регистрирует бинарные файлы находящиеся в
%ProgramFiles%\Nemerle. Это может потребоваться если данная процедура не
выполнилась в процессе инсталляции или сборки одним из вышеописанных батников (это
является ошибкой – не штатной ситуацией). Выполните этот файл если чувствуете, что
компиляция даже мелких проектов занимает слишком много времени (более 2 секунд).
Перед комитом изменений в основную ветвь репозитория (trunk) обязательно выполните
сборку с помощью DevBuildForCommit.cmd и совершайте комит только если компиляция
прошла успешно. Не допускайте даже наличие предупреждений (если, конечно они не были
до ваших изменений).
Сборка проектов компилятора с использованием GNU make
На сегодня этот метод (как и любые другие за исключением использования MSBuild) устарели. С
его помощью нельзя собрать интеграцию с VS и проекты входящие в PowerPack. Используйте
сборку с помощью MSBuild (а еще лучше описанные выше батч-файлы).
Сборка с использованием GNU make - это способ, который используют авторы компилятора. К
сожалению, при этом вам придется установить на свой рабочий компьютер Cygwin. Подробности
смотрите на nemerle.org.
Возможные проблемы
Выявление проблем и их устранение
Чаще всего возникают следующие проблемы при установке необходимых зависимостей и сборке
проектов:
4. Устанавливается несоответствующие версии VS и VS SDK. Обратите внимание, что VS
2008 соответствует VS SDK 1.0, а VS 2008 SP1 VS SDK 1.1. Кроме того следует четко
понимать, что .NET SDK и VS SDK – это разные вещи. .NET SDK в урезанном режиме
поставляется с VS 2008, так что отдельно его ставить нет необходимости.
5. При установке VS не устанавливаются пакеты поддержки C# (крайне редко) и/или C++
(чаще). Оба пакета обязательны для сборки интеграции!
6. Для сборки интеграции нельзя использовать Express-версии данных продуктов.
7. Сборка проектов происходит непосредственно после установки VS 2008 или VS SDK из
приложений третьих фирм (например, файловых менеджеров вроде Total Commander или
FAR). Эти приложения запоминают окружение. Это приводит к тому, что новые
переменные окружения не видны в старых сессиях. Перезапустите эти приложения прежде
чем начинать компиляцию из них!
8. Обновлена только часть исходников. Произведите полное обновление исходных кодов
компилятора, интеграции и дополнительных библиотек. Для этого выполните команду
Update в корневом каталоге проекта (trunk).
9. Помните, что собрать работающую «интеграцию» можно только с соответствующей
версией компилятора!
10. Вы пытаетесь скомпилировать только компилятор или только «интеграцию». Опять же
помните, что «интеграция» использует компилятор, так что они должны быть одной версии
(собраны одновременно). Пересборка компилятора приведет к неработоспособности
«интеграции». Компиляция же «интеграции» с несоответствующими версиями компилятора
может вовсе не удаться. После перекомпиляции бинарников Nemerle нужно произвести
принудительную перекомпиляцию всего проекта интеграции.
11. Заблокированы файлы. Если вы попытаетесь перекомпилировать бинарники Nemerle при
открытой студии в которой хоть раз производилась компиляция предшествующей версией
компилятора, то на стадии регистрации вы увидите море мелькающего текста, а
количество скопированных файлов будет отличаться от 4, 1, 5. Просто закройте студию и
повторите компиляцию.
12. Недостаток прав. См. предупреждение «Сборка проекта под Windows Vista и Windows 7»
(выше).
13. Все скомпилировалось, но при запуске появляются какие-то ошибки. Проверьте, что в
выводе компилятора и утилит не присутствует сообщений об ошибках.
14. Вы открыли проект компилятора в VS и у вас начались проблемы или проект не
компилируется. Проект компилятора не открывается корректно в интеграции. Поэтому
даже не пытайтесь этого делать. Проект интеграции с VS 2008 может быть открыт самой
интеграции, но при этом будут заблокированы некоторые файлы. Для изменения кода
интеграции вы можете использовать решение Nemerle.VSIP.n.sln, но перед сборкой
проекта нужно закрыть копию студии в которой был открыт этот проект и произвести сборку
через батч-файлы или средствами MSBuild. Производить отладку интеграции можно отрыв
проект Nemerle.VSIP.sln. Это копия предыдущего решения, но в ней сделан хак
позволяющий открывать это решение без использования интеграции Nemerle с VS. При
этом проекты входящие в состав решения открываются так как будто это C#-проекты. Это
позволяет производить сборку проекта интеграции, отлаживать его и даже редактировать
его файлы, но при том не будет доступен интелисенс, подсветка и другие прелести IDE.
Как включиться в процесс разработки интеграции с VS
2008 и компилятора Nemerle?
Вы должны иметь google-account или почту на http://gmail.com (вроде бы она автоматически
является google-account-ом).
Создать google-account можно здесь.
Так же вам потребуется получить пароль для SVN. Его можно сгенерировать (или посмотреть если
он
уже
сгенерирован)
выбрав
ссылку
googlecode.com
password
на
странице
http://code.google.com/p/nemerle/source/checkout. Для того чтобы увидеть эту ссылку вы должны
войти (Sign in) в google-account.
Если у вас есть google-account, то вы можете попросить любого из владельцев (Owner) проекта
добавить вас в список commiter-ов. Здесь находится список владельцев проекта можно. Например,
вы можете отправить просьбу о добавлении вас в список commiter-ов на vc@rsdn.ru.
Нужно понимать, что это очень ответственное дело и что от ваших исправлений зависит
работоспособность проекта. Так что нужно быть очень аккуратным, внимательным. Вносимые
изменения должны быть четко обоснованными и разумными. Если в чем-то сомневаетесь, то
лучше
сначала
спросите
в
конференции
Nemerle
или
на
форуме
http://rsdn.ru/Forum/?group=prj.nemerle.
Исправляя чужой код старайтесь придерживаться стиля кодирования принятого в данном
исходнике и проекте.
Старайтесь своими действиями не раздражать окружающих.
По началу, до получения личного логина в SVN-репозитории Nemerle можно (и даже желательно)
присылать патчи (созданные средствами SVN, см. контекстное меню в TortoiseSVN) с
исправлениями тем, кто в проекте уже давно (из RSDN-неров это я и IT) или посылайте патчи как
аттачи к сообщениям в конференции по Nemerle. Помните, что аттач не должен быть больше 100
кб.
Процесс подключения к конференции описан здесь. Ее историю можно найти здесь.
Более свежую информацию «о связи с сообществом Nemerle» можно найти здесь.
После получения доступа добавьте себя и свою контактную информацию в список разработчиков
здесь: http://nemerle.org/svn/nemerle/trunk/misc/users.
Информация о Nemerle
Информацию о языке Nemerle можно подчерпнуть из статей на нашем сайте, а так же на сайте
языка http://nemerle.org/.
Download