Информация об изменениях

Сообщение Re[6]: C# -> С++ от 04.09.2014 20:33

Изменено 04.09.2014 20:33 nen777w

N>>Если не секрет, приходилось потом руцями всё дорабатывать или автоматом всё сразу компилировалось?
MTD>Все автоматом.

Ого. Круто, реально ркуто т.к. практически не решаемая задача.

N>>И еще интересна судьба этого вашего конвретора С#->C++, он где то лежит, может продается?

MTD>Нет, для внутреннего использования.

И никак нельзя его купить?

MTD>>>Был выбран наиболее простой и прямолинейный путь — затащить сборщик мусора и повторить всю иерархию классов.

N>>Понятно, надо подумать над таким вариантом. Если не секрет почему решили делать так?
MTD>Так проще всего для реализации.

Понятно спасибо, подумю над этим.

N>>Да это я в прошлый раз не дописал, просто есть вариант посмотрить всё на шаблонах т.е. template<typename T> List {...}; соответсвено эти всякие

MTD>Шаблоны есть, одно другому не мешает или я что не понял.
Да я просто для себя уточняю, заложив неправильную базу можно потом на грабельках танцевать бесконечно, потому и собираю опыт других.
Т.е. еще раз, если не сложно, тот же IEnumerator у Вас выглядит примерно вот так:
namespace System { namespace Collections {

    template<typename T>
    struct IEnumerator {
        typedef T value_type;
        typedef IEnumerator<T> this_type;

        virtual System::Object* Current() const = 0; //<<-- 
        /*
           Т.е. тут т.к. используется GC возвращаем raw указатель (без никаких shared_ptr)
           И к тому же Object (хотя есть соблазн возвращать T - как бы более С++-нуто.)
        */


        virtual bool MoveNext() = 0;
        virtual void Reset() = 0;
    };

}}


N>>типа struct Int {}; такой проблемы конечно не возникает и можно использовать Object.

MTD>Везде где можно я использую примитивные типы, но в шарпе они прозрачно приводятся к Object и обратно — боксинг. Определить такие преобразования можно на этапе компиляции, поэтому у меня примитивы когда надо упаковываются в класс производный от Object и соответственно обратно с проверкой типа и выбросом в случае чего исключения — все как в оригинале.

Понял, спасибо, ценная информация.

N>>Прикольно, это полезная информация. Если не секрет, большой ли это был проект и стал ли он после этого кросс-платформенным (это если специфики никакой Windows небыло конечно).

MTD>Либы в полмилиона строк. Кроссплатформеность ключевое требование.
У меня те же требования.
N>>Если не секрет, приходилось потом руцями всё дорабатывать или автоматом всё сразу компилировалось?
MTD>Все автоматом.

Ого. Круто, реально ркуто т.к. ИМХО практически не решаемая задача.

N>>И еще интересна судьба этого вашего конвретора С#->C++, он где то лежит, может продается?

MTD>Нет, для внутреннего использования.

И никак нельзя его купить?

MTD>>>Был выбран наиболее простой и прямолинейный путь — затащить сборщик мусора и повторить всю иерархию классов.

N>>Понятно, надо подумать над таким вариантом. Если не секрет почему решили делать так?
MTD>Так проще всего для реализации.

Понятно спасибо, подумю над этим.

N>>Да это я в прошлый раз не дописал, просто есть вариант посмотрить всё на шаблонах т.е. template<typename T> List {...}; соответсвено эти всякие

MTD>Шаблоны есть, одно другому не мешает или я что не понял.
Да я просто для себя уточняю, заложив неправильную базу можно потом на грабельках танцевать бесконечно, потому и собираю опыт других.
Т.е. еще раз, если не сложно, тот же IEnumerator у Вас выглядит примерно вот так:
namespace System { namespace Collections {

    template<typename T>
    struct IEnumerator {
        typedef T value_type;
        typedef IEnumerator<T> this_type;

        virtual System::Object* Current() const = 0; //<<-- 
        /*
           Т.е. тут т.к. используется GC возвращаем raw указатель (без никаких shared_ptr)
           И к тому же Object (хотя есть соблазн возвращать T - как бы более С++-нуто.)
        */


        virtual bool MoveNext() = 0;
        virtual void Reset() = 0;
    };

}}


N>>типа struct Int {}; такой проблемы конечно не возникает и можно использовать Object.

MTD>Везде где можно я использую примитивные типы, но в шарпе они прозрачно приводятся к Object и обратно — боксинг. Определить такие преобразования можно на этапе компиляции, поэтому у меня примитивы когда надо упаковываются в класс производный от Object и соответственно обратно с проверкой типа и выбросом в случае чего исключения — все как в оригинале.

Понял, спасибо, ценная информация.

N>>Прикольно, это полезная информация. Если не секрет, большой ли это был проект и стал ли он после этого кросс-платформенным (это если специфики никакой Windows небыло конечно).

MTD>Либы в полмилиона строк. Кроссплатформеность ключевое требование.
У меня те же требования.