Скачал их последний билд (примерно неделю-две назад), скомпилил пример HelloCodeModel — ровно то, что будет делать компилятор. Выход получился (hello.exe), но он не работает:
"Unhandled Exception: System.BadImageFormatException: Could not load file or assembly 'hello.exe' or one of its dependencies".
Закономерный вопрос: а можно ли им пользоваться вообще? Понимаю, что проблема может быть в одном байте, но где гарантия, что таких "неправильных байтов" не разбросано по остальным местам?
И попутный вопрос: а много ли вам нужно от CCI? Сгенерировать MSIL можно и руками, а то и вообще *.il исходник скармливать ilasm'у.
Здравствуйте, matumba, Вы писали:
M>Скачал их последний билд (примерно неделю-две назад), скомпилил пример HelloCodeModel — ровно то, что будет делать компилятор. Выход получился (hello.exe), но он не работает: M>"Unhandled Exception: System.BadImageFormatException: Could not load file or assembly 'hello.exe' or one of its dependencies".
Не знаю. Я качал, компилил — все работало. Дума, что ты что-то не так сделал. Или они багу допустили.
Создай им Исьюс и все выяснится.
Потом HelloCodeModel — это, вроде бы, пример не для CCI Metadata который хотим использовать мы, а пример для CCI AST (более высокоуровневого API, которое, скорее всего для нас не нужно).
M>Закономерный вопрос: а можно ли им пользоваться вообще? Понимаю, что проблема может быть в одном байте, но где гарантия, что таких "неправильных байтов" не разбросано по остальным местам?
Это конечно никто гарантировать не может. Но "нерабочих байтов" Emit-е просто не прилично много. Плюс есть системные ошибки.
M>И попутный вопрос: а много ли вам нужно от CCI? Сгенерировать MSIL можно и руками, а то и вообще *.il исходник скармливать ilasm'у.
Руками — это ты хорошо пошутил. Видил объем этого CCI Metadata? Вот это все придется написать своими руками.
Короче, работы и так море. И взваливать на себя еще одну объемную задачу — это не конструктивно.
Тут вопрос может только ставиться так. CCI Metadata или что-то другое. Если в МС стки решатся и сделают управляемый компилятор C#-а, то возможно можно будет использовать его качестве баэкэнда. Так же можно поглядеть на Mono Cecil. Мои наблюдения показали что CCI Metadata более зрелый продукт.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, matumba, Вы писали:
M>И попутный вопрос: а много ли вам нужно от CCI? Сгенерировать MSIL можно и руками, а то и вообще *.il исходник скармливать ilasm'у.
Поясню... Дело в том, что в задачи компиляторах кроме порождения MSIL-а так же входит чтение метаданных из сборок на которые имеются ссылки в проекте. А это значит, что нужно уметь читать сборки и извлекать из них эти самые метаданные.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, matumba, Вы писали:
M>Скачал их последний билд (примерно неделю-две назад), скомпилил пример HelloCodeModel — ровно то, что будет делать компилятор. Выход получился (hello.exe), но он не работает: M>"Unhandled Exception: System.BadImageFormatException: Could not load file or assembly 'hello.exe' or one of its dependencies".
Под какую платформу собирал x32 или x64 и под какую запускал?
Здравствуйте, Denom, Вы писали:
D>Под какую платформу собирал x32 или x64 и под какую запускал?
x86 .NET 4; Причём этот же пример, но из "простого" СИСИАЙ (где руками эмитятся инструкции) работает! (можете даже сравнить исходники — почти 1:1)
Здравствуйте, Vlad2, Вы писали:
> Потом HelloCodeModel — это, вроде бы, пример не для CCI Metadata > так же входит чтение метаданных из сборок
Да, Влад, спасибо, теперь разобрался!
Я посмотрел их сорсы — это ппц. Чисто "микростиль микрософта" — мильён микроклассов под каждый пук. Генерация PE особо впечатлила. (иронизирую, конечно)
Ну, если ничего лучше этого нет, пусть будет ЦЦИ.
Здравствуйте, matumba, Вы писали:
M>Я посмотрел их сорсы — это ппц. Чисто "микростиль микрософта" — мильён микроклассов под каждый пук. Генерация PE особо впечатлила. (иронизирую, конечно)
Да, писали это дело настоящие индейцы архитекторы. Все черех интерфейсы, фабрики и т.п. Разбираться в таком коде не просто конечно.
M>Ну, если ничего лучше этого нет, пусть будет ЦЦИ.
К сожалению выбор не большой. Если МС перепишет компилятор шарпа на C# и откроет его API, то возоможно его можно будет вместо бэкэнда использовать. Но на сегодня выбор между CCI Metadata и Cecil. И похоже Cecil довольно сыроват.
Я экспериментировал CCI Metadata и первые впечатления были положительными. Недостающих функций я не обнаружил.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.