Nemerle for Android
От: Димчанский Литва http://dimchansky.github.io/
Дата: 13.09.12 21:38
Оценка:
Кто-нибудь пробовал прицепить компилятор Nemerle к Mono for Android?
Насколько это сложно сделать? Я до конца еще не разобрался, но там, как я понял, mscorlib для всех сборок должен быть от MonoAndroid ну и, соответственно, никаких референсов на родной .NET от MS. В сборках прописывается runtime v2.0.50727 / msil.
Re: Nemerle for Android
От: hardcase Пират http://nemerle.org
Дата: 14.09.12 07:09
Оценка:
Здравствуйте, Димчанский, Вы писали:

Д>Насколько это сложно сделать?


Ты даже не представляешь себе насколько
Для начала компилятор нужно отучить от System.Reflection.Emit. Я этим спортом когда-то начинал заниматься, да не дожал — версии уж очень сильно разошлись (нужно было чаще синхронизировать ветки).
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Nemerle for Android
От: Димчанский Литва http://dimchansky.github.io/
Дата: 14.09.12 07:46
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Ты даже не представляешь себе насколько

H>Для начала компилятор нужно отучить от System.Reflection.Emit. Я этим спортом когда-то начинал заниматься, да не дожал — версии уж очень сильно разошлись (нужно было чаще синхронизировать ветки).

К сожалению, да, не представляю.
Но очень хочу понять, где затыки.
Полазив вчера пол часа по сборкам Mono for Android, я предполагаю, что там вся фишка в том, что сначала собираются обычные .NET сборки (только референсы не стандартные), далее эти готовые сборки просто конвертятся в родной код Android платформы.
Может я ошибаюсь. Но если так, то даже если Nemerle использует System.Reflection.Emit, то разве это что-то меняет? Т.е. можно ли эмитить код с использованием System.Reflection.Emit, но цеплять при этом mscorlib от MonoAndroid? Если да, то там нужно будет просто таргеты в проектах поправить, чтобы компиляция шла с использованием Nemerle компилятора. А далее уже готовые сборки подвергнутся их стандартным трансформациям в код Андроида.
Т.е., как я понимаю, задачи компилировать все сразу в код Андроида не стоит, нужно компилить с использованием нестандартных референсов.
Ну это мои дилетантские рассуждения. Может я чего-то не знаю.
Вечность — это ужасно долго, особенно ближе к концу.
Re[3]: Nemerle for Android
От: hardcase Пират http://nemerle.org
Дата: 14.09.12 08:34
Оценка:
Здравствуйте, Димчанский, Вы писали:

Д>Может я ошибаюсь. Но если так, то даже если Nemerle использует System.Reflection.Emit, то разве это что-то меняет? Т.е. можно ли эмитить код с использованием System.Reflection.Emit, но цеплять при этом mscorlib от MonoAndroid?


В том-то и дело, что mscorlib, отличный от текущего рантайма SRE зареференсить не позволяет.
В компиляторе есть еще одна тонкость — он грузит сборки в исполняемый контекст, в то время как в этот контекст нужно загружать только сборки с макросами и внешними парсерами, а обычные сборки нужно загружать только для рефлексии. С этим пунктом я справился, но мержить в мастер уже было поздно.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[4]: Nemerle for Android
От: Димчанский Литва http://dimchansky.github.io/
Дата: 14.09.12 08:37
Оценка:
Здравствуйте, hardcase, Вы писали:

H>В том-то и дело, что mscorlib, отличный от текущего рантайма SRE зареференсить не позволяет.


Печально.
Значит, про Nemerle на Андроиде можно пока забыть.
Вечность — это ужасно долго, особенно ближе к концу.
Re[5]: Nemerle for Android
От: fddima  
Дата: 14.09.12 08:45
Оценка:
Здравствуйте, Димчанский, Вы писали:

Д>Печально.

Д>Значит, про Nemerle на Андроиде можно пока забыть.
А чем отличаются эти mscorlib-ы?
Может можно взять Mono.Cecil и переписать референс в сборке на нужный — не поможет?
Re[6]: Nemerle for Android
От: Димчанский Литва http://dimchansky.github.io/
Дата: 14.09.12 09:00
Оценка:
Здравствуйте, fddima, Вы писали:
F> А чем отличаются эти mscorlib-ы?
F> Может можно взять Mono.Cecil и переписать референс в сборке на нужный — не поможет?

Ну я не углублялся особенно, внешне очень похоже на mscorlib от MS, есть какие-то Mono неймспейсы. Может быть и можно. Но даже если так, то прийдется это делать для всех сборок, в том числе для библиотек Nemerle. И не только mscorlib, но и другие референсы нужно будет править. Как минимум, какие-нибудь mscorlib.dll, System.Core.dll, System.Data.dll,
System.dll. Вот полный список сборок MonoAndroid:

I18N.CJK.dll
I18N.dll
I18N.MidEast.dll
I18N.Other.dll
I18N.Rare.dll
I18N.West.dll
Microsoft.CSharp.dll
Mono.CompilerServices.SymbolWriter.dll
Mono.CSharp.dll
Mono.Data.Sqlite.dll
Mono.Data.Tds.dll
Mono.Security.dll
mscorlib.dll
System.Core.dll
System.Data.dll
System.Data.Services.Client.dll
System.dll
System.EnterpriseServices.dll
System.Json.dll
System.Numerics.dll
System.Runtime.Serialization.dll
System.ServiceModel.dll
System.ServiceModel.Web.dll
System.Transactions.dll
System.Web.Services.dll
System.Xml.dll
System.Xml.Linq.dll

Вечность — это ужасно долго, особенно ближе к концу.
Re[7]: Nemerle for Android
От: fddima  
Дата: 14.09.12 09:06
Оценка:
Здравствуйте, Димчанский, Вы писали:

Я так понимаю ты использует Nemerle 4.0/4.5?
А если взять Nemerle 3.5 — откомпилить им твои сборки, (попутно только убедится, что ncc реально использует именно CLR2, а не CLR4), — то он уже по идее должен референсить mscorlib 2, безо всяких приседаний. Или есть ещё какие-то моменты?
Re[8]: Nemerle for Android
От: Димчанский Литва http://dimchansky.github.io/
Дата: 14.09.12 09:23
Оценка:
Здравствуйте, fddima, Вы писали:

F>Я так понимаю ты использует Nemerle 4.0/4.5?

F>А если взять Nemerle 3.5 — откомпилить им твои сборки, (попутно только убедится, что ncc реально использует именно CLR2, а не CLR4), — то он уже по идее должен референсить mscorlib 2, безо всяких приседаний. Или есть ещё какие-то моменты?

Я пока ничего не использую. То, что Nemerle 3.5 референсит mscorlib 2, я так понимаю мало. Т.к. нужно референсить совсем другой mscrolib и не только его.
Вечность — это ужасно долго, особенно ближе к концу.
Re[9]: Nemerle for Android
От: fddima  
Дата: 14.09.12 09:52
Оценка:
Здравствуйте, Димчанский, Вы писали:

Д>Я пока ничего не использую. То, что Nemerle 3.5 референсит mscorlib 2, я так понимаю мало. Т.к. нужно референсить совсем другой mscrolib и не только его.

Стоит попробовать — этого должно быть вполне достаточно.
Если это не поможет — думаю, что можно будет найти и другой выход.
У меня сейчас монодроида под руками нет просто.
Re: Nemerle for Android
От: Andy77 Ниоткуда  
Дата: 14.09.12 14:30
Оценка:
Здравствуйте, Димчанский, Вы писали:

Д>Кто-нибудь пробовал прицепить компилятор Nemerle к Mono for Android?

Д>Насколько это сложно сделать? Я до конца еще не разобрался, но там, как я понял, mscorlib для всех сборок должен быть от MonoAndroid ну и, соответственно, никаких референсов на родной .NET от MS. В сборках прописывается runtime v2.0.50727 / msil.

Mono под Андроид — это было бы здорово, но еще хотелось бы иметь возможность компилировать под Silverlight. Это, пожалуй, единственное, что меня останавливает от использования Nemerle.
Re[4]: Nemerle for Android
От: Димчанский Литва http://dimchansky.github.io/
Дата: 23.10.12 06:48
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, Димчанский, Вы писали:


Д>>Может я ошибаюсь. Но если так, то даже если Nemerle использует System.Reflection.Emit, то разве это что-то меняет? Т.е. можно ли эмитить код с использованием System.Reflection.Emit, но цеплять при этом mscorlib от MonoAndroid?


H>В том-то и дело, что mscorlib, отличный от текущего рантайма SRE зареференсить не позволяет.

H>В компиляторе есть еще одна тонкость — он грузит сборки в исполняемый контекст, в то время как в этот контекст нужно загружать только сборки с макросами и внешними парсерами, а обычные сборки нужно загружать только для рефлексии. С этим пунктом я справился, но мержить в мастер уже было поздно.

А тем временем вышел Mono 3.0:

Our C# compiler has now completed its migration from using System.Reflection.Emit as its code generation backend to use the IKVM.Reflection API. This functionality was previewed in Mono 2.10 and is now the default. With this functionality, developers can use any mscorlib that they want (for example the MicroFramework one, or a custom one) without having to build a custom compiler. We were able to eliminate the multiple executables for the compiler, and unify all the compilers into one as well as reducing our build times significantly.


Но ведь это никак не поможет Немерле влиться в ряды Mono for Android?
Вечность — это ужасно долго, особенно ближе к концу.
Re[5]: Nemerle for Android
От: hardcase Пират http://nemerle.org
Дата: 23.10.12 09:30
Оценка:
Здравствуйте, Димчанский, Вы писали:

Д>Но ведь это никак не поможет Немерле влиться в ряды Mono for Android?


Не знаю. Не высока доля рынка моно для ондроеда. Можно конечно попытаться осуществить второй подход к портированию компилятора на IKVM.Reflection, но это требует многих усилий и времени (я могу это сделать, но для этого потребуется около полугода работы).
/* иЗвиНите зА неРовнЫй поЧерК */
Re[6]: Nemerle for Android
От: Димчанский Литва http://dimchansky.github.io/
Дата: 23.10.12 09:44
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Не знаю. Не высока доля рынка моно для ондроеда. Можно конечно попытаться осуществить второй подход к портированию компилятора на IKVM.Reflection, но это требует многих усилий и времени (я могу это сделать, но для этого потребуется около полугода работы).


Пол года — это действительно много усилий. Понял.
Вечность — это ужасно долго, особенно ближе к концу.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.