(no subject)

Date: 2012-09-29 03:05 pm (UTC)
From: (Anonymous)
FreeArc так сделан, например. Hackell + С. Сейчас вот в этот самый момент решаю эту проблему. Весь проект на Немерле, небольшая горячая часть на С++. Сценарий примерно такой - подготовка(генерация) сложных структур данных(деревья, автоматы) на Nemerle. Затем все эти структуры данных перемещаются в фиксированную память (System.Runtime.InteropServices.Marshal.AllocHGlobal, System.Runtime.InteropServices.Marshal.StructureToPtr). После в С++ кидается указатель на все это безобразие и он может ходить по этим структурам данным как по своим. Проблема в поддержке описания одних и тех же структур данных на обоих языках. Меняем в одном месте, нужно менять в другом месте. Нужно строго следить за выравниванием и порядком следования полей. Да что там, просто чтобы константу расшарить между двумя языками - уже проблема. Короче мне все это надоело и я написал (на Nemerle, естественно) небольшую утилиту, которая воспринимает описание структур данных на С-образном языке и выдает текст с описанием этих структур данных на С++, Nemerle и богомерзком C# (Ну потому, что в Немерле пока нет полноценной поддержки указателей. Указатель на int уже можно описать, а указатель на структуру еще нельзя.) Далее все это можно подключать как в .NET, так и в C++. Сейчас поддерживаются неймспейсы, структуры, шаблоны С++, енумы, тайпдефы. Про шаблоны... Например - у нас есть описание шаблонов:
LinkedListNode
{
T value;
LinkedListNode* next;
}

class LinkedList
{
LinkedListNode* root;
...
}
typedef LinkedList MyList;
typedef LinkedList HisList;
В С++ это передается как есть, для Шарпа генерируется следующие структуры LinkedListNode_instantation_int, LinkedList_instantation_int, LinkedListNode_instantation_SomeStruct, LinkedList_instantation_SomeStruct:
LinkedListNode_instantation_int
{
int value;
LinkedListNode* next;
}

class LinkedList_instantation_int
{
LinkedListNode_instantation_int *root
}
Для HisList тоже самое. Что-то типа инстанцирования шаблонов. Все это с поддержкой области видимости. LinkedList < SomeTemplate < SomeOtherTemplate < int > > > то же поддерживается. Вопрос - не велосипед ли я изобретаю?
P.S.: Перед тем, как прочел этот пост, сидел отлаживал описанную выше утилиту.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

December 2019

S M T W T F S
1234567
891011121314
15161718192021
222324252627 28
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags