OberonCore
https://forum.oberoncore.ru/

Аналог шаблонов С++ в Компонентном Паскале.
https://forum.oberoncore.ru/viewtopic.php?f=81&t=2153
Страница 1 из 2

Автор:  Андрей@ [ Пятница, 04 Декабрь, 2009 00:38 ]
Заголовок сообщения:  Аналог шаблонов С++ в Компонентном Паскале.

Утро доброе, уважаемые форумчане!

Вот, в поисках чего-нибудь отличного от общепринятых языков и стандартов встретился с Компонентным Паскалем. Тут же почувствовал ностальгию по красоте кода на Паскале в 1 семестре... И тут же стукнули тяжелые мысли о страшном расположении скобок в С++, позже выработалось паскалеподобное написание, но появилось оно слишком поздно (а курсовая уже по большей части написана).

На каникулы есть пара заданий... Хотелось бы для общего развития попробовать написать их на компонентном Паскале.
Но тут встают вопросы:

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

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


И ещё вопрос. Часто в прикладных программах нужны таблицы. Наличие их в библиотеке Qt для С++ весьма приятно....
Как с этим обстоят дела в BlackBox? (можно ли, например, вручную заполнять таблицы, используемые для работы с базами данных , безо всякой привязки к конкретным СУБД - то есть "выдёргивать " таблицы из всего контекста их стандартного использования?).


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

Заранее спасибо)

Автор:  Евгений Темиргалеев [ Пятница, 04 Декабрь, 2009 03:21 ]
Заголовок сообщения:  Re: Аналог шаблонов С++ в Компонентном Паскале.

Аналога шаблонов нет.
Андрей@ писал(а):
Каким же образом реализовать такой универсальный список?
Языковыми средствами никак. Можно к среде прикрутить аналогичный механизм, но пока за 15 лет никто не прикрутил, значит... В КП стандартный подход такой: на базе мощного средства - сборки мусора - пропадает необходимость в повторяющемся коде управления памятью (напр. деструктор, освобождающий все элементы списка) - и списки делаются под задачу руками. Опять же - задачи решаются, проблем ни у кого от отсутствия способа сделать универсальный список не возникает... Разве что проблемы самообразования касательно основных алгоритмов и структур данных (разве их не должен знать любой, уважающий себя, программист?) Это я про свой опыт; как появится время, буду штудировать viewtopic.php?f=75&t=1970

Андрей@ писал(а):
(можно ли, например, вручную заполнять таблицы, используемые для работы с базами данных , безо всякой привязки к конкретным СУБД - то есть "выдёргивать " таблицы из всего контекста их стандартного использования?)
Работа с СУБД - см подсистему Sql (Dev-Man прежде всего и примеры). Про какие Вы таблицы - не понял. Пример приведите что ли... Таблицы как элементы интерфейса? - иделогия ББ - интерфейс непосредственно с обработкой данных (любых) не связан.

P.S. Тема - кандидат в ОДП. Товарищи, без фанатизма.

Автор:  Info21 [ Пятница, 04 Декабрь, 2009 06:46 ]
Заголовок сообщения:  Re: Аналог шаблонов С++ в Компонентном Паскале.

Всё же, думаю, надо разделять:
упорное возобновление вопроса одними и теми же зашоренными фанатами -- и повторное поднятие вопроса новичком.

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

Может, завести раздел типа "Стандартные вопросы новичков из партизанских краев".
Мы уже знаем эти стандартные вопросы, по мере возникновения можно соотв. веточку заводить, называя не слишком специфично. В данном случае, может быть, Про шаблоны.

Заодно человек будет видеть, что он не Америку открывает, а просто некий стандартный пунктик, который надо обдумать на предмет смены ментальных привычек.

----------------------
Кстати, в данном случае список с сортировкой можно сделать из записей ABSTRACT, ну и доопределять их, когда надо пользовать.

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

Автор:  Илья Ермаков [ Пятница, 04 Декабрь, 2009 09:09 ]
Заголовок сообщения:  Re: Аналог шаблонов С++ в Компонентном Паскале.

Кстати, компонентов для таких обобщённых списков наделано уже много.
У Ивана Кузьмицкого что-то было, в коллекции Зинна - http://zinnamturm.eu.

Касательно их использования - Info21, в общем, отметил, что проще руками всё; в моём опыте - тоже, но я допускаю поправку на то, что у меня задачи такие - либо системные, либо прикадные нестандартные - типа графовых и т.п.; а человеку, решающему типовую прикладуху, могут такие библиотечки быть полезны.

И ещё: тут надо понять, не имеет ли Андрей под списками в виду массивы, т.е. индексируемую структуру, а?

Автор:  Иван Кузьмицкий [ Пятница, 04 Декабрь, 2009 09:32 ]
Заголовок сообщения:  Re: Аналог шаблонов С++ в Компонентном Паскале.

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

Автор:  Peter Almazov [ Пятница, 04 Декабрь, 2009 09:47 ]
Заголовок сообщения:  Re: Аналог шаблонов С++ в Компонентном Паскале.

Илья Ермаков писал(а):
У Ивана Кузьмицкого что-то было, в коллекции Зинна - http://zinnamturm.de
Илья, не надо так шутить - я кликнул на ссылку и увидел, что страницы больше не существует. Правильная ссылка http://www.zinnamturm.eu . Если и она загнется, то наступит окончательная и бесповоротная ж@%а.

Автор:  Илья Ермаков [ Пятница, 04 Декабрь, 2009 10:34 ]
Заголовок сообщения:  Re: Аналог шаблонов С++ в Компонентном Паскале.

Да, ошибся.

P.S. Для гуёвых приложений там, конечно, много всякостей; а так... у меня вот ни одного компонента оттуда нигде не применяется. Это не к критике хорошей коллекции, а к вопросу о ж. (часто последнее время поминается она на форуме :) ).

Автор:  Сергей Губанов [ Пятница, 04 Декабрь, 2009 11:15 ]
Заголовок сообщения:  Re: Аналог шаблонов С++ в Компонентном Паскале.

Андрей@ писал(а):
Каким же образом реализовать такой универсальный список?
Такой универсальный список (царь-машина) только преподавателям и студентам нужен. На реальной программерско-инженерной работе списки конкретные и пишутся по месту требования со своей спецификой.

Автор:  Info21 [ Пятница, 04 Декабрь, 2009 12:42 ]
Заголовок сообщения:  Re: Аналог шаблонов С++ в Компонентном Паскале.

Peter Almazov писал(а):
Правильная ссылка http://www.zinnamturm.eu . Если и она загнется...
Что за черный пиар опять.
Никто не загибался, просто адрес поменялся на общеевропейский.
Прогресс можно сказать.

Этот архив не загнется. В том смысле, что Zinn обязательно передаст кому-то ресурс, если сам не сможет продолжать. Там самопиара не было и нет.

Автор:  Андрей@ [ Пятница, 04 Декабрь, 2009 14:33 ]
Заголовок сообщения:  Re: Аналог шаблонов С++ в Компонентном Паскале.

to Евгений Темиргалеев

Имею ввиду таблицы как элементы интерфейса.
Извиняюсь, что снова поднял битый вопрос... Искать не умею получается)


to Илья Ермаков

Нет))) имелся ввиду стандартный двусвязный список безо всякого уподобления массивам.
Интересно получается.... Мне даже не надо заботиться об удалении списка - то есть о пробежке по всем его узлам и вызове деструктора для каждого из них....

Что касается шаблонов.... Если поразмыслить, то в общем то всё для их использования уже есть. Называется найти и заменить))). Например все вхождения буковки T на нужный тип. И оформить это в отдельный модуль...

PROCEDURE compare(a:T,b:T):integer

Автор:  Евгений Темиргалеев [ Пятница, 04 Декабрь, 2009 14:59 ]
Заголовок сообщения:  Re: Аналог шаблонов С++ в Компонентном Паскале.

Андрей@ писал(а):
Имею ввиду таблицы как элементы интерфейса.
С этими таблицами не густо. См. SqlControls, viewtopic.php?f=47&t=653. Можно формировать "таблицу" табуляциями (см. модуль-пример ObxPDBRep2 - разъясняется во встроенном учебнике, "5.1 Запись текстов")

Поднимите отдельную тему с описанием задачи где нужны таблицы - тогда Вам смогут более точно подсказать.

Автор:  Илья Ермаков [ Пятница, 04 Декабрь, 2009 15:03 ]
Заголовок сообщения:  Re: Аналог шаблонов С++ в Компонентном Паскале.

Таблицы, например: viewtopic.php?f=47&t=653

По поводу "подстановка..." - эээ, шаблоны - это не подстановка. А кто типы будет проверять, извините, и т.п.?

Самое главное - шаблоны не совместимы (без очень больших сложностей, вроде отказа от прямой генерации машинного кода) с раздельной компиляцией и динамической загрузкой модулей.

Автор:  Андрей@ [ Четверг, 10 Декабрь, 2009 21:44 ]
Заголовок сообщения:  Re: Аналог шаблонов С++ в Компонентном Паскале.

Илья Ермаков
Цитата:
По поводу "подстановка..." - эээ, шаблоны - это не подстановка. А кто типы будет проверять, извините, и т.п.?


Не очень понял. Мне понимается так:
Например есть класс:
Код:
template <class T> class listNode
{listNode* next,prev;
T data;}


где нибудь мы вызвали его так listNode<int> и сделалось вот что: в вышеприведённом коде все буковки T заменились на int, ну и вхождения listNode заменились на INTlistNode,
то есть получилось:
Код:
class INTlistNode
{INTlistNode* next,prev;
int data;}


Зачем добавилось INT? Просто потому, что в коде мы можем попросить создать класс listNode<char>, а если бы мы не изменили имя класса, то получилось бы, что мы дважды определяем его.

А уж после этого компилятор начинает просматривать код и проверять на корректность "раскрытия" шаблонов.
Или это делается как то совсем по-другому?
__________________________________________________________________________________
А что касается таблиц, то мне они нужны для стандартной задачи - реализовать машину Тьюринга.

И кажется, нашёл то, что надо: Controls->Insert Table Control.
Судя по событиям, на которые реагирует, полноценная таблица.

Автор:  Илья Ермаков [ Четверг, 10 Декабрь, 2009 22:24 ]
Заголовок сообщения:  Re: Аналог шаблонов С++ в Компонентном Паскале.

Не совсем так просто.
Шаблоны - это не препроцессор, а весьма плотно-привязанная часть компилятора.

(Поищите статью Зуева "История одного компилятора", про компилятор С++, которые они делали для голландцев; ныне потомок - компилятор ЗАО "Интерстрон").

Автор:  igor [ Понедельник, 14 Декабрь, 2009 11:15 ]
Заголовок сообщения:  Re: Аналог шаблонов С++ в Компонентном Паскале.

Илья Ермаков писал(а):
Поищите статью Зуева "История одного компилятора" ...
Случайно не эта?: http://www.interstron.ru/upload/images/pubs/Redkaya_professiya.pdf

Автор:  Илья Ермаков [ Понедельник, 14 Декабрь, 2009 11:18 ]
Заголовок сообщения:  Re: Аналог шаблонов С++ в Компонентном Паскале.

Не, была другая, объёмная.

По-моему, так и называлась, как я выше написал.

Или эта..

Автор:  Galkov [ Понедельник, 14 Декабрь, 2009 11:41 ]
Заголовок сообщения:  Re: Аналог шаблонов С++ в Компонентном Паскале.

Вроде та... В смысле, читал именно такую раньше в online и с Вашим названием.
Поучительная история, как ИТ-профессионалы открывают для себя давно известные инженерные принципы
И ничего не сделаешь вроде, доходит только через руки не только в ИТ....

Автор:  Андрей [ Пятница, 01 Октябрь, 2010 23:42 ]
Заголовок сообщения:  Re: Аналог шаблонов С++ в Компонентном Паскале.

Прочитал статью по ссылке... А про какую известную бельгийскую фирму в ней речь?

Автор:  Валерий Лаптев [ Суббота, 02 Октябрь, 2010 08:59 ]
Заголовок сообщения:  Re: Аналог шаблонов С++ в Компонентном Паскале.

При размышлении о необходимости шаблонов все больше убеждаюсь, что они - стрельба из пушки по воробьям.
Изначальное их предназначение - повышение производительности программиста.
Казалось бы, как здорово: написал ОДИН раз - и все работает на всю оставшуюся жизнь.
Подставляй только тип - компилятор сам все сделает.
Но фокус- то в том, что то же самое можно делать и без включения в язык шаблонов. Например:
Код:
typedef тип value_type;
class ИМЯ
{
  value_type fild;
...
};

То есть, класс пишется в терминах абстрактного типа, если уж так хочется универсальности. Для повторного использования меняется typedef.
Городить мощнейший аппарат в языке ради такой мелочи, как РУЧНАЯ замена одной строки - перебор.
Шаблоны:
1. Существенно усложнили язык
2. Существенно усложнили компилятор.
Хотя сделано, конечно, красиво.

Автор:  Info21 [ Суббота, 02 Октябрь, 2010 09:19 ]
Заголовок сообщения:  Re: Аналог шаблонов С++ в Компонентном Паскале.

Валерий Лаптев писал(а):
Хотя сделано, конечно, красиво.
Это не красота, а красивость.

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/