2010-11-19 8 views
2

임베디드 C는 다른 언어와 함께 마이크로 컨트롤러에 사용됩니다. 하지만 컨트롤이 PC에서 나온 것이라면, 두 가지 가능한 후보 (Java 및 C++)가 있습니까?로봇 용 C++ 또는 java

자바는 간단하고 쉽게 쓰레드 또는 GUI와 관련하여 개발자에게 친숙합니다. 물론 C++은 훨씬 뛰어난 성능을 제공합니다. (나는 컴퓨터가 더 빨라지고 성능은 좋은 알고리즘에 달려 있음을 안다.)하지만 컴파일 메이크 파일, 공유 라이브러리 및 크로스 컴파일은 다른 중요한 문제를 해결할 때 기술적 인 부분을 신경 써야한다.

하지만 여전히 나는 그게 거대한 엉망이었다 배열에 왔을 때 지원 clone() 또는 복사를 사용하도록 강제하지 않는 자바 헌장 참조 같은 직면 한,

참고 : 나는거야 역 운동학을 사용하고 어쩌면 패턴 인식을위한 신경망을 사용할 수 있습니다. 이것은 많은 계산이 필요합니다. 하지만 내가 말했듯이 프로젝트의 전체 라이프 사이클 (개발 속도, 성능, 사용자 친숙성 및 빠른 배포 속도)에 대해서도 신경을 썼습니다.

저는 언어를 스윙하고 장기 학습 과정을 계획하고 있습니다. 잘못된 언어로 낭비하고 싶지 않거나 (묻지 않고) 그렇게하자. 그러면이 질문이 주관적이지만 참고가되지 않기를 바랍니다.

건배

+7

실제 로봇은 기계어 코드로 프로그래밍됩니다. –

+3

로봇이 집을 청소하거나 모든 주요 도시의 침략을 주도 할 것인지 여부에 달려 있습니다. 로봇 닌자 중대에 전원을 공급하는 코드를 작성했다면 C++을 사용할 것입니다. –

+0

@ Moo-Juice 네, 좋은 견해를 가지고 있습니다. –

답변

2

개인적으로 나는 C++에 의지 할 것이다. Java에는 가비지 수집기가있어 앱을 임의로 잠자기 상태로 설정할 수 있습니다. C + +에서 나는 내 자신의 쓰레기를 수집해야하는데, 그로 인해 생성되는 인센티브가 적다. 또한 C++은 내가 알기로, 매크로가 인데, Java-nistas에 의해이 나쁜 것으로 선언되었지만, 코드 단축과 DSL과 같은 방식으로 사용합니다. DSL과 같은 코드를 작성하는 것이 개발 노력을 단축하고 버그를 최소화하는 주요 방법입니다.

Java가 본질적으로 C++이나 C보다 느리다 고 가정하지 않습니다. IME 속도 저하 (및 bigness)는 사이클을 얼마나 잘 돌릴지가 아니라 따르도록 권장하는 설계 관행에서 오는 것입니다. 콜렉션 클래스와 같이 그들이 제공하는 멋진 것들은 일반적으로 훌륭하게 구성되어 있지만, 너무 편리하기 때문에 과도하게 사용하는 것을 막을 수는 없습니다.

IME, 좋은 성능의 비결은 가능한 한 적은 데이터 구조 (즉, 최소한의 쓰레기)를 갖고 가능한 한 정규화 된 상태로 유지하는 것입니다. 그렇게하면 메시지 - 파도를 통해 일관성을 유지할 필요성을 최소화 할 수 있습니다. 데이터가 비정규 화되어야하는 정도까지, 일시적 불일치를 용인 할 수 있고 정기적으로 패치를 적용하는 것이 알림 (OO 언어가 권장하는)을 통해 항상 일관되게 유지하려고하는 것보다 낫습니다. 신중하게 모니터링하지 않으면 성능 버그를 쉽게 도입 할 수 있습니다.

Here's an example of some of these points.

3

왜 C를 삭제 했습니까?

왜 자바가 성능이 나쁘다고 생각하십니까? + +? 어떤 것들은 C++만큼이나 훌륭하고 다른 플랫폼에서 많은 번거 로움없이 Java 프로그램을 사용하기 쉽습니다.

편안함을 느낄 수 있고 경험이 많은 언어를 골라 골라보십시오.

3

처음에는 성능에 대해 너무 걱정하지 않아도됩니다. 필요한 언어로 코드를 작성한 다음 필요에 따라 리팩토링하십시오.

당신은 항상/C++ 필요한 경우, Java 및 C/C++ 사이의 성능 차이는 그것이 무엇 ...

+0

코드베이스가 다른 언어로 포팅되면 코드가 특정 크기에 도달 한 후 시간이 많이 걸릴 수 있다고 덧붙입니다.사양에 가장 적합한 언어를 선택하는 것은 매우 중요하지만, 언어 선택이 차이를 만들 것이라고 제안하는 아주 적은 사양에는 아무것도 표시되지 않습니다. –

2

이 당신의 상황에 따라 근처에 아무데도 있지만, 자바 C를 호출하는 JNI 같은 것을 사용할 수 있습니다 C++보다 배포가 더 이상 필요하지 않습니다. 이는 주로 다음과 같이 요약됩니다. 생산 환경에서 테스트 베드와 동일한 환경을 보장합니까? C++에 대한 모든 현대적인 추가 기능을 통해 C++ 언어에 익숙하지 않은 이상 개발자가 Java를 쉽게 사용할 수 있다는 근거는 거의 없습니다.

성능 문제는 제외하고 말입니다. 실시간 시스템이 아니라면 아직 어떤 언어도 제거 할 이유가 없습니다. Java를 지능적으로 코딩하면 (예 : 가장 많이 사용되는 섹션에서 오브젝트 복사 및 쓰레기 생성을 피하기 위해 최선을 다해야합니다), 성능 차이는 계산 처리 프로세스에서 심각하게 눈에 띄지 않습니다.

나는 모두 당신이 실제 사용보다는이 두 언어의 교과서 정의에 너무 집중하고 있다고 생각합니다. 당신은 다른 것보다 하나를 선택하는 가장 중요한 이유를 정말로 부여하지 않았습니다.

+0

그 사람을 비추고있다 –

0

자바는 좀 더 이식성이 뛰어납니다. 그러나 내가 아는 한이 같은 것을위한 유일한 요소는 개인적인 취향입니다.

0

귀하의 문제를보다 자세히 설명하면 도움이 될 것입니다.

당신은 IK를 사용할 의향이 있습니다. 그것은 로봇 팔 조작을 암시 할 수 있습니다. 그것이 당신의 실시간 요구 사항입니다. 그것이 클래스 A 생산 라인에서 진행된다면 가비지 수집 언어로 벗어날 수 없을 것입니다.

자바가 훌륭합니다. 많은 코딩 시간을 절약 할 수있는 매우 성숙한 NN 라이브러리 (Neuroph, Encog)가 있습니다. 나는 어떤 IK 라이브러리도 모른다. 그러나 적어도 도움이되는 행렬 조작 라이브러리는 적어도있다.

Java의 가비지 수집이 점점 좋아지고 있습니다. 최근의 것 (G1)은 다른 어떤 것보다 훨씬 낫지 만, 심지어 그것으로 얻을 수있는 것은 부드러운 실시간입니다. 따라서 일시 중지없는 실행은 기대할 수 없습니다.

한편으로는 로봇 공학 및 인공 지능을위한 Matlab 도구 상자를 살펴볼 수 있습니다. 나는 이것이 가장 빠른 시제품을 산출 할 것이라고 생각한다.

생산보다 많은 경우 C 또는 C++로 인해 막혀 있습니다.

+0

일시 정지가 필요하면 적은 수의 물건을 만드십시오. 당신이 충분히 신경 쓰면 GC없이 하루 동안 실행되는 프로그램을 작성할 수 있습니다 (매우 드뭅니다) –

관련 문제