GCC MELT

Link: http://gcc-melt.org/

Агляд

GCC расплаў дамен канкрэтнага мовы высокага ўзроўню для пашырэння або налады GNU Compiler Collection (GCC г.зн., G ++, GFortran, камар, gccgo, gobjc, …). Ён рэалізаваны ў выглядзе плагіна (GCC для сістэм GNU / Linux, з GCC 4.7, 4.8 або больш позняй версіі) у вольнае праграмнае забеспячэнне (ліцэнзіі GPLv3 пад + і FSF аўтарскімі правамі).
Мэты GCC MELT пашыраны карыстальнікі GCC распрацоўкі, кампіляцыі, удасканаленне ацэнкі, падтрымання або распрацоўцы важную праграмнае забеспячэнне (закадаваную ў C, C ++, Fortran, Ada, Go, Objective C або любы мова, які падтрымліваецца нядаўна прамой або крос кампілятар GCC) , Для такіх вопытных карыстальнікаў, правёўшы некалькі дзён ці тыдняў, каб наладзіць або пашырыць сваю кампілятар для сваіх канкрэтных патрэбаў стаіць, і GCC MELT павінны знізіць патрабаваную намаганні, таму што кадаваньне ў расплаве пашырэнне GCC нашмат прасцей, чым ўручную developping убудова GCC ў З або З ++ (гэта эфектыўныя мовах, але не вельмі добра падыходзіць, каб лёгка працаваць на ўнутраных уяўленняў кампілятара).

GCC расплаву (так MELT 1.0) таксама можа быць выкарыстаны для вывучэння ўнутраных уяўленняў кампілятара GCC, калі ён працуе з файламі, глядзіце тут. Напрыклад, вы маглі б знайсці ўсе выклікі Таноса з пастаянным памерам больш, чым 48 байт, ці ўсё прызначэння на некаторыя бліжэйшыя абласцях структуры-юр, чыё імя ўтрымлівае кропку (і такія пошукі ня магчыма з тэкставымі інструментамі, як Grep, яны павінны быць на ўзроўні Gimple ўнутры кампілятара).

GCC расплаву (гэта значыць, ваш дзень ССЗ [крос] кампілятар дапоўнены расплаву [мета] плагіна і вашых уласных пашырэньні) можа быць асноватворным блок нейкі Спецыялізаваныя камплект распрацоўкі праграмнага забеспячэння, напрыклад, для убудаваныя, графічны інтэрфейс або праграмнае забеспячэнне нізкага ўзроўню. Калі ласка, звяжыцеся з намі для атрымання дадатковай інфармацыі.

GCC MELT выкарыстоўвае існуючыя гаплікі GCC убудова для працы на GCC ўнутраная сярэдняга класа уяўленняў, у прыватнасці GCC Generic Дрэвы і GCC Gimples, і граф патоку кіравання. Гэтыя магутныя ўнутраныя прадстаўлення з’яўляюцца агульнымі для ўсіх зыходных моў, прынятых GCC, так што ваш пашырэнне закадаваныя ў расплаве зможаце справіцца з любой зыходны код складзены GCC.

Магчыма, GCC MELT ня будзе вельмі карысна выпадковых карыстальнікаў GCC, якія працуюць на маленькіх праграмных праектаў, калі яны проста не выкарыстоўваць некаторыя існуючыя пашырэння GCC, ужо распрацаваных з GCC расплаву.
Чаму наладзіць або пашырыць GCC?

Кампілятар GCC могуць быць настроены ці пашыраны (з дапамогай убудоў або пашырэньні расплаву) для:

канкрэтныя папярэджання, напрыклад для ўводу вашых VARIADIC функцыі (напрыклад, у бібліятэцы json_pack Янссон, або g_object_set ў GTK інструментара), або праверкі некаторыя ўласцівасці на кожным выкліку некаторай зададзенай функцыі;
канкрэтных кадавання праверка правілы (напрыклад, патрабаванне, што pthread_mutex_lock і pthread_mutex_unlock збалансаваныя ў той жа функцыі, або, што кожны атрымлівае FOPEN прыведзеных праверана);
метрыкі на GCC ўнутраных уяўленняў;
дапамогу па рэфактарынгу кода або зыходны код навігацыі;
даданне новых (для асобных прыкладанняў) модуляў да або атрыбуты для кампілятара;
(APPLICATION- або корпорация-) канкрэтныя аптымізацый (напрыклад, fprintf (STDOUT, фармат, …) → Е (фармат, …) і г.д.);
і г.д. ….

З пункту гледжання карыстальніка GCC гледжання, падладка НКУ прасцей у выкарыстанні, чым знешнія інструменты. Ён / яна павінен толькі дадаць дадатковыя сцягі кампіляцыі (.eg CFLAGS + = = -fplugin расплаву -fplugin-Arg-расплаву дадатковая = пашырэнне -fplugin-Arg-рэжым-расплаву = рэжым у Makefile), але не трэба змяніць звычкі працоўных працэсаў.

Як MELT дапамагае падоўжыць GCC?

Расплаў мова прадметна-арыентаваны спецыяльна распрацаваны, каб палегчыць пашырэнне (або налады) у GCC, таму што з наступных прыкмет:

моцная сувязь з існуючымі GCC ўнутраныя выкарыстаннем наяўных убудоў абсталяванне: новы GCC праходзіць, атрыбуты, убудаваныя каманды, … могуць быць рэалізаваны ў расплаве
проста, артаганальнай, Lisp-падобны сінтаксіс
эфектыўны збор смецця (сумяшчальныя з рэалізацыяй ССЗ), выкарыстоўваючы сучасныя метады пакаленняў капіраванне ГХ.
дынамічна тыпізаваных значэнняў першага класа (у тым ліку спісы, картэжы, закрыцця, аб’ектаў у багатай сістэмы, заснаванай адным спадчыну мета-класа з дынамічным паведамлення дыспетчыраванні, аднародных хэш-табліцы, у адзінкавым пакаванні лікаў і скрынках дадзеных GCC -Gimples, дрэвы, … і г.д.)
апрацоўваць першапачаткова любы адвольны GCC рэчы дадзеных (напрыклад, дрэва-х, gimple-х, край-х, пятля-х гадоў у статычна тыпізаваных чынам
ананімныя функцыі (і названыя тыя) і багаты аб’ектная сістэма якія дазваляюць функцыянальны, аб’ект, які адлюстроўвае стыль праграмавання
вельмі магутны па шаблоне, у прыватнасці, на GCC ўнутранай рэчы, як дрэва-х і gimple-х і г.д.
дынамічны адзнака часу выканання і чытання Eval-Прынт-цыкл
дынамічна пераведзены на C ці C ++ кода (укладальнік і дынамічна загружаецца падчас выканання праз dlopen)
Магчымасць змешваць невялікія кавалкі кода C з асноўнай код у расплаве
бутстрапированный рэалізацыя: расплаў → З перакладчык рэалізуецца ў расплаве

Прыведзеныя вышэй магутныя функцыі расплаву знізіць кошт налады GCC, такім чынам, дазваляючы выкарыстоўваць на GCC магутных здольнасцяў з GCC расплаву. Тым не менш, нават пры выкарыстанні расплаву неабходна зразумець некаторыя з GCC ўнутраных органаў.

Выпраменьваны З або З ++ кода старанна генеруецца, каб упісацца ў тое, што ваш інтэрфейс GCC убудова чакае (ССЗ перайшлі ад С да С ++ ў версіі 4.7, і GCC расплаў асцярожныя, каб генераваць код прымальны для вашай версіі GCC).

Практычны спосаб, каб зразумець больш аб асноўных ўнутраных уяўленняў GCC, каб мець адпаведную (маленькі) зыходны код (напрыклад, у C, C ++, Fortran, Ada або, і г.д.), затым скампіляваць яго з -fdump дрэва-ўсё.

Напрыклад (калі ў вас ёсць некаторы example.cc ў якой-небудзь каталог пляцоўка) кампіляцыі з G ++ -fdump дрэва-ўсё -O -c example.cc. Гэта вырабляюць сотні файлаў дампа, такія як, магчыма example.cc.073t.phiopt1 якія могуць утрымліваць (як файлы дампа суфікс .phiopt *) дамп справаздачнасці Gimple / SSA (Static Single Assignment), якія вы можаце прагледзець з дапамогай рэдактара ці пэйджар (напрыклад, менш example.cc.073t.phiopt1 або Gedit example.cc.073t.phiopt1).
Спампаваць і ўсталяваць GCC расплаву

GCC расплаў даступная тут (пад GPLv3 ліцэнзіі для сістэм GNU / Linux з нядаўняга GCC), дзе вы можаце атрымаць інструкцыі па ўстаноўцы, а таксама прыклады кода, напісанага ў расплаве.

Калі ласка, запампуйце і ўсталюеце GCC расплаву перад чытаннем іншага матэрыялу.
Дакументацыя

GCC расплаву некаторую дакументацыю тут, дзе вы можаце атрымаць падручнік, а таксама даведка аб расплаву, з публікацыямі і слайдаў перамоваў, зададзеных на ім.
Садзейнічанне GCC расплаву (і звязаных з імі інструментаў)

GCC расплаў паляпшэнне самай GCC, так варта тым жа палітыку ўклад як кампілятар GCC ст. У прыватнасці, ён патрабуе таго ж прававыя перадумовы (якія прымаюць шмат часу). Мы не можам пагадзіцца нават невялікія патчы без вашага ўкладу, які належыць юрыдычна ФФС (як GCC MELT робіць).

Дзякуючы (у алфавітным парадку) Рамэн Гейслера, Эмануэль Haucourt, Аляксандр Lissy, Жэрэмі Salvucci, П’ер Vittet за іх уклад у GCC расплаву.

Французскі сцяг расплаў у асноўным у Францыі, таму што яго асноўны ўклад здараецца французскі. Вядома, мы вітаем любыя ўкладчыка (з любой краіны).
Кантактная інфармацыя

Мой (= Базыль Starynkevitch) праца на CEA, спіс на GCC расплаў быў часткова фінансуецца DGCIS французскага дзяржаўнага органа праз розныя праекты.

Калі ласка, звяжыцеся са мной па электроннай пошце Basile кропка Starynkevitch ў CEA кропка фр прамысловых кантрактаў (праз CEA, спіс) або сумесных навукова-даследчых праектаў, звязаных з ССЗ расплавіць
Паведамленні пра памылкі і пажаданні

Калі ласка, паведамляе памылкі і пажаданні па gcc-melt@googlegroups.com~~pobj а таксама на SourceForge GCC расплавіць сістэмы квіткі.

У запісе ChangeLog.MELT і ў паведамленнях, мы будзем спасылацца на гэтыя квіткі, як расплаву SFT (для выплаўлення -source Кузня білетаў).

Удзел у праектах

Я зацікаўлены ва ўдзеле ў якіх-небудзь праектах, дзе пашырэнне GCC праз расплаў варта.

Звязаныя інструменты

(не вычарпальны спіс спасылак на звязаныя з імі інструменты)

Frama-З (аснова для статычнага аналізу, па-за якой-небудзь кампілятар, для кода Сі, распрацаваны некалькімі калегамі з CEA, спіс);
ляск статычнага аналізатара ў кампілятары LLVM;
Coccinelle адпаведныя праграмы і пераўтварэнне рухавіка;
CompCert афіцыйна даказана кампілятар;
Gcc Python убудова;
Зашпілька (абвясціў тут у верасні 2014) падобны на расплаву ў свеце LLVM: яна забяспечвае рэалізацыю, выкарыстоўваючы Lisp і здольныя падоўжыць LLVM.
і г.д … і шматлікія (у асноўным камерцыйныя) маёмасныя праграмнага забеспячэння інструменты статычнага аналізу праграмы.

Comments are closed.