C언어를 대체하라! 많은 Python 개발자가 Rust 팀에 합류하고 있습니다

 앞으로 점점 더 많은 라이브러리가 Python을 프런트 엔드(프로그래밍 효율성 향상)로 사용하고 Rust를 백 엔드(성능 향상)로 사용할 것입니다.


파이썬


Rust는 고성능 Python 패키지의 "백엔드"로 C를 대체하고 있습니다. 그 이유는 무엇입니까?


먼저 동기를 생각해 봅시다. Python은 작성하기 쉽지만 실행 속도가 느린 문제가 있습니다. 특히 Python은 속도가 매우 느리고 순수 Python으로는 고성능 라이브러리를 작성하기가 어렵기 때문에 데이터 처리 라이브러리를 작성할 수 없습니다. 그러나 Python은 기계 학습 및 데이터 엔지니어링의 기본 언어입니다. 따라서 데이터 엔지니어나 기계 학습 엔지니어를 위한 라이브러리를 작성하려고 하면 다음과 같은 문제에 직면하게 됩니다.


API를 Python으로 작성해야 하지만 Python만으로는 고성능 데이터 처리 작업을 수행할 수 없습니다.

이는 라이브러리 작성에 다음과 같은 옵션이 있음을 의미합니다.


당신이 C를 배우고 사용하거나, 다른 누군가가 C를 배우고, 라이브러리를 작성하고, 당신은 그 라이브러리에 의존하여 낮은 수준의 작업을 수행할 수 있습니다.

C 언어에 익숙한 사람이라면 “이게 무슨 문제가 있는 걸까요?”라고 물을 수도 있습니다. 많은 라이브러리 작성자는 수치 계산을 NumPy 또는 SciPy에 아웃소싱할 수 있습니다. “나는 배울 수 있어.”라고 생각할 수도 있습니다.


그러나 상황은 그리 이상적이지 않습니다. 일부 작업을 NumPy, SciPy 등과 같은 라이브러리에 아웃소싱하는 것이 편리하지만 모든 기능을 벡터화해야 하며 for 루프에 코드를 작성할 수 없습니다. 또한 GIL(Global Interpreter Lock)에 의해 특정 작업이 차단되는 것에 대해 걱정해야 하며 그 외에도 다양한 문제가 있습니다. 당신이 하고 싶은 모든 것을 이미 존재하는 라이브러리에서 쉽게 찾을 수는 없습니다.


따라서 또 다른 방법이 있습니다. C로 라이브러리를 처음부터 작성하고 나중에 Python 바인딩을 추가하는 것은 어떻습니까? 그러나 Python 배경이 있는 경우 C를 사용하여 낮은 수준의 코드를 작성하는 것은 매우 낮은 수준으로 느껴지며 언어를 배우는 데는 노력이 필요합니다. Null 포인터 역참조, 버퍼 오버플로, 메모리 누수 등은 C 언어를 사용할 때 발생할 수 있는 함정이며 Python을 처음 배우는 프로그래머에게는 생소합니다.


C만큼 빠르고 메모리 효율적이지만 수동 메모리 관리나 가비지 수집이 필요하지 않은 언어가 있다면 얼마나 좋을까요? 언어에 좋은 Python 도구 지원과 계속 확장되는 개발자 커뮤니티가 있다면 좋을 것입니다.




Rust는 빠르고 효율적으로 메모리를 관리합니다. 따라서 동시 및 병렬 프로그래밍이 더 쉬워집니다. Rust에는 훌륭한 도구, 친숙한 컴파일러, 크고 활동적인 개발자 커뮤니티가 있습니다. Rust는 프로그램을 더 빠르게 만들고 학습하는 동안 더 많은 친구를 사귈 수 있게 해줍니다.


가장 중요한 점은 Python 개발자가 Rust를 C보다 배우기 쉽다는 것입니다.


이는 "첫 번째 수준" 경험을 향상시키고 초보자가 "안전한" 코드를 더 쉽게 작성할 수 있게 해줍니다. 학습 곡선이 더욱 매끄러워져 시간이 지남에 따라 점차적으로 고급 언어 기능을 익힐 수 있습니다.


따라서 지난 몇 년 동안 점점 더 많은 고성능 라이브러리가 Python을 프런트 엔드로, Rust를 백 엔드로 선택하고 있습니다. 예:


Lance: 고성능, 저비용 벡터 데이터베이스입니다.

설립자 Chang She와 Lei Xu는 원래 C++로 코드 라이브러리를 작성했지만 더 이상 CMake를 사용할 필요가 없게 되자 Rust로 전환하기로 결정했습니다. Chang이 이런 결정을 내린 이유는 다음과 같습니다.


“C++에서 Rust로 전환하기로 결정한 이유는 성능 저하 없이 더 효율적으로 작업할 수 있고 CMake를 다룰 필요가 없기 때문이었습니다. 저는 기본적으로 Rust를 처음부터 배우기 시작했고, 배우는 동안 Lei와 저는 우리 Rust에서 약 4개월 분량의 C++ 코드를 다시 작성했으며, Rust에서 새로운 기능을 작성하고 출시할 때마다 다른 모든 명령을 실행할 때마다 세그폴트가 발생하지 않을 것이라는 확신이 커졌습니다. 그런 일이 일어날까봐 걱정할 필요는 없어요.”


Rust는 데이터 처리에 매우 적합할 뿐만 아니라 고성능 요구 사항이 있는 다른 많은 Python 패키지의 백엔드 역할도 할 수 있습니다.


Pydantic: 개발자를 위한 Python 검증 라이브러리입니다.

Pydantic 팀은 Rust로 두 번째 버전을 다시 작성했으며 간단한 모델에서도 성능이 20배 향상되었습니다. 성능 향상 외에도 Rust에는 여러 가지 다른 이점이 있습니다. Pydantic 창립자인 Samuel Colvin은 몇 가지 장점을 언급합니다.


“Rust의 또 다른 점은 속도 외에도 Rust로 작성된 코드가 일반적으로 사용 및 유지 관리가 더 쉽다는 것입니다. 특히 Rust는 가능한 모든 오류를 포착하고 처리합니다. , Python(및 TypeScript) 유형 시스템은 이러한 오류를 무시하는 경향이 있으므로 'foobar()'를 호출할 때 어떤 상황에서 어떤 예외가 발생할 수 있는지 잘 모르겠습니다. 기본적으로 가능한 실패를 찾기 위해 반복적으로 노력해야 합니다.”


Python과 Rust의 결합


앞으로는 점점 더 많은 라이브러리가 Python을 프런트 엔드로, Rust를 백 엔드로 사용할 것입니다. 전반적으로 오늘날 Python 개발자는 고성능 라이브러리를 구축하는 데 더 좋고 원활한 접근 방식을 가지고 있습니다.

댓글

이 블로그의 인기 게시물

KB차차차에서 중고차 브랜드, 모델, 가격등을 효율적으로 스크랩하기

한국 생활에 필수적인 10가지 AI 도구, 당신은 다 알고 있나요?

한국에서 가장 많이 사용하는 웹 스크래핑 도구 비교! ScrapeStorm VS Listly