C - статьи

       

Ad examplar:


/* program1.c-- */ import f, la; export g;

g (bits8x) { x = f (la+4); return (x); }

/* program2.c-- */ export f, la, lb; data {la: bits32{0}; lb: bits8{'\n'}; lc: bits8; } import g; f (bits8 x) {return (x);}

Здесь: компиляционная единица program1.c-- импортирует из program2.c-- имя процедуры f и имя метки la - оба используются в операторе вызова. Импорт успешен, поскольку оба f и la были экспортированы из program2.c--. Стоит отметить, что program1.c-- не сможет импортировать метку lc из program2.c-- - вследствие того что имя g импортировано program2.c--, но не используется, а lb экспортировано program2.c--, но не импортировано program1.c--.

Гибрид дает возможность ассоциировать высокоуровневый компилятор с ипостасью проинициализированных данных и диапазоном исходных областей C-- и определять альтернативные продолжения (alternate continuations) для вызовов подпрограмм, которые могут допускать исключения. Взятая на вооружение поддержка run-time представляет собой интерфейс (который определен в C), способный использовать сборщик мусора, механизм исключений и отладчик - для получения доступа как к высоко-, так и к низкоуровневой информации. Как результат: программа на C-- приостанавливается в безопасной точке. Высоко- и низкоуровневая информация согласовывается со значениями диапазонов C-- и общей нумерацией переменных. Наконец, оптимизатор C-- действует над ограничениями, так что, пока исполнение приостановлено, отладчик или сборщик мусора могут изменять значения локальных переменных, и процедурный вызов с альтернативными продолжениями может возвращаться более чем в одну позицию. Трехуровневое решение проблемы также обеспечивает требуемую поддержку для параллелизма.



Содержание раздела