Здравствуйте, 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
Andrei N.Sobchuck wrote: > E>изменить описание класса > Как мигрируют объекты, если у класса удаляются или добавляются переменные?
Набор переменных _объекта_ не привязан к его классу.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[7]: Изменения в "базовых библиотек", "jdk", ".net Framewo
Здравствуйте, 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
Здравствуйте, Petrovich_Alex, Вы писали:
P_A>а если таких обрезателей будет сотня? что станет с руби, или так есть стандарт какой нибудь? P_A>так называемая "основа" для обрезания
Стандарта нет. А будет то, что ты из него сделаешь Здравый смыл-то никто не отменял.
E>>Можно запустить два интерпритатора ruby, в каждом будет работать своя программа со своей библиотекой.
P_A>и в памяти будет висеть 2 vm?
Да. Насколько я понимаю, сейчас ruby не может в рамках одной vm запускать два разных приложения.
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: Изменения в "базовых библиотек", "jdk", ".net Framework.
P_A>Существует ли возможность при написание программы поменять базовые библиотеки, классы?
Ни в Java, ни в 1-2 .NET Frameworke такие вещи нельзя сделать нормальным образом. В 3м C# будет такая возможность. Например, можно будет добавить какой-нибудь метод.
P_A>Такие языки программирования есть?
Есть, например похожие возможности есть в LISPe.
P_A>Как будет распространяться программы, которые работают на разных "базовых библиотеках"?
Особой проблемы здесь нет. Базовая библиотека так или иначе будет одна. Твои изменения будут видны только для твоей программы.
Re: Изменения в "базовых библиотек", "jdk", ".net Framework.
Здравствуйте, 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.
Короче, там, где пытаются вмешиваться в эти отношения или изучают их эволюцию.
Здравствуйте, dshe, Вы писали:
D>Как правило, базовые библиотеки разрабатываются (и любые библиотеки должны разрабатываться) таким образом, чтобы их можно было расширять, а не модифицировать (Open-Close Principle).
Однако ж, в этой конфе постоянно пишут, что спроектировать расширяемую во все стороны архитектуру не возможно.
D>И как правило, для решения задач, которые можно было бы решить изменениями в базовой библиотеке; можно найти более простое и безопасное решение.
Здравствуйте, Petrovich_Alex, Вы писали:
P_A>Существует ли возможность при написание программы поменять базовые библиотеки, классы?
Если лицензия позволяет и есть исходники --- почему нет? Если лицензия не позволяет и есть исходники то тоже можно, но уже преследуется по закону. Если исходников нету, то внесение существенных изменений затруднительно, только легкие патчи...
P_A>Такие языки программирования есть?
Какие? В общем-то базовые библиотеки можно изменить на любом языке.
P_A>Как будет распространяться программы, которые работают на разных "базовых библиотеках"?
Ну... надо поставлять с программой оригинальную версию библиотеки. Или все вкомпилируется в исполняемый файл.
Ну и к тому же новую версию можно рассматривать как изменение старой
Re[2]: Изменения в "базовых библиотек", "jdk", ".net Framewo
Здравствуйте, De-Bill, Вы писали:
P_A>>Существует ли возможность при написание программы поменять базовые библиотеки, классы?
DB>Ни в Java, ни в 1-2 .NET Frameworke такие вещи нельзя сделать нормальным образом.
Покрайней мере в отношении C# 2.0 (в первом вроде тоже было но не уверен) ты не прав у компилятора есть специальный ключ /nostdlib+ правда сколько надо поратить сил на реализацию аналога mscorlib.dll я не знаю.
DB>В 3м C# будет такая возможность. Например, можно будет добавить какой-нибудь метод.
Это чистой воды синтаксический сахар. C# 3.0 обсуждали здесь
Здравствуйте, Petrovich_Alex, Вы писали:
>Существует ли возможность при написание программы поменять базовые библиотеки, классы?
Да.
>Такие языки программирования есть?
Ruby. За счет возможности определять разные методы одного класса в разных файлах.
>Как будет распространяться программы, которые работают на разных "базовых библиотеках"?
Нужно вместе с программой распространять дополнительные файлы, расширяющие базу.
>Где можно почитать о самой сущности «базовой библиотеки», «базовых классов».
>И про отношение между библиотекой и прикладной программой?
FAQ — це мiй ай-кью!
Re[2]: Изменения в "базовых библиотек", "jdk", ".net Framewo
Здравствуйте, 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
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>Ruby. За счет возможности определять разные методы одного класса в разных файлах.
Спасибо, запишем в копилку.
т.е эта возможность существует потому что есть исходный код библиотеки?
или в этом динамическом языке весь код в тексте, кроме vm?
насколько можно зайти в изменении базовых классов в rybu?
ЗХ>Нужно вместе с программой распространять дополнительные файлы, расширяющие базу.
вот. хороший ответ.
ни всю базу и только расширение (изменение)? diff?
может ли сама программа представлять собой patch (diff & patch или что-то еще, бинарное) для библиотеки?
если язык динамический типа руби, тогда это возможно?
а вот как будут работать 2 программы на одной машине, изменяя библиотеку.
или для них будут запускается 2 виртуальных машины (руби) или 2 образа библиотеки (в других случаях)?
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[3]: Изменения в "базовых библиотек", "jdk", ".net Framewo
Здравствуйте, -=[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
Здравствуйте, Petrovich_Alex, Вы писали:
ЗХ>>Ruby. За счет возможности определять разные методы одного класса в разных файлах.
P_A>Спасибо, запишем в копилку.
Обязательно.
P_A>т.е эта возможность существует потому что есть исходный код библиотеки? P_A>или в этом динамическом языке весь код в тексте, кроме vm? P_A>насколько можно зайти в изменении базовых классов в rybu?
Нет, не поэтому. А потому, что все классы в Ruby являются открытыми (как namespace в C++). В любой момент класс можно дополнить новыми методами или изменить реализацию старых методов. Более того, изменить описание класса или реализацию какого-нибудь метода можно по ходу работы программы, см. пример здесь
(ближе к концу сообщения приведен работающий код, который можно скопипастить и прогнать через 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
Здравствуйте, 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
Здравствуйте, Cyberax, Вы писали:
C>Andrei N.Sobchuck wrote: >> E>изменить описание класса >> Как мигрируют объекты, если у класса удаляются или добавляются переменные? C>Набор переменных _объекта_ не привязан к его классу.
То есть добавление переменной в объект не скажется на других объектах этого класса? Типа прототипов?
eao197 wrote:
> ANS>То есть добавление переменной в объект не скажется на других > объектах этого класса? Типа прототипов? > > Типа того, что т.н. instance variable первый раз инстанцируется в > объекте при первом обращении к ней. Нет обращения -- нет и переменной > (атрибута). Вот для примера:
Не понял. Вроде многие известные скриптовые языки позволяют это, тот же перл, яваскрипт. Менять объекты — ничего
интересного, интереснее — классы. В яваскрипте для этого есть prototype. А что такого в ruby?
Под сабжем подразумевается изменение классов, всё-таки, имхо. Или я что-то не понял?
Классический пример. В javascript есть стандартный класс String, у которого не предусмотрен метод trim. Можно легко
добавить:
Здравствуйте, kan_izh, Вы писали:
>> ANS>То есть добавление переменной в объект не скажется на других >> объектах этого класса? Типа прототипов? >> >> Типа того, что т.н. instance variable первый раз инстанцируется в >> объекте при первом обращении к ней. Нет обращения -- нет и переменной >> (атрибута). Вот для примера: _>Не понял. Вроде многие известные скриптовые языки позволяют это, тот же перл, яваскрипт. Менять объекты — ничего _>интересного, интереснее — классы. В яваскрипте для этого есть prototype. А что такого в ruby?
Есть.
_>Классический пример. В javascript есть стандартный класс String, у которого не предусмотрен метод trim. Можно легко _>добавить: _>
Здравствуйте, 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
Здравствуйте, -=[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
Зверёк Харьковский wrote:
> prototype. А что такого в ruby? > > Есть. > > _>Классический пример. В javascript есть стандартный класс String, у > которого не предусмотрен метод trim. Можно легко > _>добавить:
Короче, для скриптовых языков это вполне нормальная ситуация. А вот с компилируемыми всё гораздо хуже.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[6]: Изменения в "базовых библиотек", "jdk", ".net Framewo
Здравствуйте, 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 это ну очень сильно смешано...
Не согласен.
а если возможности нет, то ее или не используют, или извращаются... а как показала практика, в Java такой возможности нет.
X>>>JRE не обязательно должна реализовывать все фичи/классы J2SE.
offtop: "да ну.... как это не обязана? об этом где можно почитать?"
это уже будет не jre, а что нибудь другое, и под другим названием
вопросы
почему считается, что основу ("библиотеку", еще что нибудь) менять из прикладной программы трудно и не нужно?
(считается что прикладные программисты хуже системных?).
пуcть прикладная программа использует только то, что ей дает библиотека?
и вообще, прочему есть разделение между библиотекой и прикладной программой?
Здравствуйте, 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>И как правило, для решения задач, которые можно было бы решить изменениями в базовой библиотеке; можно найти более простое и безопасное решение.
Если для меня самое безопасное решение — изменить что нибудь в базовой библиотеки?
Я беру и изменяю. И у меня есть тесты системы, и тесты программы.
У меня стирается грань между кодом библиотеки и прикладным кодом.
Я не хочу воспринивать код библиотека как неизменяемый.
Базовый код делают несколько человек, а используют несколько тысяч...
И как писали в какой то книге про триз:
"Кучка академиков наук не смогла соперничать с творчеством народа" ....