C++에서 Python으로 전환해야 합니까?… 아니면 다른 언어인가요?[닫은]

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

  •  08-06-2019
  •  | 
  •  

문제

제가 일하는 회사에서는 파일 기반 트랜잭션 처리를 많이 합니다.처리는 수많은 회사의 수많은 시스템에 적합하도록 다양한 형식 간의 파일 변환을 중심으로 이루어집니다.

처리에는 거의 항상 다음이 포함됩니다. XML 단계이며 많은 텍스트 구문 분석, 데이터베이스 조회, 데이터 변환 및 데이터 유효성 검사가 포함될 수 있습니다.

현재 이러한 모든 작업을 수행하는 프로그램은 다음 언어로 작성됩니다. C++ 그리고 그들은 하나의 평균 서버에서 매우 빠르게 수행됩니다.나는 새로운 대학원 프로그래머들에게 더 친숙할 가능성이 더 높은 "현대적인" 언어를 사용할 수 있는 가능성을 조사하고 있습니다.(올바른 메모리 할당 C++ 요즘 많은 새로운 프로그래머들에게 문제를 일으키는 것 같습니다)

제공된 간략한 정보를 기반으로 Python과 같은 언어가 필요한 기능과 성능을 제공할 뿐만 아니라 메모리 할당(및 기타 다양한 문제)을 해결합니까? C++ 관련) 어떤 문제가 발생하나요?

나는 변경이 있을 때마다 프로그램을 컴파일할 필요가 없다는 생각을 좋아합니다.나는 해석된 언어가 현재 우리가 얻는 것과 같은 성능을 발휘하지 못할 것이라는 것을 이해합니다.

우리 시스템은 Linux 일부 옵션도 제한합니다.

사용 가능한 기능 및 성능에 대한 의견 Python 또는 대체 언어를 제안해 주시면 감사하겠습니다.

도움이 되었습니까?

해결책

나는 변경이 있을 때마다 프로그램을 컴파일할 필요가 없다는 생각을 좋아합니다.나는 해석된 언어가 현재 우리가 얻는 것과 같은 성능을 발휘하지 못할 것이라는 것을 이해합니다.

이것이 가장 큰 문제입니다.당신은 성능 히트와 함께 살 수 있습니까?Python을 사용해 볼 수도 있고 현재 C++ 모듈로 확장 성능이 무거운 부품을 위해.그럼에도 불구하고 유일한 이유가 C++ 재능의 부족이라면 전체 시스템을 전환하는 것은 큰 노력처럼 보입니다.C++를 아는 사람을 고용하는 것이 더 저렴한 옵션처럼 보입니다.

다른 팁

프로그램을 빠르게 작동시키는 것과 프로그램을 빠르게 작동시키는 것 중 어느 것이 더 중요합니까?

많은 수의 대용량 파일을 처리하는 경우 C++에 머물면서 대학원 프로그래머에게 포인터가 무엇인지 가르치는 것이 더 나을 수 있습니다(!)

그렇지 않으면 스크립팅 기반 솔루션을 살펴보는 것이 좋습니다. 왜냐하면 일단 속도를 익히면 이러한 개발이 훨씬 더 빨라지기 때문입니다.그리고 솔직하게 말하면 적어도 대부분의 사람들에게는 훨씬 더 재미있습니다.

레코드당 처리 로드가 높지 않은 경우 성능 손실이 얼마나 적은지 놀랄 수도 있습니다.파일 IO는 거의 확실하게 컴파일된(C) 라이브러리에서 처리되므로 인터프리터 오버헤드가 상대적으로 낮을 수 있습니다.시도해 볼 가치가 있다고 제안합니다.

명령형 언어 중에서 Perl이 확실한 옵션이고 Python이 인기가 있으며 Ruby는 높은 인지도를 갖고 있습니다(아마도 처음 두 언어보다 더 깔끔한 OO 기능일 것입니다).그 다음에는 함수형 언어의 좀 더 난해한 영역이 있습니다. 하지만 저는 이에 대해 논평할 자격이 없습니다.

Python은 아마도 애플리케이션에서 사용하는 대부분의 저수준 항목을 제거할 것입니다.메모리 할당은 더 이상 문제가 되지 않습니다.또한 적어도 제가 다니는 대학에서는 학생들이 시작하기 위해 공식적인 내용을 모두 작성할 필요가 없기 때문에 Python을 프로그래밍 언어로 수용하고 있는 것 같습니다.유일한 문제는 성능 부분입니다. Python은 컴파일된 C++ 프로그램만큼 빠르지 않을 것이기 때문입니다.

나는 당신이 고려하고 있는 프로그래밍 언어를 알아가는 데 몇 주가 걸릴 것을 조언하고 싶습니다.Ruby도 확인해 보겠습니다.Haskell을 조금 가지고 놀아볼까요?

내가 이해하기로는 Python은 당신이 말하는 모든 것을 처리하는 데 잘 갖춰진 것 같습니다.XML, 데이터베이스 조회, 유효성 검사, 구문 분석.쉽고 재미있는 프로그래밍 경험 때문만이 아니라, 막히면 기꺼이 도와줄 멋진 언어 관련 커뮤니티가 있기 때문에 일반적으로 안전한 선택입니다.

또 다른 대안은 C++ 프로그램에 Python을 포함시키는 것입니다.애플리케이션의 대부분을 동일하게 유지하고 자주 변경되는 부분에 대해 Python을 호출하거나 스크립팅 언어가 제공하는 유연성이 필요한 부분을 호출할 수 있습니다.

로부터 파이썬 문서

이전 장에서는 Python을 확장하는 방법, 즉 C 함수 라이브러리를 연결하여 Python의 기능을 확장하는 방법에 대해 논의했습니다.다른 방법으로도 할 수도 있습니다.Python을 포함하여 C/C ++ 응용 프로그램을 풍부하게하십시오.Embedding은 응용 프로그램에 C 또는 C ++가 아닌 Python에서 애플리케이션 기능의 일부 기능을 구현할 수있는 기능을 제공합니다.이것은 많은 목적으로 사용될 수 있습니다.한 가지 예는 사용자가 Python에 일부 스크립트를 작성하여 응용 프로그램을 자신의 요구에 맞게 조정할 수 있도록하는 것입니다.일부 기능 중 일부를 파이썬으로 더 쉽게 작성할 수 있다면 직접 사용할 수도 있습니다.

이런 말을 하기는 싫지만, 신입 개발자가 익숙해질 수 있는 것을 원한다면 Java를 선택하세요.Java는 최근 졸업생들에게 가장 친숙한 언어입니다.여전히 컴파일해야 하지만 컴파일 시간은 C++보다 짧습니다.Linux와 거의 모든 곳에서 실행됩니다.좋은 가비지 수집기가 있습니다.꽤 빠릅니다.그리고 귀하의 개발자가 이에 대해 잘 알고 있을 것이라고 제가 언급했습니까?아니요, Python처럼 "멋진" 것은 아니지만 매우 검증된 언어입니다.

솔직히 말해서, C++에는 형편없지만 어쨌든 Python에는 굉장할 것 같은 신입 개발자가 많을지 의심스럽습니다.Python을 잘 사용하는 사람들은 수동 메모리 관리에 능숙한 경향이 있습니다.메모리 관리에 능숙하지 못한 사람들은 실제로 모든 언어에 능숙하지 못한 경향이 있습니다.

메모리 관리에 너무 능숙하지 않아서 언어를 바꾸고 싶어하는 개발자가 있다는 것이 걱정스럽습니다.그건 문제가 있다는 신호인데, 언어에 문제가 있는지는 잘 모르겠습니다.

컴파일된 언어를 사용하는 데 문제가 없다면 C++를 사용하고 좋은 라이브러리 세트를 선택하고 초보자에게 올바른 사용과 견고한 패턴 준수에 대해 가르칠 것을 제안합니다.

좋은 라이브러리 세트를 찾으면 초보자도 견고한 코드 작성을 쉽게 배울 수 있습니다.내 (현재) 개인적 선호는 Qt 클래스 라이브러리입니다. 메모리 처리가 쉽고 안전하며 작업하기 즐거우니까요.또한 XML 구문 분석 및 생성을 지원하고 정규 표현식이 내장되어 있으며 네트워크 기능이 있으며 크로스 플랫폼입니다.GUI가 아닌 시스템에도 매우 유용합니다.

나에게는 일반 C++, std 라이브러리 및 STL을 사용하여 작업하는 것과 Qt와 같은 강력한 라이브러리를 사용하여 작업하는 것 사이에는 큰 차이가 있습니다.아마도 부스트 상품을 살펴보는 것도 매우 가치가 있을 것입니다.

그루비를 시도해 보는 것이 좋습니다.XML 지원은 훌륭하며 구문 분석 및 데이터 유효성 검사가 어렵지 않습니다.

그러나 일부 사람들은 마이그레이션이 가장 좋은 아이디어가 아닐 수도 있다고 지적했습니다.새로운 프로그래머가 기존 조각만 복제하는 오류가 발생하기 쉬운 새 코드를 작성하는 대신 C++ 라이브러리를 사용할 수 있도록 일반적인 내용을 "macher 개체" 및 "개체 유효성 검사"로 분류할 수 없습니까?

또한 C++의 IO와 같은 C가 아닌 최신 파일 IO(iostreams)를 사용하면 메모리 문제에 많은 도움이 될 것입니다.

또한 부스트 라이브러리를 살펴보는 것도 도움이 될 수 있습니다.

Python의 성능은 매우 큰 문제가 될 수 있습니다.한번은 작업 목록에 최적화 알고리즘이 포함된 프로그램을 만들어야 했습니다.저는 Python으로 시작하여 매우 빠르고 깔끔하게 만든 다음 결과를 제공하는 데 오랜 시간이 걸릴 것이라는 것을 알았습니다.C++로 한 줄씩 다시 작성하면 다음과 같은 결과가 발생합니다. 100배 속도 개선...

따라서 때로는 보시다시피 5~10%의 성능 손실이 문제가 되지 않습니다.귀하의 경우에는 이를 조사해야 합니다(약간의 테스트?).

아니면 코드 내부에 하드 코딩된 구문 분석 규칙을 두는 대신 데이터베이스에 구문 분석 규칙을 저장해야 합니다.처럼 켄 다운스 올바르게 인용되었으며, 코드 최소화, 데이터 최대화.이렇게 하면 작은 규칙이 변경될 때마다 다시 컴파일할 필요가 없습니다.

Python, Ruby, Groovy 또는 Perl을 사용하여 벗어날 수 있다면C++에서는 이러한 상위 수준 언어 중 하나를 사용하는 것이 더 나을 것입니다.생산성이 크게 향상됩니다.더 많은 성능이 필요하다고 생각되면 Java를 사용하십시오.모든 사람은 최소한 하나의 동적 유형 언어를 알고 사용해야 합니다.

c/C++로 더 빠르게 이동해야 하는 경우 네트워킹에서 모든 것을 가능하게 하는 Python으로 이동해야 합니다.

당신이 하고 있는 프로젝트의 성격상 그런 움직임을 고려할 수 있다면, 움직이십시오(단서가 있다는 가정 하에).그러나 많은 C++ 프로젝트에서 유일한 선택은 이동입니다. 아래에 하나 또는 두 개의 추상화 수준(예: C 또는 어셈블리)

나는 다른 사람들의 의견에 동의합니다. C++를 사용해야 합니다.컴파일되지 않은 언어로 전환하는 것은 한 단계 뒤로 물러나는 것입니다.많은 프로그래머가 언어의 일부 성가신 측면(예: 포인터)을 처리하는 데 어려움을 겪을 수 있지만 적어도 대부분의 프로그래머는 일부 C++에 노출되어 있습니다.언어를 바꾸는 것보다 코드베이스와 프로그래머를 개선하는 데 시간과 돈을 투자하는 것이 좋습니다.

다른 언어의 경우 GO lang을 계속 주시하고 싶을 수도 있습니다.내 친구가 그것을 상당히 광범위하게 사용했습니다.현대적으로 컴파일된 언어입니다.명확하고 간결하며 현대적인 경향이 있습니다.GO 애플리케이션은 일반적으로 C++로 작성된 것과 비슷한 속도로 실행되며 웹과도 잘 인터페이스됩니다.현재로서는 그다지 성숙하지는 않지만 유망해 보입니다.

행운을 빌어요!

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