2012-03-29 4 views
6

나는 종종 알고리즘이 가능한지 테스트하기 위해 (& 실제로 작동하는지) MATLAB/Python에서 코드를 작성합니다. 그런 다음 전체 코드를 C 및 때때로 FORTRAN90으로 변환해야합니다.하나의 언어에서 다른 언어로 코드를 수동으로 변환

중간 크기의 코드를 한 언어에서 다른 언어로 수동으로 변환하는 좋은 방법은 무엇입니까?

이 나는 ​​시도했다 :

  • 다른에 하나에서 전체 코드를 변환 한 다음 테스트. (때로는 오류와 버그가 사라지지 않고 오류의 원인을 찾는 것이 문제가되는 경우가 있습니다.)

  • 줄 단위로 이동하고 몇 줄마다 출력의 일관성을 검사하십시오. (시간이 너무 많이 걸림)

  • f2c과 같은 변환기를 사용하십시오.

또한, :

  • 내가 가진 매우 정통입니다 (내 경험에 의하면, 그들은 매우 끔찍하다. 내가 다른 기능을 가지고 도서관의 많은 링크는 C와 포트란을 요구한다) 내가 다루는 프로그래밍 언어들 때문에 나는 나의 저작물에 대한 매뉴얼이나 참조 가이드가 필요 없다 (즉, 나는 구문을 알고있다).

  • MATLAB과 C에 대해 특별히이 질문을하지 않고 번역 패러다임으로 질문합니다.

  • 크기는 100 줄 미만입니다.

  • 한 언어의 코드를 다른 언어로 호출하고 싶지 않습니다. 제발 그 제안하지 마십시오.

+1

첫 번째 옵션이 가장 논리적 인 것 같습니다. 변환 및 테스트. 그러나 변환은 단위 테스트와 단계적으로 인터레이스되어야합니다. – ja72

답변

7

다른 언어는 다른 패러다임을 요구합니다. 당신 확실히 예를 들어, 같은 방식으로 코드를 작성하고 디자인하지 마십시오. Matlab, Python, C# 또는 C++. 객체 계층 구조조차도 언어에 따라 많이 달라질 것입니다.

즉, 코드가 몇 개의 상호 연결된 프로 시저로 구성된 경우 직선 별 번역을 생략 할 수 있습니다. 모든 언어는 관용적 인 상태에서 두 개 또는 세 개의 상호 연결된 함수를 작성할 수 있습니다. 그러나 이것은 가장 간단한 프로그램의 경우에만 해당됩니다.

높은 수준의 언어로 프로토 타이핑 한 후, "생산"언어의 강력하고 깨끗한 방법으로 같은 생각을 구현하는 아주 좋은 방법입니다,하지만 매우 다른 두 가지 포함 : 어떤에서

  1. 프로토 타입을 원하는 언어. 테스트하고, 실험하고, 아이디어가 효과가 있음을 스스로에게 확신시킵니다. 큰 그림에 주목하고, 성과에 초점을 맞추지 말고 고차원 아이디어에 집중하십시오. 2 단계에서 다시 마주 치면 구현할 때 발생하는 어려움에도주의를 기울이십시오.
  2. 프로덕션 환경의 언어 X 아이디어를 처음부터 구현합니다. 프로토 타입 단계를 수행하지 않은 경우보다 빠릅니다. 대부분의 어려움이 1 단계에서 충족되었으므로 빠릅니다. 관용적 인 X를 사용하고 정확성에 중점을 둡니다. . 코너 케이스, 일반적인 강건성에주의를 기울여야 제대로 작동합니다. 코드의 대략 절반이 1에 나타나지 않은 새로운 것들로 구성되어 있음을 알 수 있습니다 (예 : 오류 검사, 코너 케이스 처리, 입출력, 유닛 테스트 등). 같은 프로그램으로 번역하지 않기 때문에

당신은 라인 번역에 의해 그 선을 볼 수는 분명히 하지 좋은 생각이다.

프로토 타이핑을하지 않을 때, 나는 첫 번째 버전을 버리고 내가 좋아하는 다른 버전을 만드는 것을 보게된다. 나 스스로 프로토 타입을 찾았 어! 동일한 것을 두 번 구현하는 것은 시간의 손실이 아니라 정상적인 개발 흐름입니다.

1

입력/처리/출력을 사용하여 소스를 psuedo-code로 분할 한 다음 해당 스펙에 맞게 새 코드 기반을 작성하십시오.

2

여러 개의 백엔드 (예 : Matlab, C, Fortran)와 함께 고급 도메인 전용 언어를 사용하여 각 타겟 언어에 대해 깨끗하고 관용적 인 코드를 생성하는 것을 고려해 볼 수 있습니다. 문제가있는 도메인이 좁고 모든 코드가 다소 일반적인 경우 이러한 DSL을 설계하고 구현하는 것은 매우 간단합니다.

+0

그리고 존재하지 않으면 자신의 롤. 처음부터 완벽하지는 않습니다. 하지만 코드를 수작업으로 번역하는 데 불과 한 시간보다 오히려 몇 시간이나 심지어 주말을 보내고 싶습니다. 10 %의 노력으로 솔루션의 90 %를 얻게된다는 것을 기억하십시오. – Ingo

+0

@Ingo는 당연히 맞춤식 DSL을 의미했습니다. 귀하의 필요에 맞게 특별히 준비된 것을 사용할 준비가되지 않습니다. –

+0

아마 그렇지 않을 수도 있습니다. OTOH, 당신은 요즘 모릅니다. – Ingo

관련 문제