Re[5]: Поравочка
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.10.06 21:44
Оценка:
Здравствуйте, IT, Вы писали:

IT>Он стеснятеся.


Надо устранять этот недостаток .
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Поравочка
От: Блудов Павел Россия  
Дата: 11.10.06 00:22
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Надо устранять этот недостаток .

Да не стесьняюсь я. Просто тормоз. Не могу въехать в эту полу-юинксовую полу-виндовую систему.

Половина файлов (немерловые) в одних LF'ах, другая половина CR/LF. Одни с пробелами другие с табами. Третьи вперемешку
Вавилон короче. В таких условиях лучше применять модерируемые коммиты.

Разводить флейм на тему "давайте обсудим стиль" я тем более не хочу. Точить некогда — копать нада.
Вобщем меня пока текущее положение устраивает. Вот если вам с Игорем обременительно с патчами возиться так и говорите. Буду подключаться.
... << RSDN@Home 1.2.0 alpha rev. 642>>
Re[2]: Готов переход к исходнику при наличии pdb.
От: Блудов Павел Россия  
Дата: 11.10.06 00:24
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Все верно. Nemerle.IO.printf — это макрос который на самом деле может раскрыть намного более сложным образом. Тут нужно более сложный анализ производить. Если удастся получить хотя бы ссылу на сборку где объявлен Nemerle.IO.printf, то дальше все что нужно можно будет вытащить из метаданных.


Понял. Буду копать. QuickTip тоже нужно доработать?
... << RSDN@Home 1.2.0 alpha rev. 642>>
Re[7]: Поравочка
От: IT Россия linq2db.com
Дата: 11.10.06 01:08
Оценка:
Здравствуйте, Блудов Павел, Вы писали:

БП>Вот если вам с Игорем обременительно с патчами возиться так и говорите. Буду подключаться.


Не так чтобы сильно обременительно, но лучше подключайся.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[3]: Готов переход к исходнику при наличии pdb.
От: IT Россия linq2db.com
Дата: 11.10.06 01:08
Оценка: 12 (1)
Здравствуйте, Блудов Павел, Вы писали:

БП>Понял. Буду копать. QuickTip тоже нужно доработать?


Хорошо бы. С макросами там всё не так шоколадно. Их надо из Parsedtree выщимлять, но потом парсить, что бы показывать как они разворачиваются.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[7]: Поравочка
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.10.06 01:59
Оценка:
Здравствуйте, Блудов Павел, Вы писали:

БП>Здравствуйте, VladD2, Вы писали:


VD>>Надо устранять этот недостаток .

БП>Да не стесьняюсь я. Просто тормоз. Не могу въехать в эту полу-юинксовую полу-виндовую систему.

А можно просто MSBuild-ом пользоваться. Могу прислать улучшенные cmd-хт. Хотя что там слать. Вот сейчас и выложу:
Build.cmd (двух-проходная компиляция. Позволяет компилировать и проверять макросы в компиляторе)
@echo on

IF "%Type%"=="" set Type=Debug

@echo ### Backup initials boot files #########################
IF EXIST boot\old\ RMDIR /S /Q boot\old

MKDIR boot\old\

IF errorlevel 1 goto Error
copy /Y boot\*.dll boot\old
IF errorlevel 1 goto Error
copy /Y boot\*.exe boot\old
IF errorlevel 1 goto Error
copy /Y boot\*.pdb boot\old

@echo !!! Backup success !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

@echo ### Phase 1 ############################################
MSBuild Nemerle.sln /p:Configuration=%Type%

IF errorlevel 1 goto Error
@echo !!! Phase 1 success !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

@echo ### Phase 2 ############################################
@echo ### Copy new binaries to boot
copy /Y bin\%Type%\*.dll boot
IF errorlevel 1 goto Error
copy /Y bin\%Type%\*.exe boot
IF errorlevel 1 goto Error
copy /Y bin\%Type%\*.pdb boot
@echo !!! Copy success!

@echo ### Build solution (phase 2)
MSBuild Nemerle.sln /p:Configuration=%Type%
IF errorlevel 1 goto Error
@echo !!! Build solution (phase 2) success!

copy /Y bin\%Type%\*.dll boot
IF errorlevel 1 goto Error
copy /Y bin\%Type%\*.exe boot
IF errorlevel 1 goto Error
copy /Y bin\%Type%\*.pdb boot

@echo !!! Phase 2 success !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
goto Success

@echo Phase 1 failed!
goto Error

:Error
@echo !!! Build FAILED !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
copy /Y boot\old\*.dll boot
copy /Y boot\old\*.exe boot
copy /Y boot\old\*.pdb boot
pause
exit /b 1

:Success


Reg.cmd (копирование в инсталляционную директорию и пре-джит)
rem @echo off

IF "%Type%"=="" set Type=Debug

set NemerleBin=D:\MyProjects\Nemerle\nemerle\bin\%Type%
set GacUtil=C:\VS\VS2005\SDK\v2.0\Bin\gacutil.exe
set NemerleInstall=%ProgramFiles%\Nemerle
set NGen=%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\ngen.exe

@echo NemerleInstall=%NemerleInstall%
@echo GacUtil=%GacUtil%
@echo NGen=%GacUtil%
@echo NemerleBin=%GacUtil%

@echo GacUtil=%GacUtil%
@echo NGen=%GacUtil%
@echo NemerleBin=%GacUtil%

cd /D %NemerleInstall%

%GacUtil% /u Nemerle
%GacUtil% /u Nemerle.Compiler
%GacUtil% /u Nemerle.MSBuild.Tasks
%GacUtil% /u Nemerle.Macros

%NGen% uninstall "%NemerleInstall%\Nemerle.dll"
%NGen% uninstall "%NemerleInstall%\Nemerle.Compiler.dll"
%NGen% uninstall "%NemerleInstall%\Nemerle.Macros.dll"
%NGen% uninstall "%NemerleInstall%\Nemerle.MSBuild.Tasks.dll"
%NGen% uninstall "%NemerleInstall%\ncc.exe"

@echo errorlevel=%errorlevel%
set errorlevel=0
@echo errorlevel=%errorlevel%

copy /Y "%NemerleBin%\*.dll" "%NemerleInstall%\*.dll"

if not errorlevel 0 (
@echo errorlevel=%errorlevel%
@echo !!! ERORR: copy files !!!
pause
exit /b 1
)

copy /Y "%NemerleBin%\*.exe" "%NemerleInstall%\*.exe"

if not errorlevel 0 (
@echo !!! ERORR: copy files !!!
pause
exit /b 1
)

copy /Y "%NemerleBin%\*.pdb" "%NemerleInstall%\*.pdb"

%NGen% install "%NemerleInstall%\Nemerle.dll"
%NGen% install "%NemerleInstall%\Nemerle.Compiler.dll"
%NGen% install "%NemerleInstall%\Nemerle.Macros.dll"
%NGen% install "%NemerleInstall%\Nemerle.MSBuild.Tasks.dll"
%NGen% install "%NemerleInstall%\ncc.exe"

pause


BuildAndReg.cmd (вызывает оба файла за раз)
@echo on

IF "%Type%"=="" set Type=Debug

call Build.cmd

@echo ERRORLEVEL

IF NOT ERRORLEVEL 1 call Reg.cmd


БП>Половина файлов (немерловые) в одних LF'ах, другая половина CR/LF. Одни с пробелами другие с табами. Третьи вперемешку


На самом деле в проекте компилятора (в SVN-е) стоит опция конвертации всего к LF. А в проекте интеграции просто ничего не задано. Можно в приципе тоже что-то задать.

БП>Вавилон короче. В таких условиях лучше применять модерируемые коммиты.


Ну, тебя. На то SVN и существует, чтобы можно было работать вместе. Если что всегда можно откатить что-нибудь.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Готов переход к исходнику при наличии pdb.
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.10.06 01:59
Оценка:
Здравствуйте, Блудов Павел, Вы писали:


VD>>Все верно. Nemerle.IO.printf — это макрос который на самом деле может раскрыть намного более сложным образом. Тут нужно более сложный анализ производить. Если удастся получить хотя бы ссылу на сборку где объявлен Nemerle.IO.printf, то дальше все что нужно можно будет вытащить из метаданных.


БП>Понял. Буду копать. QuickTip тоже нужно доработать?


А он макросы как раз умеет раскрывать. Он их в развернутом виде показывает. То есть то что будет после их раскрытия.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Поравочка
От: Nuald Россия http://nuald.blogspot.com
Дата: 11.10.06 02:28
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А можно просто MSBuild-ом пользоваться. Могу прислать улучшенные cmd-хт. Хотя что там слать. Вот сейчас и выложу:

VD>Build.cmd (двух-проходная компиляция. Позволяет компилировать и проверять макросы в компиляторе)

Может выложить его в SVN? А чтобы пути не менять, в начале коммандного файла сделать проверки, и выдавать соответствующее предупреждение?
Ты можешь просто залить, а остальные проверки я могу уже сам дописать, если у тебя времени нет
P.S. Правда у меня и самого сейчас времени нифига нет, но может на следующей неделе ситуация поменяется.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Готов переход к исходнику при наличии pdb.
От: Блудов Павел Россия  
Дата: 11.10.06 04:19
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А он макросы как раз умеет раскрывать. Он их в развернутом виде показывает. То есть то что будет после их раскрытия.


Угу. После раскрытия IO.Printf получается Console.Write. Соответственно переход будет к Console.Write, а не к нужному исходнику.
... << RSDN@Home 1.2.0 alpha rev. 642>>
А дальше?
От: Блудов Павел Россия  
Дата: 13.10.06 01:21
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Если есть .pdb-хи и исходники, то желательно бы позиционироваться на исходники, а не генерировать фэйк-код. Так, например, для исходников компилятора и библиотеки Немерла хотелось бы прыгать на них.


А если пользователь на этом не успокоится? Вот открылся исходник класса из ncc, а пользователь опять F12 давит.
Проблема в том, что открывшийся файл будет сам по себе, без ансамбля, т.е. без проекта. И в pdb о проекте ни слова.

Можно, как вариант, ассоциировать такие фалйы с проектом, из которого в них попадаешь.
Тогда если имеется програмка, использующая SomeAssembly, то при попадании в исходник SomeAssembly можно будет осуществлять переходы внутри SomeAssembly.

Другой вариант: для таких файлов-изгоев можно заводить виртуальный проект, у которого нет исходников вообще, но зато есть нетовая сборка и следовательно все нужные метаданные. Тогда можно будет даже осуществлять переходы на исходники сборок, на которые ссылается та сборка. До бесконечости.
... << RSDN@Home 1.2.0 alpha rev. 642>>
Re: А дальше?
От: Nuald Россия http://nuald.blogspot.com
Дата: 13.10.06 01:39
Оценка:
Здравствуйте, Блудов Павел, Вы писали:

БП>Другой вариант: для таких файлов-изгоев можно заводить виртуальный проект, у которого нет исходников вообще, но зато есть нетовая сборка и следовательно все нужные метаданные. Тогда можно будет даже осуществлять переходы на исходники сборок, на которые ссылается та сборка. До бесконечости.


Почему же до бесконечности? VS поступает довольно-таки просто — если в текущем solution есть сборка с исходниками, то она показывает их, а иначе — только метаинформацию (обычно публичный интерфейс). Не писать же аналог рефлектора
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: А дальше?
От: Блудов Павел Россия  
Дата: 13.10.06 07:24
Оценка:
Здравствуйте, Nuald, Вы писали:

N>Почему же до бесконечности? VS поступает довольно-таки просто — если в текущем solution есть сборка с исходниками, то она показывает их, а иначе — только метаинформацию (обычно публичный интерфейс). Не писать же аналог рефлектора

Читай ветку чуть выше. Влад предложил идею по-лучше: показывать реальный исходник если есть pdb и исходник в наличии.
... << RSDN@Home 1.2.0 alpha rev. 642>>
Re[3]: А дальше?
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.10.06 01:27
Оценка:
Здравствуйте, Блудов Павел, Вы писали:

БП>Читай ветку чуть выше. Влад предложил идею по-лучше: показывать реальный исходник если есть pdb и исходник в наличии.


На самом деле одна идея другую не отменяет. Исходники в проекте одного солюшена надо обрабатывать особо. Нито переходы будут работать корректно только после компиляции солюшена.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Готов переход к исходнику при наличии pdb.
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.10.06 15:26
Оценка:
Здравствуйте, Блудов Павел, Вы писали:

БП>Угу. После раскрытия IO.Printf получается Console.Write. Соответственно переход будет к Console.Write, а не к нужному исходнику.


Ну, так надо не тупо раскрывать, а смотреть что там. IT для хинтов в локальных проектах это делает и получается то что нужно.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Поравочка
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.10.06 22:20
Оценка:
Здравствуйте, Nuald, Вы писали:

N>Может выложить его в SVN? А чтобы пути не менять, в начале коммандного файла сделать проверки, и выдавать соответствующее предупреждение?


Класть в SVN что-то с фиксированными путями нельзя. Файл для компиляции конечно можно положить, но для регистрации прийдется что-то придумывать.

N>Ты можешь просто залить, а остальные проверки я могу уже сам дописать, если у тебя времени нет


Давай лучше наоборот. Правь и присылай. Я оценю и решу можно ли его заливать в таком виде.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Поравочка
От: Блудов Павел Россия  
Дата: 16.10.06 04:35
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Класть в SVN что-то с фиксированными путями нельзя.

если ты про это:
set NemerleBin=D:\MyProjects\Nemerle\nemerle\bin\%Type%
set NemerleInstall=%ProgramFiles%\Nemerle
set GacUtil=C:\VS\VS2005\SDK\v2.0\Bin\gacutil.exe
set NGen=%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\ngen.exe


То можно первый можно сделать относительным, просто положив Build.cmd в нужное место. Для остальных требовать наличия переменных окружения.
В итоге должно получиться:
set NemerleBin=%~dp0\bin\%Type%
set NemerleInstall=%ProgramFiles%\Nemerle
set GacUtil=gacutil.exe
set NGen=ngen.exe


Ниличие пути до gacutil.exe и ngen.exe можно вычислить:
%GacUtil% > nul
if errorlevel 2 echo gacutil.exe not found && exit
... << RSDN@Home 1.2.0 alpha rev. 642>>
Re[10]: Поравочка
От: Nuald Россия http://nuald.blogspot.com
Дата: 18.10.06 00:38
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Давай лучше наоборот. Правь и присылай. Я оценю и решу можно ли его заливать в таком виде.


Положив три файла (BuildAndReg.cmd, build.cmd, reg.cmd) в корень каталога Nemerle (у меня D:\Work\Nemerle) и подправив reg.cmd следующим образом:
set NemerleBin=%~dp0\bin\%Type%
set GacUtil="%VS80COMNTOOLS%\..\..\SDK\v2.0\Bin\gacutil.exe"
set NemerleInstall=%ProgramFiles%\Nemerle
set NGen=%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\ngen.exe

@echo NemerleInstall=%NemerleInstall%
@echo GacUtil=%GacUtil%
@echo NGen=%NGen%
@echo NemerleBin=%NemerleBin%

%GacUtil% > nul
if errorlevel 2 echo gacutil.exe not found. && pause && exit

Знаю, что завязываться на %VS80COMNTOOLS% не очень хорошо, однако ИМХО это единственное решение, не заставляющее пользователя вводить путь к .NET 2 SDK ручками.

В принципе, у меня все заработало, и завязок на какие-то абсолютные пути вроде бы не наблюдается.
Пойдет? Коммитить?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[11]: Поравочка
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.10.06 00:48
Оценка:
Здравствуйте, Nuald, Вы писали:

До этого:
N>
N>set GacUtil="%VS80COMNTOOLS%\..\..\SDK\v2.0\Bin\gacutil.exe"
N>

я уже и сам додумался.

А что вот это:
N>[code]
N>set NemerleBin=%~dp0\bin\%Type%
N>[/code]


N>Знаю, что завязываться на %VS80COMNTOOLS% не очень хорошо, однако ИМХО это единственное решение, не заставляющее пользователя вводить путь к .NET 2 SDK ручками.


Согласен.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Поравочка
От: Блудов Павел Россия  
Дата: 18.10.06 09:01
Оценка: :)
Здравствуйте, VladD2, Вы писали:

VD>А что вот это:

VD>
N>>[code]
N>>set NemerleBin=%~dp0\bin\%Type%
N>>[/code]
VD>


Да ты что! Это же свяшенная корова! См. http://rsdn.ru/article/winshell/batanyca.xml#E6G
Автор(ы): Алексей Александров
Дата: 11.07.2005
Статья рассказывает о малоизвестных возможностях командного языка Windows.
... << RSDN@Home 1.2.0 alpha rev. 642>>
Re[12]: Поравочка
От: Nuald Россия http://nuald.blogspot.com
Дата: 18.10.06 23:32
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А что вот это:

VD>
N>>[code]
N>>set NemerleBin=%~dp0\bin\%Type%
N>>[/code]
VD>


~dp0 возвращает рабочий каталог исполняемого командного файла.

N>>Знаю, что завязываться на %VS80COMNTOOLS% не очень хорошо, однако ИМХО это единственное решение, не заставляющее пользователя вводить путь к .NET 2 SDK ручками.


VD>Согласен.


Ну еще, конечно, можно потребовать у конечного пользователя прописать Path или какую-то другую переменную окружения и ее использовать. Тогда в начале надо будет проверить путь, и предупредить пользователя. Ну либо вообще сделать что-то типа грязного хака — извлечь из реестра всю нужную информацию (например, путь к devenv.exe или считывать внутренние переменные студии) и плясать от них.

Как бы то не было, более или менее командные файлы готовы, можно коммитить. Скажешь, сделаю, либо уже ты сам. Ну а если не надо, то не надо, мое дело предложить
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.