Доброго времени суток.
Этот материал изначально готовился как публикация, но модератор сказал идти с ним на форум. Полностью почитать с картинками можно скачав файл. Здесь выжимки.
Разрабатывается компилятор языка 1С в машинные коды. Компилятор разрабатывается на на основе LLVM\Clang компилятора С++. В результате компиляции получается DLL-файл наитивной компоненты для 1С, которую можно подключать обычным способом. Из компоненты допустимо вызывать все методы свойства платформы (*), все экспортируемые методы модулей конфигурации и глобального контекста и все допустимые объекты. Везде где можно используются родные механизмы платформы, а где они не доступны функциональность реализована идентично функциональности платформы(**). Т.е. можно взять практически любой код из конфигуратора, откомпилировать в компоненту и подключить в откомпилированном виде. Компилятор реализован в монолитном виде и никакая «специфика» работы с платформой не раскрывается.
Компилятор находится на финальной стадии разработки и в скором времени будет опубликован. В базовой функциональности он будет бесплатен и свободен для использования в целях ознакомления и обучения. Особое внимание в этот раз я хочу уделить демонстрационному примеру использования компилятора. В своей прошлой статье об ООП для 1С я его выбрал неудачно, что вызвало массу нареканий. Здесь я хотел бы сначала посоветоваться с сообществом и уже потом публиковать релиз. Конечно, сразу возникают мысли откомпилировать целиком какую-нибудь типовую конфигурацию или хотя бы сделать БСП.dll, но это слишком масштабно для примера. Также я очень благодарен MAGAZKA за предложение откомпилировать ее всю сверху донизу и пренепременно этим займусь, но все таки сразу после того как у меня заработает демонстрационный пример.
Что откомпилировать не такой простой вопрос. Кода должно быть все-таки относительно немного и на нем можно было бы демонстрировать производительность. Он должен быть достаточно разносторонним, а не только математика. Он должен иметь какую-то практическую пользу дабы люди его реально запускали и жаловались мне если что не так. Увы, но реализовать 1000++ юнит тестов для компилятора я не в состоянии. Также нужно учесть, что компилируются общие модули, а не модули объектов. Вернее откомпилировать-то можно, но подключить компоненту объекту виде модуля легальными средствами 1С нельзя. Также глобальный модуль после компиляции сам собой легально не станет глобальным.
Буду очень благодарен за идеи и помощь.
Очень большая просьба перед тем как задать вопрос почитать статью. Очень!
НИКАКИХ КОММЕНТАРИЕВ ПО ВНУТРЕННЕМУ УСТРОЙСТВУ ПЛАТФОРМЫ Я НЕ ДАЮ.
(4) Спасибо, Сергей. Тоже рад Вас видеть. Я поздно увидел ваш вопрос о подвижках в в моих прошлых публикациях. Спасибо, что интересуетесь.
Расширение поддержки на будущие версии выглядит так. После каждой своей публикации я с замиранием сердца жду очередного релиза 1С и смотрю - не поменялось ли что-то критичное. И если поменялось, то что они хотели сказать. Пока все было тихо, спокойно и гм.. даже обнадеживающе, хотя это может быть и мои фантазии. Подождем и в этот раз. Не за горами.
вот на такие вещи стоит тесты написать. Выходит новый релиз, скрипт его автоматом скачивает, запускает тесты на критические вещи и сразу будет видно, что сломалось, а что нет.
Не понял при чем тут шланг.
Разработан компилятор в LLVM или таки транслятор в C++?
Если второе, то при чем тут LLVM? :)
ps Доку всю лень читать, сори (:
Поэтому это отношение можно читать так: «исполнение кода 1С на виртуальной машине в 2.4 раза медленнее, чем исполнение 1С-кода в скомпилированном виде».
Очень очень странно. Как вы добились такого медленного маш. кода на LLVM?
Можно подробнее про это?
Очень очень странно. Как вы добились такого медленного маш. кода на LLVM?
Ну с учетом того, что после компиляции появляется некая DLL, которая использует менеджер памяти платформы => механизм хранения переменных платформы и все остальное от платформы, работая только как внешняя нативная компонента платформы, то особой такой вот суперскорости взять неоткуда. Если бы автор вместо мучений по вскрытию вен платформы и использованию ее механизмов сделал бы простой транслятор из кода 1С в тот же CLang или иной какой компилируемый язык, и компилировался бы уже он, а ORM-механизмы платформы поддерживались бы плагинами, то итогом могла бы стать технология. позволяющая из кода 1С сделать отдельное приложение, не нуждающееся в ключе, лицензиях и всего прочего. Но при этом за автором такого решения бы уже давно пришли бы, поэтому те, у кого оно есть, никому об этом не говорят.
(9) Тогда я не понимаю каким боком тут LLVM вообще.
Можно было написать интерпретатор простого байткода как в самой платформе. И компилить в этот байткод.
LLVM и шланг тут не требуются вообще ни разу. Думаю что можно сделать аналогичную компоненту немного (наверно) допилив onescript.
Сама идея писать внешние компоненты на простом языке мне нравится. У меня даже есть одна идея на этот счет.
Колупаться в плюсах и шарпах всяких одноэсники не очень любят. Потому думаю что подобный продукт может взлететь.
А как же долгожданая и недоделанная (брошенная) публикация многоуважаемого Василия Демидова (https://infostart.ru/public/18681/ - [1C-to-EXE] Компилятор 1С кода)?
Есть какие то ссылки на это? Контактировали с автором?
Я честно говоря долго ждал релиза, недождался.
От тоски пошел осваивать Javascript, C# для реализации своих планов.
Вы честно говоря обнадежили меня.
Я думал я один как белая ворона мечтаю о компиляции 1с проектов в Win
Очень сильно ратую за ваш проект. Желаю вам фишек:
1. Возможность компиляции простых конф (самописных) в Exe
2. Минимальная оконная графика на платформе .Net для Win. Достаточно пока неуправляемые формы 1c с реализацией на GDK+.
3. В будущем желаю вам осваивания просторов Управляемых форм с реализацией в виде Wpf на Win.
3. В будущем желаю вам реализации прикручивания библиотек Javascript для простой графики в формах.
От себя могу помочь в части прикручивания Javascript к формам на Win при компиляции в exe.