OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 19 Июнь, 2025 00:58

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




Начать новую тему Ответить на тему  [ Сообщений: 86 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Re: Исходники Singularity
СообщениеДобавлено: Понедельник, 10 Март, 2008 18:23 
Аватара пользователя

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

Воот. Я ждал, когда всплывёт вопрос контрактов. Только вот мух с котлетами и правда мешать не надо :-)
Наличие/отсутствие контракта и тип связывания совершенно независимые вещи. Контракт тоже может проверяться статически/динамически (не при каждом вызове, а в момент установления связи, например). В Zonnon, например, полная поддержка контрактов на сообщения, но допустимо как статическое, так и динамическое связывание (и проверка контракта). Решением же с методами просто поставили жирную точку на возможности хоть как-то маневрировать с типом связывания. Впрочем, это непонимание компонентности до конца у них постоянно прослеживется. В .NET было что-то не продумано с выгрузкой и динамической заменой сборок. Тянутся в верном направлении, но всё равно мыслят частично привычными категориями :-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Исходники Singularity
СообщениеДобавлено: Понедельник, 10 Март, 2008 18:27 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
AVC писал(а):
Vlad писал(а):
Это вообще из другой оперы. Использование целочисленного идентификатора позволяет расширять систему на любом языке, а не только на обероне.
Обероновский способ type-safe (естественным образом, без каких-либо дополнительных ухищрений и наворотов).


Я просто пояснил, что "убогие целочисленные идентификаторы", помимо задачи расширения системы, обеспечивают конкретные свойства недоступные оберонам. Пусть и не самым естественным способом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Исходники Singularity
СообщениеДобавлено: Понедельник, 10 Март, 2008 18:58 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Гм... Что-то я вот тоже не понимаю крутизны WITH. Т.е. я не вижу в нем ничего нового. В том же C++ имеет место быть typeid() который возвращает объект класса type_info . У класса имеется operator==. Ну, собственно и всё. Можем спокойно писать:

if (typeid(MyClass1) == typeid(msg) {
// to do something
} else if (typeid(MyClass2) == typeid(msg) ) {
// to do something else
}
else {
// unknown message type
}

Это не кейс конечно, но какая разница?

Можно указатели на функции положить в map и спокойно вызывать:
messageMap[typeid(msg)]();

if (messageMap.find(typeid(msg)) == messageMap.end()) {
// unknown message type
} else {
messageMap[typeid(msg))](msg); // вызов нужной функции.
}

Естественно это может быть и не map, и туда не обязательно класть именно что указатели на функции. Там могут быть указатели на объекты, или даже пары -- <объект,указатель на функцию этого объекта>.

Вылепить можно всё что угодно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Исходники Singularity
СообщениеДобавлено: Понедельник, 10 Март, 2008 19:21 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Alexey Veselovsky писал(а):
Гм... Что-то я вот тоже не понимаю крутизны WITH. Т.е. я не вижу в нем ничего нового. В том же C++ имеет место быть typeid() который возвращает объект класса type_info .


Проверка по typeid не учитывает наследования. Остается dynamic_cast или велосипеды.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Исходники Singularity
СообщениеДобавлено: Понедельник, 10 Март, 2008 19:26 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Vlad писал(а):
Alexey Veselovsky писал(а):
Гм... Что-то я вот тоже не понимаю крутизны WITH. Т.е. я не вижу в нем ничего нового. В том же C++ имеет место быть typeid() который возвращает объект класса type_info .


Проверка по typeid не учитывает наследования. Остается dynamic_cast или велосипеды.


Гм. Тоесть, имеется ввиду что если пришло сообщения типа B унаследованнного от A, то typeid это никак нам не подскажет? ОК. А что если мы хотим иметь дело ТОЛЬКО с типом B и никак не с типом A? WITH это может?


Последний раз редактировалось Alexey Veselovsky Понедельник, 10 Март, 2008 19:30, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Исходники Singularity
СообщениеДобавлено: Понедельник, 10 Март, 2008 19:29 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Alexey Veselovsky писал(а):
Гм... Что-то я вот тоже не понимаю крутизны WITH. Т.е. я не вижу в нем ничего нового. В том же C++ имеет место быть typeid() который возвращает объект класса type_info . У класса имеется operator==. Ну, собственно и всё. Можем спокойно писать:

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

Кроме того, есть ещё вопрос эффективности. В реализациях Оберона работа с описателями типов специально организована так, чтобы WITH не стоил лишнего по сравнению с CASE (два разыменования, два сдвига по смещению, одно сравнение). Т.е. становится выгодно типизировать вариативные данные не идентификаторами (например, перечислений), а непосредственно языковым типом.

С++ неокмпонентный язык, тут особо сравнивать и смысла нет.
А про C#, помнится, был какой-то пример в статье на RSDN, когда манипуляция с динамическим типом объекта (не помню, какая) сжирала около 300 операций. Опять тот же синдром - нет у разработчиков чутья, что и как может быть использовано, вроде и сделали компонентность, а то одно не так, то другое... Потому что окромя С++ ничего не видели, а в качестве образца новизны Яву перед глазами имели.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Исходники Singularity
СообщениеДобавлено: Понедельник, 10 Март, 2008 19:33 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Alexey Veselovsky писал(а):
Гм. Тоесть? Можно примерчик?

То есть, если Вы напишете typeid(x) == typeid(ClassA), то это сравнение будет верным только в том случае, если x имеет точный тип ClassA, и неверным - если тип ClassAA, наследованный от ClassA.

Т.е. остаётся только, как Влад заметил:
if ( dynamic_cast<ClassA>(x) != NULL ) {
dynamic_cast<ClassA>(x)....
}
else if...

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Исходники Singularity
СообщениеДобавлено: Понедельник, 10 Март, 2008 19:40 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Илья Ермаков писал(а):
Alexey Veselovsky писал(а):
Гм... Что-то я вот тоже не понимаю крутизны WITH. Т.е. я не вижу в нем ничего нового. В том же C++ имеет место быть typeid() который возвращает объект класса type_info . У класса имеется operator==. Ну, собственно и всё. Можем спокойно писать:

С++ неокмпонентный язык, тут особо сравнивать и смысла нет.


Гм... А разве передача сообщений используется только в чем-то сильно компонентном? Любая программа реальных размеров (>100 тыс. строк) имеет внутри более-менее блочно-модульно-компонентную структуру. Эти блоки должны быть расширябельны и слабо связаны друг с другом. Обычно пишут программу сразу несколько человек. Причем зачастую слабо взаимодействующих. Т.о. это всё слабо отличается от того же BB. Ты написал нечто, и ты не знаешь как это нечто будет использовать другой программист. Как изменятся протоколы и т.д. и т.п.

Особенно это касается монстров аля Мозиллы -- около 2-х миллионов строк кода и больше сотни активных разработчиков.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Исходники Singularity
СообщениеДобавлено: Понедельник, 10 Март, 2008 19:46 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Илья Ермаков писал(а):
Alexey Veselovsky писал(а):
Гм. Тоесть? Можно примерчик?

То есть, если Вы напишите typeid(x) == typeid(ClassA), то это сравнение будет верным только в том случае, если x имеет точный тип ClassA, и неверным - если тип ClassAA, наследованный от ClassA.

Т.е. остаётся только, как Влад заметил:
if ( dynamic_cast<ClassA>(x) != NULL ) {
dynamic_cast<ClassA>(x)....
}
else if...

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


Гм. Насколько я понимаю, механизм динамического определения типов активно используется при обработке исключений (там как раз можно определить потомок это или нет), поэтому с эффективностью там должно быть всё более-менее хорошо.

Да, кроме того, потомок (в С++) может разительно отличаться от предка (в т.ч. и относительно доступности методов и полей). Поэтому я не уверен что если мы хотим класс А, то мы обязательно хотим ещё и классы АА, АБ, и АаА (где а -- другой, второй предок класса АаА).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Исходники Singularity
СообщениеДобавлено: Понедельник, 10 Март, 2008 21:04 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Alexey Veselovsky писал(а):
ОК. А что если мы хотим иметь дело ТОЛЬКО с типом B и никак не с типом A?


Это очень странное желание в мире ООП.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Исходники Singularity
СообщениеДобавлено: Понедельник, 10 Март, 2008 21:06 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Alexey Veselovsky писал(а):
Да, кроме того, потомок (в С++) может разительно отличаться от предка (в т.ч. и относительно доступности методов и полей).


Он может отличаться как угодно, но обязан поддерживать семантику базового класса (или не должен от него наследоваться).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Исходники Singularity
СообщениеДобавлено: Понедельник, 10 Март, 2008 21:12 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
Решением же с методами просто поставили жирную точку на возможности хоть как-то маневрировать с типом связывания.


Можно показать на конкретном примере эту самую жирную точку? Где связь с типом не дает расширяться системе?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Исходники Singularity
СообщениеДобавлено: Понедельник, 10 Март, 2008 21:16 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Alexey Veselovsky писал(а):
механизм динамического определения типов активно используется при обработке исключений (там как раз можно определить потомок это или нет), поэтому с эффективностью там должно быть всё более-менее хорошо.

Ключевые слова: должно быть и более-менее как раз и определяют самую суть проблемы... :о)))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Исходники Singularity
СообщениеДобавлено: Понедельник, 10 Март, 2008 21:19 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
А вообще-то в ветке интереснейшая дискуссия: прямо сердце радуется - хоть "картину маслом" пиши: эдакое наглядное иллюстрирование прохождение плуга мейнстрима по извилинам... :о)))
Что-то принимается хорошим не по размышлению, а по "имеющимуся в наличии"...
Замечательно! Просто сердце радуется!...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Исходники Singularity
СообщениеДобавлено: Понедельник, 10 Март, 2008 21:27 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Думаю, множественное наследование ставит крест на эффективности. Это, естественно, при сравнении с аналогичными возможностями в других языках, а не по сравнению с другими операциями на данном языке.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Исходники Singularity
СообщениеДобавлено: Понедельник, 10 Март, 2008 21:32 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Valery Solovey писал(а):
Думаю, множественное наследование ставит крест на эффективности. Это, естественно, при сравнении с аналогичными возможностями в других языках, а не по сравнению с другими операциями на данном языке.

При чём тут множественное наследование?
Вернее так: как на эффективности, расширяемой а-ля Оберон системы, отражается существование в природе множественного наследования?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Исходники Singularity
СообщениеДобавлено: Понедельник, 10 Март, 2008 21:39 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Илья Ермаков писал(а):
Можно много чего. Вопрос в том, является ли это настолько удобным, что разработчики будут постоянно это использовать. Оберон это не просто позволяет, он это пропагандирует, при этом даже не в архитектурных, а в алгоритмических задачах, в которых передача расширяемых сообщений резко повышает понятность и выразительность, расслаивает логику по уровням. Например, при написании транслятора и работе с синт. деревом.
Можно, конечно, сказать, что обероновский WITH является синтаксическим сахаром (которого так не любят оберонщики) для конструкции выбора с кучей тайп-тестов, но по сути, этот WITH является упрощённым вариантом давно известного в функциональных языках паттерн-матчинга алгебраических типов данных...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Исходники Singularity
СообщениеДобавлено: Понедельник, 10 Март, 2008 22:02 
Аватара пользователя

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

Правильно. Именно это я имел в виду, когда говорил об алгоритмической его значимости.
Простой, как лепесин, механизм - а даёт качественный скачок в организации алгоритмов в ряде случаев.
Один из многочисленных ценных экстрактов современного программирования, имеющихся в Обероне. Только экстракт, без наворотов. И ещё раз помяните фразу "замкнутая система типов". Замкнутая не только технически, но и теоретически.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Исходники Singularity
СообщениеДобавлено: Понедельник, 10 Март, 2008 22:08 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Исходники Singularity
СообщениеДобавлено: Понедельник, 10 Март, 2008 22:30 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Насчет производительности WITH vs dynamic_cast и проч. -- думаю тут гадать бессмысленно. Надо просто написать тест да посмотреть что да как. Думаю для многих языков будет достаточно большой разброс в зависимости от реализации.


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

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


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

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


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

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