[11:41:46] <vаlexey> Всё. Я вернулся.
[13:47:20] <Kemet> vаlexey: откуда
[14:12:13] <vаlexey> из конкурсных забот
[14:17:11] <Kemet> как успехи?
[14:22:30] <vаlexey> ну, успели ;-)
[14:25:58] <vаlexey> https://www.youtube.com/watch?v=XtJ94F4vkx0
[14:26:00] <vаlexey> вот так :-)
[19:34:11] <jordan36957> собственно на русском, о чём речь идёт? Реклама программы?
[19:42:15] <jordan36957> По видео в общем понял.
[19:50:43] <Kemet> jordan36957: в автивном обероне нет дженериков
[19:51:53] <jordan36957> ок.
[19:53:31] <jordan36957> при программировании а2, чувствуется нехватка дженериков? Система большая.
[19:55:55] <jordan36957> Вот, думаю, может и правда не такая уж сильная необходимость в них. Хотя фича полезная.
[19:56:38] <Kemet> да они не шибко то и нужны. а в самой А2 нисколько не чувствуется, ибо там структуры или уникальные или наоборот унифицированные, как и алгоритмы
[20:00:19] <Kemet> при разработке приложений дженерики могли бы пригодиться, но жизненно необходимыими не являются
[20:01:40] <Kemet> А2 больше тяготеет к динамическим(ссылочным) типам
[20:06:48] <jordan36957> Понятно.
[20:13:22] <Kemet> но для тех, кто привык пихать дженерики куда ни попадя, их отсутсвие может оказаться фатальным ) по крайней мере в психологическом плане
[20:15:24] <valexey> те кто любит статическую типизацию, то есть проверку типов на этапе компиляции - вот им критично, да
[20:15:39] <valexey> а тем кто любит динамическую типизацию, те принципиально не понимают зачем дженерики :-)
[20:15:50] <valexey> а при разработке ОС действительно обобщенка не сильно нужна
[20:16:05] <valexey> равно как и при разработке компилятора в общем то
[20:21:01] <jordan36957> Активный Оберон Типизация данных: статическая, сильная
[20:22:26] <valexey> угу. но ООП по определению - это динамическая типизация
[20:22:37] <valexey> а Активный Оберон это ОО-язык
[20:23:04] <jordan36957> Стоп. Но теже классы которые есть структуры, они же тоже типизированы.
[20:23:32] <valexey> дык динамическая типизация не означает отсутствия типов
[20:23:42] <valexey> она означает проверку типов во время исполнения
[20:23:45] <valexey> а не компиляции
[20:23:58] <valexey> яркий пример таковой проверки - WITH в Компонентном Паскале
[20:24:06] <valexey> (ну и оберонах до 07)
[20:24:13] <valexey> соответственно АО тяготеет к динамической типизации для например тех же контейнеров и проч
[20:25:29] <valexey> Собственно те же системы типа смалтолка и лиспа - они именно ОО и динамически типизированны. По их образу и подобию была построена ОС Оберон, а затем ББ. Соответственно в малом КП статически типизирован (на уровне примитивных типов), но в большом предполагается что будет использоваться динамическая типизация
[20:26:00] <valexey> Ибо система (ББ или Оберон ОС) по сути своей ничем от других ОО-систем не отличается.
[20:27:53] <valexey> другое дело, что программисту обычно не требуется создавать именно очередную вариацию системы. то есть идея что вот, мы возьмем ББ или там Оберон ОС, настроим как надо/допишем модули нужные и будет у нас видеоплеер - ущербна по определению
[20:28:28] <valexey> Ибо надежность полученного таким образом продукта будет ниже, производительность тоже будет ниже. А внутреннее устройство - сложнее.
[20:28:58] <valexey> Если на выходе нужен классно работающий неизменный монолит, то лучше использовать для этого другие средства (языки, библиотеки и среды разработки)
[20:29:35] <valexey> Если же на выходе нужна конфигурируемая динамически расширяемая вундервафля, то вот её как раз можно построить на базе того же ББ
[20:31:40] <jordan36957> Чем дженерики мешают динамическому расширению? Модули то не тронуты? Это просто генерация кода по шаблоны с проверками.
[20:32:06] <jordan36957> *шаблону
[20:32:18] <valexey> расширению мешает статическая типизация :-)
[20:33:31] <valexey> если ты ультрапатриот статической типизации, то значит у тебя ВСЕ проверки должны быть на этапе компиляции. следовательно одно из двух: либо ты ничего не можешь добавить в систему после компиляции, либо ты пользуешься типами на примитивном уровне и имеешь минимум проверок.
[20:34:16] <valexey> (и заменяешь их проверками в коде программы, аля if (foo) {bar}, то есть имеем рукотворную динамическую типизацию, только с кучей кривого руками писанного кода)
[20:35:48] <jordan36957> В ББ тоже всё в ручную?
[20:36:07] <valexey> на половину. это все же не Си и в языке есть понятие расширяемого типа и есть WITH
[20:37:00] <valexey> важно понимать, что серебряной пули не бывает. думать все равно придется. и нужно очень аккуратно выбирать какие именно средства (динамическая, статическая типизация, статическая или динамическая компоновка (возможно с динамической подгрузкой модулей)) следует использовать для решения вот данной конкретной задачи
[20:37:11] <valexey> средства можно сочетать, если это имеет смысл в данной задаче
[20:37:30] <valexey> довольно глупо говорить "только статика!" или там "только динамическая загрузка и выгрузка модулей!"
[20:37:36] <valexey> и то и другое имеет свою цену
[20:37:54] <valexey> и нужно понять насколько в данном конкретном проекте имеет смысл эту цену платить
[20:38:53] <jordan36957> Где используют в основном расширяемые системы?
[20:39:43] <jordan36957> Пойду почитаю, о компонентоном программировании.
[20:39:47] <valexey> там где не известно точно как именно эту штуку будут использовать, то есть оставляют возможности для допиливания и добавления новой функциональности
[20:39:51] <valexey> version
[20:39:52] <Жаба> valexey,  you have imagent 6.0 (v800) on Mac OS X
[20:39:58] <valexey> version jordan36957
[20:39:58] <Жаба> valexey, jordan36957 have Psi 0.15 on Windows XP
[20:40:20] <jordan36957> ага я давнгрейдер. сижу на хр.
[20:40:26] <valexey> ну, яркий пример - операционная система. она сама по себе является таковой расширяемой динамической штукой
[20:40:42] <valexey> (расширяется приложениями)
[20:41:11] <valexey> хотя, вон Apple показала, что возможности динамики в ряде случаев можно выпилить почти безболезненно (в iOS приложения почти не могут друг с другом взаимодействовать)
[20:41:55] <valexey> пример попроще и помельче - Miranda IM - мессенджер к которому можно подключать плагины для разных протоколов (аська, джаббер, ирка и еще что хочешь)
[20:43:16] <jordan36957> в исходниках ядра bsd, есть махинации с указателями для загрузки разных файловых систем, без перекомпиляции это тоже оно?
[20:43:33] <valexey> если есть, то да. в каком-то виде оно
[20:44:12] <valexey> там одно из двух - либо проверяют руками, либо забили на все проверки и оно рухнет если подключаемый модуль ФС сделает что-то не то.
[20:45:17] <jordan36957> микроядра на си типа миникса это концепция ББ? Драйвера это простые программы типа плагинов.
[20:45:24] <valexey> в общем, тока-кока. за все приходится платить. и когда предлагают делать динамически компонентную систему для любой задачи - это зло
[20:45:48] <valexey> в каком-то смысле, да
[20:46:51] <valexey> ну, ты пойми, мы сейчас обсуждаем очень общие вещи. то есть, если проводить аналогию, то червяк это концепция человека. а голубь это концепция паука
[20:47:08] <jordan36957> загрузка dll, это динамика или статика? В основной программе есть типизированные функции, но библиотека идёт отдельно. Происходит загрузка и выгрузка. Но статическая типизация там тоже есть.
[20:47:08] <valexey> потому что все они - животные.
[20:47:21] <valexey> загрузка dll это динамика конечно же
[20:47:56] <valexey> статика она вся внутри dll, на границе по сути никакой статики уже и нет. там банально названия функций и их адреса. все.
[20:48:47] <jordan36957> То есть ничего нового в этом нет, просто в оберон языках, это делается на уровне языка минимальными затратами.
[20:48:51] <Kemet> jordan36957: динамичнеская типизация и динамичнеская линковка это разные вещи, не связанные
[20:49:04] <valexey> Kemet: связанные
[20:49:37] <jordan36957> связь же есть, имена, параметры, типы
[20:49:40] <Kemet> нет, при статической типизации никто не мешанет грузить модули динамически
[20:50:00] <Kemet> и при динамической типизации никто не мешает провести статическую линковку
[20:50:04] <valexey> Мешает :-) тебе могут подсунуть не тот модуль. и ты про фейл узнаешь только во время исполнения
[20:50:33] <Kemet> это таки модульность
[20:50:53] <valexey> неа, модуль лишь удобная единица деления кода на кусочки
[20:51:15] <valexey> а еще есть такая штука, как whole program compilation - это когда компилятор производит полнотекстовую компиляцию твоей проги (язык не важен)
[20:51:34] <valexey> то есть он реально компилирует все модули как единое целое.со всеми оптимизациями в процессе и проверками
[20:51:53] <valexey> Да, это долго. Но на выходе получается код лучше. И проверки кошернее.
[20:51:54] <Kemet> дидла это таот же модуль по смыслу, никакого отношения к типизации это не имеет
[20:52:01] <Kemet> *библа
[20:53:04] <Kemet> это уже внеязыковые средства
[20:53:32] <valexey> связь есть. статика vs динамика. и нет, это не обязательно внеязыковые средства. в некоторых языках явным образом прописана вся эта компоновка.
[20:53:41] <valexey> и это является частью языка :-)
[20:53:49] <valexey> такс. пойду домой. отсыпаться :-)