News & Events
The Slowest Modern Programming Languages
가장 느린 현대 프로그래밍 언어
그리고 이 언어들이 느린 이유
*이 기사는 BetterProgramming에 작성된 Mohammed Ayar의 글을 번역하였습니다.
Photo by Karl Ibri on Unsplash
프로그래밍 언어는 수십 년 동안 존재해왔습니다. 각 언어는 특정 필요를 충족시키기 위해 만들어졌습니다.
오늘날 세계에 약 700 개의 주목할만한 프로그래밍 언어가 있습니다. 그 중 250개 정도는 살아남았지만 나머지는 프로그래밍 커뮤니티에 의해 버려졌습니다. (Wikipedia의 최신 자료에 따르면)
성능은 프로그래머에게 항상 걱정스러운 문제였습니다. 이전에는 개월이나 일수로 실행 시간을 측정할 수 있었지만 현재는 초 단위로 측정됩니다. 크레딧은 전자 기술의 발전으로 이어집니다.
컴퓨터가 진화하는 속도는 무어의 법칙을 따릅니다.
Moore’s law. Source: Wikimedia
전자 공학에서 속도와 성능은 특정 칩이 가질 수있는 트랜지스터의 수로 해석됩니다. 무어의 법칙에 따르면 이 숫자는 2년마다 두 배씩 늘어납니다. 이것이 바로 손 크기의 휴대 전화가 1990 년대의 방 크기의 슈퍼 컴퓨터보다 훨씬 빠른 이유입니다.
컴퓨터 과학에서는 더 빠른 코드와 더 빠른 PC 사이에 차이가 있습니다. 느린 프로그램과 느린 컴퓨터도 마찬가지입니다.
Intel과 AMD는 속도면에서 강력한 컴퓨팅 시스템을 만드는 데 큰 공을 들이고 있을 것입니다. 따라서 강력하고 빠른 프로그램을 만드는 것은 우리에게 달려 있습니다.
소프트웨어를 만드는 동안 고려해야 할 사항 중 하나는 언어입니다. 각 언어는 다르게 구현되므로 각 언어가 서로 다른 장점을 제공합니다. 그리고 속도는 이러한 장점 중 하나가 아닐 수도 있습니다.
만약 여러분이 게임 및 무거운 수학적 계산과 같은 까다로운 작업을 수행하는 프로그램을 만들려고 한다면 느린 프로그래밍 언어를 피하는 것이 좋을 것입니다.
일반적으로 프로그래밍 언어는 두 가지 유형이 있습니다.
Statically-typed languages는 일반적으로 컴파일됩니다. 즉, 컴파일러라는 프로그램이 전체 영어 유사 코드를 구문 분석하고 어셈블리 언어로 변환하고 새 파일을 생성합니다. 이 파일은 사용자가 수동으로 실행합니다.
Dynamically-typed languages는 일반적으로 해석됩니다. 즉, 소프트웨어(the interpreter)가 코드를 라인 단위로 분석하고 실행합니다.
컴파일러와 interpreter의 세부 사항은 매우 학문적이므로이 기사의 범위를 벗어납니다.
우리 대부분은 dynamically-typed languages를 좋아합니다. 이는 Python과 같이 오류가 덜 발생하고 사람이 쉽게 해석할 수 있는 언어들입니다. 그러나 이것에 대가가 있으니 이것은 속도입니다.
이 기사는 상대적으로 가장 느린 일반적인 dynamically-typed programming languages를 설명합니다.
Perl
이전에 UNIX를 사용했다면 Perl 스크립트를 보지 못했을 가능성이 큽니다. 대부분의 UNIX 파일은 Perl 안에 있습니다.
Perl은 Unix 스크립트 언어입니다. 이는 프로그래머가 긴 Shell 프로그램을 코딩하는 것의 어려움을 완화하기 위해 만들어졌습니다. 이는 단순히 파일에 채워진 Shell 명령어들의 묶음입니다.
더 중요한 것은 Perl이 C 및 다른 Unix 언어에서 만들기에는 악몽으로 여겨지는 작업을 덜어 준다는 것입니다. 물론 C는 대가를 지불하지 않고 추월당하는 것을 받아들이지 않을 것입니다. *작업을 덜어주는 대신 다른 단점이 있음.
Perl은 대신 속도가 느립니다.
또한, 요즘 훌륭한 Perl 프로그래머를 찾는 것은 건초 더미에서 바늘을 찾는 것과 같습니다. 예를 들어 Python과 달리 Perl은 구현에 매우 민감하고 상대적으로 효율적인 프로그램을 얻기 위해서는 모든 연산자가 적절한 위치에 있어야하기 때문입니다.
가장 효율적으로 구현할 수 있음에도 불구하고 Perl은 여전히 고급 프로그래밍 언어에 뒤쳐져 있습니다. 그러나 여전히 성장하고 있으며 특히 2019 년에 Raku라는 이름의 Perl 6이 출시된 이후에 효율성 문제가 하나씩 해결되고 있습니다.
PHP
PHP는 스크립팅 웹 개발 프로그래밍 언어이며 일반적으로 웹 사이트 배포에서 HTML, CSS 및 MySQL을 보완합니다.
많은 사람들은 PHP가 구식이라고 주장합니다. 하지만 사실은 그렇지 않습니다!
w3techs는 다음과 같이 말합니다 :
“PHP는 우리가 알고있는 서버 측 프로그래밍 언어를 사용하는 모든 웹 사이트 79.0%에서 사용하고 있습니다.”
또한 프로그래밍, 스크립팅 및 마크 업 언어에 대한 최근 2020년 StackOverflow 설문 조사는 PHP가 C ++ 및 Typescript를 모두 지원하는 완벽하게 살아있는 언어임을 보여주었습니다.
Source: StackOverflow 2020 survey.
그러나 PHP는 점진적인 학습 곡선이 있고 호스팅 비용이 저렴하기 때문에 성능 측면에서 손해가 발생합니다.
PHP는 just-in-time compilation (JIT compiler)가 부족하고 dynamically-typed language라는 사실 때문에 속도가 매우 느립니다. 다행히 2020년 11월 26일, PHP 8은 성능 최적화 기능인 내장 JIT 컴파일러를 출시하였습니다.
내장된 JIT 컴파일러는 PHP가 속도와 성능면에서 클래스의 프로그래밍 언어에 더 가까워 지도록 도와주었습니다.
Ruby
Ruby의 공식 제작자이자 Ruby 커뮤니티에서 Matz로 알려진 Yukihiro Matsumoto는 다음과 같이 말했습니다.
“Ruby는 프로그래머를 행복하게 만들기 위해 설계되었습니다.”
Ruby는 객체 지향 프로그래밍 언어(objected-oriented programming language)입니다. 모든 것이 객체(object)로 해석됩니다. 이를 통해 루비는 우아하고 쉽게 작업 할 수있는 도구가 되었습니다. 지팡이를 흔들면 작업이 완료됩니다.
그러나 성능 면에서 Ruby는 일반적으로 인터프리터 언어와 같습니다. 인터프리터 언어는 명령문 별로 코드 구문을 실행하기 때문에 컴파일러를 사용하는 언어에 비해 속도가 느린 경향이 있습니다.
Ruby는 Global Interpreter Lock(GIL)의 속도 면에서 또 다른 인기를 얻었습니다. 이는 언어가 한 번에 하나의 스레드를 허용하여 GIL을 사용할 수 있다는 뜻입니다.
마지막으로 Ruby는 높은 메모리 소비와 느린 가비지 콜렉션(garbage collection)으로 인해 어려움을 겪습니다.
Python
다재다능한 Python은 최근 statista 및 The Economist와 같은 여러 소스에 따르면 가장 인기있는 프로그래밍 언어 1위를 차지했습니다. 데이터 사이언스, 웹 개발 및 사이버 보안에 많이 사용됩니다.
Python의 장점이 단점보다 확실히 큽니다. 그러나 현재 대부분의 Pythonistas는 속도에 문제가 있습니다. 네, 불행히도 파이썬은 속도에 쫓기고 있습니다.
Python과 Ruby는 같은 제품군에 속합니다. 둘은 GIL과 인터프리터 사용으로 인해 느립니다. 이 둘의 주요 차이점은 전자는 데이터 사이언스 중심인 반면 후자는 웹 개발에 더 집중한다는 것입니다.
그러나 Python은 강력한 라이브러리와 기능에 의해 뒷받침됩니다. 그리고 Numpy 모듈 및 Filter() 내장 함수와 같은 라이브러리 및 함수 중 일부는 C ++로 구현되어 성능 측면에서 상당한 향상을 가져옵니다. 이는 Python이 오늘날 동료 프로그래밍 언어를 제치고 붐을 일으키고 있는 이유입니다.
Takeaway
속도와 성능은 소프트웨어 구현에 있어 고려해야 할 중요한 요소이지만 프로그래밍 언어에만 책임을 떠넘기면 안됩니다.
실제로 주요 속도 및 성능 문제의 근본 원인은 잘못된 구현과 잘못된 코드 설계입니다.
Source: Twitter
궁극적으로 동적 유형의 언어는 느리지만 유망한 언어 경험을 제공할 뿐만 아니라 생산성을 높입니다. 따라서 코딩은 결코 지루하지 않습니다.
번역 – 핀인 사이트 인턴 연구원 김현우
원문링크 ->
https://medium.com/better-programming/the-slowest-modern-programming-languages-d29ea230667