Доброе утро, Костя
Ты давно заглядывал в файл __mm_prc.h ?!
Тебе не кажется, что ты там видишь:
struct __mm_process : public __mm_soft_component {
// Конструктор и деструктор __mm_process ( char * tname, char * name, ...);
...
// Тело процесса virtual void __mm_process_body ( void ) = 0;
...
// Функции - операторы тела процесса
void __mm_send ( __mm_output_buffer * buffer, // Буфер, через который посылается сообщение __mm_message * message, // Сообщение unsigned int op_number, // Номер оператора const char * where // Местоположение в исходном файле );
void __mm_receive ( __mm_input_buffer * buffer, // Буфер, через который получается сообщение __mm_message *& message, // Куда поместить сообщение unsigned int op_number, // Номер оператора const char * where // Местоположение в исходном файле );
... };
Чем это принципиально, кроме имен и деталей, отличается от того, что ты предлагаешь ? Какой транслятор MM->C ? Ты о чем вообще ?!
Максим
On Sun, 28 May 2006, Konstantin Savenkov wrote:
Привет, коллеги.
Вопрос, наверное, в первую очередь к Никите, но м.б. у остальных тоже возникнут здравые идеи.
Когда я думаю о том, как было бы грамотно организовать технически работу с ММ-языком, мне представляется нечто вроде билиотеки классов вида
class Process { public: Process(const string& name, const vector<InputBuffer>&, const vector<OutputBuffer>&); void receive(Message& m, InputBuffer& b); void send(const Message& m, OutputBuffer& b); et cetera(); }
и набор макросов, разворачивающих MM-style описание
process P() <input i, output o> { ...text... }
в
class P : public Process { void body() { ...text... } }
В мелких деталях я мог по ходу наврать, но идея, надеюсь, понятна. Вопрос: почему используется не подобный подход, а трансляция ММ->С ? М.б. приведённый мной подход пробовали, но нашли там подводные камни?
Если нет, то вопрос к Саше Герасёву: нужно ли твоему студенту делать н-ную версию транслятора ММ-С? Не лучше ли его занять вышеприведённым вариантом?
Спасибо за внимание, Костя.