Как перевести с языка на другой? - PullRequest
2 голосов
/ 26 декабря 2010

Я не хочу автоматизированного решения. Что вы делаете, когда вам нужно перевести программу с языка на другой язык? Вы предпочитаете переписать его с начала или скопировать и вставить его и изменить только то, что нужно изменить? Какой лучший выбор?

Ответы [ 4 ]

3 голосов
/ 26 декабря 2010

Это зависит от

  • целей (быстрый взлом на разовое использование? Долгоживущий производственный проект для работы?)

  • theу меня есть ресурсы (сколько человеко-часов? тестовый набор и / или функциональная спецификация для старого кода; знакомство с обоими языками?)

  • самое главное, различия между языками.И концептуальные (ОО «функциональные? Отражения? Управляющие структуры»), а также доступные библиотеки.

    Обратите внимание, что этот маркер не так тривиален, как кажется - это зависит от большой частио том, насколько идиоматична оригинальная программа - например, некоторые люди пишут очень "C-подобный" Perl-код (например, используя поток управления C и очень похожий на C ++ дизайн ОО), который можно тривиально скопировать в C или C ++, а некоторые пишутневероятно сложный идиоматичный Perl с использованием функционального программирования, замыканий и рефлексивных возможностей;который не может быть явно переведен на C / C ++.

  • Кроме того, качество исходного кода.Например, хорошая программа имеет отдельную бизнес-логику, обычно выражаемую в стандартной конфигурации и в потоке управления, который проще напрямую клонировать.

Например, перевод с PHP на Perl для хакерской работы часто можно запуститькопирование, так как многие конструкции PHP могут быть отображены 1-к-1 на эквивалентные конструкции Perl (просто выберите веб-библиотеку Perl-шаблонов).Результирующий код не будет ХОРОШИМ Perl, но будет достаточно хорош для некоторых целей.

С другой стороны, переводя, скажем, LISP-код на Java, лучше просто перевести исходный код вспецификацию функциональности и переписать с нуля.Ваш пример Python и JavaScript, вероятно, находится в одном и том же окне.

Обычно у вас есть два языка, которые имеют хотя бы некоторые понятия (например, оба имеют ОО и некоторые императивные структуры управления), и, таким образом, вы получаете некоторую комбинациюиз двух подходов - части кода могут быть переведены «бездумно», части должны быть переписаны с нуля.

Чем больше второго (полного переписывания) подхода, тем лучше идиоматический и мощный код вы получите.

1 голос
/ 26 декабря 2010

Это, вероятно, в основном зависит от сходства между двумя языками и значения слова "перевод".

Например, перевод части кода C89 на C ++ может оказаться не таким сложным, учитывая, что он должен компилироваться сразу после копирования-вставки (C ++ является совместимым супернабором для C89). Я вряд ли считаю это «переводом».

С другой стороны, перевод Java на Haskell, безусловно, потребует полного переписывания, поскольку парадигмы языка, даже хуже, чем синтаксис, полностью отличаются.

1 голос
/ 26 декабря 2010

Обычно лучше всего переписать текст, используя оригинал для вдохновения и режиссуры.

То, как вы можете делать что-то на одном языке, может оказаться неправильным способом сделать это на другом.

Когда дело доходит до копирования-вставки, редко можно сделать это - языки разные и следуют другим правилам синтаксиса.

Конечно, все зависит от исходного и целевого языков.

С вашим комментарием - javascript и python, я бы сказал, что лучше всего переписать.

0 голосов
/ 26 декабря 2010

Рассмотрим Список языков программирования Википедии .Мне лень считать, сколько их в этом списке, но давайте предположим, что их 100.

Если вы хотите перевести один из них в другой, это означает, что их как минимум 100 * 99.= 9900 возможных комбинаций для перевода.

И это очень много.Поскольку большинство языков уникальны, перевод очень, очень зависит от исходного и целевого языков.

Рассмотрим этот конвертер из Паскаля в C .Автор утверждает, что ему потребовалось полтора года, чтобы сделать хорошего переводчика для этих конкретных языков.Очевидно, что это не тривиальная задача.

В зависимости от ваших амбиций, вы можете потратить либо один день, либо много лет на перевод программы с языка A на язык B.

Сколько это займетвыполнение зависит от ваших навыков, размера исходного кода, сложности языков A и B. и их сходства.

Как видите, это не тривиальная задача и сильно зависит от вашей ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...