OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Понедельник, 09 Декабрь, 2019 06:23

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




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

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1445
Алексей Елин писал(а):
типы тоже могут быть одинаковыми - генерик тип FixedLengthArray.
Нет никакой причины запрещать для нескольких экземпляров генерик типа, даже с разными параметрами, ссылаться на один и тот же тип (дескриптор типа).

ЭТО - РАЗНЫЕ ТИПЫ ПО РЕАЛИЗАЦИИ УТОЧНЁННОГО ГЕНЕРИКА!
Не могут они ссылаться на один и тот же дескриптор типа!
Мы получили два новых типа-"наследника" генерика, параметризировав общий генерик. Экземпляры объектов этих типолв будут имет разные тэги.


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

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9162
Откуда: Россия, Орёл
Wlad писал(а):
Trurl писал(а):
Wlad писал(а):
Зачем? В виртуальные методы вы только указатель на объект передаёте...

В C++ только указатель, а в Обероне ещё и дескриптор типа.

Кажецо я что-то упустил или запамятовал? Разве в метод (виртуальный) первым невидимым параметром не достаточно передать указатель на экземпляр объекта? Насколько я знаю, тэг извлекается именно из места, рядом с расположением структуры виртуальной таблицы данного класса... Я не прав, что-то поменялось или я что-то напутал? Или тег - это и есть указатель на область памяти с vtbl + ещё мишура чуть ниже прямо перед vtbl.

Вы правы!
В метод с динамическим параметром (POINTER TO...) передается только указатель. Тег извлекается по (адрес объекта - 4 байт).
А вот если метод со ссылочным параметром (VAR/IN/OUT), тогда рядом с ним скрытно через стек идет тег типа...


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

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


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

Зарегистрирован: Суббота, 28 Январь, 2006 00:10
Сообщения: 52
Откуда: г. Киров
Илья Ермаков писал(а):
Как это так, прошу прощения, нет причины запрещать?
Я работаю через метапрограммирование и получаю смещение для поля X какого-то интанциированного типа-дженерика. И в зависимости от конкретного типа, в который инстанцировался дженерик, я должен буду получить разные смещения.


Нет. Смещения будут одинаковыми. Просто по смещению можно ВСЕГДА расспологать указатель на экземпляр (даже в случае, если тип типа-аргумента - record). Компилятор может "представлять" его как обычное поле, но фактически это будет указатель. Память под него можно выделять, например, одновременно с выделением памяти под экземпляр (инстанцированного) конейнера, в одном блоке, сразу после него. Это позволит избежать дополнительных временнЫх рассходов на выделение памяти для "фиктивных" полей.


Последний раз редактировалось Алексей Елин Среда, 06 Июнь, 2007 23:02, всего редактировалось 1 раз.

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

Зарегистрирован: Суббота, 28 Январь, 2006 00:10
Сообщения: 52
Откуда: г. Киров
Wlad писал(а):
ЭТО - РАЗНЫЕ ТИПЫ ПО РЕАЛИЗАЦИИ УТОЧНЁННОГО ГЕНЕРИКА!


По этому поводу могу сослаться на: http://rsdn.ru/article/java/genericsinjava.xml где описаны особенности реализации generic в java.

И обратите внимание на раздел "Одна реализация на все случаи".

Конечно, в java все типы ссылочные, однако это "обходится" (маскируется?) предложенными ранее приемами...


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

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


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

Зарегистрирован: Суббота, 28 Январь, 2006 00:10
Сообщения: 52
Откуда: г. Киров
Илья Ермаков писал(а):
А если все-таки говорить о полноценных дженериках?


И что же такое полноценные дженерики, стесняюсь спросить?
Чем они отличаются от "неполноценных", кроме мизерных накладных расходов на неявное разыменование указателей для статических полей-рекордов?


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

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9162
Откуда: Россия, Орёл
Ага, если бы vector<int> в STL тоже делался с "всего-то одним лишним уровнем косвенности", то его популярность бы сильно поубавилась...
Дело в том, что для динамических объектов дженерики как раз не сильно нужны - там можно себе позволить задействовать ОО-полиморфизм и т.п. Хочется дженериков для построения библиотеки базовых алгоритмов, работающих с любыми типами, начиная с атомарных - и без оверхеда. С оверхедом я вам и без дженериков напишу общий алгоритм - через метапрограммирование можно работать как угодно и с чем угодно...

ОТ МОДЕРАТОРА:
"излияние мыслей" по поводу стандартной библиотеки перенесено в отдельную ветку BlackBox Framework - Повторно используемые структуры данных-алгоритмы"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Mini Component Pascal
СообщениеДобавлено: Среда, 14 Июль, 2010 22:35 
Аватара пользователя

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
Модератор: прикреплено к существующей теме. Геннадию Тышову спасибо за указание.

Кто-нибудь разбирался с четырьмя экспериментальными языками под общим названием Mini Component Pascal?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mini Component Pascal
СообщениеДобавлено: Четверг, 15 Июль, 2010 07:15 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Полистал описание FMCP (Functional Mini Component Pascal) -- понять не могу, при чём здесь слово Functional? Описывается субтипизация там всякая, пример чисто ООП-ный.
Странно всё это...
Код:
MODULE FMCPTest;

TYPE
  Elem = EXTENSIBLE RECORD (ANYREC)
    x: INTEGER;
  END;

  ExtElem = RECORD (Elem)
    y: BOOLEAN;
  END;

  Pair = EXTENSIBLE RECORD (ANYREC)
    fst: Elem;
    snd: Elem;
  END;

PROCEDURE (IN this: Pair) SetFst (e: Elem): Pair, NEW, EXTENSIBLE;
BEGIN RETURN NEW Pair (fst = e, snd = this.snd) END SetFst;

BEGIN
  util.WriteInt(NEW Pair(fst = NEW Elem(x = 1), snd = NEW Elem(x =
  2)).SetFst(NEW ExtElem(y = TRUE, x = 1)).fst.x)
END FMCPTest.
Ну вот где тут ФП?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mini Component Pascal
СообщениеДобавлено: Четверг, 15 Июль, 2010 12:56 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mini Component Pascal
СообщениеДобавлено: Четверг, 15 Июль, 2010 13:32 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Да в этом примерчике-то мне всё понятно, кроме одного -- причём тут ФП?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mini Component Pascal
СообщениеДобавлено: Четверг, 15 Июль, 2010 14:19 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3124
Откуда: Астрахань
Может быть вот это?
Цитата:
Therefore in FMCP we add a "NEW R(...)" expression in order to ensure that the language is purely functional.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mini Component Pascal
СообщениеДобавлено: Четверг, 15 Июль, 2010 16:23 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 557
Обсуждение этой темы уже проводилось.

Смотрите http://forum.oberoncore.ru/viewtopic.php?p=5331#p5331


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mini Component Pascal
СообщениеДобавлено: Четверг, 15 Июль, 2010 16:43 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1209
Geniepro писал(а):
Да в этом примерчике-то мне всё понятно, кроме одного -- причём тут ФП?


Присваиваний нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mini Component Pascal
СообщениеДобавлено: Пятница, 16 Июль, 2010 07:29 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Trurl писал(а):
Geniepro писал(а):
Да в этом примерчике-то мне всё понятно, кроме одного -- причём тут ФП?


Присваиваний нет.
Вы же прекрасно знаете, что ФП заключается не в отсутствии присваиваний. Конкретно этот пример можно реализовать наверное на любом распространённом (стандартном) ООП-языке.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mini Component Pascal
СообщениеДобавлено: Пятница, 16 Июль, 2010 07:53 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Код:
using System;
using System.Collections.Generic;
using System.Text;

namespace FCMPTest
{
    class Program
    {
        class Elem
        {
            public int x;

            public Elem(int x) { this.x = x; }
        }

        class ExtElem : Elem
        {
            public bool y;

            public ExtElem(int x, bool y) : base(x) { this.y = y; }
        }

        class Pair
        {
            public Elem fst;
            public Elem snd;

            public Pair(Elem fst, Elem snd) { this.fst = fst; this.snd = snd; }

            public Pair SetFst(Elem e) { return new Pair(e, this.snd); }
        }

        static void Main(string[] args)
        {
            System.Console.Write(new Pair(new Elem(1), new Elem(2)).SetFst(new ExtElem(1, true)).fst.x);
        }
    }
}
И что, от того что в SetFst используется создание нового объекта Pair вместо модификации -- это считается характерной для ФП фишкой?
А как же функции как граждане первого сорта?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mini Component Pascal
СообщениеДобавлено: Пятница, 16 Июль, 2010 11:36 

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

Разве "первый сорт" - это отличительная черта всех функциональных языков?

А вот наличие Set<чего-то-там> говорит об одной из двух вещей: либо автор не умеет давать адекватные имена абстракциям программы, либо язык не очень-то функциональный, и всё делать своими ручками приходится.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mini Component Pascal
СообщениеДобавлено: Пятница, 16 Июль, 2010 11:42 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Geniepro писал(а):
Вы же прекрасно знаете, что ФП заключается не в отсутствии присваиваний. Конкретно этот пример можно реализовать наверное на любом распространённом (стандартном) ООП-языке.
Но этого вполне может не знать человек, который каким-то образом узнал, как менять синтаксис языка и где-то видел программу на Лиспе.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Mini Component Pascal
СообщениеДобавлено: Пятница, 16 Июль, 2010 12:23 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Valery Solovey писал(а):
Разве "первый сорт" - это отличительная черта всех функциональных языков?
А разве есть функциональные языки, в которых функции не были бы главными сущностями?


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

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


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

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


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

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