LINUX.ORG.RU

Пишу аналог COM для Linux/Unix/Etc только нормальный


0

0

Вот собственно subj. только просьба не опускать и не говорить что
это никому не надо. Лучше предлагать дельные советы или помощь.

На всякий случай объясняю:
COM - это способ избежать проблемы возникающей при динамической
линковке бтблиотек содержащих классы или структуры изменяющиеся
(это важно) от версии к версии.
Возникающие проблемы - смещение адресов данных и идентификаторов
vtable.

COM версии M$ пошел простым путем - просто запретил изменять
интерефы после release'a. Я решил сделать по другому.

Пришел к выводу что нужен свой язык (близкий к C++) чтобы все
работало нормально (без интерфейсов) и с нормальным наследованием.
Основа написана - создает C (не C++) код который можно потом
уже любым компилятором собрать. Есть баги и проблемы но уже
(по крайней-мере) полученный код запускается.

Но работа еще далека от завершения:
- разобраться с циклическими ссылками
(в перл'е :  $a={};$b={};$a->{b}=$b;$b->{a}=$a; - такая
структура не удалятся из памяти)
- шаблоны ? - понятия не имею как их _нормально_ реализовать.
- массивы (Есть vector который хранит любой объект а хочется
аналог my_class**array )
- Сама стандартная библиотека ;)

Поэтому очень надеюсь на вашу помощь.

Пишите сюда и на vahvarh@rbcmail.ru - буду признателен.
★★★

А что благородный муж vahvarh думает об использовании Corba для этой цели?

anonymous
()

А при чем здесь cobra? Это все тот же IDL - который мне не нравится
в связи с теми же ограничениями. Нравился бы IDL я бы просто
переписал бы M$ версию для Linux и успокоился бы.

vahvarh ★★★
() автор топика

Понял что тебе нужен Garbage collector. Ищи его здесь: http://www.hpl.hp.com/personal/Hans_Boehm/gc/

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

anonymous
()

Чтобы все работало нормально и с нормальным наследованием да со сборкой мусора - этот язык Java зовется :)

Нет, если с совсем уж нормальным наследованием, то это однозначно Eiffel. Код на Eiffel обычно преобразуется в код на Си, который затем собирается "любым компилятором". Сборщик мусора, шаблоны и массивы и "стандартная библиотека" в нем разумеется есть.

GNU'тый компилятор (http://smarteiffel.loria.fr), к сожалению, пока не поддерживает 2 архиважных фичи, которые не позволяют мне его использовать в повседневной жизни: нет поддержки многопоточности (сейчас в стадии разработки, возможно появится в следующей версии) и нет возможности создавать разделяемые библиотеки (.so под linux'ом, .dll в какой-то другой ОС). Последнее, увы, в обозримом будущем не ожидается.

Коммерческие компиляторы обычно Eiffel свободны от этих недостатков, но стоят для меня слишком дорого :(

Есть еще неплохой язык Sather, который впитал в себя много хорошего, но который сейчас заброшен создателями. Если бы ты вместо написания своего языка довел бы до ума Sather, то тебя бы все на руках носили ;)

anonymous
()

Если благородному дону не нравится определять интерфейсы на IDL, то почему бы ему не посмотреть на концепцию CORBA DII/DSI?

anonymous
()

> Если благородному дону не нравится определять интерфейсы на IDL, то почему бы ему не посмотреть на концепцию CORBA DII/DSI? Посмотрел. Оказалось что это M$ dispatch. Не нравится скоростью. Писать functions->get("printf")->invoke("Hello, World %s\n", classes->construct("vector")->....) Это очень медленно... И кроме того -это-все-не-родные-средства-языка- !

vahvarh ★★★
() автор топика

Доброе время суток, vahvarh, хочу немного поделиться опытом. Так как у меня не было времени на написание уже написанного, я взял уже готовое, причём бесплатное и легкодоступное. Но сначала одно замечание. По поводу GNU коппилятора, т.е. gcc Вы мягко говоря не правы. Зайдите на gcc.gnu.org, это, я думаю, развеет ваши сомнения. Я сейчас работаю с gcc-3.2 и библиотекой ACE_wrappers, что даёт мне: 1) Многопоточность + любые взаимодействия между потоками и между процессами + готовые блокировки и иже с ними. 2) Заключение классов в dll (то бишь so) и динамическая загрузка их в основной процесс без всяких проблем с линковкой. (В виде объектов прошу заметить) 3) Огромное кол-во всего остального, всё что душе угодно.

Вы удивитесь, когда узнаете насколько быстрее работает эта модель, чем межпроцессорный вызов функций и объектов аля COM. И ещё, насколко я знаю, кто-то уже давным давно работает над разработкой COM подобного ПО в Linux. Поищите Инете.

и наконец 4) Эта же библиотека + ТАО - самая лучшая (на мой взгляд) реализация CORBA на C++.

ASm
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.