Это не вопрос с категорическим ответом да или нет. Позвольте мне взвесить анекдот.
Пример 1
Мне было поручено перенести игру, написанную на Java, на Flash, AS3. На первый взгляд, это может относительно гладко происходить. В конце концов, вы можете считать такую работу более четкой, чем обычная работа с клиентом, потому что у вас уже есть полностью встроенная функциональная спецификация в форме исходной игры. Java и AS 3 являются высокоуровневыми языками, и AS3 имеет много общих черт с Java, таких как структуры пакетов, единичное наследование / множественный интерфейс, строгая типизация (opt-in) и понятия публичной / защищенной / частной переменной и объявления функций. В то время я все еще был очень зелен в Java и совершенно не знаком с исходным кодом. Так что я просто нырнул, чтобы увидеть, что я мог найти, надеясь, что это будет быстро и легко.
Как оказалось, автор кода попытался создать абстрактный движок, который мог бы быть перенесен из Java в некоторую неопределенную другую среду. Это дало мне надежду, что это будет просто в порт. К сожалению, вместо этого я обнаружил, что я смотрю на перспективу переизобретения самой Flash поверх Flash без использования Threads. Как оказалось, буквальный порт просто был бы плохой идеей ... кошмаром производительности. Кроме того, в игре реализован собственный пользовательский язык сценариев, что означало бы создание парсера и лексера для этого языка, если бы я надеялся использовать все исходные файлы исходных данных.
В конце концов, учитывая временные и бюджетные ограничения, оригинальный исходный код не очень помог. Самым полезным было то, что я знал, как точно имитировать поток управления игровой логикой ... но нужен ли мне для этого оригинальный источник? Возможно нет.
Но этот пример может быть не так актуален, потому что это своего рода обратная ситуация. Я надеялся использовать кодовую базу, которую я не писал, на языке, который я в то время не знал, для ускорения разработки в среде, с которой я был хорошо знаком. Так вот другой пример
Пример 2
Заметив, что делал разработчик Java, пытаясь создать переносимую кодовую базу, я начал делать что-то подобное для себя в своей работе с Flash ... писать код, который не сильно зависит от расширения классов flash.display. *, Например, и используя композицию для создания представлений. Не слишком полагаться на flash.event. * И вместо этого писать собственную легкую систему передачи сообщений, не привязанную, в частности, к языку или платформе. Я недавно закончил игру, используя упомянутую платформу, и хотел посмотреть, будет ли легко перенести ее на C # (язык, который я знаю так же, как и на Java и AS3), как проект Unity 3D. Как оказалось, это было гораздо успешнее! Потому что я думаю более свободно в AS3, чем в C #, благодаря тому, что уже написанные алгоритмы сэкономили массу времени. Все, что мне нужно было сделать, это просто изменить синтаксис, который не
Поэтому, исходя из своего личного опыта, я не могу сказать, что ответ всегда будет да или нет. Вы должны учитывать, насколько вы зависите от конкретных языковых идиом в выбранном вами языке высокого уровня, и будет ли их воссоздание легко или сложно в C.