Someone wrote in [personal profile] stdray 2012-09-29 03:05 pm (UTC)

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.: Перед тем, как прочел этот пост, сидел отлаживал описанную выше утилиту.

Post a comment in response:

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