LINUX.ORG.RU

[mono] Nemerle bootstrap

 


0

2

Всем привет!

Попытался бутстрапнуть Nemerle под Mono, и получил вполне ожидаемый FAIL. О том, что Nemerle сейчас не собирается я знал, но т.к. очень хочется свежую версию в Debian'е, решил исправить это дело и начал копать.

При сборке получается примерно такая ругань: http://pastebin.com/Y2VRpnya

Особо интересным является этот кусок:

#4  0x08062a4d in mono_sigsegv_signal_handler (_dummy=11, info=0x40036b4c, context=0x40036bcc) at mini.c:5909
#5  <signal handler called>
#6  0x081c2325 in create_custom_attr (error=0xbfd7035c, len=<optimized out>, data=<optimized out>, method=<optimized out>, image=0x9134718) at reflection.c:8157
#7  mono_custom_attrs_construct_by_type (cinfo=0x92cd5f0, attr_klass="Nemerle.Internal.VariantAttribute", error=0xbfd7035c) at reflection.c:8428
#8  0x081c26fb in mono_reflection_get_custom_attrs_by_type (obj=0x17dfb0, attr_klass="Nemerle.Internal.VariantAttribute", error=0xbfd7035c) at reflection.c:8887
#9  0x0815f576 in custom_attrs_get_by_type (obj=0x17dfb0, attr_type=0x179b50) at icall.c:7543

Что делать — собрал отладочную версию Mono, стал копать. Выяснилось что падаем при разборе именованых параметров аттрибута, о которых говорится (по блобу), что их 27к. Явно что-то не так.

Решил дизассемблировать Nemerle.stage1.dll, т.к. все падает именно при «раскрутке» этой сборки в процессе сборки Nemerle.Compiler.stage1.dll. Наткнулся на такой вот странный кусок:

    .custom instance string class Nemerle.Internal.VariantAttribute::get_VariantOptions() =  (
                01 00 81 78 4E 65 6D 65 72 6C 65 2E 55 74 69 6C   // ...xNemerle.Util
                69 74 79 2E 47 65 74 6F 70 74 2E 43 6C 69 4F 70   // ity.Getopt.CliOp
                74 69 6F 6E 2E 46 6C 61 67 2C 4E 65 6D 65 72 6C   // tion.Flag,Nemerl
                65 2E 55 74 69 6C 69 74 79 2E 47 65 74 6F 70 74   // e.Utility.Getopt
                2E 43 6C 69 4F 70 74 69 6F 6E 2E 42 6F 6F 6C 65   // .CliOption.Boole
Если верить ECMA-спеке, то для каждого аттрибута должен указываться конструктор. В примере выше же указывается какая-то неведомая ересь.

Есть какие-то идеи? У меня в данный момент из соображений только то, что надо проверить какой stage1 собирается в оффтоп-.NET.

★★★★★

Итак, проверкой под оффтопом выяснил, что моно таки собирает кривую Nemerle.dll. Причины пока непонятны — буду копать дальше.

Sectoid ★★★★★
() автор топика

при генерации кода в немерле на сегодня используется System.Reflection.Emit. в данном случае по моему имеет место известный баг в моно. Однако можно скачать бинарники немерле от сюда https://github.com/rsdn/nemerle/downloads и спокойно ими пользоваться!!

в том числе последние ночные сборки

в настоящий момент идёт переезд на альтернативные генераторы кода в частности cci, тогда самосборка под моно станет доступна. пока что только использование готового компилятора.

para
()
Ответ на: комментарий от mono

Немного оффтоп, но Nemerle еще живет и развивается? Коммьюнити существует?

Да, живет и развивается. Но, увы, комьюнити живет в основном на rsdn.ru, на который мне даже не удалось запостить этот вопрос.

Sectoid ★★★★★
() автор топика
Ответ на: комментарий от para

в данном случае по моему имеет место известный баг в моно.

Есть инфомация? дай хоть ссылку на баг.

Однако можно скачать бинарники немерле от сюда https://github.com/rsdn/nemerle/downloads и спокойно ими пользоваться!!

об этом знаю. Но, увы, данные сборки нельзя добавить Nemerle в репозиторий Debian. Потому предпочту решить проблемы со сборкой. Да и негоже как-то: такой интересный свободный проект и не бустрапится под свободной реализацией моно. Надо поправить.

Sectoid ★★★★★
() автор топика
Ответ на: комментарий от para

>вопросы по лучше всего задать здесь: http://www.rsdn.ru/forum/nemerle/

Увы и ах, форум очень глюченый. Вопрос там запостить мне так и не удалось. Потому, видимо, придется справлятся своими силами.

Sectoid ★★★★★
() автор топика
Ответ на: комментарий от winduzyatnik

http://lists.ximian.com/pipermail/mono-bugs/2011-April/111399.html

Спасибо. Там даже патч есть, только он странный. Буду разбираться.

2)Глючит не rsdn а сочетание твоего провайдера и рсдн'овского.

Внимание, вопрос: почему никакой другой форум не глючит?

Sectoid ★★★★★
() автор топика
Ответ на: комментарий от Sectoid

Спасибо. Там даже патч есть, только он странный. Буду разбираться.

Все, я понял к чему там тот патч. Странно что его сначала включили в upstream, а потом из-за каких-то регрессий в smcs, откатили. Буду разбираться дальше.

Sectoid ★★★★★
() автор топика
Ответ на: комментарий от Sectoid

Внимание, вопрос: почему никакой другой форум не глючит?

Просто админы RSDN'а задолбались с хостерами. И поставили серверы, в квартиру подключив через корбину.

У корбины в сетке живет какой-то странный таракан, из-за которого у некоторых людей возникают проблемы.

Причем он то появляется, то исчезает.

winduzyatnik
()
Ответ на: комментарий от Sectoid

ещё можно обсуждать здесь:http://groups.google.com/group/nemerle-en

ну и на гитхабе.

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

если у вас всё получиться дайте знать команде разработчиков, пожалуйста!

para
()
Ответ на: комментарий от para

если у вас всё получиться дайте знать команде разработчиков, пожалуйста!

Во-первых, «у тебя»). Во-вторых — уже получилось. Оказался таки косяк в mono. Даже патч есть по ссылке выше, но патч потом откатили из-за регрессии в smcs (ныне дохлом как и весь moonlight, ха-ха).

Патч пропихнут в дебиан и на днях в сид прибегут патченные пакеты. Как только прибегут — соберу и запакетирую свежий nemerle в Sid.

Что до апстрима — могу попробовать переоткрыть исходную багу (учитывая судьбу мунлайта — возможно теперь примут).

Sectoid ★★★★★
() автор топика
Ответ на: комментарий от Sectoid

Mono

Кстати, можно не дожидаться патча. А просто сделать форк и дать им пул реквест. Это более продуктивно будет.

Попробую замутить.

NN
()
Ответ на: Mono от NN

Попробую замутить.

Как замутишь, кинь сюда ссылку на pull-request.

Sectoid ★★★★★
() автор топика
Ответ на: комментарий от Sectoid

https://bugzillafiles.novell.org/attachment.cgi?id=426501

Этот патч действительно исправляет проблему, но есть другая. Падает на вызове System.Reflection.Emit.ParameterBuilder.SetConstant ( http://msdn.microsoft.com/en-us/library/system.reflection.emit.parameterbuild... ) Там уже надо смотреть что к чему. Почему в .Net не приводит к падению еще не знаю. Если есть возможность посмотреть также это бы ускорило процесс.

Самому хочется под моно запустить =)

NN
()
Ответ на: комментарий от NN

https://bugzillafiles.novell.org/attachment.cgi?id=426501

Да, я знаю этот патч. У меня, после прикладывания этого патча, Nemerle бутстрапится нормально. Я просил ссылку на pull request ;)

Падает на вызове System.Reflection.Emit.ParameterBuilder.SetConstant

Когда именно возникает проблема? С какой версией mono/nemerle?

Sectoid ★★★★★
() автор топика
Ответ на: комментарий от NN

Я компилировал моно в kubuntu из мастера. Обычно это более стабильные версии чем из stable :)

А я — из https://github.com/mono/mono/tree/mono-2-10, ибо релизы (тарболлы и пакеты для дистрибутивов) собираются именно из него, а не из master. И далеко не все из master перетянуто в mono-2.10.

Пул реквест: https://github.com/mono/mono/pull/242

Спасибо, буду мониторить.

Sectoid ★★★★★
() автор топика
Ответ на: комментарий от Sectoid

А я — из https://github.com/mono/mono/tree/mono-2-10, ибо релизы (тарболлы и пакеты для дистрибутивов) собираются именно из него, а не из master. И далеко не все из master перетянуто в mono-2.10.

Это понятно, но в Mono постоянно что-то ломают, поэтому нужно ориентироваться на master, чтобы починить до выхода 2.12 :)

NN
()
Ответ на: комментарий от NN

Это понятно, но в Mono постоянно что-то ломают, поэтому нужно ориентироваться на master, чтобы починить до выхода 2.12 :)

Ориентироваться нужно на то, что нужно тебе) Я не против прикладывания коммита в master (даже 2мя руками за), но я также настаиваю на его втягивании в mono-2-10. Ибо 2.12 непонятно когда выйдет, а очередной 2.10.х более обозрим. И потом — если предложить патч на мастер, то не факт что Xamarin втянет коммит в 2.10, а вот обратное — 100%.

Sectoid ★★★★★
() автор топика
Ответ на: комментарий от NN

Советуешь сделать еще пул на 2.10 ? :))

Отписался в реквесте — попросил смержить и в 2-10. если не трудно — создай pull-request в 2-10 и запости ссыль (и в оригинальном, и тут). Спасибо заранее)

Sectoid ★★★★★
() автор топика
Ответ на: комментарий от NN

А мастер не трогал еще ? У меня не собрался, может у тебя соберется ?

Не, еще руки не дошли. Если не забуду — попробую вечером. А вообще, стучи в жаббер (в профиле).

Sectoid ★★★★★
() автор топика
Ответ на: комментарий от Sectoid

Компиляция

В 2.10 также как и в мастере есть еще одна проблема. Нужно смотреть и решать.

Constant is 0, type is System.Int32: error : internal compiler error: got ArgumentException (Constant does not match the defined type.)
  at System.Reflection.Emit.ParameterBuilder.SetConstant (System.Object defaultValue) [0x00000] in <filename unknown>:0 
  at Nemerle.Compiler.MethodBuilder.CreateConstructorBuilder (System.Reflection.Emit.TypeBuilder tb) [0x00000] in <filename unknown>:0 
  at Nemerle.Compiler.MethodBuilder.CreateEmitBuilder (System.Reflection.Emit.TypeBuilder tb) [0x00000] in <filename unknown>:0 
  at Nemerle.Compiler.TypeBuilder.CreateEmitDeclarations () [0x00000] in <filename unknown>:0 
  at Nemerle.Compiler.TypesManager+_N_emit_decls__58351.apply_void (Nemerle.Compiler.TypeBuilder ti) [0x00000] in <filename unknown>:0 
  at Nemerle.Compiler.TypesManager+_N__N_lambda__58637__58653.apply_void (Nemerle.Compiler.TypeBuilder b) [0x00000] in <filename unknown>:0 
  at Nemerle.Compiler.TypesManager+_N_maybe_f__58608.apply_void (Nemerle.Compiler.TypeBuilder ti) [0x00000] in <filename unknown>:0 
  at Nemerle.Collections.NList.Iter[TypeBuilder] (Nemerle.Core.list`1 l, Nemerle.Builtins.FunctionVoid`1 f) [0x00000] in <filename unknown>:0 
  at Nemerle.Core.list`1[Nemerle.Compiler.TypeBuilder].Iter (Nemerle.Builtins.FunctionVoid`1 f) [0x00000] in <filename unknown>:0 
  at Nemerle.Compiler.TypesManager.Iter (Nemerle.Core.list`1 builders, Nemerle.Builtins.FunctionVoid`1 f) [0x00000] in <filename unknown>:0 
  at Nemerle.Compiler.TypesManager.IterConditionally (Nemerle.Builtins.FunctionVoid`1 f, Nemerle.Builtins.Function`2 cond) [0x00000] in <filename unknown>:0 
  at Nemerle.Compiler.TypesManager.compile_all_tyinfos (Boolean aux_phase) [0x00000] in <filename unknown>:0 
  at Nemerle.Compiler.TypesManager+_N__N_lambda__57806__57909.apply_void () [0x00000] in <filename unknown>:0 
  at Nemerle.Compiler.Solver.Enqueue (Nemerle.Builtins.FunctionVoid action) [0x00000] in <filename unknown>:0 
  at Nemerle.Compiler.TypesManager.EmitDecls () [0x00000] in <filename unknown>:0 
  at Nemerle.Compiler.ManagerClass.Run () [0x00000] in <filename unknown>:0 
  at Nemerle.CommandlineCompiler.MainClass.main_with_catching () [0x00000] in <filename unknown>:0 
NN
()
Ответ на: Компиляция от NN

Напиши, пожалуйста полный набор команд, которыми собираешь Nemerle. Потому как на патченом 2.10.8.1 твою ошибку получить не могу.

Sectoid ★★★★★
() автор топика
Ответ на: комментарий от Sectoid

Попробую make clean , а если не получится новый clone сделаю.

NN
()
Ответ на: комментарий от NN

На Debian'овской версии mono (то что в sid'е + патч) вот так все собирается на ура:

xbuild NemerleAll-Mono.nproj /t:Stage4 /tv:3.5

Сейчас ставлю чистый Sid в chroot чтобы собрать mono из git'а и проверить там. О результатах сообщу.

Sectoid ★★★★★
() автор топика
Ответ на: комментарий от Sectoid

Итак:

Результат сборки:

(sid-mono)sectoid@dagon:~/prj/oss/nemerle$ xbuild NemerleAll-Mono.nproj /t:Stage4 /tv:3.5
...
Done building project "/home/sectoid/prj/oss/nemerle/NemerleAll-Mono.nproj".

Build succeeded.

Warnings:

/home/sectoid/prj/oss/nemerle/NemerleAll-Mono.nproj (Stage4) ->
(NTasks target) ->
/home/sectoid/prj/oss/nemerle/Nemerle.XBuild.Tasks.csproj (Rebuild) ->
/usr/local/lib/mono/4.0/Microsoft.CSharp.targets (CoreCompile target) ->

	tools/msbuild-task/MSBuildTask.cs(357,29): warning CS0219: The variable `_' is assigned but its value is never used

	 1 Warning(s)
	 0 Error(s)

Time Elapsed 00:03:49.4820230

Версия mono:

(sid-mono)sectoid@dagon:~/prj/oss/nemerle$ mono --version
Mono JIT compiler version 2.10.8.1 (mono-2-10/bad8aa4 Wed Mar 14 17:55:35 UTC 2012)
Copyright (C) 2002-2011 Novell, Inc, Xamarin, Inc and Contributors. www.mono-project.com
	TLS:           __thread
	SIGSEGV:       altstack
	Notifications: epoll
	Architecture:  x86
	Disabled:      none
	Misc:          softdebug 
	LLVM:          supported, not enabled.
	GC:            Included Boehm (with typed GC and Parallel Mark)
Собиралась mono так:
./autogen.sh --prefix=/usr/local && 
sudo apt-get intall mono-gmcs && # без этого не соберется, а monolite поломан
make -j8 && 
sudo apt-get purge mono-gmcs && # ...снесли Debian'овский mono
make install

Sectoid ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.