문제

많은 언어 의이 시대에는 거의 모든 작업에 대한 훌륭한 언어가있는 것처럼 보이며 나는 진언에 대해 전문적으로 어려움을 겪고 있습니다. "C 외에는 아무것도 빠르지 않습니다", Fast는 실제로"충분히 빠르기 "를 의미하는 곳입니다. 나는 숫자를 비교하고 싶어하는 매우 합리적인 열린 마음을 가진 사람들과 함께 일하고, 내가 가진 모든 것은 생각과 의견입니다. 당신은 내가 주관적인 의견과 과거의 길을 찾도록 도와 줄 수 있습니까? "실제 세계"로?

다른 언어가 임베디드 및 (Linux) 시스템 프로그래밍에 사용될 수 있다면 어떤 연구를 찾도록 도와 주시겠습니까? 나는 잘못된 가설을 밀고있을 수 있으며 이것을 보여주기위한 연구에 크게 감사 할 것입니다. "그/그녀의 의견 일뿐"의견을 최소로 유지하기 위해 링크하거나 좋은 숫자를 포함시켜 주시겠습니까?


그래서 이것들은 나의 특별한 요구 사항입니다

  • 메모리는 심각한 제약이 아닙니다
  • 이식성은 심각한 관심사가 아닙니다
  • 이것은 실시간 시스템이 아닙니다
도움이 되었습니까?

해결책

"아무것도 빠르지 않습니다 [충분히]는 초기 최적화이며 모든 이유가 잘못된 이유에 대해 잘못되었습니다. 시스템이 C 이외의 다른 것이 바람직하다는 충분한 복잡성을 가지고 있다면, 시스템의 일부가 "충분히 빠르야한다"는 부분과 가벼운 제약 조건이있는 부분이있을 것입니다. 예를 들어, Python에 코드를 작성하면 버그가 적어 프로젝트가 더 빨리 완료되면 일부 C 또는 어셈블리 코드로 후속 조치를 취하여 시간-중요 부품의 속도를 높일 수 있습니다.

성능 요구 사항을 충족시키기 위해 전체 코드가 C 또는 어셈블리로 작성되어야하는 경우에도 Python과 같은 언어로의 프로토 타이핑은 실질적인 이점을 가질 수 있습니다. 작업하는 Python 프로토 타입을 가져 가서 필요한 성능에 도달 할 때까지 부품을 C 코드로 점차적으로 교체 할 수 있습니다.

따라서 개발 작업을 가장 정확하고 가장 빨리 수행 할 수있는 도구를 사용한 다음 실제 데이터를 사용하여 최적화해야 할 위치를 결정하십시오. C는 때때로 시작하기에 가장 적합한 도구 일 수 있지만, 임베디드 시스템에서도 항상 그런 것은 아닙니다.

다른 팁

내 경험상 임베디드 및 시스템 프로그래밍에 C를 사용하는 것이 반드시 성능 문제는 아닙니다. 종종 휴대 성 문제입니다. C는 거의 모든 플랫폼, 특히 임베디드 시스템 플랫폼에서 가장 휴대가 가능하고 잘 지원되는 언어 인 경향이 있습니다.

임베디드 시스템에서 다른 것을 사용하려면 사용 가능한 옵션을 파악한 다음 성능, 메모리 소비, 라이브러리 지원 등이 상황에 "충분한 "지 여부를 결정하는 문제입니다.

임베디드 시스템에 C를 사용하면 몇 가지 좋은 이유가 있으며 그 중 "성능"은 미성년자 중 하나 일뿐입니다. 내장은 하드웨어에 매우 가깝습니다 필요 하드웨어와 통신하기위한 수동 메모리. 모든 API 및 SDK는 대부분 C에서 사용할 수 있습니다.

Java 또는 Mono 용 VM을 실행할 수있는 플랫폼은 몇 가지 밖에 없지만 부분적으로 성능에 영향을 미치지 만 비싼 구현 비용으로 인한 플랫폼이 있습니다.

성능 외에도 또 다른 고려 사항이 있습니다. C 또는 C ++에서 사용되도록 설계된 저수준 API를 다룰 것입니다..

SDK를 사용할 수없는 경우 더 높은 수준의 언어를 사용하여 시간을 절약하는 대신 문제가 발생합니다. 최소한, 당신은 많은 기능 선언과 지속적인 정의를 다시 만들게됩니다.

C :

  • C는 종종 프로세서의 컴파일러에서 지원하는 유일한 언어입니다.
  • 대부분의 라이브러리와 예제 코드는 C의 확률입니다.
  • 대부분의 임베디드 개발자는 수년간의 C 경험이 있지만 다른 경험은 거의 없습니다.
  • 직접 하드웨어 인터페이스 및 수동 메모리 관리를 허용합니다.
  • 어셈블리 언어와 쉽게 통합됩니다.

C는 앞으로 몇 년 동안 주변에있을 것입니다. 임베디드 개발에서 그것은 변화를 시도하는 독점입니다. Java 또는 Lua와 같은 VM이 필요한 언어는 임베디드 환경에서 주류가되지 않습니다. 컴파일 된 언어는 C보다 매력적인 새로운 기능을 제공한다면 기회가 될 수 있습니다.

웹에는 다른 언어간에 몇 가지 벤치 마크가 있습니다. 대부분의 사람들은 실제로 최적화 할 수 있도록 더 많은 제어를 제공하므로 상단에 C 또는 C ++ 구현을 찾을 수 있습니다.

예시: 컴퓨터 언어 벤치 마크 게임.

C (또는 Pascal, Modula-2, ADA와 같은 다른 절차 언어) 및 임베디드 어셈블리에 대해 논쟁하기는 어렵습니다. 그 언어에는 큰 성공의 역사가 있습니다. 일반적으로 미지의 위험을 제거하려고합니다. C 또는 어셈블리 이외의 것을 사용하려고 시도하는 것은 알려지지 않았습니다. 그러나 C로 이동하는 체계 중 하나를 스크립팅 언어로 사용하는 체계 중 하나를 사용하는 혼합 모델에는 아무런 문제가 없습니다.

당신이 원하는 것은 당신이해야 할 때 C에 빠르고 쉽게 갈 수 있다는 것입니다.

팀이 자신에게 입증되지 않은 것을 가지고 가도록 설득한다면, 프로젝트는 쿠키입니다. 그것이 무너지면, 그것은 당신의 잘못으로 보일 것입니다.

이 기사 (Michael Barr)는 임베디드 시스템에서 C, C ++, 어셈블러 및 기타 언어의 사용에 대해 이야기하며 각각의 상대적 사용법을 보여주는 그래프를 포함합니다.

그리고 여기에 다른 기사가 있습니다. C ++를 거부하는 가난한 이유.

특히 임베디드 시스템에서 실시간 성능이 필요한 상황이 있습니다. 또한 심각한 메모리 제약 조건이 있습니다. C와 같은 언어는 실행 시간과 실행 공간을 더 잘 제어 할 수 있습니다.

따라서, 당신이하는 일에 따라 C는 "더 나은"또는 더 적합 할 수 있습니다.

다음 기사를 확인하십시오

ADA는 임베디드 시스템 및 미션 크리티컬 시스템을 위해 설계된 고급 프로그래밍 언어입니다.

모든 곳에 데이터 점검이 내장되어있는 빠르게 안전한 언어입니다. 비행기의 자동차 조종사가 프로그래밍되는 것입니다.

~에 이 링크 Ada와 C를 비교할 수 있습니다.

당신은 그것을보고 싶을 수도 있습니다 프로그래밍 언어. 파이썬이 성능이 뛰어날 수있는 일부 영역이 있으므로 일부 성능 튜닝을 사용할 수 있습니다. 목록을 유지하지 않았지만 Peter Olsson이 지적한 이후로 비교를 벤치마킹하는 것을 실제로 지적 할 수는 없습니다. 벤치 마크 및 언어 구현 디지털 화성이 있습니다.

당신은 아마도이 사랑스러운 질문을보고 싶을 것입니다.

C는 보편적이며 거의 모든 아키텍처, 일반적으로 프로세서 가용성의 일일에서 이용할 수 있습니다. C ++는 가까운 초입니다. 시스템이 C ++를 지원할 수 있고 필요한 전문 지식을 가지고 있다면 C보다 우선적으로 사용하십시오. C만큼이나 그 이상이므로 사용하지 않는 이유는 거의 없습니다.

C ++는 더 큰 언어이며, 임베디드 시스템에서 자원을 소비하거나 용납 할 수없는 방식으로 행동 할 수있는 구성과 기술이 있지만 언어를 사용하지 않고 적절하게 사용하는 방법이 아닙니다.

Java 및 C# (Micro.net 또는 Wince)은 비실한 시간에 대한 실용적인 대안 일 수 있습니다.

나는 실제로 시스템/임베디드 프로그래머가 아니지만 내장 된 프로그램은 일반적으로 결정 론적 성능이 필요합니다. ~ 아니다 일반적으로 결정 론적. 그러나 결정 론적 쓰레기 수집에 대한 연구가있었습니다 (예 : Java의 Metronome : http://www.ibm.com/developerworks/java/library/j-rtj4/index.html)

문제는 제약 조건 중 하나입니다. 언어/런타임이 결정 론적, 메모리 사용량 등을 충족합니까?

C는 정말 최선의 선택입니다.

휴대용 C 코드를 작성하고 언어의 특정 컴파일러 또는 코너 케이스의 기능에 너무 깊이 들어가는 데 차이가 있습니다 (모두 피해야 함). 그러나 컴파일러 및 컴파일러 버전의 휴대 성. 코드를 개발하거나 유지 관리 할 수있는 직원의 수. 컴파일러는 더 쉬운 시간을 가질 것이며 더 깨끗하고 더 신뢰할 수있는 코드를 생산할 것입니다.

C는 아무데도 가지 않으며 모든 새로운 언어는 모든 이전 언어로 결함을 고정하도록 설계되었습니다. C,이 새로운 언어가 고치려고하는 모든 결함과 함께 여전히 강력합니다.

다음은 C#과 C ++를 비교하는 몇 가지 기사입니다.

http://systematicgaming.wordpress.com/2009/01/03/performance-c-vs-c/

http://journal.stuffwithstuff.com/2009/01/03/debunking-c-vs-c-performance/

임베디드 C 프로그래밍에 중점을 두지 않기 때문에 정확히 요청한 것이 아닙니다. 그럼에도 불구하고 흥미 롭습니다. 첫 번째는 C ++의 성능과 프로세서 집중 작업에 "안전하지 않은"코드를 사용하면 이점을 보여줍니다. 두 번째는 첫 번째 것이 다소 파괴되어 C# 코드를 조금 다르게 쓰면 성능이 거의 동일하다는 것을 보여줍니다.

따라서 C 또는 C ++는 많은 경우 성능 측면에서 명확한 승자가 될 수 있다고 말할 것입니다. 그러나 종종 마진이 얇아지는 경우가 종종 있습니다. C를 사용할지 여부는 또 다른 주제입니다. 제 생각에는 실제로 과제에 달려 있어야합니다. 그러나 임베디드 시스템에서는 종종 선택의 여지가 없습니다.

두 사람이 Lua를 언급했습니다. 임베디드 시스템과 함께 일한 사람은 LUA가 유용하다고 말했지만 실제로는 자체 언어 자체가 아니라 C에 내장 될 수있는 더 많은 라이브러리입니다. 임베디드 시스템에 사용을 대상으로하며 일반적으로 원하는 것이 좋습니다. C.에서 LUA 코드를 호출하려면 모든 사람이 알고 있기 때문에 순수한 C는 유지 보수를 더 간단하게 (반드시 더 쉽지는 않지만) 유지 보수를 만듭니다.

임베디드 플랫폼에 따라 메모리 제약이 문제가되는 경우 비가 베이지 수집 된 프로그래밍 언어를 사용해야 할 가능성이 높습니다.

C 이와 관련하여 C는 팀에 의해 가장 잘 알려져 있으며 사용 가능한 라이브러리 및 도구로 가장 널리 지원되는 것입니다.

진실은 항상 그런 것은 아닙니다.

.NET 런타임 (그러나 다른 런타임은 예제로 취할 수 있음)은 여러 MB의 런타임 오버 헤드를 부과합니다. 이것이 당신이 가진 전부라면 (RAM), 당신은 운이 좋지 않습니다. Javame은 더 컴팩트 한 것처럼 보이지만 여전히 모든 것이 귀하가 처분 한 자원에 달려 있습니다.

C 컴파일러는 데스크탑 시스템에서도 훨씬 빠릅니다. C ++와 비교되는 Langage 기능이 얼마나 많기 때문에, 내장 시스템에서는 차이가 없다고 생각합니다. OTOH는 C ++ (예 : 컬렉션)의 편의성이 없지만 장기적으로 속도를 늦출 수 있지만 더 빠른 반복 시간으로 해석됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top