tag:blogger.com,1999:blog-935622623924408531.post4369293630442399112..comments2023-10-26T14:40:47.790+02:00Comments on блог alexanius'а: Пишем плагин для gcc. Часть 1.alexaniushttp://www.blogger.com/profile/09745266961115834144noreply@blogger.comBlogger10125tag:blogger.com,1999:blog-935622623924408531.post-14720232528172158402014-12-01T20:21:51.051+02:002014-12-01T20:21:51.051+02:00Задача - чисто "поиграться". Посетила мы...Задача - чисто "поиграться". Посетила мысль, что С++ же мощный язык... ...Его пытаются "расширять", активно используя макросы (в Boost'е том же) - это не есть хорошее решение... ...А вот добавить нужные фичи, имея возможность получать AST кода, это вроде как, очевидно, но что-то люди всё пытаются с нуля делать даже языки с C-подобным синтаксисом, а не на базе C++. Это очень странно.<br /><br />За ссылки спасибо.Джереми Младший Кроликhttps://www.blogger.com/profile/10056475323613617175noreply@blogger.comtag:blogger.com,1999:blog-935622623924408531.post-11882387670628915622014-12-01T10:41:26.239+02:002014-12-01T10:41:26.239+02:00Привет.
Руки не дошли, и на вряд ли дойдут. Но во...Привет.<br /><br />Руки не дошли, и на вряд ли дойдут. Но вообще по gcc в посте есть ссылка сюда: http://codesynthesis.com/~boris/blog/2010/05/10/parsing-cxx-with-gcc-plugin-part-2/. Данный пост писался на основе первой статьи из цикла. Там тупым копированием исходников скорей всего не получится - в новых версиях gcc могли интерфейсы поменяться, но в целом по ней можно что-нибудь сделать.<br /><br />Если Вам просто "поиграться", о думаю можно посмотреть в MELT - он (судя по описанию) работает уже не с AST, а с GIMPLE, но оно тоже полезно будет. Ещё можете посмотреть в плагин визуализации аналитических структур gcc: https://code.google.com/p/gcc-vcg-plugin/.<br /><br />Вообще лучше, конечно, начать с clang: http://clang.llvm.org/docs/ClangPlugins.html<br /><br />А какую задачу Вы хотите решить?alexaniushttps://www.blogger.com/profile/09745266961115834144noreply@blogger.comtag:blogger.com,1999:blog-935622623924408531.post-49064662589195166632014-11-30T02:38:17.613+02:002014-11-30T02:38:17.613+02:00Привет! Как, руки дошли у Вас до получения AST при...Привет! Как, руки дошли у Вас до получения AST при помощи плагинов к GCC или CLang? Может, порекомендуете по этой теме, что можно почитать для обучения? Хотел попробовать поэкспериментировать с расширением возможностей С++. Может, проекты какие знаете на эту тему (кроме Qt)?Джереми Младший Кроликhttps://www.blogger.com/profile/10056475323613617175noreply@blogger.comtag:blogger.com,1999:blog-935622623924408531.post-22207233458350127682014-09-30T17:53:00.362+03:002014-09-30T17:53:00.362+03:00Вопрос исчерпанВопрос исчерпанAnonymoushttps://www.blogger.com/profile/15661398713659661853noreply@blogger.comtag:blogger.com,1999:blog-935622623924408531.post-40220297333188280202014-09-23T22:33:07.898+03:002014-09-23T22:33:07.898+03:00А можно по подробнее? Какая версия gcc? Сами собир...А можно по подробнее? Какая версия gcc? Сами собирали? Дистрибутивная?<br /><br />У меня на Arch'е, например, плагины лежат здесь: /usr/lib/gcc/i686-pc-linux-gnu/4.9.1/plugin. Думаю путь более или менее стандартный.<br />alexaniushttps://www.blogger.com/profile/09745266961115834144noreply@blogger.comtag:blogger.com,1999:blog-935622623924408531.post-71295056933575386002014-09-22T17:38:14.703+03:002014-09-22T17:38:14.703+03:00Что, если после команды gcc -print-file-name=plugi...Что, если после команды gcc -print-file-name=plugin выводит только слово plugin? Как дальше поступать?Anonymoushttps://www.blogger.com/profile/15661398713659661853noreply@blogger.comtag:blogger.com,1999:blog-935622623924408531.post-36255399190264896582012-06-12T15:38:16.303+03:002012-06-12T15:38:16.303+03:00Я бы назвал это не хаком, а штатной возможностью. ...Я бы назвал это не хаком, а штатной возможностью. Если тебе просто неудобен синтаксис языка, то наверное нет, не стоит. А если тебе нужно скомпилировать код под собственную платформу, или ты считаешь, что придумал крутую оптимизацию, то других вариантов нет. Более того это довольно портабельный способ, т.к. оригинальный код будет работать и без плагина.<br /><br />Лично я планировал использовать плагин для получения AST и его анализа во внешней среде. Но как-то пока что забил.alexaniushttps://www.blogger.com/profile/09745266961115834144noreply@blogger.comtag:blogger.com,1999:blog-935622623924408531.post-10909352392920716062012-06-12T15:12:54.514+03:002012-06-12T15:12:54.514+03:00А в промышленных масштабах это смысл делать имеет?...А в промышленных масштабах это смысл делать имеет?<br />Для erlang есть parse_transform. Он просто позволяет менять AST.<br />http://erlanger.ru/page/1574/monady-i-srezy-v-erlang-e-erlando и https://github.com/nbowe/erlang_decorators<br />хочется использовать для больших проектов, ибо сильно уменьшают размер кода и добавляют всяких удобств. Несколько пугают сами изменения AST, и то что это таки хак компилятора, а не стандарт языка.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-935622623924408531.post-87766884384399446992012-06-12T15:02:44.405+03:002012-06-12T15:02:44.405+03:00В принципе - да. Хоть под jvm его портировать. Нап...В принципе - да. Хоть под jvm его портировать. Например, есть DragonEgg (http://dragonegg.llvm.org/), который под LLVM байт-код генерит. Часто используется для получения AST с целью последующего анализа или оптимизации. Если порыться в расширениях gcc, то там много интересного найти можно, например объявление вложенных функций :)alexaniushttps://www.blogger.com/profile/09745266961115834144noreply@blogger.comtag:blogger.com,1999:blog-935622623924408531.post-8874389774137195052012-06-12T14:58:04.410+03:002012-06-12T14:58:04.410+03:00Я не очень понял зачем это может быть полезно.
Так...Я не очень понял зачем это может быть полезно.<br />Так и свои ключевые слова вводить можно и AST менять?<br />Т.е. можно будет в С сделать мемоизацию, кеширование, декораторы, карирование, асинхронный вызов и прочее?Anonymousnoreply@blogger.com