Компилятор F#-а...
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.12.10 16:12
Оценка:
Просьба к тем у кого есть время сказчать исходники F# и провентилировать следующий вопрос.

Нельзя ли использовать бэкэнд компилятора F# в качестве бэкэнда для Nemerle?

Интересует следующие вопросы:
1. Лицензионные ограничения.
2. Физическая возможность.
3. Ограничения на которые можно нарваться.

Нам от него нужно следующее:
1. Чтение метаданных из сборок.
2. Генерация MSIL (сборок и в памяти).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Компилятор F#-а...
От: Ziaw Россия  
Дата: 24.12.10 18:22
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Просьба к тем у кого есть время сказчать исходники F# и провентилировать следующий вопрос.


VD>Нельзя ли использовать бэкэнд компилятора F# в качестве бэкэнда для Nemerle?


VD>Интересует следующие вопросы:

VD>1. Лицензионные ограничения.

Лицензия апач 2.0. это означает, что можно использовать как угодно, единственное требование — указать конечному пользователю, что в проект был включен такой-то код взятый под апачем, приложить лицензию и список авторов. Сам проект можно лицензировать как угодно, даже код закрывать.

VD>2. Физическая возможность.

VD>3. Ограничения на которые можно нарваться.

VD>Нам от него нужно следующее:

VD>1. Чтение метаданных из сборок.
VD>2. Генерация MSIL (сборок и в памяти).

Сори за нубский вопрос, какие метаданные не умеет читать рефлекшен? Или слишком медленно?

Скачал, обнаружил, что студия у меня без фшарпа. Повтыкал в фаре. Похоже это все в ilxgen.fs. Все что я понял — файл, сцуко, большой, 350кб. Основной проблемой вижу заточенность под AST фшарпа.
Re[2]: Компилятор F#-а...
От: Ziaw Россия  
Дата: 24.12.10 18:32
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Скачал, обнаружил, что студия у меня без фшарпа. Повтыкал в фаре. Похоже это все в ilxgen.fs. Все что я понял — файл, сцуко, большой, 350кб. Основной проблемой вижу заточенность под AST фшарпа.


Хотя есть некий internal Microsoft.FSharp.Compiler.AbstractIL, может и получиться. Плюсы конечно хорошие, mono, silverlight из коробки.
Re[2]: Компилятор F#-а...
От: hardcase Пират http://nemerle.org
Дата: 24.12.10 19:16
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Сори за нубский вопрос, какие метаданные не умеет читать рефлекшен? Или слишком медленно?


Он сборки в память загружает в текущем рантайме.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Компилятор F#-а...
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.12.10 19:43
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Сори за нубский вопрос, какие метаданные не умеет читать рефлекшен? Или слишком медленно?


Рефлексия умеет читать любые метаданные при условии, что сборка из которой они читаются той же версии, что и рантайм и при условии, что сборка загружена на исполнение.

Оба этих условия очень плохи. Это практически означает, что мы не можем компилировать сборки для других версий рантайма (например, Сильверлайта или Компакт-фрэймворка), и не можем прочесть метаданных не загрузив сборку на исполнение.

Простой пример — Чтобы прочесть значение атрибутов рефлексия требует загрузить сборку на исполнение и создать экземпляр атрибута. К примеру, CCI Matadata позволяет узнать значения атрибутов просто прочтя файл сборки как данные (не загружая его на исполнение). Это значит, что нам становится не важен рантайм, увеличивается скорость чтения метаданных и мы легко можем отличить типы прочитанные из сборки от типов загруженных в CLR обычным способом.

Z>Скачал, обнаружил, что студия у меня без фшарпа. Повтыкал в фаре. Похоже это все в ilxgen.fs. Все что я понял — файл, сцуко, большой, 350кб. Основной проблемой вижу заточенность под AST фшарпа.


Ничего не понял. Давай как по пордку и по детальнее.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Компилятор F#-а...
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.12.10 19:49
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Хотя есть некий internal Microsoft.FSharp.Compiler.AbstractIL, может и получиться. Плюсы конечно хорошие, mono, silverlight из коробки.


Вот, вот вот. AbstractIL — это бывший ресерч.проект в МС Ресерч. Но его зачем-то закрыли под Ресерчную лицензию. А тут мы имеем не только его под правильной лицензией, но и доведенным до ума разработчиками F#-а.

Нужно узнать следующие:
1. Есть ли некий более высокоуровневый слой над AbstractIL?
2. Как читать метаданные из сборок с помощью этого дела? Например, интересно как считать те же метаданные атрибутов не прибегая к рефлексии.
3. Как выглядит генерация МСИЛ-а?

Конечная цель понять имеет ли смысл использовать потроха F#-а, или лучше все же взять CCI Metadata или Mono Cecil.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Компилятор F#-а...
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.12.10 19:50
Оценка:
Здравствуйте, hardcase, Вы писали:

Z>>Сори за нубский вопрос, какие метаданные не умеет читать рефлекшен? Или слишком медленно?


H>Он сборки в память загружает в текущем рантайме.


Не понял, кто он? Рефлекшон? Он их не просто в память загружает, а еще и на исполнение в текущем домене поднимает. Это приводит к каше типов, блокировкам и куче других проблем.

Я не знаю какой АПИ мы будем использовать в 2.0, но это точно не будет System.Reflection.*.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Компилятор F#-а...
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.12.10 19:53
Оценка:
Здравствуйте, Ziaw, Вы писали:

Два вопроса лично к тебе, таз уж ты тоже выразил интерес в участие в разработки Nemerle 2.0.

1. Насколько хорошо ты знаком с генерацией IL-а и с рефлексией?
2. Было бы тебе интересно заняться работой связанной с загрузкой метаданных из сборок и генерацией IL?

Это весьма важная часть компилятора. Ее нужно четко изолировать и качественно реализовать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Компилятор F#-а...
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.12.10 20:04
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Скачал, обнаружил, что студия у меня без фшарпа. Повтыкал в фаре. Похоже это все в ilxgen.fs. Все что я понял — файл, сцуко, большой, 350кб.


350 К это еще терпимо.

Z>Основной проблемой вижу заточенность под AST фшарпа.


Ну, это не такая уж проблема. Это мы на макросах (или вручную) могли бы конвертнуть.

Мне кажется там может быть другая проблема — этот АПИ может быть заточен на их типы лябдм, кортежей и т.п.
Так что не факт, что его можно будет использовать без переделок. А ручная переделка будет означать, что мы потеряем возможность легкого переползания на новые версии F#-пного рантайма.

В прочем, возможно надо поговорить с разработчиками F#-а. Может быть они пойдут на абстрагирование своего АПИ в обмен на нашу помощью в его развитии.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Компилятор F#-а...
От: Ziaw Россия  
Дата: 25.12.10 04:52
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Два вопроса лично к тебе, таз уж ты тоже выразил интерес в участие в разработки Nemerle 2.0.


VD>1. Насколько хорошо ты знаком с генерацией IL-а и с рефлексией?


На троечку Вдобавок я практически не знаю i386 асемблера, что могло бы помочь хотя бы по аналогии.

VD>2. Было бы тебе интересно заняться работой связанной с загрузкой метаданных из сборок и генерацией IL?


VD>Это весьма важная часть компилятора. Ее нужно четко изолировать и качественно реализовать.


Не, тут я пас, не умею и нет того интереса с которым во всем чем нужно сам разберешься.
Re[3]: Компилятор F#-а...
От: Ziaw Россия  
Дата: 25.12.10 05:03
Оценка: +1
Здравствуйте, VladD2, Вы писали:

Z>>Скачал, обнаружил, что студия у меня без фшарпа. Повтыкал в фаре. Похоже это все в ilxgen.fs. Все что я понял — файл, сцуко, большой, 350кб.


VD>350 К это еще терпимо.


Z>>Основной проблемой вижу заточенность под AST фшарпа.


VD>Ну, это не такая уж проблема. Это мы на макросах (или вручную) могли бы конвертнуть.


VD>Мне кажется там может быть другая проблема — этот АПИ может быть заточен на их типы лябдм, кортежей и т.п.

VD>Так что не факт, что его можно будет использовать без переделок. А ручная переделка будет означать, что мы потеряем возможность легкого переползания на новые версии F#-пного рантайма.

VD>В прочем, возможно надо поговорить с разработчиками F#-а. Может быть они пойдут на абстрагирование своего АПИ в обмен на нашу помощью в его развитии.


Я потом еще смотрел немного, жаль фшарп не знаю совсем. Похоже AbstractIL это и есть то самое абстрагирование. Все что выше занимается трансляцией аста фшарпа и нам совсем не нужно.

Вобщем все лежит в папке src/absil, я думаю ее можно собрать отдельно от компилятора. Только там все internal, придется править или добавлять InternalsVisibleTo.
Re[4]: Компилятор F#-а...
От: Аноним  
Дата: 26.12.10 07:20
Оценка:
Здравствуйте, Ziaw, Вы писали:

Где гарантия, что на Фшарп не забьют?
ироны пример явный
Re[4]: Компилятор F#-а...
От: Воронков Василий Россия  
Дата: 26.12.10 07:51
Оценка:
Здравствуйте, Ziaw, Вы писали:

VD>>1. Насколько хорошо ты знаком с генерацией IL-а и с рефлексией?

Z>На троечку Вдобавок я практически не знаю i386 асемблера, что могло бы помочь хотя бы по аналогии.

x86 ассемблер регистровый, чем бы это помогло-то. А сам MSIL — это очень простой язык, достаточно понимать, как стек работает и запомнить инструкции.
Re[5]: Компилятор F#-а...
От: Аноним  
Дата: 26.12.10 08:05
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

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


VD>>>1. Насколько хорошо ты знаком с генерацией IL-а и с рефлексией?

Z>>На троечку Вдобавок я практически не знаю i386 асемблера, что могло бы помочь хотя бы по аналогии.

ВВ>x86 ассемблер регистровый, чем бы это помогло-то. А сам MSIL — это очень простой язык, достаточно понимать, как стек работает и запомнить инструкции.


x86 amd64 это ограниченно регистровая машина.

MSIL javavm неограниченная стековая.

llvm — неограниченная регистровая.

у каждого своя специфика.

llvm — самая простая (близкая к языкам программирования уровня С)
Re[5]: Компилятор F#-а...
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.12.10 09:16
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Где гарантия, что на Фшарп не забьют?

А>ироны пример явный

Согласен, но так же нет гарантий, что не забьют и на другие API.

F# перевели под опен сорс. Это с одной стороны плохой знак, так как именно так начинают забивать в МС. С другой стороны есть надежда, что продукт будут развивать в опенсор-виде.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Компилятор F#-а...
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.12.10 09:18
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>x86 ассемблер регистровый, чем бы это помогло-то. А сам MSIL — это очень простой язык, достаточно понимать, как стек работает и запомнить инструкции.


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

Спасает только то, что есть эталон в виде компилятора шарпа и Рефлектор/Илдасм в качестве средств изучения.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Компилятор F#-а...
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.12.10 09:23
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

Кстати, может тоже присоединишься к проекту? За одно на базе немерловой технологии для свое Елы сделаешь компилятор.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Компилятор F#-а...
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.12.10 09:53
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>На троечку Вдобавок я практически не знаю i386 асемблера, что могло бы помочь хотя бы по аналогии.


Ассемблер тут не нужен. Генерируется ведь МСИЛ. Помочь оно не сильно может, так как ассемблер очень далек от машины дотнета. Тут уже об этом упоминали.

VD>>2. Было бы тебе интересно заняться работой связанной с загрузкой метаданных из сборок и генерацией IL?


VD>>Это весьма важная часть компилятора. Ее нужно четко изолировать и качественно реализовать.


Z>Не, тут я пас, не умею и нет того интереса с которым во всем чем нужно сам разберешься.


Ну, не умею — это не аргумент. Все по началу ничего не умеют. Это наоборот — опыт. При том очень ценный (даже вне рамок компилятора).

Другое дело, что нет интереса. Тут ничего не поделаешь. К сожалению эта задача мало кого возбуждает. Но кому-то ее нужно решать.

ЗЫ

Как бы не получилось так, что все захотят делать одни и те же ультра-интересные задачи и забьют на менее интересные.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Компилятор F#-а...
От: Ziaw Россия  
Дата: 26.12.10 16:57
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>x86 ассемблер регистровый, чем бы это помогло-то. А сам MSIL — это очень простой язык, достаточно понимать, как стек работает и запомнить инструкции.


Да хз, я работал с ассемблерами очень давно, под КР580 и PDP-11, они уж точно дальше от MSIL.

оффтоп: макроссемблер для PDP-11 прекрасен.
Re[5]: Компилятор F#-а...
От: Ziaw Россия  
Дата: 26.12.10 17:10
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Другое дело, что нет интереса. Тут ничего не поделаешь. К сожалению эта задача мало кого возбуждает. Но кому-то ее нужно решать.


Еще сложно планировать. Вот скажу я сейчас, что займусь. Начну штудировать MSIL, экспериментировать с ним. Когда я разберусь в нем на достаточном для написания уровне прогнозировать очень сложно. У меня серьезные пробелы в понимании: SecurityPermissions, отличий в разных рантаймах, возможностей и ограничений внутренней системы типов в CLR. Наверняка список неполон, ибо я еще не знаю чего я не знаю. На восполнение этих пробелов надо достаточно много времени, которого всегда не хватает.

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


Обычное дело, все равно рано или поздно кто-то делает неинтересные, потому, что без них никуда. А несколько человек на интересную — ну пусть соревнуются, лучшее решение мерджится в основную ветку.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.