Байт-код, библиотеки и Java - PullRequest
2 голосов
/ 04 мая 2011

Если я хочу создать новый язык для Java, я должен создать компилятор, способный генерировать байт-код, совместимый со спецификацией JVM, верно? а также для библиотек JDK?

Где я могу найти информацию?

Спасибо.

Ответы [ 5 ]

2 голосов
/ 04 мая 2011

Я бы начал с компилятора, который выдает исходный код Java.Это может оказаться проще для чтения / понимания / отладки.Позже вы можете оптимизировать его для получения байт-кода.

РЕДАКТИРОВАТЬ:

Если у вас есть функции, которые не могут быть легко переведены в код Java, вы сможете создать небольшое количество классов байт-кодаиспользуя Jasmin со всеми экзотическими функциями, которые вы можете проверить до смерти.Из сгенерированного кода Java это будет выглядеть как простой вызов метода.JVM все еще может встроить метод, так что это может не повлиять на производительность.

2 голосов
/ 04 мая 2011

Зависит от того, что вы подразумеваете под «создать новый язык для Java» - вы имеете в виду язык, который компилируется в байт-код, и генерируемый им код может использоваться из любого приложения Java (например, Groovy) или интерпретируемого языка (для которого вы хотите написать парсер на Java)? Если это первое, то @Joachim прав, посмотрите на спецификацию JVM; для последнего взгляните на JavaCC для создания парсера для вашей языковой грамматики.

1 голос
/ 04 мая 2011

Отличная библиотека для генерации / манипуляции с байт-кодом ASM: http://asm.ow2.org.

Она очень универсальна и гибка.Однако обратите внимание, что его API основан на событиях (аналогично синтаксическим анализаторам Sax) - он читает файлы .class и вызывает метод всякий раз, когда встречает новый объект (объявление класса, объявление метода, операторы и т. Д.).Поначалу это может показаться немного неловким, но это экономит много памяти (по сравнению с альтернативой: библиотека читает входные данные, выплевывает полностью развитую древовидную структуру, а затем вам приходится перебирать ее).

1 голос
/ 04 мая 2011

В спецификации виртуальной машины Java должно быть большинство того, что вам нужно.

0 голосов
/ 04 мая 2011

Я не думаю, что это поможет на практике, но в нем есть много приятных теоретических вещей, которые, я думаю, вы найдете полезными.

http://www.codeproject.com/KB/recipes/B32Machine1.aspx

...