Я всегда задавался вопросом, как управлять зависимостями с языка программирования на свои библиотеки. Возьмем, например, C#. Когда я начал изучать вычисления, я бы предположил (как оказалось), что сам язык разработан независимо от библиотек классов, которые в конечном итоге станут доступными для него. То есть сначала задаются набор языковых ключевых слов (например, for
, class
или throw
), а также синтаксис и семантика, а библиотеки, которые могут использоваться на языке, разрабатываются отдельно. Конкретные классы в этих библиотеках, как я думал, не должны влиять на дизайн языка.Действительно ли языки зависят от библиотек?
Но это не работает, или не все время. Рассмотрим throw
. Компилятор C# гарантирует, что выражение, следующее за throw
, разрешает тип исключения. Exception
- это класс в библиотеке, и поэтому он не должен быть особенным. Это будет класс, как любой другой, за исключением того, что компилятор C# присваивает ему специальную семантику. Это очень хорошо, но мой вывод состоит в том, что дизайн языка зависит от существования и поведения конкретных элементов в библиотеках классов.
Кроме того, мне интересно, как эта зависимость управляется. Если бы я должен был разработать новый язык программирования, какие методы я использовал бы для сопоставления семантики throw
с конкретным классом, который является Exception
?
Так что мои вопросы два:
- Я правильно думать, что дизайн язык тесно связан с, что его библиотеки базового класса?
- Каким образом эти зависимости управляются из компилятора и во время выполнения? Какие методы используются?
спасибо.
EDIT. Спасибо тем, кто указал, что мой второй вопрос очень расплывчатый. Согласен. То, что я пытаюсь узнать, это то, какие ссылки компилятор хранит о типах, в которых он нуждается. Например, обнаруживает ли типы какие-то уникальные идентификаторы? Что произойдет, когда выпущена новая версия компилятора или библиотеки классов? Я знаю, что это все еще довольно расплывчато, и я не ожидаю точного ответа с одним параграфом; скорее, указатели на литературу или сообщения в блогах приветствуются.
См http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/package-summary.html _Профилирует классы, которые имеют основополагающее значение для дизайна язык программирования Java._ – flup
И http://msdn.microsoft.com/en-us/library/yxcx7skw(v=vs.71).aspx _Системное пространство имен содержит фундаментальные классы и базовые классы, которые определяют часто используемые значения и ссылочные типы данных, события и обработчики событий, интерфейсы, атрибуты и исключения обработки. Другие классы предоставляют услуги, поддерживающие преобразование типов данных, манипулирование параметрическими параметрами, математику, удаленный и локальный вызов программы, управление прикладной средой и контроль над управляемыми и неуправляемыми приложениями. – flup
Ответ на первый вопрос - «да». Второй вопрос настолько невероятно расплывчатый, что я понятия не имею, как даже начать отвечать на него. –