Gela - реализация языка Ада для TenDRA
Это главная страница проекта Gela. Целю проекта является создание переносимого компилятора языка Ада.
Основные принципы разработки описаны в документации. Маленький HowTo по установке.
Вы можете принять участие в обсуждении проекта подписавшись на наш список рассылки.
Если Вы обнаружили ошибку, заполните баг-репорт в базе багов
Мы будем рады, если Вы примете участие в развитии проекта Gela.
Начальная версия может быть загружена здесь. Текущая версия доступна из SubVersion репозитория. Geal ASIS имеет отдельную страничку.
Новости проекта
- 19 Сен 2008 : Geal ASIS выпущен отдельным пакетом
- 29 Мая 2008 : Обновление спецификаций предопределеных пакетов языка до стандарта Ада 2005
- 22 Янв 2008 : Создан отдельный список рассылки
- 07 Янв 2008 : Перенес ветку ada-2005 в trunk, старый trunk ушел в ada-95. Больше ada-95 не правим, тк ASIS-2005 совместим сверху вниз
- 31 Дек 2007 : Готов полный синтаксис Ады 2005. Реализовано 12 SI99. C Новым Годом!
- 22 Ноя 2007 : Мы начали адаптацию ASIS под Ада 2005 с реализации интрефейсных типов (SI99-0006-1). Работа ведется в ветке для Ada 2005
- 29 Ноя 2006 : Компиляция скалярный типов (кроме десятичных с фиксированной точкой) "в первом приближении"
- 25 Сен 2006 : Компиляция дискретных типов "в первом приближении"
- 6 Июл 2006 : Добавлены первые regression тесты для реализации ASIS
- 24 Июн 2006 : Исходные тексты Gela импортированы в Ten15 SVN
Планы
- Поиск глюков/багов используя тексты QtAda
- Поддержка UTF-8 и других кодировок
- Развитие проекта
Детали
Спасибо за помощь
- Вадиму Годунко за помощь в переводе ASIS на Ада 2005
- Сергею Рыбину за разьяснения разных вопросов по ASIS
Другие страницы
- Перевод кусока Asis.Compilation_Units.Relations
- Кусок Главы 10 ARM на русском
- Размышления о репозитарии
Сравнения TenDRA и аналогичных проектов
| Наименование | Лиценщия | Контроль переполнение целых | Вложенные подпрограммы | Исключения | Out-аргументы | Гибкий стек | Прим |
| TenDRA | BSD | Есть | Есть (глючат?) | setjump + long_jump_access | Есть | local_alloc + untidy_return | |
| LLVM | BSD | Нет | порт gnat | ||||
| ACK | BSD | ? | |||||
| ORC | BSD | ||||||
| PCC/DeSmet | GPL | ||||||
| PCC | BSD | ||||||
| libjit | GPL | Есть | |||||
| DIS |
- Контроль переполнение целых: обходиться через преобразование к удвоенной точности + явная проверка диапазона
- Вложенные подпрограммы: указатели на вл. подпрограммы, трамплины. Полезная для опитизатора фишка помечать переменные доступные из вложенных подпрограмм (visible)
- Исключения: два механизма (setjump и zero cost exceptions). Полезная для опитизатора фишка помечать переменные доступные после longjump (long_jump_access)
- Out-аргументы: можно реализовать через указатели, но это менее эффективно, тк нужно создать копию объекта и передать указатель на нее
- Гибкий стек: нужен чтоб создавать объекты заранее неизвестного размера и/или возвращать их из функций. Обычно используется вторичный стек, но в TenDRA есть хитрые untidy_return, с которыми можно использовать основной стек.
- Еще, возможно, пригодились бы блокировки, для реализации protected
- Вставка машинного кода?