Есть ли способ перевести код C на Ruby? - PullRequest
4 голосов
/ 02 апреля 2010

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

Я видел переводчиков Ruby на C онлайн, но не наоборот. Будет ли простой способ решения этой конкретной проблемы?

Ответы [ 4 ]

6 голосов
/ 02 апреля 2010

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

Подход «разделяй и властвуй» должен работать с обычным Ruby, если вы используете модули в качестве собственных расширений, но, очевидно, это вызовет дополнительные проблемы, если вы нацеливаетесь на что-то вроде JRuby в качестве среды выполнения. Если вы хотите сделать что-то подобное в JRuby согласно вашему комментарию, вы смотрите на обертывание модулей C в JNI и вызов через JVM таким образом. В любом случае ваш код C будет взаимодействовать с кодом Ruby, но эти два подхода не являются взаимозаменяемыми.

Ни один из подходов не будет быстрым, и оба будут лотом работы.

1 голос
/ 04 августа 2018

По крайней мере возможно перевести подмножество C в Ruby, но вывод будет "стертой" программой.

Используя универсальный транспортер , можно преобразовать эту функцию C в Ruby:

int add(int a,int b){
    return a+b;
}

Это вывод переводчика:

def add(a,b) 
    return a+b
end
1 голос
/ 02 апреля 2010

Вы можете:

  1. Написать интерпретатор C на Ruby (очень сложно).
  2. Обернуть скомпилированный код C чем-то вроде SWIG (намного проще).
0 голосов
/ 02 апреля 2010

Программирование на С и программирование на Ruby несут совершенно разные парадигмы программирования. Таким образом, хотя старая поговорка о том, что вы можете написать код на Fortran (или C в данном случае) на любом языке , верна, код Ruby, который вы в итоге получите при машинном переводе, вообще не будет Ruby, кроме синтаксически.

Так что, ИМХО, любой другой способ, кроме ручного (и я мог бы добавить, опытными Rubyists), был бы либо невозможен, либо, по крайней мере, вообще бесполезен.

...