Изменения в "базовых библиотек", "jdk", ".net Framework." и
От: Petrovich_Alex  
Дата: 22.03.06 09:04
Оценка:
... << RSDN@Home 1.1.4 stable rev. 510>>
Re: Изменения в "базовых библиотек", "jdk", ".net Framework.
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 22.03.06 11:26
Оценка:
Здравствуйте, Petrovich_Alex, Вы писали:

P_A>Существует ли возможность при написание программы поменять базовые библиотеки, классы?

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

P_A>Такие языки программирования есть?

Какие? В общем-то базовые библиотеки можно изменить на любом языке.

P_A>Как будет распространяться программы, которые работают на разных "базовых библиотеках"?

Ну... надо поставлять с программой оригинальную версию библиотеки. Или все вкомпилируется в исполняемый файл.

Ну и к тому же новую версию можно рассматривать как изменение старой
Re: Изменения в "базовых библиотек", "jdk", ".net Framework.
От: De-Bill  
Дата: 22.03.06 13:22
Оценка: -1
P_A>
  • Существует ли возможность при написание программы поменять базовые библиотеки, классы?

    Ни в Java, ни в 1-2 .NET Frameworke такие вещи нельзя сделать нормальным образом. В 3м C# будет такая возможность. Например, можно будет добавить какой-нибудь метод.

    P_A>
  • Такие языки программирования есть?

    Есть, например похожие возможности есть в LISPe.

    P_A>
  • Как будет распространяться программы, которые работают на разных "базовых библиотеках"?

    Особой проблемы здесь нет. Базовая библиотека так или иначе будет одна. Твои изменения будут видны только для твоей программы.
  • Re[2]: Изменения в "базовых библиотек", "jdk", ".net Framewo
    От: Petrovich_Alex  
    Дата: 22.03.06 13:29
    Оценка:
    Здравствуйте, De-Bill, Вы писали:

    DB>В 3м C# будет такая возможность. Например, можно будет добавить какой-нибудь метод.


    а можно по подробнее?
    ... << RSDN@Home 1.1.4 stable rev. 510>>
    Re[2]: Изменения в "базовых библиотек", "jdk", ".net Framewo
    От: Дьяченко Александр Россия  
    Дата: 22.03.06 13:47
    Оценка:
    Здравствуйте, De-Bill, Вы писали:

    P_A>>
  • Существует ли возможность при написание программы поменять базовые библиотеки, классы?

    DB>Ни в Java, ни в 1-2 .NET Frameworke такие вещи нельзя сделать нормальным образом.

    Покрайней мере в отношении C# 2.0 (в первом вроде тоже было но не уверен) ты не прав у компилятора есть специальный ключ /nostdlib+ правда сколько надо поратить сил на реализацию аналога mscorlib.dll я не знаю.

    DB>В 3м C# будет такая возможность. Например, можно будет добавить какой-нибудь метод.

    Это чистой воды синтаксический сахар. C# 3.0 обсуждали здесь
    Автор: AndrewVK
    Дата: 14.09.05
    ... << RSDN@Home 1.2.0 alpha rev. 648>>
  • Re: Изменения в "базовых библиотек", "jdk", ".net Framework.
    От: Banch  
    Дата: 22.03.06 17:58
    Оценка:
    эх, как было бы замечательно если бы это было легко и просто сделать ...
    а то частенько подмывает что-то поменять/докрутить, а никак
    Re: Изменения в "базовых библиотек", "jdk", ".net Framework.
    От: Зверёк Харьковский  
    Дата: 22.03.06 19:08
    Оценка:
    Здравствуйте, Petrovich_Alex, Вы писали:

    >Существует ли возможность при написание программы поменять базовые библиотеки, классы?

    Да.

    >Такие языки программирования есть?

    Ruby. За счет возможности определять разные методы одного класса в разных файлах.

    >Как будет распространяться программы, которые работают на разных "базовых библиотеках"?

    Нужно вместе с программой распространять дополнительные файлы, расширяющие базу.

    >Где можно почитать о самой сущности «базовой библиотеки», «базовых классов».



    >И про отношение между библиотекой и прикладной программой?

    FAQ — це мiй ай-кью!
    Re[2]: Изменения в "базовых библиотек", "jdk", ".net Framewo
    От: -=[x]=- Россия  
    Дата: 23.03.06 05:17
    Оценка:
    Здравствуйте, De-Bill, Вы писали:

    P_A>>
  • Существует ли возможность при написание программы поменять базовые библиотеки, классы?

    DB>Ни в Java, ни в 1-2 .NET Frameworke такие вещи нельзя сделать нормальным образом. В 3м C# будет такая возможность. Например, можно будет добавить какой-нибудь метод.


    Endorsed Standards Classes Deployment
    Classes implementing newer versions of endorsed standards should be placed in JAR files. The system property java.endorsed.dirs specifies one or more directories that the Java runtime environment will search for such JAR files. If more than one directory path is specified by java.endorsed.dirs, they must be separated by File.pathSeparatorChar. If no value is set for java.endorsed.dirs, then Sun Microsystem's implementation of the Java platform looks for JAR files in a default standard location:
    <java-home>\lib\endorsed
    <java-home>/lib/endorsed

    Here <java-home> refers to the directory where the runtime software is installed (which is the top-level directory of the J2SE Runtime Environment or the jre directory in the JDK).
    The J2SE runtime environment will use classes in such JAR files to override the corresponding classes provided in the Java platform as shipped by Sun.
    ... << RSDN@Home 1.2.0 alpha rev. 643>>
  • icq: 118852038
    Re[2]: Изменения в "базовых библиотек", "jdk", ".net Framewo
    От: Petrovich_Alex  
    Дата: 23.03.06 08:45
    Оценка:
    Здравствуйте, Зверёк Харьковский, Вы писали:

    ЗХ>Ruby. За счет возможности определять разные методы одного класса в разных файлах.


    Спасибо, запишем в копилку.

    т.е эта возможность существует потому что есть исходный код библиотеки?
    или в этом динамическом языке весь код в тексте, кроме vm?
    насколько можно зайти в изменении базовых классов в rybu?

    ЗХ>Нужно вместе с программой распространять дополнительные файлы, расширяющие базу.


    вот. хороший ответ.
    ни всю базу и только расширение (изменение)? diff?
    может ли сама программа представлять собой patch (diff & patch или что-то еще, бинарное) для библиотеки?
    если язык динамический типа руби, тогда это возможно?

    а вот как будут работать 2 программы на одной машине, изменяя библиотеку.
    или для них будут запускается 2 виртуальных машины (руби) или 2 образа библиотеки (в других случаях)?
    ... << RSDN@Home 1.1.4 stable rev. 510>>
    Re[3]: Изменения в "базовых библиотек", "jdk", ".net Framewo
    От: Petrovich_Alex  
    Дата: 23.03.06 08:45
    Оценка:
    Здравствуйте, -=[x]=-, Вы писали:

    X>The J2SE runtime environment will use classes in such JAR files to override the corresponding classes provided in the Java platform as shipped by Sun.


    значит можно поменять классы в java.lang.*?

    или при деплое на сервере провайдера могу поменять классы?

    я думаю не получится...

    А как поведет себя jre, если я уберу пару классов в java.lang.*?

    как я понимаю, она не пройдет кучу тестов в sun.
    развитие jre идет по плану. что-бы поменять, что-то надо пройти определенных процесс.
    а идеология (и защищенность и еще кучу свойств) java стоится на монолитности библиотеки.
    и на невозможности ее изменения из программы.
    ... << RSDN@Home 1.1.4 stable rev. 510>>
    Re[3]: Изменения в "базовых библиотек", "jdk", ".net Framewo
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 23.03.06 11:30
    Оценка:
    Здравствуйте, Petrovich_Alex, Вы писали:

    ЗХ>>Ruby. За счет возможности определять разные методы одного класса в разных файлах.


    P_A>Спасибо, запишем в копилку.


    Обязательно.

    P_A>т.е эта возможность существует потому что есть исходный код библиотеки?

    P_A>или в этом динамическом языке весь код в тексте, кроме vm?
    P_A>насколько можно зайти в изменении базовых классов в rybu?

    Нет, не поэтому. А потому, что все классы в Ruby являются открытыми (как namespace в C++). В любой момент класс можно дополнить новыми методами или изменить реализацию старых методов. Более того, изменить описание класса или реализацию какого-нибудь метода можно по ходу работы программы, см. пример здесь
    Автор: eao197
    Дата: 04.10.05
    (ближе к концу сообщения приведен работающий код, который можно скопипастить и прогнать через ruby-интерпритатор самому).

    Зайти в изменении базовых классов можно очень далеко. Начиная от дополнения стандартных классов собственными методами, например, Ruby On Rails добавляет в стандартный класс Time:
    now = Time.now
    puts now                        #=> Tue May 10 17:15:59 CDT 2005
    puts now.ago(3600)              #=> Tue May 10 16:15:59 CDT 2005
    puts now.at_beginning_of_day    #=> Tue May 10 00:00:00 CDT 2005
    puts now.at_beginning_of_month  #=> Sun May 01 00:00:00 CDT 2005
    puts now.at_beginning_of_week   #=> Mon May 09 00:00:00 CDT 2005
    puts now.at_beginning_of_year   #=> Sat Jan 01 00:00:00 CST 2005
    puts now.at_midnight            #=> Tue May 10 00:00:00 CDT 2005
    puts now.change(:hour => 13)    #=> Tue May 10 13:00:00 CDT 2005
    puts now.last_month             #=> Sun Apr 10 17:15:59 CDT 2005
    puts now.last_year              #=> Mon May 10 17:15:59 CDT 2004
    puts now.midnight               #=> Tue May 10 00:00:00 CDT 2005
    puts now.monday                 #=> Mon May 09 00:00:00 CDT 2005
    puts now.months_ago(2)          #=> Thu Mar 10 17:15:59 CST 2005
    puts now.months_since(2)        #=> Sun Jul 10 17:15:59 CDT 2005
    puts now.next_week              #=> Mon May 16 00:00:00 CDT 2005
    puts now.next_year              #=> Wed May 10 17:15:59 CDT 2006
    puts now.seconds_since_midnight #=> 62159.215938
    puts now.since(7200)            #=> Tue May 10 19:15:59 CDT 2005
    puts now.tomorrow               #=> Wed May 11 17:15:59 CDT 2005
    puts now.years_ago(2)           #=> Sat May 10 17:15:59 CDT 2003
    puts now.years_since(2)         #=> Thu May 10 17:15:59 CDT 2007
    puts now.yesterday              #=> Mon May 09 17:15:59 CDT 2005

    и заканчивая переопределением стандартных методов. Так, RubyGem переопределяет метод require для того, чтобы извлекать модули из своего репозитория происталлированных Gem-ов.

    Кстати, не все стандартные методы доступны в исходниках (т.е. в rb-файлах). Часть из них реализована на C и влинкована непосредственно в интерпритатор Ruby.

    ЗХ>>Нужно вместе с программой распространять дополнительные файлы, расширяющие базу.


    P_A>вот. хороший ответ.

    P_A>ни всю базу и только расширение (изменение)? diff?
    P_A>может ли сама программа представлять собой patch (diff & patch или что-то еще, бинарное) для библиотеки?
    P_A>если язык динамический типа руби, тогда это возможно?

    Собственно говория, ты можешь сделать из стандартной поставки Ruby собственный вариант.
    Может распространять стандартный вариант Ruby + diff-ы для изменения Ruby уже после инсталляции.

    Но все это каким-то маразмом попахивает.
    Самый простой способ -- включать в свое приложение необходимые тебе изменения стандартных классов и загружать эти изменения в твоем коде через обычный require.

    P_A>а вот как будут работать 2 программы на одной машине, изменяя библиотеку.

    P_A>или для них будут запускается 2 виртуальных машины (руби) или 2 образа библиотеки (в других случаях)?

    Не очень понятно, о чем ты говоришь.
    Можно запустить два интерпритатора ruby, в каждом будет работать своя программа со своей библиотекой.


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[4]: Изменения в "базовых библиотек", "jdk", ".net Framewo
    От: Petrovich_Alex  
    Дата: 23.03.06 13:46
    Оценка:
    Здравствуйте, eao197, Вы писали:

    E>Кстати, не все стандартные методы доступны в исходниках (т.е. в rb-файлах). Часть из них реализована на C и влинкована непосредственно в интерпритатор Ruby.


    В копилку.


    E>Но все это каким-то маразмом попахивает.

    E>Самый простой способ -- включать в свое приложение необходимые тебе изменения стандартных классов и загружать эти изменения в твоем коде через обычный require.

    Я спрашивал в общем, не только по отношению к руби. (но за руби спасибо).
    это хорошо я могу что нибудь обрезать (или добавить) в руби...

    а если таких обрезателей будет сотня? что станет с руби, или так есть стандарт какой нибудь?
    так называемая "основа" для обрезания

    E>Можно запустить два интерпритатора ruby, в каждом будет работать своя программа со своей библиотекой.


    и в памяти будет висеть 2 vm?
    мне как провайдеру будет неприятно будет для 100, 1000 клиентов держать практичестки одно и тоже в памяти.
    или это не проблема?
    ... << RSDN@Home 1.1.4 stable rev. 510>>
    Re[5]: Изменения в "базовых библиотек", "jdk", ".net Framewo
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 23.03.06 13:57
    Оценка: 1 (1)
    Здравствуйте, Petrovich_Alex, Вы писали:

    P_A>а если таких обрезателей будет сотня? что станет с руби, или так есть стандарт какой нибудь?

    P_A>так называемая "основа" для обрезания

    Стандарта нет. А будет то, что ты из него сделаешь Здравый смыл-то никто не отменял.

    E>>Можно запустить два интерпритатора ruby, в каждом будет работать своя программа со своей библиотекой.


    P_A>и в памяти будет висеть 2 vm?


    Да. Насколько я понимаю, сейчас ruby не может в рамках одной vm запускать два разных приложения.


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re: Изменения в "базовых библиотек", "jdk", ".net Framework.
    От: buriy Россия http://www.buriy.com/
    Дата: 23.03.06 13:58
    Оценка: +1
    Здравствуйте, Petrovich_Alex, Вы писали:

    P_A>
  • Существует ли возможность при написание программы поменять базовые библиотеки, классы?
    Можно по-разному понять твой вопрос. Попробую ответить на него так, как я понял.
    Вариант 1. Подмена на программном уровне.
    Есть почти во всех языках, имеющих продвинутый reflection (категория 1) или class loading (категория 2) или макросы (категория 3).
    Категория 1.
    Язык: Python.
    Как : присваиваешь или создаешь адаптер.
    Язык: Ruby
    Как : декларируешь новый метод у класса.

    Категория 2.
    Язык: Java
    Как : AspectJ
    Язык: .NET
    Как : Aspect# (AspectSharp)

    Категория 3.
    Язык: Lisp.
    Как : описываешь макросы.
    Язык: С, С++.
    Как : употребляешь директиву #define препроцесора.

    Категория 4. Lisp.
    Как : Пишешь свой компилятор.

    Вариант 2. Подмена файлов.
    Догадаешься как работает?
    Можно подменять исходники, компилированные модули, библиотеки.

    Вариант 3. ООП.
    Наследуешься от нужных тебе классов, и дописываешь функциональность (см. паттерн adapter).

    P_A>
  • Такие языки программирования есть?
    Вообще-то, с помощью рук и ассемблера при наличии мозгов можно сделать все что угодно
    Вопрос только один — можно ли этим будет пользоваться и стоит ли овчинка выделки.

    P_A>
  • Как будет распространяться программы, которые работают на разных "базовых библиотеках"?
    Как придумаешь, так и будут. Возможны различные варианты. Попробуй конкретизировать вопрос.

    P_A>
  • Где можно почитать о самой сущности «базовой библиотеки», «базовых классов».
    Первое — в курсах по основам программирования.
    Второе — в курсах по ООП.

    P_A>
  • И про отношение между библиотекой и прикладной программой?
    1) Там где написано про эволюцию языков программирования (рекомендую этот вариант).
    2) В книжке про ООП.
    3) В статьях про удаленный вызов процедур.
    4) В книжках про компонентные технологии в программировании (типа COM)
    5) В статьях про работу reflection и в статьях про работу class loader.
    Короче, там, где пытаются вмешиваться в эти отношения или изучают их эволюцию.
  • /bur
    Re[4]: Изменения в "базовых библиотек", "jdk", ".net Framewo
    От: Andrei N.Sobchuck Украина www.smalltalk.ru
    Дата: 23.03.06 14:06
    Оценка:
    Здравствуйте, eao197, Вы писали:

    E>изменить описание класса


    Как мигрируют объекты, если у класса удаляются или добавляются переменные?
    http://www.smalltalk.ru | << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Я ненавижу Hibernate
    Автор: Andrei N.Sobchuck
    Дата: 08.01.08
    !
    Re[5]: Изменения в "базовых библиотек", "jdk", ".net Framewo
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 23.03.06 14:17
    Оценка: 6 (1)
    Здравствуйте, Andrei N.Sobchuck, Вы писали:

    E>>изменить описание класса


    ANS>Как мигрируют объекты, если у класса удаляются или добавляются переменные?


    Не очень понял вопрос. Но может быть стандартный help поможет прояснить ситуацию:
    Object#remove_instance_variable
    Object#remove_class_variable


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[5]: Изменения в "базовых библиотек", "jdk", ".net Framewo
    От: Cyberax Марс  
    Дата: 23.03.06 14:43
    Оценка: 5 (1)
    Andrei N.Sobchuck wrote:
    > E>изменить описание класса
    > Как мигрируют объекты, если у класса удаляются или добавляются переменные?
    Набор переменных _объекта_ не привязан к его классу.
    Posted via RSDN NNTP Server 2.0
    Sapienti sat!
    Re[6]: Изменения в "базовых библиотек", "jdk", ".net Framewo
    От: Andrei N.Sobchuck Украина www.smalltalk.ru
    Дата: 23.03.06 15:28
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Andrei N.Sobchuck wrote:

    >> E>изменить описание класса
    >> Как мигрируют объекты, если у класса удаляются или добавляются переменные?
    C>Набор переменных _объекта_ не привязан к его классу.

    То есть добавление переменной в объект не скажется на других объектах этого класса? Типа прототипов?
    http://www.smalltalk.ru | << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Я ненавижу Hibernate
    Автор: Andrei N.Sobchuck
    Дата: 08.01.08
    !
    Re[7]: Изменения в "базовых библиотек", "jdk", ".net Framewo
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 23.03.06 15:39
    Оценка: 2 (1)
    Здравствуйте, Andrei N.Sobchuck, Вы писали:

    ANS>То есть добавление переменной в объект не скажется на других объектах этого класса? Типа прототипов?


    Типа того, что т.н. instance variable первый раз инстанцируется в объекте при первом обращении к ней. Нет обращения -- нет и переменной (атрибута). Вот для примера:
    class Test
        def access_a; @a = 1; end
        def access_b; @b = 2; end
    end
    
    a = Test.new
    b = Test.new
    c = Test.new
    
    puts "-= Step 1 =-"
    p a.instance_variables
    p b.instance_variables
    p c.instance_variables
    
    puts "-= Step 2 =-"
    a.access_a
    b.access_b
    c.access_a; c.access_b
    
    p a.instance_variables
    p b.instance_variables
    p c.instance_variables


    При запуске получаем:
    -= Step 1 =-
    []
    []
    []
    -= Step 2 =-
    ["@a"]
    ["@b"]
    ["@a", "@b"]


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[8]: Изменения в "базовых библиотек", "jdk", ".net Framewo
    От: kan_izh Великобритания  
    Дата: 23.03.06 20:53
    Оценка:
    eao197 wrote:

    > ANS>То есть добавление переменной в объект не скажется на других

    > объектах этого класса? Типа прототипов?
    >
    > Типа того, что т.н. instance variable первый раз инстанцируется в
    > объекте при первом обращении к ней. Нет обращения -- нет и переменной
    > (атрибута). Вот для примера:
    Не понял. Вроде многие известные скриптовые языки позволяют это, тот же перл, яваскрипт. Менять объекты — ничего
    интересного, интереснее — классы. В яваскрипте для этого есть prototype. А что такого в ruby?
    Под сабжем подразумевается изменение классов, всё-таки, имхо. Или я что-то не понял?

    Классический пример. В javascript есть стандартный класс String, у которого не предусмотрен метод trim. Можно легко
    добавить:
    String.prototype.trim = function()
    {
        return this.replace(/^\s+/,'').replace(/\s+$/, '')
    }
    
    WScript.echo('['+("   adf   ".trim())+']')

    типа сабж.
    Posted via RSDN NNTP Server 2.0
    но это не зря, хотя, может быть, невзначай
    гÅрмония мира не знает границ — сейчас мы будем пить чай
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.