2013-02-21 3 views
1

나는 Ada 언어를 사용하는 소프트웨어 개발 프로젝트를 진행할 것이다. 고객이 Rational Apex Ada 컴파일러를 사용하고 있으며 GNU 컴파일러를 사용할 것입니다. 내 코드는 고객의 PC에서 제대로 작동해야합니다. Ada 언어에서 가능한 모든 컴파일러 종속 코드는 무엇입니까? 그래서 내가 컴파일러 독립적 인 코드를 개발할 수 있습니다. 또한 컴파일하고 내 PC에서 고객의 코드를 실행하고 싶습니다.Rational Apex Ada 컴파일러에서 GCC Ada 컴파일러로 마이그레이션

감사 Padmapriya

+1

어려움이 (불특정 한) 의존성에 달려 있기 때문에 귀하의 질문은 지나치게 광범위합니다. 발생한 특정 문제에 대해이 질문을 편집하거나 새로운 질문을 올리십시오. – trashgod

답변

1

"컴파일러에 의존 코드는"C 나 C++와 같은 다른 언어,보다 에이다에서 훨씬 작은 역할을한다. 그러나 컴파일러 종속 패키지는 흔하지 않으며 컴파일러 관련 pragma 및 특성도있을 수 있습니다.

내 경험에 비추어 볼 때 Rational Apex 개발자는 Rational 제공 패키지를 과도하게 (IMHO) 사용하는 경향이있는 것 같습니다.

이러한 패키지를 포팅하거나 다시 구현하거나, 선호도가 높은 pure-Ada 방식을 사용하기 위해 상호 작용하는 Ada를 다시 코딩해야합니다.

+0

Gnat에는 많은 비표준 패키지가 있습니다. 그래서 그는 자신도보아야 할 것입니다. :-) –

+0

@ T.E.D.그렇습니다. 저는 개인적 프로젝트를 위해 다른 컴파일러를 사용할 가능성이 매우 희박하다는 이유로 그것을 위선적으로 최대한 활용합니다. –

1

내 경험상 Gnat과 다른 공급 업체의 컴파일러 간 주요 어려움은 Gnat의 괴상한 파일 명명 요구 사항을 처리 할 것입니다. Rational은 대부분의 컴파일러와 마찬가지로 파일 이름을 사용하여 행복하게 사용할 것이며 내부 파일과의 매핑을 추적합니다. Gnat은 그렇게 용서하지 않습니다 (그러나 내부 매핑 파일은 필요 없습니다).

사람들이 처음부터 모든 것을 작성한다면 제 생각에는 Gnat의 선호 파일 이름을 표준화하는 것이 좋습니다. 이것은 Ada 프로그램 단위당 하나의 소스 파일을 의미하며 파일 이름은 프로그램 단위 이름과 일치하지만 모두 소문자이며 점은 하이픈으로 대체됩니다. 패키지 사양은 .ads 확장자를 사용하고 프로그램 단위 본문은 .adb을 사용합니다.

그렇지 않으면 코드를 완전히 이식 할 수없는 이유는 많지 않습니다. 필자는 VxWorks OS 타겟을위한 Intermetrics 기반 프론트 엔드로 구축 된 고 충실도 비행 시뮬레이터를 갖춘 한 가지 작업을 수행했습니다. VxWorks OS 타겟은 기본적인 책상 테스트를 위해 Win32 (Win32) 데스크에서 Gnat를 사용하여 다시 구축 할 수있었습니다. 어려운 실시간 스케줄러조차도 구현시 모든 Ada 태스킹 프리미티브를 사용 했으므로 정상적으로 이식되었습니다. IIRC는 배터리 백업에서 TOD 클럭을 설정하는 BIOS 호출과 Real-time Clock 주파수를 설정하는 단일 VxWorks OS 호출 만 처리해야했습니다. 모든 것을 얻는 방법을 알아내는 것 gnatchop 제대로 두 통화를 스터빙하는 것보다 훨씬 오래 걸렸습니다.

+2

기본적으로 Apex는 사양에 * .1.ada를 사용하고, 몸을위한 * .2.ada. 권장 사항과 함께 가장 쉬운 방법은 gnatchop을 스크립트로 작성하여 소스 파일 세트를 처리하여 모두 GNAT-happy 방식으로 이름을 바꾸는 것입니다. –

+0

@MarcC : 파일의 이름을 바꾸는 것이 옵션이 아니거나 불편하다면'gnatchop'을 빌드 절차에 포함시킬 수 있습니다. –

+0

@Marc : Apex 명명 체계는 [패키지 이름 지정] (http://gcc.gnu.org/onlinedocs/gnat_ugn_unw/Naming-Schemes.html)에서 처리 할 수있는 간단한 이름 중 하나입니다. –

1

내 현재 프로젝트는 기능 (gnat에서 분기) 일부 컴파일러 특정을 사용하고, 우리는 또한 경고의 무리가 우리의 편집의 어떤 시점에서, 우리에게 오류 메시지가주는 켜져 있습니다

warning: use of this unit is non-portable and version-dependent 

을 컴파일러에게 경고를 오류로 처리하도록 요청하는 경우 (-gnatwe) 컴파일을 실패 할 때 찾아야합니다.

4

GNAT Pro의 다음 릴리스에서는 Apex에서 GNAT로 포팅하는 데 도움이되는 새로운 "pragma Profile (Rational)"을 제공합니다. 설명은 http://docs.adacore.com/gnat-unw-docs/html/gnat_rm_2.html#SEC110을 참조하십시오.

+0

이봐,이 브릿 스노 그라스 야? StackOverflow에 오신 것을 환영합니다! 무료 upvote! –

+0

안녕하세요. Marc. 네, 나야. 지난 몇 주 동안 나는 때때로 여기에 숨어 ​​있었다. 참여하는 좋은 포럼 인 것 같습니다. – Britt