OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 00:43

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 40 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 08 Июнь, 2007 06:15 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Trurl писал(а):
Некоторые ассоциации возникают


Мне сразу вспомнился флейм про "истинно модульные системы"...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 08 Июнь, 2007 13:01 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
В чем флейм-то? :-) Ну, не использует mainstream модульных архитектур, использует только модульную декомпозицию, не более, а архитектура на чистом ООП.. Отсюда и все споры типа "а у нас тоже модули есть". Есть-то есть, да не до конца модули, и едите их не с тем, с чем мы :-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 08 Июнь, 2007 13:34 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
В чем флейм-то? :-)


Флейм о том, что "модуль" в общепринятом понимании это нифига не "модуль". Вместо того, чтобы просто обозначить отличия "обероновских модулей" от "общепринятых".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 08 Июнь, 2007 14:17 

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
Vlad писал(а):
Флейм о том, что "модуль" в общепринятом понимании это нифига не "модуль". Вместо того, чтобы просто обозначить отличия "обероновских модулей" от "общепринятых".

И называть их по-другому -- "динамические модули".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 08 Июнь, 2007 15:01 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Динамические - не единственное отличие. Я могу собрать Оберон-систему статически, но архитектура ее не изменится - она останется построенной на отношениях модулей как основной единицы...
И такое понятие модуля существует уже с 80-го года, со времен появления MESA, Modula, Ada (еще Cedar, кажется). А общепринятое понимание, в общем-то, сводится к древнему-древнему "модуль - это независимый кусок кода".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 08 Июнь, 2007 15:05 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Сам термин-то не чисто программистский, он пришел из железной инженерии. Постепенно стали пытаться "модуляризовать" и программы. По мере роста успешности этих попыток эволюционировало и понятие "модуль". И понимание модуля, принятое в модульных языках, полностью соответствует общетехническому пониманию.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 08 Июнь, 2007 21:06 

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
Илья Ермаков писал(а):
Динамические - не единственное отличие. Я могу собрать Оберон-систему статически, но архитектура ее не изменится - она останется построенной на отношениях модулей как основной единицы...

Не единственное, но основное. Или обероновские модули в чём-то ещё существенно отличаются от модулей Modula-2, Ada, Delphi ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 08 Июнь, 2007 22:27 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
От Modula-2 и Ada - нет. От Дельфи - по совокупности средств языка, ориентированных на модульное программирование - уже отличается. Дельфа заточена на ООП-архитектуру, притянута "за уши" к С++... Хотя бы только динамическое ООП - уже накладывает свои отпечатки. Message Bus в Delphi не сделаешь...
А вообще, я и говорю об оличиях не именно и конкретно обероновских модулей, а об отличиях модулей модульных языков от всех остальных...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 08 Июнь, 2007 23:01 

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
Илья Ермаков писал(а):
Дельфа заточена на ООП-архитектуру, притянута "за уши" к С++... Хотя бы только динамическое ООП - уже накладывает свои отпечатки. Message Bus в Delphi не сделаешь...

Нединамическое ООП тоже есть -- object. А что мешает реализовать Message Bus ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 08 Июнь, 2007 23:21 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
? Сразу и не понял, про что. object, волочащийся в "режиме совместимости" из Турбо Паскаля? А его кто-то еще всерьез использует?
Ну, а где тогда взять аналог WITH, его вообще нет ни в одном из известных языков... Просто потому, что такое использование ООП и не предполагалось.
Особенно если учесть тот тонкий момент, что WITH - это не только селектор типа, а, как мы тут недавно открыли, в общем виде- селектор пар соответствий "экземпляр-тип".

Речь не о том "можно воспроизвести или нет", речь о том - удобно ли для систематического использования... И тут в Обероне, даже применительно к той же шине - столько мелочей... IN/OUT, экспорт отдельных полей только для чтения. Еще в КП, например, интересные возможности дает LIMITED - никто, кроме модуля-объявителя, не сможет рассылать сообщения LIMITED-типа - безопасность, опять же... Ну и т.д. и т.п.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 09 Июнь, 2007 00:05 

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
Илья Ермаков писал(а):
Сразу и не понял, про что. object, волочащийся в "режиме совместимости" из Турбо Паскаля? А его кто-то еще всерьез использует?

Думаю нет. Просто пример того, что в Delphi не только динамическое ООП... Или под динамическим ООП имелось в виду что-то другое?
Илья Ермаков писал(а):
Ну, а где тогда взять аналог WITH, его вообще нет ни в одном из известных языков...

Действительно удобная штука. Как его ещё не стянули в другие языки...
Илья Ермаков писал(а):
Речь не о том "можно воспроизвести или нет", речь о том - удобно ли для систематического использования...

Согласен. В Delphi удобно не получится. Но речь шла о принципиальной возможности:
Цитата:
Message Bus в Delphi не сделаешь...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 09 Июнь, 2007 10:46 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
PGR писал(а):
Или обероновские модули в чём-то ещё существенно отличаются от модулей Modula-2, Ada, Delphi?

Не знаю как в Modula-2 и Ada, но в Delphi конструкция unit в обероновском смысле модулем не являются потому, что не являются динамически загружаемой и выгружаемой единицей исполнения. С другой стороны дельфийский unit нельзя назвать просто куском текста. Вобщем, борландовцы сочиняя unit остановились в одном шаге от полноценного модуля.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 09 Июнь, 2007 11:00 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Сергей, и все же нельзя считать динамическую загрузку собственным качеством самого модуля. Это - свойство реализации, которое возможно в современных компонентных модульных системах.
Я уже привел пример - "модульная архитектура". Она становится модульной еще до существования реально написанного и загружающегося модуля. Она делает возможным компонентность - т.е. динамическую загрузку. Но в итоге я могу собрать тот же Блэкбокс статически - но его архитектура от этого не изменится, она останется модульной.
Т.е. компонентность является следствием модульности.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 09 Июнь, 2007 11:06 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
PGR писал(а):
Илья Ермаков писал(а):
Ну, а где тогда взять аналог WITH, его вообще нет ни в одном из известных языков...

Действительно удобная штука. Как его ещё не стянули в другие языки...

Не все так просто - WITH тесно завязан на рантайм и теги типов. Теговый рантайм Оберонов изначально продумывался для того, чтобы обеспечить максимально эффективный IS/WITH, который выполнялся бы за одно сравнение (для этого тег каждого типа знает свой уровень в иерархии и непосредственно индексирует тег предков).
Т.е. даже в критичном по быстродействию коде можно писать типизированные селекторы WITH, а не пытаться экономить на не-ОО варианте с явным полем типа и CASE - WITH будет выполняться практически так же, как и CASE.

Если вы в С++ напишете цепочку if с dynamic_cast, это будет шуровать гораздо медленней. Как и RTTI в Дельфи. Просто потому, в первом RTTI появился очень поздно и во многих реализациях не особо-то и развит до сих пор. А во втором ООП на динамических экземплярах, и никому и в голову не придет использовать объекты для передачи сообщений, да еще и разбор типа через RTTI... Т.е. не ввели WITH просто потому, что не готовы к его использованию.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 09 Июнь, 2007 15:32 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Илья Ермаков писал(а):
Сергей, и все же нельзя считать динамическую загрузку собственным качеством самого модуля.

Модуль Stores на Delphi не напишешь.

(* Я на Delphi хоть и писал его аналог, но он, разумеется, умел загружать только объекты известные на момент компиляции программы. Они в секции инициализации своих юнитов регистрировали свои конструкторы в юните Stores. *)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 09 Июнь, 2007 16:01 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Сергей, но ведь Stores, вообще говоря, завязан не на динамическую модульность, а на метапрограммирование... Ему безотносительно, где находится тип, экземпляр которого он считывает - в отдельно лежащем модуле, подгруженном динамически, или в статически прилинкованном модуле - главное, чтобы модуль в том или ином виде присутствовал в системе.
Поэтому стоит разделять разные понятия - модульность, компонентность, метапрограммирование... Они связаны друг с другом - и очень плотно, но модульность можно выделить из этой тройки и рассмотреть отдельно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 09 Июнь, 2007 16:31 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Есть огромная разница между тем запускается ли на выполнение код инициализации всех модулей при старте программы либо только тогда когда к этому модулю кто-то обратился в первый раз. Архитектура таких систем принципиально разная.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Суббота, 09 Июнь, 2007 16:49 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Да, есть разница между системой, "готовой к динамической компонентности", и обычной системой - это да. Но будет ли в конкретной реализации она запускаться дин-компонентно или нет - частность.
Но говорить о том, что модуль - только то, что динамически загружается - это неверно. Правильно сделанный модуль "готов загружаться динамически" - вот это будет верно. Но будет или нет - об этом он сам еще может не знать...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вторник, 12 Июнь, 2007 17:05 

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
PGR писал(а):
Илья Ермаков писал(а):
Ну, а где тогда взять аналог WITH, его вообще нет ни в одном из известных языков...

Действительно удобная штука. Как его ещё не стянули в другие языки...

Есть что-то похожее:
Код:
namespace Test.With
  using System.Console

  class A
    public this() { a = 5 }
    public mutable a: int

  class B: A
    public this() { b = 3.14 }
    public mutable b: double
 
  class C: B
    public this() { c = "ccc" }
    public mutable c: string
 
  module Test
    MatchTest(a: A): void
      match (a)
        | x is C => WriteLine(x.c)
        | x is B => WriteLine(x.b)
        | x is A => WriteLine(x.a)
        | _ => ()
 
    Main(): void
      def a = B()
      MatchTest(a)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 13 Июнь, 2007 10:30 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Илья Ермаков писал(а):
Но будет или нет - об этом он сам еще может не знать...

Ну разумеется нет! Разработчик модуля всегда точно знает должен ли его модуль быть обязательно загружен при старте системы (Host*) или его модуль можно загрузить в любое время потом, и разработчик модуля уж точно знает можно ли его модуль выгружать и заменять "на лету".

Я продолжаю настаивать на динамическом смысле модулей.

Помню в какой-то книжке про домашних животных автор допытывался: в чём разница между кошкой и собакой? Он выдвигал всякие предположения (усы, лапы и хвост,...) и тотчас же разбивал их в пух и прах. В конце концов, стало ясно, что между кошкой и собакой вообще разницы не будет заметно если собака будет небольшого размера (породы похожей на кошачью, а кошка породы похожей на собачью) и подстрижены и покрашены они будут одинаково. Введя читателя в состояние полного недоумения, после этого, автор наконец-то объяснил в чём же на самом деле заключается разница между кошкой и собакой (и она вовсе не во внешних данных). Собака - догоняет свою добычу, а кошка - подстерегает.

Вот так же и с модулями. Вы ни за что не сможете найти различия между "модулем" и "не-модулем" если не привяжетесь к динамической загрузке/выгрузке просто потому, что все остальные задачи можно решить немодульными средствами.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 40 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


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

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB