powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Динамическая компиляция кода в Java и C#
19 сообщений из 19, страница 1 из 1
Динамическая компиляция кода в Java и C#
    #34844410
Int23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В чём отличия? Интересуют различия в функциональности, какие есть ограничения?
...
Рейтинг: 0 / 0
Динамическая компиляция кода в Java и C#
    #34844603
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На сколько я помню, в .NET это было сразу и очень просто.
До Java 6 все делолось через жопу (tools.jar)
В Java 6 появился приемлемый, Compiler API. Но на сколько я понял о загрузке и хранении классов надо беспокоится самостоятельно.
...
Рейтинг: 0 / 0
Динамическая компиляция кода в Java и C#
    #34844611
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Навскидку:
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
Динамическая компиляция кода в Java и C#
    #34844626
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
упс, похоже я не так понял вопрос :)
...
Рейтинг: 0 / 0
Динамическая компиляция кода в Java и C#
    #34845789
Int23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>>В Java 6 появился приемлемый, Compiler API. Но на сколько я понял о загрузке и хранении классов надо беспокоится самостоятельно.

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

Не понял. В .Net можно код хранить в строке, а потом откомпилить. Затем полученную в памяти сборку использовать в приложении-хосте. А что там в Джаве с этим?
Я так понимаю различия возникают в связи с различиями в метаинформации.В связи с этим возникает вопрос чего отсутвтует в метаинформации в Джаве?
В реализации Java Compiler API предполагается что код хранится в файлах (собсно javac тоже ведь код из файлов компилит ;)). Но если посмотрите Interface JavaCompiler , там приведен пример подкласса SimpleJavaFileObject, реализующий получение кода для компиляции из строки - 10 строк кода. Аналогично можно сделать и для получения class-файла в памяти. Если очень хочется конечно ;) И есть особенные причины (ну скажем требования к производительности к примеру) для того чтобы использовать именно динамическую компиляцию, а не Scripting API .
...
Рейтинг: 0 / 0
Динамическая компиляция кода в Java и C#
    #34858453
0r@.1e
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
насколько я понял автора, ему хочется динамической отладки. Я тоже в какой-то рекламе Eclipse читал, что можно, отлаживая какое-нибудь веб-приложение, остановить его в дебаггере, поправить код в редакторе, скомпилировать, и продолжить исполнение. При этом Eclipse заменит в работающей программе класс на измененный в редакторе и продолжит выполнение уже нового кода. Только не помню, как эта фича называется и как ее заюзать?
...
Рейтинг: 0 / 0
Динамическая компиляция кода в Java и C#
    #34858463
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это hotswap. делается через интерфейс дебагера. что нада афтару - хз
...
Рейтинг: 0 / 0
Динамическая компиляция кода в Java и C#
    #34858642
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"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
Динамическая компиляция кода в Java и C#
    #34858784
К слову
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Deady

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

Javassist еще и не такое позволяет. http://www.csg.is.titech.ac.jp/~chiba/javassist/tutorial/tutorial.html.
...
Рейтинг: 0 / 0
Динамическая компиляция кода в Java и C#
    #34867400
Так можно как нибудь в работающем приложении заменить без перезапуска приложения пару классов, не сервере каком-нить типа JBossа, а Swingовом?
...
Рейтинг: 0 / 0
Динамическая компиляция кода в Java и C#
    #34867827
Vurn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ошщмзоязщмоыТак можно как нибудь в работающем приложении заменить без перезапуска приложения пару классов, не сервере каком-нить типа JBossа, а Swingовом?
Классы, которые нужно будет менять, грузить через ClassLoader, иновкейтить через интерфейсы. По мере необходимости - менять на новые экземпляры классов.
...
Рейтинг: 0 / 0
Динамическая компиляция кода в Java и C#
    #34867830
Vurn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Могу добавить, что в Java можно менять поведение даже базовых классов, таких, как String или Object. Можно их заменять на свои или менять их поведение без замены.
...
Рейтинг: 0 / 0
Динамическая компиляция кода в Java и C#
    #34868540
valiantsin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VurnМогу добавить, что в Java можно менять поведение даже базовых классов, таких, как String или Object. Можно их заменять на свои или менять их поведение без замены.
Хотелось бы уточнить, если можно - каким образом можно заменить поведение класса Object без замещения его своим классом?
...
Рейтинг: 0 / 0
Динамическая компиляция кода в Java и C#
    #34868674
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VurnМогу добавить, что в Java можно менять поведение даже базовых классов, таких, как String или Object. Можно их заменять на свои или менять их поведение без замены. что то ты по моему путаешь, подменить классы из java.* или javax.* по моему незя. Это же дыра в безопастности, если любой сможет в любое место подсунуть свою реализацию?
...
Рейтинг: 0 / 0
Динамическая компиляция кода в Java и C#
    #34868902
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проверенно работает. я Javasisto'm в ArrayList методы добавлял. короче кому чё надо - можно практически всё. в грувях - ну полнейший беспредел на счёт этого
...
Рейтинг: 0 / 0
Динамическая компиляция кода в Java и C#
    #34870251
Vurn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Динамическая компиляция кода в Java и C#
    #34870768
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по теме http://www.janino.net/

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

Это не дыра. Менять код сможете если у вас есть соответствующие разрешения
...
Рейтинг: 0 / 0
Динамическая компиляция кода в Java и C#
    #34873504
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
19 сообщений из 19, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Динамическая компиляция кода в Java и C#
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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