코드 베이스를 마이그레이션할 때 가장 좋은 차세대 저수준 언어는 무엇입니까?[닫은]

StackOverflow https://stackoverflow.com/questions/1815613

  •  07-07-2019
  •  | 
  •  

문제

C/C++를 많이 실행하는 회사가 있고 15년 전의 COBOL 회사처럼 되지 않도록 새로운 기술로의 마이그레이션 계획을 시작하고 싶다고 가정해 보겠습니다.

현재로서는 C/C++가 훌륭하게 실행되며 시장에 이를 위한 많은 개발자가 있습니다.

하지만 실행 중인 코드 베이스의 규모와 데이터 민감도를 고려할 때 예산과 개발팀에 과부하를 주지 않고 다음 단계로 이동하는 데 5~10년이 걸릴 수 있다고 생각하기 때문에 지금부터 생각해 보시기 바랍니다.

당신은 들어본 적이 있을 것입니다. , 꽤 성숙해지기 시작했고, 가다, 꽤 인기가 있을 것으로 예상됩니다.

당신의 선택은 무엇이며 그 이유는 무엇입니까?

도움이 되었습니까?

해결책

D와 Go는 아마도 Python과 Ruby만큼 인기가있을 것입니다. 그들은 각각 틈새 시장을 채우고, D는 C ++의 본격적인 교체 인 것으로 추정되었지만 C ++를 밀기에 충분한 질량을 얻지 못할 것입니다. 둘 다 충분히 안정적/성숙하지 않다는 것은 말할 것도없고, 당시 전류 하드웨어 및 운영 체제에 대해 10-20 년 안에 이러한 언어를 지원할 것인지는 알 수 없습니다. C/C ++를 고려하는 것은 거의입니다 그만큼 컴파일 된 언어는 대부분의 운영 체제 및 기본 코드 응용 프로그램에서 사용되며, 미래에 사라질 가능성은 거의 없습니다.

다른 팁

C와 C ++는 기본/관리되지 않은/"낮은 레벨"언어와 관련하여 거의 탁월한 콤보입니다.

그들이 최고의 언어가 아니기 때문에가 아니라 그곳에 있기 때문에 일을하고 있으며, 그들은 일을하고 있습니다. 충분하다. 예를 들어 D가 대부분의 측면에서 C ++보다 낫다는 데는 의심의 여지가 없습니다. 그러나 가장 중요한 것은 실패합니다 : 모든 기존 C ++ 코드와의 호환성. 그러한 요구 사항이 없으면 대부분의 코드는 오늘날 관리되는 언어로 작성됩니다. 오늘날 많은 코드베이스가 C ++를 사용하는 유일한 이유는 작년에 사용했기 때문에 다른 것으로 전환하기에는 너무 많은 고통이 될 것입니다. 하지만 만약에 그리고 언제 그들은 일반적으로 D로 전환하지 않습니다. 그들은 C# 또는 Java 또는 Python으로 전환합니다.

D와 동일한 틈새 시장을 놓고 경쟁하는 다른 "다가오는"언어의 문제는 더 좋지만 사람들이 실제로 전환하도록 동기를 부여 할만 큼 획기적이지 않다는 것입니다.

그래서 C와 C ++는 여기에 있습니다. C는 훨씬 더 진화하지 않을 것입니다. 그것은 그대로이며, 그것이 채워야하는 틈새 중 하나는 "컴파일러 작가들에게도 단순성"입니다. 표준을 다시는 수정하지 않더라도 그 틈새 시장에서는 다른 언어가 이길 수 없습니다.

C ++는 C ++ 0X가 점점 가까워지면서 훨씬 더 극적으로 진화하고 있으며 이미 원하는 큰 기능 목록을 얻었습니다. 나중에. C ++는 어떠한 방식 으로든 막 다른 골목이 아닙니다.

두 언어 모두 여기에 있습니다. 아마도 50 년 동안 다른 언어가 교체했을 것이지만, 이번 10 년 동안 일어나지 않을 것입니다.

저는 현재 D를 정기적으로 사용하고 있습니다.프로덕션 코드를 작성하는 사람들에게는 아직 권장하지 않습니다. 너무 최첨단이기 때문입니다.내 코드의 대부분은 생물정보학의 연구 프로토타입이기 때문에 나는 그것을 무시합니다.그러나 언어가 안정되기 시작했습니다.안드레이 알렉산드레스쿠(Andrei Alexandrescu)는 내년 3월 "The D 프로그래밍 언어"라는 책을 출간할 예정이며, 현재 책 출간에 맞춰 언어 버전 2의 사양을 안정화시키려는 노력이 진행 중입니다.

D는 C의 공식적인 상위 집합은 아니지만 전처리기가 없다는 점을 제외하면 관용적 상위 집합이라고 부릅니다.즉, C로 작성된 모든 코드(전처리기 무시)는 재설계 없이 간단하게 D로 변환될 수 있습니다. 왜냐하면 포인터 및 인라인 ASM과 같은 C 개념이 D에서도 C와 동일하게 작동하기 때문입니다.D는 C 코드에 대한 직접 연결도 지원하며 D 표준 라이브러리에는 전체 C 표준 라이브러리가 포함되어 있습니다.

또한 D는 여전히 최첨단 언어이기 때문에 라이브러리가 부족함에도 불구하고 메타프로그래밍 기능 때문에 라이브러리 작성자의 꿈입니다.그것이 성공한다면 아마도 꽤 인상적인 라이브러리를 갖게 될 것입니다.이에 대한 미리보기는 D2 표준 라이브러리(Phobos)의 std.range 또는 std.algorithm을 참조하세요.또 다른 예로, 특별한 컴파일러 지원 없이 OpenMP와 유사한 병렬 처리 모델(병렬 foreach, 병렬 맵, 병렬 축소, 미래)을 D의 순수 라이브러리로 구현했습니다.(보다 http://cis.jhu.edu/~dsimcha/parallelFuture.html)

당신이 주로 장기적인 것에 관심이 있다는 점을 감안할 때 D를 안정화하는 데 6개월을 주고(Andrei의 책과 현재 언어를 안정화하려는 노력을 고려할 때 버전 2는 그때쯤 안정되어야 함) 다음을 자세히 살펴보겠습니다. 그것.

편집하다:이제 핵심 언어 사양이 비교적 안정적이고 초점이 툴체인 및 라이브러리 개발로 바뀌었으므로 ~일 것이다 매우 위험을 회피하는 환경이 아닌 한 소규모 생산 프로젝트에는 D를 권장합니다.그러나 좋은 툴체인과 라이브러리 지원이 절대적으로 필요한 대규모 프로젝트는 아직 기다려야 합니다.

린 제조 원칙을 믿는다면 "가능한 한 늦게 결정"을 위해 노력해야합니다. 순간은 마지막 책임있는 순간이어야합니다. 즉, 결정을 내리지 못하는 순간은 중요한 대안을 제거합니다.

이 원칙은 귀하의 상황에 적용될 수 있다고 생각합니다. 지금은 언어에 헌신하는 대신 (10 년 안에 알지 못하는 것도) 옵션을 열어야합니다. 코드 중 일부를 리팩터링하므로 조금 더 일반적인 것이거나 더 많은 추상화에 구축되므로 실제로 마이그레이션해야 할 때 프로세스가 더 쉬워집니다.

C 및 C ++를 고수하십시오. 나는 그것이 COBOL의 길을 보지 못하는 것을 보지 못하고, 그것은 무엇이든 실행되며, C 및 C ++에서 코드를 찾는 사람들을 찾는 데 아무런 문제가 없을 것입니다.

C++ - 비교적 젊고 업데이트되었습니다 ... 많은 수의 컴파일러 공급 업체가 있으며 항상 개선되었습니다.

C - 어셈블러와 고급 언어 사이의 간격을 채우는 것은 오랫동안 살 것입니다. 또한 언어를 구현하기가 매우 간단하고 쉽기 때문에 내장 또는 매우 새로운 것과 같은 다양한 "이상한"아키텍처의 첫 번째 언어로 남아 있습니다.

D 유망하지만 여전히 새롭고 불안정한 사양 및 라이브러리입니다.

Go 몇 주 전에 태어났습니다 ... 큰 중요한 프로젝트를 위해 버전 0의 어떤 것도 사용하지 마십시오. 또한 훨씬 더 제한적입니다 C++ 또는 D.

2019 업데이트 : C ++는 향후 10 년 동안 머무를 것입니다 ...

회사가 오늘날 COBOL과 함께 일하는 이유는 B/C입니다. 이미 수백만 개의 COBOL 코드가 작성되어 있습니다. 던질 수 있다면 - 한 번에 할 것입니다. 반면에 회사는 C/C ++와 함께 자신의 요구 와이 언어 B/C를 사용하는 새로운 프로젝트의 일부로 일하면서 Java를 사용하고 싶지 않습니다. /c# 다른 프레임 워크 기반 언어 - 따라서 COBOL은 여기서 유추하지 않습니다.

Dsimcha가 말했듯이 D Way는 현재 위험하다. 그러나 언어는 큰 잠재력을 가지고 있으며, 낮은 수준이며 (C ++ 대신) D를 사용하여 크게 더 나은 생산성을 경험했습니다. 아마도 사람들이 역동적 인 언어로 느끼는 것.

Go는 블로그 마켓이 너무 많아서 나에게 농담처럼 보입니다. 인터페이스 방법을 발송하는 것은 사소한 것이 아니며 실제로 정기적 인 단일 상영 방법을 발송하는 것보다 느리게 진행됩니다.

거대한 코드베이스를 가지고 있다면 결정이 더 어렵다. 나는 기존 프로젝트가 아니라 새로운 프로젝트를 위해 전환하는 것이 좋습니다.

나는 언어에 집중하지 않고 주변의 도서관에 더 집중할 것입니다. 부스트 라이브러리와 함께 C ++는 훌륭한 선택입니다. C ++로 발전하는 사람들은 컴퓨팅을 더 잘 이해하는 경향이 있습니다. 저는 Java로 시작하여 많은 근본적인 것들을 숨겨서 내 인생을 편하게 만들었습니다. C ++ (포인터 등).

C ++가 어려울 수 있다는 것을 알고 (예 : 메모리 관리) 성능이 필수적이지 않은 '언어 추가'언어를 갖는 것이 좋습니다. (== 유지 가능성) 점수가 높아집니다.

C ++ 소프트웨어를 실행하는 수많은 머신이 있으며, 한 번에 종료되는 것을 보지 못합니다. C ++가 COBOL에 방해가되면 응용 프로그램 마이그레이션을위한 막대한 시장이있을 것입니다. C ++ 애플리케이션을 The Time의 인기있는 언어 (z ++ ???)로 변환하기 위해 개발 된 특수 도구가 있습니다.

그래서 나는 당신이 다리에 올 때 그 다리를 건너는 것이 가장 좋은 조언이라고 생각합니다.

체크 아웃 Intel® CILK ++ 소프트웨어 개발 키트 C ++/멀티 코어 개발에 대한 관심을 불러 일으키고 싶다면. 나는 곧 C 또는 C ++가 곧 사라지는 것을 볼 수 없다.

C*를 Cobol과 비교하는 것은 의심스럽습니다.

C*를 Cobol과 비교하면 잘못된 결론을 내릴 수 있습니다.C는 당시에 완벽했고 도입 당시 큰 도약을 이루었으며 오늘날에도 여전히 그 역할을 수행하고 있습니다.

내가 가장 자선을 베푼 날에 Cobol을 다음과 같이 요약하겠습니다.좋은 시도".

C와 C++는 구현 언어뿐만 아니라 요구 사항에도 잘 맞기 때문에 오랫동안 살아남을 것입니다.이것은 결코 변하지 않을 것입니다.

또한 C/C++의 주요 부정적인 문제는 메모리 안전성이 부족하다는 점을 고려하십시오.코드가 성숙해짐에 따라 이는 문제가 점점 줄어드는 경향이 있습니다.이는 기존 코드를 교체할 심각한 이유가 없음을 의미합니다.

나는 소프트웨어 시스템이 C에서 벗어나 성장할 것으로 기대합니다.오늘의 계층구조를 살펴보세요.

  • Rails와 같은 프레임워크로 작성된 애플리케이션
  • Ruby, PHP, Python, C# 등으로 작성된 애플리케이션 백엔드
  • Ruby, PHP, Python 또는 C# 런타임 구현(C*로 작성)
  • OS 커널(C89로 작성)

나는 오래된 레이어가 사라질 것이라고 생각하지 않으며 C 및 C++로 작성된 레거시 상위 레이어는 무기한으로 지원되며 결국 Ruby, Python, C#으로 작성된 대체 레이어로 인해 단계적으로 중단될 것이라고 생각합니다. 또는 미래의 발전.

우리는 Go가 수용을 찾을 것인지 전혀 모른다. Google에 의한 것만으로는 충분하지 않을 것입니다.

디? 글쎄, 몇 가지 좋은 것들이 그것에 대해 말하고 있지만 이륙하지 않을 것입니다. 말할 사용자 기반이 없습니다. D는 #20에서 인기가 있습니다 Tiobe Index, 그리고 빠르게 떨어집니다.

언어의 인기는 회사의 작업에 얼마나 적합한 지와 관련이 없다고 말할 수 있습니다. 그러나 프로그램을 프로그램 할 자격이있는 사람들을 찾는 것이 얼마나 쉬운 지와 관련이 있습니다.

자바 맨 위에 있고 앞으로 20 년 안에 멀리 갔다면 놀랄 것입니다. 시스템 프로그래밍 언어로 간주되지는 않지만 Java에서 할 수없는 C ++에서 수행 할 작업이 거의 없을 정도로 성능이 뛰어납니다. 확실히 요즘 아무도 쓰레기 수집가가 수행 한 작업 (완벽하고 종종 더 효과적으로)으로 인간 프로그래머를 기꺼이 임무를 수행하지 않습니다. 나는 Java가 프로그래밍 효율성 측면에서 C ++에서 상당한 단계 상승으로 간주했습니다.

나는 꽤 감명 받았다 루비. 우아하고 표현력이있는 언어입니다. 코드가 너무 많지 않은 상태에서 많은 것을 달성 할 수 있지만 코드는 여전히 일반적으로 읽을 수 있습니다. 루비의 주요 원칙 중 하나는 일관성이 있고 개발자에게 놀라움을 느끼지 않는 것입니다. 이것은 매우 좋은 아이디어, IMO이며 생산성을 높입니다. 큰 Rails 과대 광고 (여전히 진행 중일 수 있음) 시점에서, 나는 Ruby 주위에 넓은 정박을 만들었습니다. 그러나, 그 Jruby 태양의 사람들은 JVM에서 그것을 금식하게 만들었으므로 이제는 확실히 고려할 가치가 있습니다. Ruby는 실제로 FP 언어로 간주되지는 않지만 클로저와 소수의 기능적 프로그래밍 기능을 제공합니다 (이 중요한 이유는 아래 참조). Tiobe Index : 10 및 상승.

미래를 위해 고려해야 할 것은 CPU 제조업체가 물리학에 의해 부과 된 성능 제한에 반대했다는 사실입니다. 과거와 마찬가지로 더 이상 크리스마스마다 30% 더 빠른 CPU를 사용할 수 없습니다. 이제 더 많은 성능을 얻으려면 더 많은 코어가 필요합니다. 소프트웨어 개발에는 멀티 코어 동시 프로그래밍을 지원하는 데 얻을 수있는 모든 도움이 필요합니다. C ++는 주로 이것으로 당신을 혼자 남겨두고 Java의 솔루션은 현대 표준에 의해 끔찍합니다.

이를 고려할 때 기능 프로그래밍에 대한 특정 경향 (동시성과 관련된 많은 번거 로움을 제거)과 동시성 지원이 향상된 언어가 있습니다. Erlang 이를 위해 특별히 작성되었으며 실행중인 프로그램에서 코드를 교환 할 수있는 기능을 위해 작성되었습니다 (Ericsson은 놀라운 업 타임을 원했습니다). 스칼라 Java와 유사하지만 기능 프로그래밍 및 동시성을 훨씬 강력하게 지원합니다. Clojure, ditto, 그러나 그것은 lisp이고 그것은 상위 50 대에 있지도 않습니다 (아직 !!).

Scala는 학자가 개발되었으며, 그것을 보여줍니다. 그것은 데이터 유형에 대해 정교하고 완전한 pedantic입니다. 그것은 스위스 군대의 프로그래밍 언어 나이프가 되려고 노력합니다. 나는 많은 중간 스마트 프로그래머들이 스칼라를 잡는 데 어려움을 겪을 것이라고 생각합니다. Ruby는 FP가 적고 동시성에 대해 그리 많지 않지만 실용적이며 재미 있고 쉽게 작업을 수행하기가 쉽습니다. 또한 JVM에서 실행하면 Java 라이브러리에는 엄청난 양의 코드가 있습니다. 인터페이스 할 수 있습니다. 그래서:

내 베팅은 스칼라에서 외부 기회와 함께 루비에있을 것입니다. 그러나 많은 대안이 있습니다!

자바. 대부분의 낮은 수준의 경우 Java는 요즘 괜찮습니다. 왜 D와 같은 C/C ++에 대한 부분 솔루션을 사용하거나 Java와 같이 안전하고 쉽게 개발할 수있을 때 이동합니까? 실시간 솔루션을 찾고 있다면 D와 Go는 확실히 ~ 아니다 말할 것도없이 말할 것도없이 아마도 그들이 자바보다 덜지지 될 것입니다.


Java는 이제 시스템 프로그래밍 언어입니다. 포인터 "Next Gen"과 같은 안전하지 않은 구조물로 무엇이든 고려할 수있는 방법을 모르겠습니다. 불안한 구성이 존재했던 유일한 이유는 튜링 완전한 언어를 구축하는 데 실용적인 접근 이었기 때문입니다. 개별 대상에서 메모리를 표현할 걱정은 없었습니다. 왜냐하면 그들은 단지 무언가를 만들고 싶었 기 때문입니다. 일했다. Java, 다양한 하드웨어 바이트 코드 프로세서 및 Java를 실행하는 20 억 개가 넘는 모바일 장치가 이미 단단하고 부드러운 실시간 애플리케이션이 있습니다. 최대의 모든 것은 장치와의 상호 운용성을위한 구성을 추가하는 것입니다. C/C ++에서도 여전히 이러한 구성을 추가해야합니다 ...

당신은 무엇을 프로그래밍하고 있습니까? 1KB RAM이있는 8 비트 마이크로 컨트롤러? 이 경우 해당 플랫폼의 어셈블러 이외의 다른 것을 사용하는 것은 무의미합니다 ...

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