Comments 35
Речь пойдёт о том, как можно использовать Oracle Database, как развернуть Hadoop, как написать приложение и опубликовать его, используя плагин Windows Azure для Eclipse. Будет показано, как использовать эти и другие возможности облачной платформы Windows Azure в применении к Java-разработке.
Вот это действительно очень интересно.
0
Что решили с записью видео?
+4
Присоединяюсь к вопросу. Живу далеко, доехать будет сложно.
0
плюсую, с удовольствием бы посмотрел
0
Цитирую предыдущую статью:
Видео
Все 4 трека будут записаны на видео. Будем ли мы давать доступ к эим видео всем желающим — пока непонятно. С одной стороны, наша жадность говорит нам, что если видео не публиковать в открытом доступе или тупо не снимать, то нас четвертуют больше народу придёт на конференцию. С другой стороны, мы прекрасно понимаем, что людям из других городов тратить 2-3 рабочих дня на нашу конференцию (плюс поезд/самолёт, плюс гостиница) может быть слишком накладно.
Видеозапись всех докладов конференции точно будет доступна участникам конференции. Возможно, для остальных она будет платной. Посмотрим ближе к делу.
+3
Вот хотел сходить. Но в первом же описании доклада увидел следующее:
И как-то сильно засомневался
Для JVM создано множество скриптовых языков — Groovy, JRuby, JavaScript
И как-то сильно засомневался
-6
А Rhino с Nashorn-ом мы проигнорируем?
+1
я в целом соглашусь, что формулировку лучше поменять. Поменял.
+1
Конечно проигнорируем, как и GWT. Речь идет о скриптовых языках для JVM, а не о средствах преобразования одного в другое.
-5
Я думаю, нам нужно прерваться, пока вы прочитаете что такое Rhino и Nashorn. Когда вы убедитесь, что это чистые имплементации JavaScript-а, а не преобразователи, мы продолжим обсуждение с вопроса о том, чем они отличаются по подходу от JRuby.
+3
тонко :)
+1
ок
0
Я понял, вам попалось коварное слово «преобразует». Да, так сразу и не сообразишь, кто кого во что преображает.
GWT преображает java сорцы в js в бразуре, а Rhino, Nashorn, Groovy, JRuby, и, страшно сказать, Java, преображает сорцы в классы байткода!
То преображает, это преображает, конечно, запутаешься!
GWT преображает java сорцы в js в бразуре, а Rhino, Nashorn, Groovy, JRuby, и, страшно сказать, Java, преображает сорцы в классы байткода!
То преображает, это преображает, конечно, запутаешься!
+2
и засомневаешься
0
отличный юмор. Только вот теперь полезем в дебри и разберемся, а что же делает Rhino, такого, чего не делает Groovy.
Rhino может работать в 2х режимах рассмотрим первый — кодогенерация:
Нас больше всего интересует внутрянка, а именно класс org.mozilla.javascript.optimizer.Codegen.
Рассмотрим метод org.mozilla.javascript.optimizer.Codegen.compile(CompilerEnvirons, ScriptNode, String, boolean)
И заметим, что здесь формируется имя класса как
Далее пропустим стэк вызовов и перейдем сразу к самой интересной части — к методу org.mozilla.javascript.optimizer.Codegen.generateCode(String);
Здесь, по коду, создается переменная ClassFileWriter cfw, которая по сути и отвечает за преобразованный код.
И далее происходит самая интересная магия в методе org.mozilla.classfile.ClassFileWriter.addInvoke(int, String, String, String), исходя из кода этого метода мы можем увидеть что в описание класса добавляются:
hasTopCall(.....), doTopCall(.....) — который и будет содрежать скомпилированный код, если мы вызываем исполняемый скрипт.
далее вызывается метод org.mozilla.javascript.optimizer.Codegen.generateResumeGenerator(ClassFileWriter), который добавляет
resumeGenerator(...) не всегда, но добавляет
Далее метод org.mozilla.javascript.optimizer.Codegen.generateNativeFunctionOverrides(ClassFileWriter, String)
Который добавит еще кучку методов.
Далее возьмем для документацию компилятора Groovy:
Таким образом код:
преобразуется во что-то типа такого
А код в Groovy
Превратиться в
Таким образом, чтобы не путаться в первом случае мы имеем.
1. Преобразование исходников.
2. Создание псевдокласса.
3. Компиляция исходников в Java-код.
4. Создание псевдокласса и из всех исходников в java-класс.
Во втором случае мы имеем
1. Преобразование Groovy-класса в Java-класс.
2. Компиляция Java-класса.
В первом случае можно говорить о преобразовании кода из одного языка в другой. Причем первый не работает в JVM.
Во втором случае мы говорим о компиляции, только о компиляции
Rhino может работать в 2х режимах рассмотрим первый — кодогенерация:
Нас больше всего интересует внутрянка, а именно класс org.mozilla.javascript.optimizer.Codegen.
Рассмотрим метод org.mozilla.javascript.optimizer.Codegen.compile(CompilerEnvirons, ScriptNode, String, boolean)
И заметим, что здесь формируется имя класса как
String baseName = "c";
if (tree.getSourceName().length() > 0) {
baseName = tree.getSourceName().replaceAll("\\W", "_");
if (!Character.isJavaIdentifierStart(baseName.charAt(0))) {
baseName = "_" + baseName;
}
}
String mainClassName = "org.mozilla.javascript.gen." + baseName + "_" + serial;
Далее пропустим стэк вызовов и перейдем сразу к самой интересной части — к методу org.mozilla.javascript.optimizer.Codegen.generateCode(String);
Здесь, по коду, создается переменная ClassFileWriter cfw, которая по сути и отвечает за преобразованный код.
И далее происходит самая интересная магия в методе org.mozilla.classfile.ClassFileWriter.addInvoke(int, String, String, String), исходя из кода этого метода мы можем увидеть что в описание класса добавляются:
hasTopCall(.....), doTopCall(.....) — который и будет содрежать скомпилированный код, если мы вызываем исполняемый скрипт.
далее вызывается метод org.mozilla.javascript.optimizer.Codegen.generateResumeGenerator(ClassFileWriter), который добавляет
resumeGenerator(...) не всегда, но добавляет
Далее метод org.mozilla.javascript.optimizer.Codegen.generateNativeFunctionOverrides(ClassFileWriter, String)
Который добавит еще кучку методов.
Далее возьмем для документацию компилятора Groovy:
… Each groovy class then just becomes a normal Java class you can use inside your Java code if you wish.
Indeed the generated Java class is indistinguishable from a normal Java class, other than it implements the
...
Таким образом код:
alert('Я люблю троллить людей');
преобразуется во что-то типа такого
class org.mozilla.javascript.gen.GenScript_123125 implements org.mozilla.javascript.Script {
public void exec()
public Object doTopCall(Object... params ) {
......
alert('Я люблю троллить людей');
......
}
public boolean hasTopCall(.....) {
return true;
}
// Остальные методы здесь
}
А код в Groovy
class GroovyClass {
def message() {
println ''Я люблю троллить людей''
}
}
Превратиться в
public class GroovyClass extends GroovyObject {
public Object message() {
System.out.println(''Я люблю троллить людей'');
return null;
}
}
Таким образом, чтобы не путаться в первом случае мы имеем.
1. Преобразование исходников.
2. Создание псевдокласса.
3. Компиляция исходников в Java-код.
4. Создание псевдокласса и из всех исходников в java-класс.
Во втором случае мы имеем
1. Преобразование Groovy-класса в Java-класс.
2. Компиляция Java-класса.
В первом случае можно говорить о преобразовании кода из одного языка в другой. Причем первый не работает в JVM.
Во втором случае мы говорим о компиляции, только о компиляции
0
UFO just landed and posted this here
Попробую распутать:
a) Rhino разбирает js на лексемы и строит из них java-код. Генерирует обертку в которой они исполняются.
b) groovyc — делает из .groovy -> .java и компилирует.
с), d) конечно, иначе оно не исполняется в jvm.
a) Rhino разбирает js на лексемы и строит из них java-код. Генерирует обертку в которой они исполняются.
b) groovyc — делает из .groovy -> .java и компилирует.
с), d) конечно, иначе оно не исполняется в jvm.
0
а чем преобразование из языка X в язык Y отличается от компиляции?
+1
ну не идите, дело Ваше. Мы не рубль, чтобы всем нравиться.
+1
UFO just landed and posted this here
Only those users with full accounts are able to leave comments. Log in, please.
(Почти) все доклады конференции Joker 2013