OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 14 Август, 2025 19:31

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




Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Совместимость типов
СообщениеДобавлено: Четверг, 19 Ноябрь, 2009 23:17 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Совместимость типов
СообщениеДобавлено: Пятница, 20 Ноябрь, 2009 08:53 

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

Можно ссылку? А то в хакадже есть библиотека для работы с физическими размерностями, кому надо -- пользуются...
http://hackage.haskell.org/package/Measure например...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Совместимость типов
СообщениеДобавлено: Пятница, 20 Ноябрь, 2009 09:04 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1440
Это не размерности, а единицы измерения.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Совместимость типов
СообщениеДобавлено: Пятница, 20 Ноябрь, 2009 09:07 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Илья Ермаков писал(а):
Про необходимость глобального анализа для Хинди-Милнера читал у Шиперского в дисере.
Сам в детали автовывода не вникал; но примерно представляю.
Так вот: тип объекта явно не описан. Он конструируется исходя из способа использования объекта. А если объект используется за пределами модуля А, то мне, чтобы скомпилировать А (сопоставить тип объекту), нужно знать все случаи использования А. И перекомпилировать, если возникает новый случай.

Вот поэтому и не следует экспортировать объекты без указания их типов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Совместимость типов
СообщениеДобавлено: Пятница, 20 Ноябрь, 2009 12:01 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Илья Ермаков писал(а):
Так вот: тип объекта явно не описан. Он конструируется исходя из способа использования объекта. А если объект используется за пределами модуля А, то мне, чтобы скомпилировать А (сопоставить тип объекту), нужно знать все случаи использования А. И перекомпилировать, если возникает новый случай.
Так мы же, вроде, стараемся избегать неявностей. Все правила, приводящие к значению данного типа, должны быть частью описания данного типа. А создавать тип "исходя из способа использования объекта" - значит либо погоню за "эффективностью", когда не используемые в данные момент правила считаются лишними и не включаются в описание типа, либо у программиста отсутствует полное представление о типе.

А если объект вдруг был использован неправильно, то тип будет наделён лишней семантикой, что вообще является ошибкой, ради устранения которых и вводилась типизация. То есть, позволяя выводить тип исходя из способов использования объекта, мы добавляем себе геморроя по построению типа, но не избавляемся от ошибок, ради которых типы используются.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Совместимость типов
СообщениеДобавлено: Пятница, 20 Ноябрь, 2009 12:12 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Так это как будто я предлагаю.

Это ФПшники. Биют себя пяткой в грудь и вопят, что жизнь не мила без автовывода типов по Хинди-Милнеру. :)
И утверждают, что это ничего не стоит. И даже можно было бы, типа, в Обероне иметь.

Я и привёл пример хороший - что в случае с очень многими средствами народ забывает про раздельную компиляцию. Просто потому, что с привычкой к Build All даже не в курсе, что это и зачем.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Совместимость типов
СообщениеДобавлено: Пятница, 20 Ноябрь, 2009 12:16 

Зарегистрирован: Среда, 30 Сентябрь, 2009 14:45
Сообщения: 147
Geniepro писал(а):
Илья Ермаков писал(а):
тип объекта явно не описан. Он конструируется исходя из способа использования объекта. А если объект используется за пределами модуля А, то мне, чтобы скомпилировать А (сопоставить тип объекту), нужно знать все случаи использования А. И перекомпилировать, если возникает новый случай.

Вот поэтому и не следует экспортировать объекты без указания их типов.

Способ использования задается математической моделью соответствующей физической теории. Возьмем, например, теплофизику и формулу pV/T=const.

Использование переменных типа p, V, T вне контекста очевидно не будет содержать ошибки. Значит, экспортирование размерных переменных не может производиться без экспорта теории.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Совместимость типов
СообщениеДобавлено: Пятница, 20 Ноябрь, 2009 12:22 
Аватара пользователя

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

Только тащить в язык не стоит.

А вот сделать генерационную надстройку - если вдруг кому-то много-много надо чисто с таким работать...

Описания таких типов, правил - и формул в выражениях - сделать, например, как вьюшки в тексте. И пусть из них КП-код генерится.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Совместимость типов
СообщениеДобавлено: Пятница, 20 Ноябрь, 2009 13:52 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 151
Виктор О писал(а):
..экспортирование размерных переменных не может производиться без экспорта теории.

Таким образом, физическая теория соответствует программистскому понятию интерфейса. Соотношения типов должны быть доступны через интерфейс.
Ну, наплодите Вы кучу модулей, экспортирующих различные теории. Насколько я понял, у программиста есть <возможность> использовать их не иначе как комбинационным способом. Какова вероятность того, что результат комбинации будет иметь реальный физический смысл?
Другая крайность:
Есть ещё и эмпирические формулы. Может статься так, что экспортированная эмпирика вкупе с использованием модуля, экспортирующего теорию даст весьма неожиданный результат, найти физический смысл которого будет тоже очень трудно.

А по интерфейсам в этих случаях будет всё в порядке..


Последний раз редактировалось Рэйлвэй Каген Пятница, 20 Ноябрь, 2009 18:10, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Совместимость типов
СообщениеДобавлено: Пятница, 20 Ноябрь, 2009 14:37 

Зарегистрирован: Понедельник, 05 Июнь, 2006 09:49
Сообщения: 327
Откуда: Ленинград, Емельянов Алексей Николаевич
По моему, создать такой программисткий аппарат не менее затратно чем создать математический аппарат. Возможно имеет смысл если мат аппарата еще нет. А так лучше сосредоточиться на составлении грамотных ассертов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Совместимость типов
СообщениеДобавлено: Пятница, 20 Ноябрь, 2009 14:44 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Ну да. Чем RECORD и процедуры-операции - не решение...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Совместимость типов
СообщениеДобавлено: Пятница, 20 Ноябрь, 2009 15:43 

Зарегистрирован: Среда, 30 Сентябрь, 2009 14:45
Сообщения: 147
Рэйлвэй Каген писал(а):
Ну, наплодите Вы кучу модулей, экспортирующих различные теории. Насколько я понял, у программиста есть использовать их не иначе как комбинационным способом. Какова вероятность того, что результат комбинации будет иметь реальный физический смысл?

Зачем кучу модулей. Возьмем понятия механики, как пример достаточно общей теории.
Вы, таки, будете смеяться, но требуется всего 1 модуль и 3 базовых типа, например, длина, время и масса, а все прочие типы будут производные (говорят, достаточно двух базовых типов, но я не проверял).

Впрочем, я согласен с мнением, что вся эта требуха интереснее как задача, а не как кандидат в Оберон


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Совместимость типов
СообщениеДобавлено: Пятница, 20 Ноябрь, 2009 16:14 

Зарегистрирован: Среда, 30 Сентябрь, 2009 14:45
Сообщения: 147
Axcel писал(а):
По моему, создать такой программисткий аппарат не менее затратно чем создать математический аппарат.

Пример "аппарата"

MODULE Mechanics;

type Dlina- = REAL;
Vremja- = REAL;
Massa- = REAL;
Skorost- = REAL;
Uskorenie- = REAL;
(*pragma type Skorost- = Dlina / Vremja *)
(*pragma type Uskorenie- = Skorost / Vremja *)

const g- : Uskorenie = 9.8;

END Mechanics;

-------------------------------

MODULE Moja_Zadacha;
IMPORT Mechanics;

var h: Mechanics.Dlina;
t: Mechanics.Vremja;

In.Real(t);
h := Mechanics.g * t ^2 / 2;
Out.Real(h)

END Moja_Zadacha;

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Совместимость типов
СообщениеДобавлено: Пятница, 20 Ноябрь, 2009 16:45 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Виктор О писал(а):
выдираем из транслятора синтаксический анализ и прибабахиваем к нему вместо генератора кода проверщик...
По такому принципу сделан DevAnalyzer.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Совместимость типов
СообщениеДобавлено: Пятница, 20 Ноябрь, 2009 17:41 

Зарегистрирован: Понедельник, 05 Июнь, 2006 09:49
Сообщения: 327
Откуда: Ленинград, Емельянов Алексей Николаевич
А так не лучше? При том, что реализацию можно нагрузить конкретными особенностями и ограничениями

MODULE Mechanics;
TYPE
Values* = POINTER TO ABSTRACT RECORD END;

PROCEDURE (v: Values) SetSkorost* (a:REAL); NEW, ABSTRACT;
PROCEDURE (v: Values) SetUskorenie* (a:REAL); NEW, ABSTRACT;
PROCEDURE (v: Values) SetDlina* (a:REAL); NEW, ABSTRACT;
PROCEDURE (v: Values) SetMassa* (a:REAL); NEW, ABSTRACT;
PROCEDURE (v: Values) SetVremja* (a:REAL); NEW, ABSTRACT;

PROCEDURE (v: Values) GetSkorost* ():REAL; NEW, ABSTRACT;
PROCEDURE (v: Values) GetUskorenie* ():REAL; NEW, ABSTRACT;
PROCEDURE (v: Values) GetDlina* ():REAL; NEW, ABSTRACT;
PROCEDURE (v: Values) GetMassa* ():REAL; NEW, ABSTRACT;
PROCEDURE (v: Values) GetVremja* ():REAL; NEW, ABSTRACT;

END Mechanics;


Последний раз редактировалось Axcel Пятница, 20 Ноябрь, 2009 18:30, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Совместимость типов
СообщениеДобавлено: Пятница, 20 Ноябрь, 2009 17:49 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
Виктор О писал(а):
(говорят, достаточно двух базовых типов, но я не проверял)

Берите гауссову систему, и меряйте все в степенях Гэв-а.
В далеком и счастливом "детстве" - ПРОВЕРЯЛ лично, никаких проблем :lol:
Типа e^2 = p^2 + m^2 - и всего делов
Нет также сомнений, что если "объединичить" гравитационную постоянную, то вообще все будет безразмерными единицами.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Совместимость типов
СообщениеДобавлено: Пятница, 20 Ноябрь, 2009 18:02 

Зарегистрирован: Среда, 30 Сентябрь, 2009 14:45
Сообщения: 147
Galkov писал(а):
Берите гауссову систему, и меряйте все в степенях Гэв-а.
В далеком и счастливом "детстве" - ПРОВЕРЯЛ лично, никаких проблем :lol:
Типа e^2 = p^2 + m^2 - и всего делов
Нет также сомнений, что если "объединичить" гравитационную постоянную, то вообще все будет безразмерными единицами.

Уже достигнуто. Только меряют не в гэвах, а в реалах (REAL) и дублях (DOUBLE), см. паскали, сия, джавы и т.д.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Совместимость типов
СообщениеДобавлено: Пятница, 20 Ноябрь, 2009 18:04 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 151
Виктор О писал(а):
MODULE Moja_Zadacha;
IMPORT Mechanics;

var h: Mechanics.Dlina;
t: Mechanics.Vremja;

In.Real(t);
h := Mechanics.g * t ^2 / 2;
Out.Real(h)

END Moja_Zadacha;
Не, ну это несерьёзно, имхо..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Совместимость типов
СообщениеДобавлено: Суббота, 21 Ноябрь, 2009 10:36 
Аватара пользователя

Зарегистрирован: Среда, 29 Март, 2006 12:09
Сообщения: 495
Рэйлвэй Каген писал(а):
Не, ну это несерьёзно, имхо..
Все эти рассуждения очень напоминают ситуацию смешения парадигм.
Человек (топикстартер) столкнулся, видимо, с ФП, и оно ему понравилось.
А затем столкнулся с Обероном (чистой императивщиной, IMO), ну вот и понеслась.

Не надо путать теплое с мягким!
В ФП заложена огромная сила (с выводом типов, каррированными функциями и пр.).
В Обероне заложена огромная сила (со строгой типизацией, чистой модульностью и пр.).

И в той, и в другой области есть свои проблемы, которые, кстати, нередко успешно решаются.

Но если средства одной области бездумно (т.е. без особой надобности) тащить в другую, получится плохо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Совместимость типов
СообщениеДобавлено: Суббота, 21 Ноябрь, 2009 10:45 

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


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

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


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

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


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

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