Re: offtop
От: dshe  
Дата: 27.03.06 13:14
Оценка: +2
Здравствуйте, Petrovich_Alex, Вы писали:

P_A>а если возможности нет, то ее или не используют, или извращаются... а как показала практика, в Java такой возможности нет.


В java можно поменить базовую библиотеку используя -Xbootclasspath. (Правда, врядли получится удалить или несовместимо изменить такие фундаментальные классы, как java.lang.Object, java.lang.String, java.lang.Class)

X>>>>JRE не обязательно должна реализовывать все фичи/классы J2SE.

P_A>offtop: "да ну.... как это не обязана? об этом где можно почитать?"
P_A>это уже будет не jre, а что нибудь другое, и под другим названием

Полагаю, речь идет об optional packages, которые можно скачать и использовать, а можно и не скачивать, если не нужно. Или скачать, если нужно, у другого поставщика.

P_A>вопросы

P_A>почему считается, что основу ("библиотеку", еще что нибудь) менять из прикладной программы трудно и не нужно?
P_A>(считается что прикладные программисты хуже системных?).
P_A>пуcть прикладная программа использует только то, что ей дает библиотека?

Во-первых, код сложно сопровождать, если он полагается на "нестандартное" поведение базовых библиотек.

И во-вторых, при возможности изменять базовые библиотеки приходится решать указанную тобой же проблему:

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


Как правило, базовые библиотеки разрабатываются (и любые библиотеки должны разрабатываться) таким образом, чтобы их можно было расширять, а не модифицировать (Open-Close Principle). И как правило, для решения задач, которые можно было бы решить изменениями в базовой библиотеке; можно найти более простое и безопасное решение.
--
Дмитро
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[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[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.
От: De-Bill  
Дата: 22.03.06 13:22
Оценка: -1
P_A>
  • Существует ли возможность при написание программы поменять базовые библиотеки, классы?

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

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

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

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

    Особой проблемы здесь нет. Базовая библиотека так или иначе будет одна. Твои изменения будут видны только для твоей программы.
  • 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[2]: offtop
    От: Andrei N.Sobchuck Украина www.smalltalk.ru
    Дата: 27.03.06 15:02
    Оценка: +1
    Здравствуйте, dshe, Вы писали:

    D>Как правило, базовые библиотеки разрабатываются (и любые библиотеки должны разрабатываться) таким образом, чтобы их можно было расширять, а не модифицировать (Open-Close Principle).


    Однако ж, в этой конфе постоянно пишут, что спроектировать расширяемую во все стороны архитектуру не возможно.

    D>И как правило, для решения задач, которые можно было бы решить изменениями в базовой библиотеке; можно найти более простое и безопасное решение.


    Например?
    http://www.smalltalk.ru | << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Я ненавижу Hibernate
    Автор: Andrei N.Sobchuck
    Дата: 08.01.08
    !
    Изменения в "базовых библиотек", "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[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[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[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[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
    но это не зря, хотя, может быть, невзначай
    гÅрмония мира не знает границ — сейчас мы будем пить чай
    Re[9]: Изменения в "базовых библиотек", "jdk", ".net Framewo
    От: Зверёк Харьковский  
    Дата: 23.03.06 22:58
    Оценка:
    Здравствуйте, kan_izh, Вы писали:

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

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

    Есть.

    _>Классический пример. В javascript есть стандартный класс String, у которого не предусмотрен метод trim. Можно легко

    _>добавить:
    _>
    _>String.prototype.trim = function()
    _>{
    _>    return this.replace(/^\s+/,'').replace(/\s+$/, '')
    _>}
    
    _>WScript.echo('['+("   adf   ".trim())+']')
    _>


    'mama'.booo #=> undefined method 'booo' for "mama":String
    
    class String
        def booo
            print "boo!"
        end
    end
    
    'mama'.booo #напечатает 'boo!'
    FAQ — це мiй ай-кью!
    Re[4]: Изменения в "базовых библиотек", "jdk", ".net Framewo
    От: -=[x]=- Россия  
    Дата: 24.03.06 04:38
    Оценка:
    Здравствуйте, Petrovich_Alex, Вы писали:

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

    нет, можно поменять лишь часть, причем в определенных пакетах.

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

    убрать нельзя, только подменить

    P_A>как я понимаю, она не пройдет кучу тестов в sun.

    есть множество jre, в которых большая часть функциональности не реализована. JRE не обязательно должна реализовывать все фичи/классы J2SE. В ней главное — интерпретарор/компилятор байт-кода, чтобы соответсвовал спецификациям.
    P_A>развитие jre идет по плану. что-бы поменять, что-то надо пройти определенных процесс. а идеология (и защищенность и еще кучу свойств) java стоится на монолитности библиотеки.
    Просьба не смешивать платформу, виртуальную машину и язык
    ... << RSDN@Home 1.2.0 alpha rev. 643>>
    icq: 118852038
    Re[5]: Изменения в "базовых библиотек", "jdk", ".net Framewo
    От: Petrovich_Alex  
    Дата: 24.03.06 09:07
    Оценка:
    Здравствуйте, -=[x]=-, Вы писали:

    X>нет, можно поменять лишь часть, причем в определенных пакетах.

    X>убрать нельзя, только подменить
    это все полумеры, которые практически не доступны в программировании.
    и 95% этим некогда не пользовались...

    X>есть множество jre...

    какие?

    X>в которых большая часть функциональности не реализована....

    какая часть?

    и что на них работуют все приложения..?
    я вот никак в дебаине (на его реализации Java) не могу запустить несколько приложений...
    это что, "переносимость"?

    X>JRE не обязательно должна реализовывать все фичи/классы J2SE.

    да ну.... как это не обязана? об этом где можно почитать?

    X>В ней главное — интерпретарор/компилятор байт-кода, чтобы соответсвовал спецификациям.

    это спецификация на vm...
    а есть спецификация на язык.
    и есть тесты в sun. на которых прогоняют машины, классы и т.д.

    X>Просьба не смешивать платформу, виртуальную машину и язык


    а в java это ну очень сильно смешано...
    ... << RSDN@Home 1.1.4 stable rev. 510>>
    Re[10]: Изменения в "базовых библиотек", "jdk", ".net Framew
    От: kan_izh Великобритания  
    Дата: 24.03.06 11:10
    Оценка:
    Зверёк Харьковский wrote:

    > prototype. А что такого в ruby?

    >
    > Есть.
    >
    > _>Классический пример. В javascript есть стандартный класс String, у
    > которого не предусмотрен метод trim. Можно легко
    > _>добавить:

    Короче, для скриптовых языков это вполне нормальная ситуация. А вот с компилируемыми всё гораздо хуже.
    Posted via RSDN NNTP Server 2.0
    но это не зря, хотя, может быть, невзначай
    гÅрмония мира не знает границ — сейчас мы будем пить чай
    Re[6]: Изменения в "базовых библиотек", "jdk", ".net Framewo
    От: -=[x]=- Россия  
    Дата: 24.03.06 11:49
    Оценка:
    Здравствуйте, Petrovich_Alex, Вы писали:

    P_A>это все полумеры, которые практически не доступны в программировании.

    P_A>и 95% этим некогда не пользовались...
    Как и тем, о чем тема этого топика

    X>>есть множество jre...

    P_A>какие?
    P_A>и что на них работуют все приложения..?
    P_A>я вот никак в дебаине (на его реализации Java) не могу запустить несколько приложений... это что, "переносимость"?
    Например, gcj, который в дебиане. реализация от сана является референсной... Которая вполне переносима, как в прочем и некоторые другие (например от ibm).

    X>>JRE не обязательно должна реализовывать все фичи/классы J2SE.

    P_A>да ну.... как это не обязана? об этом где можно почитать?


    X>>В ней главное — интерпретарор/компилятор байт-кода, чтобы соответсвовал спецификациям.

    P_A>это спецификация на vm...
    P_A>а есть спецификация на язык.
    P_A>и есть тесты в sun. на которых прогоняют машины, классы и т.д.
    а есть спецификации на J2SE, J2EE, J2ME, RtJava. Все перечисленное — платформы. JRE сама по себе не платформа.

    X>>Просьба не смешивать платформу, виртуальную машину и язык

    P_A>а в java это ну очень сильно смешано...
    Не согласен.
    ... << RSDN@Home 1.2.0 alpha rev. 643>>
    icq: 118852038
    offtop
    От: Petrovich_Alex  
    Дата: 27.03.06 12:18
    Оценка:
    Здравствуйте, -=[x]=-, Вы писали:
    P_A>>и 95% этим некогда не пользовались...
    X>Как и тем, о чем тема этого топика

    Не пользовались, потому что нет средств. А как уже мне показали, что если есть средства (возможности), то этим пользуются как например в руби
    Автор: eao197
    Дата: 23.03.06
    .

    а если возможности нет, то ее или не используют, или извращаются... а как показала практика, в Java такой возможности нет.

    X>>>JRE не обязательно должна реализовывать все фичи/классы J2SE.

    offtop: "да ну.... как это не обязана? об этом где можно почитать?"
    это уже будет не jre, а что нибудь другое, и под другим названием


    вопросы
    почему считается, что основу ("библиотеку", еще что нибудь) менять из прикладной программы трудно и не нужно?
    (считается что прикладные программисты хуже системных?).
    пуcть прикладная программа использует только то, что ей дает библиотека?

    и вообще, прочему есть разделение между библиотекой и прикладной программой?
    ... << RSDN@Home 1.1.4 stable rev. 510>>
    Re[2]: offtop
    От: Petrovich_Alex  
    Дата: 29.03.06 09:31
    Оценка:
    Здравствуйте, dshe, Вы писали:

    D>В java можно поменить базовую библиотеку используя -Xbootclasspath. (Правда, врядли получится удалить или несовместимо изменить такие фундаментальные классы, как java.lang.Object, java.lang.String, java.lang.Class)


    Можно, но это "грабли"....

    D>Полагаю, речь идет об optional packages, которые можно скачать и использовать, а можно и не скачивать, если не нужно. Или скачать, если нужно, у другого поставщика.


    D>Во-первых, код сложно сопровождать, если он полагается на "нестандартное" поведение базовых библиотек.


    почему? если это мой код, я сам изменил код... для меня это будет самое стандартное поведение.
    А если это будет в моей программе, то и остальным разработчикам это будет доступно. и описано и протестировано и т.д.


    D>И во-вторых, при возможности изменять базовые библиотеки приходится решать указанную тобой же проблему:

    D>

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


    А что, так уж трудно придумать?
    Если бы у тебя была такая задача, то как бы ты сделал?

    D>Как правило, базовые библиотеки разрабатываются (и любые библиотеки должны разрабатываться) таким образом, чтобы их можно было расширять, а не модифицировать (Open-Close Principle).


    заносим в копилку...

    А почему первая ссылка на гугле по "Open-Close Principle" идет на описание принципа по отношению к С++ (статическому языку)?
    Open-Close Principle on google


    D>чтобы их можно было расширять, а не модифицировать...


    а если мне не надо расширять, а надо убрать кучу вещей которые мне не нужны...

    D>И как правило, для решения задач, которые можно было бы решить изменениями в базовой библиотеке; можно найти более простое и безопасное решение.


    Если для меня самое безопасное решение — изменить что нибудь в базовой библиотеки?
    Я беру и изменяю. И у меня есть тесты системы, и тесты программы.
    У меня стирается грань между кодом библиотеки и прикладным кодом.

    Я не хочу воспринивать код библиотека как неизменяемый.

    Базовый код делают несколько человек, а используют несколько тысяч...
    И как писали в какой то книге про триз:
    "Кучка академиков наук не смогла соперничать с творчеством народа" ....
    ... << RSDN@Home 1.1.4 stable rev. 510>>
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.