2012-05-30 3 views
5

Ada (95, 2005)에서 C 로의 소스 - 소스 변환기 (변환기)가 있습니까? Ada의 모든 기능을 gnu c99 + pthreads + POSIX로 변환 할 수 있습니까?현대적인 C/C++ 변환기

중요한 응용 프로그램에서 이러한 ada-to-c 변환기를 사용할 수 있습니까?

추신 : 번역사를 C++ (gnu 확장자로 2003까지)도 환영합니다.

PPS : "gnu c99"라고하면 C99 + 대부분의 gnu 확장이 지원되지만 GCC를 의미하지는 않습니다.

+0

직접 ADA 컴파일러를 사용하지 않는 이유는 무엇입니까? – Mat

+3

일부 하드웨어에는 ADA가 없으므로 – osgx

+0

어떤 하드웨어가 있습니까? –

답변

7

나는 오픈 소스 Ada-to-C 변환기가 무엇인지 모르겠다. 내가 아는 유일한 사람은 SofCheck 였는데 꽤 좋았습니다.

SofCheck은 이후 AdaCore에 의해 구입, 나는 번역자에 대한 AdaCore 웹 사이트의 매우 간단한 검색을했고, 아무것도 뛰어 없습니다. 상용 솔루션을 추구하는 것이 귀하에게 유용한 옵션이라면 [email protected]으로 문의하십시오. (적어도 가격을 받으십시오.)

+1

감사합니다. http://adatoccpp.sourceforge.net (불완전한?) 및 http://mapusoft.com/products/ada-changer/에 관해 무엇을 말할 수 있습니까? – osgx

+0

FWIW : http://www.adacore.com/press/adacore-sofcheck-merge –

+0

해당 번역자의 작성자도 AdaCore에 고용되었으므로 거기에 답변을 받아야합니다. –

1

이 응용 프로그램에 Ada를 사용하는 강력한 이유가 없다면 (예 : 고객이 요구하거나 Ada에서 이미 사용중인 큰 응용 프로그램을 사용하고 싶다면), 글 머리 기호를 물고 코드가 잘 만들어진 C99 또는 C++ 코드로 솔루션을 코딩한다면 고통 스러울 것입니다.

당신이 주장하는 경우, Sofcheck의 번역자가 가장 좋을 수 있습니다. 그들은 오랫동안 그 일을 해왔습니다.

오류가 발생하면 Ada 컴파일러의 ASIS 출력으로 시작하는 변환기를 빌드 할 수 있습니까? Ada는 부주의하게 Ada에서 코드를 작성하고 번역 및 실행하려는 경우 Ada가 제공하는 매우 정확한 의미 체계를 유지하고 있기 때문에 당연한 결과입니다. 출력이 최종 고객에게 "꽤"되기를 원한다면 더 많은 작업이 필요합니다. (장기 유지 관리가 고려되어야합니다). 나는 Ada의 랑데뷰를 시뮬레이트하기위한 코드를 구현하는 것이 다소 의미가있을 수 있으며 동시에 의미 론적으로 복잡하고 비동기 적이라고 생각한다. 이 접근 방식의 실제 결함은 많은 작업이라는 것입니다. 어쩌면 단지 당신의 삶에 익숙해지고, 에이다가 아닌 다른 어떤 곳에서 애플리케이션 자체를 코딩하는 것이 덜 노력적 일 것입니다.

language translation done poorly 및 다른 방법에 대한 내주의 사항을 참조하십시오.

+1

이것은 옳은 대답의 절반이지만, 어리석지 않아도 완벽하게 작동하는 코드를 다시 작성합니다. 나는 그것이 쓰여진 언어가 무엇인지 신경 쓰지 않고, 새로운 언어의 혜택이 무엇인지 생각하고 있습니다. 평면적으로 컴파일러를 얻을 수 없다면, 그것은 또 다른 문제이지만, 여기에서는 주장하지 않았습니다. –

+0

... + 절반은 재 작성이 일반적으로 손으로 번역하려고하는 것보다 낫다는 것입니다. 그래도 새로운 제품이었을 때 원래 제품만큼 디버깅하고 테스트해야하는 무언가로 끝날 것입니다. –

+0

나는 그가 응용 프로그램을 다시 작성해야 함을 의미하지는 않습니다. 실제로, OP는 그가 * Ada 프로그램을 가지고 있는지, Ada 컴파일러만을 사용하고 싶은지에 대해서는 말하지 않았다. 나는 (실수로?) 그가 새로운 응용 프로그램을 작성하려고한다고 가정했습니다. 그가 Ada 프로그램을 갖고 있다면 손으로 다시 작성하는 것보다 품질이 더 좋고 (비용이 저렴하고 빠르며 위험이 적은) 자동 번역이 동의됩니다. 나는 이것을 명확하게하기 위해 답을 수정했다. –