Здравствуйте, syomin, Вы писали:
S>Вопрос не праздный — есть желание перетащить небольшую (5 тыс. строк вместе с комментариями) библиотечку с C (без плюсов) на C#... S>P.P.S. Библиотека предназначена для анализа растровых изображений, т.е. в принципе, достаточно ресурсоемкая в плане памяти и CPU. Поэтому аргументы в пользу C++ тоже принимаются.
Данная библиотека будет бурно развиваться? Если нет, я бы оставил ее на С. Переносимее языка чем С не найти. Подключить Сишную библиотеку к Шарповскому проекту элементарно. Скорость компиляторы С/С++ дают пока что более высокую. Так что единственным разумным аргументом за перенос может являться серьезное развитие данной библиотеки.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
VD>Данная библиотека будет бурно развиваться? Если нет, я бы оставил ее на С. Переносимее языка чем С не найти. Подключить Сишную библиотеку к Шарповскому проекту элементарно. Скорость компиляторы С/С++ дают пока что более высокую. Так что единственным разумным аргументом за перенос может являться серьезное развитие данной библиотеки.
В том то и дело, что библиотеку нужно серьезно развивать. Фактически, на данный момент она не представляет существенного практического интереса в силу слабых функциональных возможностей.
А C действительно выбирался из соображений простоты использования из разных языков. Но оказалось, что прежде чем что-то легко и элегантно использовать, этот что-то нужно еще и написать...
Здравствуйте, VladD2, Вы писали:
VD>Данная библиотека будет бурно развиваться? Если нет, я бы оставил ее на С. Переносимее языка чем С не найти. Подключить Сишную библиотеку к Шарповскому проекту элементарно. Скорость компиляторы С/С++ дают пока что более высокую. Так что единственным разумным аргументом за перенос может являться серьезное развитие данной библиотеки.
Влад, что это с тобой? Ты не заболел?
Здравствуйте, syomin, Вы писали:
S>Вопрос не праздный — есть желание перетащить небольшую (5 тыс. строк вместе с комментариями) библиотечку с C (без плюсов) на C#. Ситуация несколько осложняется тем, что на данный момент исходная библиотека компилируется только под UNIX, но это, в принципе, решаемо. И вот сижу чещу репу, как это можно сделать, а главное — стоит ли.
Я бы перетаскивал так.
а) переписать на С++, это должно быть довольно просто.
б) заменить все глобальные модули классами и глобальные методы/переменные методами/полями классов.
в) переписать на Managed C++ (CLI), в зависимости от активного использования неподдерживаемых фич, это может быть и просто и сложно.
г) переписать на С#, если тяжело сразу за один приём — делать это постепенно, переписывая некоторые классы на С#, и линкуя это с Managed C++ кодом и проверяя на работоспособность, и так пока все классы не перепишутся на С#.
VD>>Данная библиотека будет бурно развиваться? Если нет, я бы оставил ее на С. Переносимее языка чем С не найти. Подключить Сишную библиотеку к Шарповскому проекту элементарно. Скорость компиляторы С/С++ дают пока что более высокую. Так что единственным разумным аргументом за перенос может являться серьезное развитие данной библиотеки. S>В том то и дело, что библиотеку нужно серьезно развивать. Фактически, на данный момент она не представляет существенного практического интереса в силу слабых функциональных возможностей. S>А C действительно выбирался из соображений простоты использования из разных языков. Но оказалось, что прежде чем что-то легко и элегантно использовать, этот что-то нужно еще и написать...
C++
С помощью магии extern "C" { ... } делается интерфейс в Си и затем это легко и просто подключается к любому ЯП.
Здравствуйте, mkizub, Вы писали:
M>в) переписать на Managed C++ (CLI), в зависимости от активного использования неподдерживаемых фич, это может быть и просто и сложно. M>г) переписать на С#, если тяжело сразу за один приём — делать это постепенно, переписывая некоторые классы на С#, и линкуя это с Managed C++ кодом и проверяя на работоспособность, и так пока все классы не перепишутся на С#.
Здравствуйте, syomin, Вы писали:
S>В том то и дело, что библиотеку нужно серьезно развивать. Фактически, на данный момент она не представляет существенного практического интереса в силу слабых функциональных возможностей.
S>А C действительно выбирался из соображений простоты использования из разных языков. Но оказалось, что прежде чем что-то легко и элегантно использовать, этот что-то нужно еще и написать...
Тогда проедите эксперименты на тему устроит ли производительность управляемого языка и переписывайте.
Вы, как я понял, хотите и на Моно этот код ганять. Так? А вот Моно серьезно медленнее дотнета. Проверьте и это.
Ну, а само переписывание не должно стать чем то сложным. Копипастишь себе функции и переписываешь. Сначала самые независимые (базовые), а потом те что от них зависят.
Что же до анализа... Возможно имеет смысл поглядеть нет ли чего уже на эту тему. Ведь анализ штука сложная.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Cyberax, Вы писали:
VD>>Данная библиотека будет бурно развиваться? Если нет, я бы оставил ее на С. Переносимее языка чем С не найти. Подключить Сишную библиотеку к Шарповскому проекту элементарно. Скорость компиляторы С/С++ дают пока что более высокую. Так что единственным разумным аргументом за перенос может являться серьезное развитие данной библиотеки. C>Влад, что это с тобой? Ты не заболел?
Ты наверно меня с кем-то путаешь. Я никогда не советовал делать глупой и бесполезной работы. На все нужны основания.
Здравствуйте, minorlogic, Вы писали:
M>Здравствуйте, mkizub, Вы писали:
M>>в) переписать на Managed C++ (CLI), в зависимости от активного использования неподдерживаемых фич, это может быть и просто и сложно. M>>г) переписать на С#, если тяжело сразу за один приём — делать это постепенно, переписывая некоторые классы на С#, и линкуя это с Managed C++ кодом и проверяя на работоспособность, и так пока все классы не перепишутся на С#.
M>Может пункт г) начать с декомпиляции IL в C# ?
Если просто преобразовать проект С в С++ и скомпилировать в IL, то ил будет мало чем отличаться от маш. инструкций и в C# его будет не декомпилировать.
Если же переписывать в безопасное подмножество C++/CLI, то код мало чем будет отличаться от C#-ного.
Итого идея промежуточного переписывания на С++ — это дурь. Проще сразу переписывать на C#. Темболее, что в первом проходе это можно сделать весьма механически. Адресную арифметику заменить на работу с массивами и т.п.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
C>>Влад, что это с тобой? Ты не заболел? VD>Ты наверно меня с кем-то путаешь. Я никогда не советовал делать глупой и бесполезной работы. На все нужны основания.
Ну... Если припомнить флеймы, бушевавшие так года три-четыре назад...
Здравствуйте, VladD2, Вы писали:
VD>Вы, как я понял, хотите и на Моно этот код ганять. Так? А вот Моно серьезно медленнее дотнета. Проверьте и это.
Зато с недавних пор пjддерживает SIMD Mono's SIMD Support: Making Mono safe for Gaming
Здравствуйте, syomin, Вы писали:
S>Краем уха слышал, что Microsoft сейчас активно пишет новый компилятор C#. Одно из главных отличий — теперь он будет написан на C# (я так понимаю, старый был сделан на C++).
Откуда у Вас такая информация?
S>Может, кто-то в курсе, как именно происходит этот процесс: S>
S> хитрый рефакторинг старого компилятора; S> новый проект, но при написании "подглядывают" в старый компилятор; S> целиком новый проект. S>
Самый простой способ:
1. Мысленно разрезаете свой проект на C на части.
2. Копипастите C код в C# проект и доводите его до компилируемого состояния (сначала базовые части, потом зависимые от них).
3. Повторяете пункт 2 для каждой новой порции кода.
Если есть тесты проверяющие правильность работы программы — то перенесите и их. Сильно помогут при отладке.
По-своему опыту могу сказать процесс весьма несложный, особенно при наличии тестов.
Здравствуйте, minorlogic, Вы писали:
VD>>Итого идея промежуточного переписывания на С++ — это дурь.
M>За очередное хамство , слово "дурь".
Извини, но я привык называт вещи своими именами. Если я вижу бесполезное и глупое предложение выполенение которого приведет к серьезному усложнению работы, то я говорю, что это — дурь.
Я еще негров, не поверишь, неграми называю.
Может это и не полит-корректно, но зато отражает суть.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, minorlogic, Вы писали:
VD>>>Итого идея промежуточного переписывания на С++ — это дурь.
M>>За очередное хамство , слово "дурь".
VD>Извини, но я привык называт вещи своими именами. Если я вижу бесполезное и глупое предложение выполенение которого приведет к серьезному усложнению работы, то я говорю, что это — дурь.
VD>Может это и не полит-корректно, но зато отражает суть.
:offtopic:
AFAIK, назвать негра "негром" или "чёрным" (black) — политкорректно. Неполиткорректно — "нигер" (nigger) — это оскорбление, примерно "чурка чернож...".
Здравствуйте, Cyberax, Вы писали:
VD>>Ты наверно меня с кем-то путаешь. Я никогда не советовал делать глупой и бесполезной работы. На все нужны основания. C>Ну... Если припомнить флеймы, бушевавшие так года три-четыре назад...
Припомни. Я когда-то говорил, что что-то надо делать просто из соображений "зачесалось"?
C>В любом случае, поставил плюс за здравую позицию.
И на том спасибо.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Aen Sidhe, Вы писали:
AS>:offtopic: AS>AFAIK, назвать негра "негром" или "чёрным" (black) — политкорректно. Неполиткорректно — "нигер" (nigger) — это оскорбление, примерно "чурка чернож...".
Расскажи это полностью помешанным на политкорректности европейцам и северным американцам.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, z00n, Вы писали:
VD>>Вы, как я понял, хотите и на Моно этот код ганять. Так? А вот Моно серьезно медленнее дотнета. Проверьте и это. Z>Зато с недавних пор пjддерживает SIMD Z>Mono's SIMD Support: Making Mono safe for Gaming
Не знаю, не знаю. Возможно мои представления о Моно устарели, но последний раз когда я пробовал с ним возиться он безбожно Тормозил (в разы отставая от прототипа).
Будет замечательно если Моно подтянется или даже перегонит дотнет. Получить быструю эпиплатформенную среду — это замечательно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, syomin, Вы писали:
S>Ага. Это была моя первая идея, когда стало очевидно, что нужно что-то менять. Даже процентов 50 работы сделал. Но хотелось бы еще более высокий уровень абстракции, чем может предложить C++. Только я никак не могу придумать, как в случае с C# организовать процесс миграции.
Вообще то уровень абстракции предоставляемый C# и C++ очень близкий.
Если нужен более высокий уровень нужно смотреть на функциональщину, исходя из задачи например на ocaml (или F# для NET)