Взглянув на спецификацию Java VM , я заметил, что для создания идентификатора можно использовать гораздо больше, чем просто буквы ASCII.
Во-первых, мне было интересно, есть ли какие-нибудь дополнительные символы (кроме $
, которые доступны для идентификаторов)
Как вы думаете, было бы возможно с расширенным набором символов для кодирования дополнительной информации в идентификаторе и пользовательским загрузчиком классов реализовать истинные обобщения Java?
Конечно, вам придется обойти стирание типов, но это может быть возможно с пользовательским парсером?
Таким образом, вы можете хранить общие имена в таком формате: $g$GenericList$_Java_lang_String$
Я использую GenericList
здесь, так как я не собираюсь изменять исходную реализацию!
Загрузите их с помощью загрузчика классов, создайте правильную GenericList<String>
версию и отправьте ее обратно.
РЕДАКТИРОВАТЬ: Я планирую использовать это для языка, который я строю на JVM. Поскольку он использует $
и _
в качестве специальных символов, такая кодировка может сработать!
РЕДАКТИРОВАТЬ 2: Полагаю, более сложным было бы использование общих методов? У кого-нибудь есть информация о том, как они будут реализованы?
РЕДАКТИРОВАТЬ 3: Поскольку классы могут быть выгружены только после исчезновения загрузчика классов, смогу ли я кэшировать и удалять разрешенные шаблоны, как это работает в .Net, или я делаю это как C ++?