Ada_Ru форум

Обсуждение языка Ада

аналог STL или где-то рядом

Оставить новое сообщение

Сообщения

Eugene Kurbatov
аналог STL или где-то рядом
2005-02-28 00:48:51

 

HELO

 

Существует ли библиотека с шустрыми реализациями списков, деревьев и т.д., в общем, аналог C++'шной STL ?

Maxim Reznik wrote:

 

Если будут какие-то соображения по поводу контейнеров в Аде,

с удовольствием их выслушаю, а то самому перелопатить,

как-то рук не хватает, а вопросы подобные возникают

время от времени.

 

Есть ещё Original Booch Components, писанные самим Гради Бучем триста лет тому назад для Ada 83 и используемые в некоторых больших проектах. В настоящее время адаптированы для Ada 95.

 

http://www.adapower.com/launch.php?URL=http%3A%2F%2Fwww.adapower.com%2Foriginal_booch%2F

 

В нешем новом проекте мы планируем начать использовать их вместо комплекта Booch Components от Simon Wright.

 

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

 

 

-- Vadim Godunko

On Monday 28 February 2005 03:48, Eugene Kurbatov wrote:

 

Существует ли библиотека с шустрыми реализациями списков, деревьев и т.д., в общем, аналог C++'шной STL ?

 

Уже нашёл.

On Monday 28 February 2005 15:14, Sergey I. Rybin wrote:

Eugene Kurbatov wrote:

On Monday 28 February 2005 03:48, Eugene Kurbatov wrote:

>Существует ли библиотека с шустрыми реализациями списков, деревьев и т.д., в общем, аналог C++'шной STL ?

 

Уже нашёл.

 

Где?

 

На www.ada-ru.org :)

Не один-в-один, но похоже.

Vadim Godunko wrote:

 

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

В AWS их уже внедрили, к моему сожалению, я надеюсь что в Ада они не попадут в том виде

в котором они в AWS. Сам интерфейс просто содран с C++, автор это не скрывает.

 

<<Charles is a container and algorithms library based in the C++ STL. It is general, flexible, and efficient, and its design has been guided by the philosophy that a library should stay out of the programmer's way.>>

 

http://charles.tigris.org/

 

и как мне кажется, автор не достаточно уделил внимания безопасности этого интерфейса.

Мне уже приходилось находить/исправлять курсоры по пропавшему из видимости контейнеру

свои и чужие.

 

Надеюсь "титаны" не поддадутся соблазну сделать интерфейс Ада контейнеров внешне привлекательным

за счет безопасности.

Про контрейнеры Буча ничего сказать не могу, не пользовался, но вот к примеру

 

 

ADT Components

 

http://lglwww.epfl.ch/ada/components/index.html

 

гораздо больше походит на Ада чем то что я сейчас вижу в AI302.

Eugene Kurbatov wrote:

 

On Monday 28 February 2005 03:48, Eugene Kurbatov wrote:

 

 

Существует ли библиотека с шустрыми реализациями списков, деревьев и т.д.,

в общем, аналог C++'шной STL ?

 

 

Уже нашёл.

 

Где?

On Mon, Feb 28, 2005 at 03:48:51AM +0300, Eugene Kurbatov wrote:

 

HELO

 

Существует ли библиотека с шустрыми реализациями списков, деревьев и т.д., в общем, аналог C++'шной STL ?

 

 

Предлагаю посмотреть краткую анатацию нескольких библиотек здесь

http://www.ada-ru.org/soft_lib_compon.html

 

В следующем стандарте языка будут стандартные библиотеки,

сейчас называют их AI302.

 

Собирал как-то список всего, что есть, получилось примерно такое

 

1)Booch

http://www.pogner.demon.co.uk/components/bc/index.html

2) Abstract Data Type (ADT)

http://lglwww.epfl.ch/ada/components/ADT/abstract.html

http://lglwww.epfl.ch/ada/components/home_page.html

ftp://lglftp.epfl.ch/pub/Ada/Components/lgl_ADT_components.tar.gz

3) ASL Ada Structed Library

http://adasl.sourceforge.net/

4) SAL (Stephe's Ada Library)

http://www.toadmail.com/~ada_wizard/ada/sal.html

5) Mats Weber's Ada Component Library

http://lglwww.epfl.ch/Team/MW/mw_components.html

6) Grace

http://www.freesoftware.fsf.org/Grace/Grace_Home.html

7) SGL

http://www.cs.rpi.edu/pub/stl/SGL-2.0a3.tar.gz

8) Original Ada83 Booch Components (for Ada95 elaboration order): http://www.adapower.com/original_booch

9) PragmAda Reusable Components

http://home.earthlink.net/~jrcarter010/pragmarc.htm

10) AI-00302.

http://www.ada-auth.org/cgi-bin/cvsweb.cgi/AIs/AI-20302.TXT

http://charles.tigris.org/ in CVS

11) Charles Container Library

http://home.earthlink.net/~matthewjheaney/charles/

12) Ada Standard Component Library WG

http://www.suffix.com/Ada/SCL/

 

13)The data structure component library used at the University of Scranton http://www.cs.uofs.edu/~beidler/Ada/ds/uofs_ds2.zip

 

14) SIMPLE COMPONENTS

http://www.dmitry-kazakov.de/ada/components.htm

BC мне не нравился, я там внутри 'Address нашел, думаю это

лишнее для контейнера.

 

PragmArc это с чего AI302 начался, его видать отвергли.

 

Теперь AI302 сделали на Charles Container Library,

переколбасив его сильно. Это есть на

http://charles.tigris.org/ в CVS. Там уже заточено на

Ada 200Y стандарт, не компилится под Ada 95.

(Нужен последний gnat из gcc или профешин).

 

lgl_ADT - то что в AWS было раньше, теперь там AI302.

 

adasl - слишком много generic. Чтоб создать рабочий контейнерный тип надо много instance делать.

 

Ну может SAL ничего.

 

SGL это предшествиник Си++ STL. Говорят неплохой.

 

Если будут какие-то соображения по поводу контейнеров в Аде,

с удовольствием их выслушаю, а то самому перелопатить,

как-то рук не хватает, а вопросы подобные возникают

время от времени.

 

--

Maxim Reznik

Здравствуй, Евгений.

 

Да, это SGL. Если отвечать на вопрос об "аналоге C++ STL".

Оригинальная версию SGL можно найти в интернете, если искать по словам

"Standard Generic Library".

Опытом использования и патчем к ней могу поделиться.

 

Ситуация с ней такова, что она публично никем не поддерживается, хотя лично я ее

использую и немного подфиксел и перекроил.

 

Если Ada-Ru видит необходимость и есть помощники для суппорта- давайте выложем

куда-нибудь.

 

Eugene Kurbatov wrote:

On Mon, Feb 28, 2005 at 09:38:48PM +0200, Sergei Lodyagin wrote:

 

Здравствуй, Евгений.

 

Да, это SGL. Если отвечать на вопрос об "аналоге C++ STL".

Оригинальная версию SGL можно найти в интернете, если искать по словам "Standard Generic Library".

Опытом использования и патчем к ней могу поделиться.

 

Ситуация с ней такова, что она публично никем не поддерживается, хотя лично я ее

использую и немного подфиксел и перекроил.

 

Если Ada-Ru видит необходимость и есть помощники для суппорта- давайте выложем

куда-нибудь.

 

 

Давай выложим на наш сайт, в раздел "Собственные разработки" :-)

У меня есть файл

http://www.cs.rpi.edu/pub/stl/SGL-2.0a3.tar.gz

 

Пришли патчи. И что есть. Может какую доку по русски написать...

Поделись опытом использования.

Могу в CVS это сгрузить если есть необходимость.

 

 

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

когда изучал возможносит языка Ада.

Но там довольно специфичный подход, подсмотренный в Си,

боюсь другим это не понравится. Поэтому не делюсь :-)

 

Хотя, раз речь зашла, опишу в кратце. Может кому интересно.

 

Основной контейнер - это список.

Часто бывает нужно, чтоб элемент хранился в момент времени

только в одном списке.

Тогда можно ссылку на следующий элемент хранить

в самом элементе. Тогда не нужно получать память для ссылок

в куче. Контейнеру даются две подпрограммы доступа Get_Next

и Set_Next. Они часто inline.

Таким образом в контейнер можно запихать и limited элементы

(при помощи указателя на них).

 

generic

 

type Element (<>) is limited private;

type Element_Ptr is access all Element;

 

with function Get_Next (Item : Element_Ptr) return Element_Ptr is <>; with procedure Set_Next (Item, Next : Element_Ptr) is <>;

with function "=" (Left, Right : Element) return Boolean is <>;

package Embeded_Link_Lists is

 

type List is limited private;

type Item_Count is new Natural;

 

procedure Add (Container : in out List; Item : Element_Ptr); function Length (Container : List) return Item_Count;

function Find (Container : List; Item : Element) return Element_Ptr;

....

 

 

Таким образом получаем эфективный связный список, без

лишних операций выделения памяти, такой же по

производительности как и Си-шные макросы, часто используемые

в ядрах ОС, кешах файловых систем и пр.

 

Если элемент будет лежать в N списках, то по элементу это видно.

Например, для кеша есть список LRU и список для поиска по имени,

тогда:

 

type Cached_Item is record

Next_LRU : Cached_Item_Access;

Next_Lookup : Cached_Item_Access;

Name : Unbounded_String;

....

end record;

 

Список сам контролирует, что добаваляемый элемент еще не

содержится в каком-нибудь списке.

 

Ну, а на основе этого Embeded_Link_Lists списка я строю обычные

списки, стеки, очередя, где нет уже ограничения на единственное

вхождение в список. Но тут уже элемент списка не может быть

limited.

 

generic

 

type Element (<>) is limited private;

 

with function "=" (Left, Right : Element) return Boolean is <>;

package Tools.Lists is

 

type List is limited private;

 

...

private

 

type Node;

type Node_Ptr is access all Node;

type Node is record

Next : Node_Ptr;

Object : Element;

end record;

 

package Ref_Lists is new Tools.Embeded_Link_Lists (Node, Node_Ptr);

......

 

 

--

Maxim Reznik

Новое сообщение:
Страницы: 1

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти