Сообщение 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 у Вас выглядит примерно вот так:
N>>типа struct Int {}; такой проблемы конечно не возникает и можно использовать Object.
MTD>Везде где можно я использую примитивные типы, но в шарпе они прозрачно приводятся к Object и обратно — боксинг. Определить такие преобразования можно на этапе компиляции, поэтому у меня примитивы когда надо упаковываются в класс производный от Object и соответственно обратно с проверкой типа и выбросом в случае чего исключения — все как в оригинале.
Понял, спасибо, ценная информация.
N>>Прикольно, это полезная информация. Если не секрет, большой ли это был проект и стал ли он после этого кросс-платформенным (это если специфики никакой Windows небыло конечно).
MTD>Либы в полмилиона строк. Кроссплатформеность ключевое требование.
У меня те же требования.
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 у Вас выглядит примерно вот так:
N>>типа struct Int {}; такой проблемы конечно не возникает и можно использовать Object.
MTD>Везде где можно я использую примитивные типы, но в шарпе они прозрачно приводятся к Object и обратно — боксинг. Определить такие преобразования можно на этапе компиляции, поэтому у меня примитивы когда надо упаковываются в класс производный от Object и соответственно обратно с проверкой типа и выбросом в случае чего исключения — все как в оригинале.
Понял, спасибо, ценная информация.
N>>Прикольно, это полезная информация. Если не секрет, большой ли это был проект и стал ли он после этого кросс-платформенным (это если специфики никакой Windows небыло конечно).
MTD>Либы в полмилиона строк. Кроссплатформеность ключевое требование.
У меня те же требования.
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>Либы в полмилиона строк. Кроссплатформеность ключевое требование.
У меня те же требования.