Язык Я ищу в этом вопросе должен иметь следующие характеристики:Существует ли объектно-ориентированный язык, который обеспечивает доступ к объектам с низким уровнем доступа?
- компилировать в машинный код,
- имеют C++ - стиль дизайна объектно-ориентированного программирования (возможно, ограниченного одного класса наследования),
- в идеале быть из семейства C (не является обязательным требованием),
- позволяют обработки стека инициализированы-объекты выделены,
- позволяют прямое призвание конструкторов и деструкторов как функции, вкл ЛУДИНГ контроля над тем, как, когда и будет ли у называется все суперкласс конструктор/деструктор,
- позволяет прямое чтение/записи доступа к виртуальной таблице и данным RTTI,
- идеально не различает статические и нестатический функции-члена (последний мог бы просто принять еще один параметр для
this
), - необязательно: разрешить управление потоком во время исключений (например, вызов деструкторов и переадресация стека).
Три точки выделены курсивом на C++ за кулисами, и попытка вмешаться в них вызывает неопределенное поведение, несмотря на то, что в общих реализациях они очень просты. Некоторые другие против своих принципов. Это, конечно, по уважительным причинам, но в целом это всего лишь выбор дизайна. Почему я заинтересован в языке, который не затенять их конструкции:
- можно создать подклассы на лету, Java-анонимного класса стиля (например, создать экземпляр базового класса, но заменить некоторые виртуальная функция с собственным указателем функции без необходимости определять новый класс)
- можно было бы разработать собственные более быстрые, но семантически эквивалентные версии, например, динамические типы, с учетом контрактов или предположений, которые компилятор не может знать,
- можно было дать свои классы (которые позволяют RTTI) доступным для человека именам во время выполнения с использованием существующих механизмов,
- можно хранить дополнительные «полиморфные» данные с объектом, как виртуальных, не являющихся членами функции,
- студенты могли более непосредственно понять внутренние механизмы наследования, идентификации типа и т.д.
Конечно, можно просто оставайтесь с C, но я хочу сказать, что язык будет фактически объектно ориентированным и по умолчанию сделает все «волшебство» правильно для пользователя, если на самом деле не потребуется дополнительная гибкость. Пользователь несет ответственность за то, что он не справляется с ситуациями, вызванными ими.
Существует ли такой язык (возможно, неясный)? Если нет, то какие самые близкие совпадения и какие условия они удовлетворяют?
Вы * знакомы с размещением новых, да? – jaggedSpire
Вы можете просто сделать курсивом в C++ вручную. – nwp
@jaggedSpire Конечно, но это только часть пути. Например. он не позволит вам оставить объект неинициализированным. –