2012-01-09 3 views
14

C 소스 코드를 Go 소스 코드로 변환하는 데 사용할 수있는 도구는 무엇입니까?C를 Go (변환) 도구로 변환 하시겠습니까?

는 예를 들어, C 코드가 포함되어있는 경우 :해야 도구에 의해 생성 된

struct Node { 
    struct Node *left, *right; 
    void  *data; 
}; 

char charAt(char *s, int i) { 
    return s[i]; 
} 

해당 이동 코드 :

type Node struct { 
    left, right *Node 
    data  interface{} 
} 

func charAt(s string, i int) byte { 
    return s[i] 
} 

이 도구는 완벽 필요하지 않습니다. 생성 된 Go 코드의 일부분을 직접 수정해야하는 경우에는 문제가 없습니다.

+1

이며, 요청이 하나가 작성된이 더 같은이 소리 너, 어쩌면이 사이트에 맞는 게 아닐지도 몰라. –

+0

@JoachimIsaksson "C to Java"또는 "C to Perl"과 같은 질문이 이미 있습니다. 이 질문도 마찬가지입니다. –

+0

왜 물어 보시겠습니까? C & Go 코드를 혼합하는 것이 더 간단하지 않습니까? (GCC 4.7에는 Go 프론트 엔드가있다. 불완전하기 때문에 가끔 가능하다.) –

답변

4

오늘 (C에서 Go 소스 코드로 변환) 도구가 존재하지 않습니다. 자신 만의 변환기를 만드는 것을 고려해보십시오. 문제는 다음과 같이됩니다. 가치가 있으며이를 수행하는 방법은 무엇입니까?

Go와 C가 어떻게 든 상호 운용 될 수 있기 때문에 아마도 그럴만 한 가치가 없을 수도 있습니다. 예를 들어, GCC 4.6을 사용하거나 최신 스냅 샷 인 4.7을 릴리스하는 경우 C & Go 코드를 약간의주의를 기울여 함께 연결할 수 있습니다.

물론 평소와 같이 악의가 있습니다.

변환기를 원한다면 얻은 Go 코드를 읽고 편집 할 수있게 하시겠습니까? (코드의 구조를 유지하기를 원하기 때문에 작업이 더 어려우며 주석)? 이 경우에는 아마도 자신의 C 파서가 필요할 것이다 (어려운 작업 임).

생성 된 Go 코드의 가독성에 신경 쓰지 않는다면 예를 들어 기존 컴파일러를 확장하여 작업을 수행 할 수 있습니다. 예를 들어, GCC는 플러그인을 통해 확장 가능하거나 MELT 확장을 통해 확장 할 수 있으며 Glyple 표현 (GCC 내부의 명령어에 대한 기본 내부 표현)을 읽을 수없는 Go 코드로 변환하기 위해 GCC (MELT 또는 GCC 용 C 플러그인)를 사용자 정의 할 수 있습니다. 이것은 다소 간단합니다 (그러나 여전히 일주일 이상의 작업이 필요합니다).

물론 Go 인터페이스, 채널 및 메모리 관리 (가비지 수집 메모리)에도 표준 C가 없습니다.

1

내가 아는 한, 그러한 도구는 아직 존재하지 않습니다. C 코드를 Go로 직접 변환해야합니다.

변환 할 C 코드의 복잡성을 알 수는 없지만 Go에는 "특별한"방법이 있습니다. interfaceschannels과 같은 사용법.

2

나는 그런 툴이 없다는 것을 거의 확신하지만, 모든 언어에서 IMHO는 "코딩 스타일"로 쓰는 것이 좋습니다.

우리 모두가 C 프리 프로세서 트릭과 포인터로 정말 예술적인 작업을 얼마나 좋아했는지 기억하고 있습니까? malloc/free 또는 thread를 다루는 데 얼마나 많은주의를 기울 였는지 기억 하는가? 이동이 다릅니다. 전 처리기가 없지만 클로저, 메소드, 인터페이스, 가비지 컬렉터, 조각, goroutines 및 기타 여러 가지 유용한 기능이있는 객체가 있습니다.

그래서 코드를 더 좋고 깨끗한 방식으로 다시 쓰지 않고 변환하는 이유는 무엇입니까?물론

, 나는 당신이 이동하는 포트에있는 C 코드의 1000K 라인이없는 희망 :

14

RSC 이동에 C 기반의 이동 컴파일러를 변환 github.com/rsc/c2go를 만들었습니다. 외부 예를 들어

는 akavel는 이동 기반 루아 만들기 위해 그것을 사용하려고 시도하는 것 같다 : github.com/akavel/goluago/

github.com/xyproto/c2go 다른 프로젝트입니다, 그러나 그것은 잠시에 감동되지 않았습니다.

+0

그러나 c2go를 사용하여 test.c 프로그램을 test.go 프로그램으로 변환하는 방법은 무엇입니까? – Dac0d3r

관련 문제