?

Log in

No account? Create an account

December 18th, 2009 - Excelsior — LiveJournal

Dec. 18th, 2009

06:48 pm - Аналоги LLVM для дотнета

Есть таск, который заключается в том, чтобы взять IL, заколбасить в нем несколько изменений, заоптимизировать его и скомпилировать в машинный код. Так как абсолютно не хочется руками писать работу с SSA, пропагацию констант и устранение мертвого кода (это программа-минимум, которую обязательно надо реализовать для конкретной задачи), то есть желание найти либу, которой можно скормить либо сам IL, либо некое его легко получаемое производное, а на выходе получить оптимизированный IR.

В unmanaged мире я таких библиотек знаю как минимум три - GCC, Open64 и LLVM, но 1) на плюсах писать совсем нет желания, 2) этот таск вкладывается в managed прилагу, так что при таком раскладе придется париться с интеропом, например, писать дофига пи-инвоуков. Вот к чему меня привели поиски менеджд-аналогов, которые на данный момент активно разрабатываются или доведены до релизного статуса:

По лицензиям все обстоит следующим образом - Phoenix и Singularity это RDK, то есть их юзать можно только для фана (для Финикса еще в 2008м году обещали SDK для коммерческого использования, но пока что все остановилось), а все остальные креативы доступны нашару для коммерческого использования по лицензии MS-PL.

По функциональности. 1) В Финиксе реализована туева хуча алгоритмов для работы c IR, включая те, что мне нужны, плюс есть ридер и райтер IL-а, а также x86-бакэнд. 2) В CCI реализованы source (файлы), metadata (метаданные CLI) и code (AST кодярника) модели сборок дотнета, причем есть read-only и read-write режимы работы. Например, при помощи CCI можно декомпилировать IL, поменять что-ть в AST и записать результат обратно. К сожалению, нету ни средств анализа, ни средств оптимизации code model. 3) Из компиляторов операционок я смотрел только MOSA, и он меня приятно порадовал (есть IL -> IR, есть IR <-> SSA, есть dead code elimination), хоть и находится в весьма ранней стадии разработки.

Промежуточный вывод. Несмотря на то, чтo Phoenix - единственный closed-source проект из вышеперечисленных, я решил остановиться на нем. Слухи подсказывают, что несмотря на то, что последний SDK вышел 1.5 года назад, проект живет. API совершенно невообразимый, но меня соблазняет возможность заюзать качественные оптимизации и, возможно, реюзать один из бакэндов. В процессе еще отпишусь.

07:02 pm - OneNote и Sharepoint - часть 2

Продолжение предыдущего поста про ВанНоут совсем не радостное. Пытался я создать шаренный ноутбук на SharePoint 2010, но нифига не вышло - ни банальным New, ни забрасыванием на сервер файла *.onepkg, ни забрасыванием набора файликов-страничек *.one вместе с индексом *.onetoc2.

Лучший результат: ВанНоут умеет открывать и синхронизировать вручную заброшенные на сервер файлики *.one, но они помещаются в Misplaced Sections, так как ВанНоут не догоняет, к какому ноутбуку они принадлежат. Если же открывать onetoc2, то ВанНоут говорит, что не знает такого типа файлов. Гыгы.

Засабмиттил баг на форуме Technet: Having problem with storing notebooks in Sharepoint 2010 document library, но, судя по ответам, вроде бы при точно такой же конфигурации софта у народа все работает. Блин, надо разбираться.

Tags:

07:08 pm - APL

Откопал прикольный документ: Notation as a Tool of Thought, в котором Кеннет Иверсон, создатель языка APL, рассказывает о своем детище на вручении ACM Turing Award 1979. АПЛ - абсолютно эпический язык, который по своей криптичности понравился мне с первого взгляда. Обязательно полностью почитаю этот док.

Вышел на этот креатив я через потс на кодебеттере A Programmer Pilgrim’s Progress, в котором автор пишет: "APL is interpreted which, combined with its unequaled power and economy of expression, enabled productivity such as had never been seen … and would not be seen until this century. While everyone else was presenting their boxes of 80-column cards to the guardians of the raised floor, hoping to squeeze in one or two runs per day, we were merrily tapping away at our terminals, cranking out several new applications a week".

Previous day (Calendar) Next day