GCC MELT

GCC MELT 
gcc-melt.org 
Эти веб-страницы также доступны на starynkevitch.net/Basile/gcc-melt/

О Продукте   * Загрузки Description: http://gcc-melt.org/hand.png  * Литература Description: http://gcc-melt.org/hand.png   * Совершите свой вкладБилеты   * Рассылочный списокКонтакты   
 

         О GCC MELT

Краткое Изложение: (доступно для печати) 
Индивидуализация вашего GCC-компилятора с помощью MELT-расширений (2 страницы / один лист, PDF, на английском языке). 
Votre compilateur GCC sur mesure avec MELT (1 страница, PDF, на французском - en français)
НОВОЕ! 31 января, 2015: лекции на FOSDEM2015 (Lisp devroom): слайды Индивидуализация GCC посредством MELT (диалект языка Lispy) (PDF)

НОВОЕ! (24 июля 2015) выпуск расширения MELT 1.2.0 для GCC 4.9 и 5. * возможна загрузка, пожалуйста, обновите версию. 

Введение

GCC MELT – это высокоуровневый специфичный для домена язык программирования для расширения или индивидуализации Совокупности Компиляторов Gnu (т.е.. gccg++gfortrangnatgccgogobjc, ...). Он выполняется как GCC-расширение (для GNU/Linux систем с GCC 4.7, 4.8 или более поздними) в бесплатном программном обеспечении (в соответствии с лицензией GPLv3+  и авторским правом FSF). 
GCC MELT ориентируется на продвинутых пользователей GCC, которые разрабатывают, составляют, улучшают, оценивают, поддерживают или проектируют серьезное программное обеспечение (кодируемое на C, C++, Fortran, Ada, Go, Objective C или других языках, поддерживаемых последним GCC страйт- или кросс-компилятором). Для таких опытных пользователей потратить несколько дней или недель для индивидуализации или расширения компилятора для своих конкретных потребностей целесообразно, и GCC MELT должен уменьшить количество требуемых усилий, потому что программирование на GCC-расширении MELT намного легче, чем собственноручная разработка расширения GCC на C или C++ (это оперативные языки, но не очень хорошо подходящие для легкой работы на машинных представлениях компилятора).

GCC MELT (начиная с MELT 1.0) может быть также использован для освоения машинных представлений GCC-компилятора, когда он работает на ваших файлах, смотрите здесь. Например, вы могли бы найти все вызовы malloc с постоянным размером, большим от 48 байт, или все присвоения к некоторым далее-полям структ-уры, чье имя содержит единицу (а подобные поиски невозможны для текстовых инструментов, таких как grep; для этого они должны быть сделаны на уровне Gimple внутри компилятора).

GCC MELT (а именно ваш повседневный GCC [кросс-] компилятор с расширением MELT [мета-] плагин и вашими собственными расширениями) мог бы быть основополагающим программным блоком некоторых Профильных Пакетов Средств Разработки ПО для, например, встроенного, GUI или низкоуровневого программного обеспечения. Пожалуйста, свяжитесь с нами для более детальной информации.

GCC MELT использует существующий GCC-плагин, привязанный к работе на GCC машинных представлениях среднего класса, в частности, GCC Generic Древовидные СхемыGCC Gimple Древовидные Схемы и граф потоков управления. Эти эффективные представления являются общими для всех входных языков, принимаемых GCC, так что ваше расширение с кодом на MELT сможет управиться с любым исходным кодом, составленным GCC.

Вероятно, GCC MELT не будет очень полезен для обычных пользователей GCC, работающих на небольших программных проектах, только если они не используют некоторые из существующих расширений GCC, уже разработанных с GCC MELT.

Зачем индивидуализировать или расширять GCC?

Компилятор GCC может быть индивидуализирован или расширен (с плагинами или расширениями MELT) для:

  • специальных предупреждающих знаков, например, за набор ваших функций с переменным количеством аргументов (как json_pack в библиотеке Jansson, или g_object_set в GTK-пакете разработчика) или за проверку каких-нибудь свойств при каждом вызове данной функции;

·      специальной проверки правил кодирования (например, требование к pthread_mutex_lock и pthread_mutex_unlock быть сбалансированными в одной и той же функции или к каждой fopen получать проверку ее результатов);

·      метрических показателей машинных представлений GCC;

·      помощи в рефакторинге кода или навигации по исходному коду;

·      добавления новых (зависящих от типа приложения) встроек или атрибутов к компилятору;

·      (для приложений или предприятий) характерная оптимизация (например, fprintf(stdout,format,...) → printf(format,...)и т.д..);

·      и т.д....

С точки зрения пользователя GCC индивидуализацию GCC легче использовать, чем внешние инструменты. Ему/Ей нужно только добавить дополнительные метки слов для компоновки (например, CFLAGS += -fplugin=melt -fplugin-arg-melt-extra=extension -fplugin-arg-melt-mode=mode в Makefile), но не нужно изменять особенности рабочего потока.

Как MELT помогает расширить GCC?

MELT – это специфичный для домена язык, спроектированный специально для облегчения расширения (или индивидуализации) GCC, благодаря следующим характеристикам:

·      тесная связь с существующими внутренними компонентами GCC при использовании доступной системы плагинов: новые GC-передачи, атрибуты, встройки, ... могут быть выполнены в MELT

·      простой, ортогональный, подобный Lisp синтаксис

·      эффективная очистка памяти (совместимая с реализацией GCC) с использованием ультрасовременных, свойственных своему поколению, воспроизведенных технических методов GC.

·      величины первого класса с динамической типизацией (включая списки, кортежи, решенияобъекты в богатой возможностями системе единичного наследования на основе мета-классов с выполнением диспетчеризации вызова динамического сообщения, гомогенные таблицы хэширования, боксированные целочисленные переменные и боксированные GCC-данные –Gimple Древовидные Схемы, Древовидные Схемы, ..., и т.д.)

·      обработка по умолчанию любого произвольного содержимого GCC-данных(например,. tree, gimple, edge, loop в статически типизированной форме

·      анонимные функции (и имеющие имя) и богатые возможностями объектные системы, позволяющие функциональный, объектный, рефлекторный стиль программирования

·      очень эффективные сопоставления по образцу, в значительной мере на внутреннем содержимом GCC, таком как tree и gimple, и т.д.

·      динамические вычисления во время исполнения программы и цикл чтение-вычисление-печать

·      динамически преобразуемый в C или C++ код (составленный и динамически загруженный во время выполнения через dlopen)

·      способность сводить ваши небольшие части данных C-кода с вашим главным кодом в MELT

·      реализация использования существующего варианта процесса для создания нового варианта: MELT → C-преобразователь, реализуемый в MELT

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

Сгенерированный C или C++ код создается с тщанием, чтобы удовлетворить ожидания вашего интерфейса GCC-плагина (GCC переключился с C на C++ в своей версии 4.7, и GCC MELT осторожен в генерировании кода, который бы подходил вашей версии GCC).

Прикладной метод большего понимания главных машинных представлений GCC заключается в наличии релевантного (небольшого) исходного кода (например, в CC++Fortran, или Ada и т.д.) с последующим транслированием его с помощью-fdump-tree-all.

Например, (допуская, что у вас есть example.cc в каких-нибудь директориях “игровых площадок”) транслирование с g++ -fdump-tree-all -O -c example.cc. Оно производит сотни файлов дампа, такие как, может быть, example.cc.073t.phiopt1 , что может содержать (подобно файлам дампа с суффиксом .phiopt*) дамп операторов Gimple/SSA (Static Single Assignment – Статичное Однократное Присваивание), и вы можете просмотреть это, используя редактор или модуль страничной навигации (например, less example.cc.073t.phiopt1 или gedit example.cc.073t.phiopt1).


Загрузите и установите GCC MELTDescription: http://gcc-melt.org/go-top.png

GCC MELT можно загрузить здесь (в соответствии с GPLv3-лицензией для систем GNU/Linux с последней GCC), где вы можете получить инструкции по установке, а также примеры кода, написанного в MELT.

Пожалуйста, загрузите и установите GCC MELT перед чтением других материалов.

ЛитератураDescription: http://gcc-melt.org/go-top.png

У GCC MELT имеются некоторые публикации здесь , где вы можете получить обучающий курс, а также ссылки на MELT со статьями и слайдами докладов на эту тему.

Совершите свой вклад в GCC MELT (и соответствующие инструменты)Description: http://gcc-melt.org/go-top.png

GCC MELT – это усовершенствование самой GCC, так что следует тем же самым принципам сотрудничества, что и компилятор GCC. В частности, оно требует таких же юридических предпосылок (что занимает много времени). Мы не можем принять даже маленькие корректировки без вашего официального сотрудничества с FSF (как GCC MELT делает).

Мои благодарности (в алфавитном порядке) Ромену Гейсслеру, Эммануэлю Хокурту, Александру Лисси, Жереми Сальвуччи, Пьеру Виттету за их вклад в GCC MELT.

Description: French flag   MELT, в большинстве своем, сделан во Франции, потому что его главные вкладчики оказались французами. Конечно, мы приветствуем любых вкладчиков (из любой страны).

Контактная информация

Моя (=Василия Старынкевича) работа в CEA, LIST над GCC MELT была частично спонсирована французским некоммерческим агентством DGCIS через различные проекты.

Пожалуйста, свяжитесь со мной по е мейлу  Basile dot Starynkevitch at cea dot fr для отраслевых контрактов (посредством CEA, LIST) или совместных исследовательских проектов, связанных с GCC MELT.

Сообщения об ошибках и пожелания

Пожалуйста, сообщайте об ошибках и пожелания на е-мейл gcc-melt@googlegroups.com, а также на систему электронной очереди SourceForge GCC MELT.

В записях и сообщениях ChangeLog.MELT мы будем ссылаться на эти электронные очереди как на MELT-SFT (для MELT -Source Forge Ticket).

Участие в проектах

Я заинтересован в участии в любых проектах, где расширение GCC посредством MELT целесообразно.

Соответствующие инструменты

(неполный список ссылок на соответствующие инструменты) 

·    Frama-C (среда разработки для статического анализа вне любого компилятора для программирования на C, разработанная несколькими сотрудниками из CEA, LIST);

·     Clang Static Analyzer в рамках компилятора LLVM;

·    Coccinelle обработчик по преобразованию и подгонке программ;

·    CompCert официально проверенный компилятор;

·    Gcc Python Плагин;

·    Clasp (анонсированный здесь в сентябре 2014) выглядит подобно MELT в мире LLVM: он дает использовать реализацию Lisp и может расшириться до LLVM.

·    И т.д.... и многочисленные (в большинстве своем, запатентованные) инструменты программного обеспечения по анализу статических программ.

Рассылочный список (группа для обсуждений)Description: http://gcc-melt.org/go-top.png

Англоговорящая техническая группа с низким трафиком (без флеймов и спама) о GCC MELT доступна на

 

Подпишитесь на gcc-melt@googlegroups.com

Начало формы

Email: 

Конец формы

Посетите эту группу