최고의 ' 시스템 ' 기능성, 동시성 및 성능을 유리하게 결합하는 프로그래밍 언어?


최상의 답변

“시스템 프로그래밍”과 “최고”가 의미하는 바에 따라 다릅니다.

예를 들어 ATS (http://www.ats-lang.org/)는 모든 기준 등을 충족 할 수 있습니다. “높은 수준의 동시성 기능을 갖춘 안전한 언어이며 기능을 지원하지만 스타일, 매우 좋은 성능. “종 이상 최고 중 하나라도” “최고”가 아닐 수 있습니다. 사용하는 사람이 충분하지 않고 “다르게”보이기 때문입니다.

반대로 C는 여러 가지 이유로 끔찍합니다. 수동 메모리 관리는 버그의 큰 원인이되며 동시 설정에서 바로 잡기가 훨씬 더 어렵습니다. 개념적으로 금속에 가깝게 유지하면 다음 작업을 수행 할 수 없습니다. 작업 코드를 더 빠르게 생성 할 수 있도록 추상화하고 병렬화하기 어려운 수준에서 작성하도록 권장합니다. 반면에 다른 컴파일러가 부족한 하드웨어에서 실행해야하거나 커널 프로그래머를 고용해야하는 경우에는 최고의 시스템 프로그래밍 언어가 될 수 있습니다.

말하는 것이 고통 스럽지만, 디자인의 여러 측면에 근본적으로 동의하지 않기 때문에 Go를 살펴 보는 것이 좋습니다. 그들의 디자인 기준이 당신의 요구 사항에 상당히 잘 맞는 것 같습니다.

답변

당신이 추구하는 것은 둘 다 걱정할 필요가없는 추상화를 제공하는 “언어”인 것 같습니다. 관련된 복잡성에 대해 (즉, 처음부터 동시성을 구축 할 필요가 없음), 동시에 고성능 및 리소스 경제성이 있어야합니다. “시스템”의 작업이기 때문에 모든 하드웨어에 직접 연결할 수 있어야합니다. 대부분의 무거운 작업이 이미 분류 된 것입니다 (언어 나 라이브러리의 관용구 또는 둘 다). 또한 VM 대신 네이티브 컴파일러가 필요합니다.

이 경우 “최고”가 확실하지 않은 경우입니다. 많은 대안, 심지어 내가 아는 많은 소그룹이 있습니다. “정말” “최고”에 도달하려면 선입견없이 모든 언어 목록을 생성해야합니다. 그런 다음 생략하여 정제를 시작하십시오. 모든 요구 사항을 검토하고 언어 (또는 해당 도구)가 요구 사항에 적합하지 않은 요구 사항을 생략 (또는 최소한 목록에서 아래로 이동)하십시오.

추상화 요구 사항은 대부분 C 및 목록의 ilk, 아마도 C ++에 대한 새로운 업데이트는 여전히 실행 상태를 유지합니다.

모든 VM 기반은 아마도 어떤 측면 또는 다른 측면에서 실패 할 것입니다 (반드시 그런 것은 아니지만 어떤 방법이 필요합니다. 그것의 적어도 일부를 네이티브로 만들고 / 변환하는 것). 그래서 Java / PVM / DotNet / etc. 언어 군도 생략 할 수 있습니다.

하드웨어 링크는 꽤 많은 부분을 제거 할 수 있습니다.하지만 주변을 둘러보기 위해 하나 이상의 언어 (또는 언어 군)를 사용하는 것이 불가능하지는 않습니다. 예를 들어 전체 시스템 작업 스택에 C를 사용하는 것은 불가능합니다. 모든 시스템의 부팅 부분 중 적어도 일부는 어셈블리로 작성되고 그 위에 많은 시스템이 “C”부분. 대부분의 경우 “이미 만든 것을 사용”하거나 그들이 맞는 장소에 더 적합한 것을 사용하여 추가하는 상황입니다. 따라서 (동일한 맥락에서) 일부 라이브러리 / “플러그인”을 얻을 수 있습니다. 모든 언어가 하드웨어에 직접 영향을 미칠 수 있습니다. 이것이 성능이나 자원 경제와 같은 것을 제거하는지 여부는 테스트와 대안 적 조합 사고가 필요한 다른 문제입니다 (예 : Lisp의 액터 “스레드”에서 호출되는 원자 디스크 액세스 루틴을 C로 만들고 오버 헤드를 발생시킬 수 있습니까? 각각의 원자 호출은 자체 리소스를 사용하며 CFFI 호출로 인해 성능이 저하 될 수 있습니다.

그리고 흰 코끼리 (그리고 C가 널리 퍼져있는 주요 이유)가 예입니다. 훨씬 더 어렵습니다. 샘플을 찾기 어렵거나 존재하지 않는 다른 언어로 무언가를 시도하는 것입니다. “당신의 방식으로”똑같은 일을하는 것보다 먼저 그것을하는 것은 항상 극도로 어렵습니다.

이 방법을 사용하면 방대한 언어 목록의 큰 덩어리를 매우 빠르게 제거 할 수 있습니다.하지만 가장 시간이 많이 걸리는 작업은 각 언어를 조사하여 각 요구 사항에 대해 다른 언어와 비교하는 방법을 찾는 것입니다. 이것이 대부분이 귀찮게하지 않는 이유입니다 (장기적으로는) “더 나은”무언가를 더 빨리 만들 수 있다는 의미 일지라도 C와 같은 것을 고수하십시오.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다