Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Динамическая компиляция кода в Java и C# / 19 сообщений из 19, страница 1 из 1
03.10.2007, 16:05:05
    #34844410
Int23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическая компиляция кода в Java и C#
В чём отличия? Интересуют различия в функциональности, какие есть ограничения?
...
Рейтинг: 0 / 0
03.10.2007, 16:49:54
    #34844603
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическая компиляция кода в Java и C#
На сколько я помню, в .NET это было сразу и очень просто.
До Java 6 все делолось через жопу (tools.jar)
В Java 6 появился приемлемый, Compiler API. Но на сколько я понял о загрузке и хранении классов надо беспокоится самостоятельно.
...
Рейтинг: 0 / 0
03.10.2007, 16:53:07
    #34844611
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическая компиляция кода в Java и C#
Навскидку:
1. Sun'овский старше. подозреваю, что фич в нем больше.
2. Если я правильно это понимаю
Before you can run Microsoft intermediate language (MSIL), it must be converted by a .NET Framework just-in-time (JIT) compiler to native code, which is CPU-specific code that runs on the same computer architecture as the JIT compiler
MS-ный компилит код перед вызовом. Это аццкий подход. Sun HotSpot компилит код в рантайме, по умолчанию в foreground'е, причем далеко не весь, а только тот который [как он считает] нуждается в perf. boost'е.
3. Sun'овский реализован в 2 видах: C1 (client) & C2 (server). О МСном ничего не нашел.
4. Если что то интересует в Sun'овском - можно скачать исходники. БОльшая часть кода доступна как open-source. Что там с МС - хз.
...
Рейтинг: 0 / 0
03.10.2007, 16:58:13
    #34844626
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическая компиляция кода в Java и C#
упс, похоже я не так понял вопрос :)
...
Рейтинг: 0 / 0
04.10.2007, 10:21:56
    #34845789
Int23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическая компиляция кода в Java и C#
>>В Java 6 появился приемлемый, Compiler API. Но на сколько я понял о загрузке и хранении классов надо беспокоится самостоятельно.

Не понял. В .Net можно код хранить в строке, а потом откомпилить. Затем полученную в памяти сборку использовать в приложении-хосте. А что там в Джаве с этим?
Я так понимаю различия возникают в связи с различиями в метаинформации.В связи с этим возникает вопрос чего отсутвтует в метаинформации в Джаве?
...
Рейтинг: 0 / 0
04.10.2007, 10:55:11
    #34845935
TiG
TiG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическая компиляция кода в Java и C#
Int23>>В Java 6 появился приемлемый, Compiler API. Но на сколько я понял о загрузке и хранении классов надо беспокоится самостоятельно.

Не понял. В .Net можно код хранить в строке, а потом откомпилить. Затем полученную в памяти сборку использовать в приложении-хосте. А что там в Джаве с этим?
Я так понимаю различия возникают в связи с различиями в метаинформации.В связи с этим возникает вопрос чего отсутвтует в метаинформации в Джаве?
В реализации Java Compiler API предполагается что код хранится в файлах (собсно javac тоже ведь код из файлов компилит ;)). Но если посмотрите Interface JavaCompiler , там приведен пример подкласса SimpleJavaFileObject, реализующий получение кода для компиляции из строки - 10 строк кода. Аналогично можно сделать и для получения class-файла в памяти. Если очень хочется конечно ;) И есть особенные причины (ну скажем требования к производительности к примеру) для того чтобы использовать именно динамическую компиляцию, а не Scripting API .
...
Рейтинг: 0 / 0
09.10.2007, 21:34:48
    #34858453
0r@.1e
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическая компиляция кода в Java и C#
насколько я понял автора, ему хочется динамической отладки. Я тоже в какой-то рекламе Eclipse читал, что можно, отлаживая какое-нибудь веб-приложение, остановить его в дебаггере, поправить код в редакторе, скомпилировать, и продолжить исполнение. При этом Eclipse заменит в работающей программе класс на измененный в редакторе и продолжит выполнение уже нового кода. Только не помню, как эта фича называется и как ее заюзать?
...
Рейтинг: 0 / 0
09.10.2007, 21:44:45
    #34858463
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическая компиляция кода в Java и C#
это hotswap. делается через интерфейс дебагера. что нада афтару - хз
...
Рейтинг: 0 / 0
09.10.2007, 23:14:18
    #34858642
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическая компиляция кода в Java и C#
"expp" <nospam@sql.ru>;
Автор: expp
это hotswap. делается через интерфейс дебагера. что нада афтару - хз
Тема Ответить Сообщение




что, что...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
JavaManager.exec("
public class Foo { 
   public static void main(String[] args) { 
      System.out.println("Hello world!"); 
   } 
}
");
ему хочется.

Нет такого в яве. Смотрите в сторону скриптовых языков, благо они позволяют обращаться напрямую к ява коду.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
10.10.2007, 01:46:06
    #34858784
К слову
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическая компиляция кода в Java и C#
Deady

Нет такого в яве. Смотрите в сторону скриптовых языков, благо они позволяют обращаться напрямую к ява коду.
Posted via ActualForum NNTP Server 1.4

Javassist еще и не такое позволяет. http://www.csg.is.titech.ac.jp/~chiba/javassist/tutorial/tutorial.html.
...
Рейтинг: 0 / 0
14.10.2007, 17:59:31
    #34867400
Динамическая компиляция кода в Java и C#
Так можно как нибудь в работающем приложении заменить без перезапуска приложения пару классов, не сервере каком-нить типа JBossа, а Swingовом?
...
Рейтинг: 0 / 0
15.10.2007, 08:07:07
    #34867827
Vurn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическая компиляция кода в Java и C#
ошщмзоязщмоыТак можно как нибудь в работающем приложении заменить без перезапуска приложения пару классов, не сервере каком-нить типа JBossа, а Swingовом?
Классы, которые нужно будет менять, грузить через ClassLoader, иновкейтить через интерфейсы. По мере необходимости - менять на новые экземпляры классов.
...
Рейтинг: 0 / 0
15.10.2007, 08:11:27
    #34867830
Vurn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическая компиляция кода в Java и C#
Могу добавить, что в Java можно менять поведение даже базовых классов, таких, как String или Object. Можно их заменять на свои или менять их поведение без замены.
...
Рейтинг: 0 / 0
15.10.2007, 12:20:55
    #34868540
valiantsin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическая компиляция кода в Java и C#
VurnМогу добавить, что в Java можно менять поведение даже базовых классов, таких, как String или Object. Можно их заменять на свои или менять их поведение без замены.
Хотелось бы уточнить, если можно - каким образом можно заменить поведение класса Object без замещения его своим классом?
...
Рейтинг: 0 / 0
15.10.2007, 12:48:56
    #34868674
vas0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическая компиляция кода в Java и C#
VurnМогу добавить, что в Java можно менять поведение даже базовых классов, таких, как String или Object. Можно их заменять на свои или менять их поведение без замены. что то ты по моему путаешь, подменить классы из java.* или javax.* по моему незя. Это же дыра в безопастности, если любой сможет в любое место подсунуть свою реализацию?
...
Рейтинг: 0 / 0
15.10.2007, 13:41:16
    #34868902
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическая компиляция кода в Java и C#
проверенно работает. я Javasisto'm в ArrayList методы добавлял. короче кому чё надо - можно практически всё. в грувях - ну полнейший беспредел на счёт этого
...
Рейтинг: 0 / 0
15.10.2007, 20:51:36
    #34870251
Vurn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическая компиляция кода в Java и C#
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
 package  tests;

 import  java.lang.reflect.Field;
 import  java.lang.reflect.Modifier;

/**
 * This application demonstrates how to modify java.lang.String object
 * through reflection API.
 *
 * @version 1.0
 * @author Eugene Matyushkin
 */
 public   class  StringReverseTest {

    /**
     * final static string that should be modified.
     */
     public   static   final  String testString = "abcde";

     public   static   void  main(String[] args) {
         try {
            System.out.println("Initial static final string:  "+testString);
            Field[] fields = testString.getClass().getDeclaredFields();
            Field value =  null ;
             for ( int  i= 0 ; i<fields.length; i++){
                Field field = fields[i];
                 if  (field.getType().equals( char []. class )){
                    value = field;
                     break ;
                }
            }
             if  (value ==  null ){
                System.err.println("value wasn't found!");
                 return ;
            }
            value.setAccessible(true);  // 1.
             char [] charValue = ( char [])value.get(testString);
             for ( int  i= 0 ; i<charValue.length/ 2 ; i++ ){
                 char  tmp=charValue[i];
                charValue[i] = charValue[charValue.length- 1 -i];
                charValue[charValue.length- 1 -i] = tmp;
            }
            value.set(testString, charValue);
            System.out.print("Reversed static final string: ");
            System.out.println(testString);
        } catch  (Throwable th){
            System.err.println("Exception: "+th);
            th.printStackTrace();
        }
    }
}

Демка по изменению строки testString "через попу".
...
Рейтинг: 0 / 0
16.10.2007, 10:31:21
    #34870768
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическая компиляция кода в Java и C#
по теме http://www.janino.net/

vas0 VurnМогу добавить, что в Java можно менять поведение даже базовых классов, таких, как String или Object. Можно их заменять на свои или менять их поведение без замены. что то ты по моему путаешь, подменить классы из java.* или javax.* по моему незя. Это же дыра в безопастности, если любой сможет в любое место подсунуть свою реализацию?

Это не дыра. Менять код сможете если у вас есть соответствующие разрешения
...
Рейтинг: 0 / 0
17.10.2007, 08:17:59
    #34873504
vas0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамическая компиляция кода в Java и C#
funikovyuriЭто не дыра. Менять код сможете если у вас есть соответствующие разрешения
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
                       Web Application Class Loader
The class loader that a container uses to load a servlet in a WAR must allow the
developer to load any resources contained in library JARs within the WAR
following normal J2SE semantics using getResource. As described in the J2EE
license agreement, servlet containers that are not part of a J2EE product should not
allow the application to override J2SE platform classes, such as those in the java.*
and javax.* namespaces, that J2SE does not allow to be modified. Also, servlet
containers that are part of a J2EE product should not allow the application to
override J2SE or J2EE platform classes, such as those in java.* and javax.*
namespaces, that either J2SE or J2EE do not allow to be modified. The container
should not allow applications to override or access the container’s implementation
classes. It is recommended also that the application class loader be implemented so
that classes and resources packaged within the WAR are loaded in preference to
classes and resources residing in container-wide library JARs.

Судя по спецификации сервлетов 2.4 у контейнера есть полное моральное право "дать по башке" за подмену системных классов. Хотя "should" это не "must" и он может и не дать :)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Динамическая компиляция кода в Java и C# / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]