CIL, — один из инструментов манипуляции языком Си. Его изучают студенты на курсах по системному программированию наравне с GCC и LLVM. На основе CIL были сделаны разнообразные расширения и анализаторы программ на языке Си:
- Continuation Passing C (CPC), — добавление зелёных потоков в язык Си. В зелёных потоках был реализован торрент-клиент Геката и производились расширения QEMU.
- CCured, — автоматическое повышение безопасности унаследованных программ на Си при помощи жирных указателей и run-time проверок. В отличие от многих других аналогов, есть несколько разновидностей жирных указателей с разной производительностью, и инструмент поддерживает цельнопрограммный анализ, по результатам которого ужирняет указатели не более, чем это необходимо. Может оставить указатель как есть, может подготовить к адресной арифметике, добавив границы, может подготовить указатель к ООП, добавив RTTI в соответствии со стандартом Си. Проверено на реальных больших унаследованных программах вроде bind, sendmail, ftpd.
- Deputy, — развитие идеи CCured, только теперь это уже считается не Си с расширениями для безопасности унаследованных программ, а отдельный язык программирования новых программ, для тех, кому религия не позволяет просто взять и писать на Аде.
- Frama-C, — верификатор аннотированного подмножества языка Си, популярный среди тех, кому религия не позволяет просто взять и писать на SPARK, верифицируемом подмножестве Ады.
Все перечисленные инструменты, кроме верификатора, производят вывод в Си, то есть, и на входе Си, и на выходе. В этом проявляется своеобразие CIL по сравнению с GCC и LLVM. CIL заточен на академические проекты, на лёгкость трансформаций, в то время как GCC и LLVM во имя производительности заточены быстро разобрать исходный код и произвести машинный.
![](/_ld/0/s63857778.jpg)
В архиве хранятся руководство и учебник для курса по системному программированию в ETHZ. |