Ручной перевод кода с одного языка на другой
Я часто пишу коды в MATLAB / Python, чтобы проверить, возможен ли мой алгоритм (&на самом деле работает). Затем мне нужно преобразовать весь код в C, а иногда и в FORTRAN90.
что было бы хорошим способом вручную преобразовать код среднего размера с одного языка на другой?
Я пробовал :
преобразование всего кода из одного в другой, а затем его тестирование. (Иногда, есть ошибки и ошибки, которые просто не исчезнет, и поиск источника ошибки станет проблемой)
перейти строка за строкой и проверить согласованность выходов каждые несколько строк. (Слишком много времени)
использовать преобразователи как
f2c
. (По моему опыту, они ужасны. Я ссылаюсь на множество библиотек, которые имеют разные вызовы функций для C и Fortran)
также:
Я довольно хорошо знал с языками программирования я имею дело, поэтому мне не нужны руководства или справочники для моей работы (т. е. я знаю синтаксис).
Я не задаю этот вопрос конкретно о MATLAB и C, а скорее как парадигму перевода.
Что касается размера, коды имеют длину менее 100 строк.
Я не хочу вызывать код одного языка на другой. Пожалуйста, не предлагай этого.
3 ответов
разные языки требуют разных парадигм. Вы наверняка Не пишите и не создавайте код таким же образом, например. Matlab, Python, C# или c++. Даже иерархии объектов будут меняться в зависимости от языка.
тем не менее, если ваш код состоит из нескольких взаимосвязанных процедур, то вы можете уйти с прямым переводом строки за строкой (каждый язык позволяет писать две или три взаимосвязанные функции, оставаясь идиоматическим). Но это только для простейших программ.
прототипирование на языке высокого уровня, а затем реализация той же идеи надежным и чистым способом на" производственном " языке-очень хорошая практика, но включает в себя две совершенно разные вещи :
- прототип на любом языке вы хотите. Проверяйте, экспериментируйте и убеждайте себя, что идея работает. Обратите внимание на общую картину, не фокусируйтесь на производительности, а на идеях высокого уровня. Обратите также внимание на трудности это вы сталкиваетесь при реализации, так как вы столкнетесь с ними снова на Шаге 2.
- реализовать с нуля идею в производственной среде на языке X. Это будет быстрее, чем если бы вы не сделали этап прототипирования, так как большинство трудностей были встречены на этапе 1. Используйте idiomatic X и сосредоточьтесь на правильности. Обратите внимание на угловые случаи, общую надежность, и как только он работает правильно, производительность. Вы заметите, что примерно половина кода состоит из новых вещей который не появился в 1. (напр. проверка ошибок, обработка углового случая, вход-выход, модульное тестирование и т. д.).
вы можете видеть, что строка за строкой перевод, очевидно,не хорошая идея, так как вы не переводите в ту же программу.
кроме того, когда не прототипирование, я обнаруживаю, что выбрасываю первую версию и делаю другую, которая мне нравится больше, т. е. Я прототипирования ! Реализация одного и того же дважды - это не потеря времени, это нормальный ход развития.
вы можете рассмотреть возможность использования языка домена более высокого уровня с несколькими бэкэндами (например, Matlab, C, Fortran), создавая чистый и идиоматический код для каждого целевого языка, возможно, с некоторыми оптимизациями. Если ваш проблемный домен узок и каждый фрагмент кода более или менее типичен, разработка и реализация такого DSL должна быть довольно тривиальной.
разбейте источник на psuedo-код с вводом / процессом / выводом, а затем напишите новую базу кода, чтобы соответствовать этой спецификации.