프로그래밍 사이트 선정 프로그래밍 언어 순위 목록 | ||||
{{{#!wiki style="margin: 0 -10px -5px; word-break: keep-all" {{{#!wiki style="display: inline-table; min-width: 25%; min-height: 2em;" {{{#!folding [ IEEE Spectrum 2024 ] {{{#!wiki style="margin: -5px 0" | <rowcolor=#fff> 스펙트럼 부문 상위 10개 프로그래밍 언어 | 직업 부문 상위 10개 프로그래밍 언어 | ||
1 | Python | 1 | SQL | |
2 | Java | 2 | Python | |
3 | JavaScript | 3 | Java | |
4 | C++ | 4 | TypeScript | |
5 | TypeScript | 5 | SAS | |
6 | SQL | 6 | JavaScript | |
7 | C# | 7 | C# | |
8 | Go | 8 | HTML | |
9 | C | 9 | Shell | |
10 | HTML | 10 | C++ |
}}}
}}}
- [ Stack Overflow 2024 ]
- ||<tablewidth=100%><width=9999><-4><bgcolor=#FFA500><tablebgcolor=#fff,#222> 2024년 Stackoverflow 설문조사 기준 인기 상위 25개 프로그래밍 언어 ||
1 JavaScript 14 Rust 2 HTML, CSS 15 Kotlin 3 Python 16 Lua 4 SQL 17 Dart 5 TypeScript 18 어셈블리어 6 Bash 19 Ruby 7 Java 20 Swift 8 C# 21 R 9 C++ 22 Visual Basic 10 C 23 MATLAB 11 PHP 24 VBA 12 PowerShell 25 Groovy 13 Go
- [ TIOBE 2024 ]
- ||<tablewidth=100%><width=9999><-4><bgcolor=deepskyblue><tablebgcolor=#fff,#222> 2024년 8월 기준 검색어 점유율 상위 20개 프로그래밍 언어 ||
1 Python 11 MATLAB 2 C++ 12 Delphi / Object Pascal 3 C 13 PHP 4 Java 14 Rust 5 C# 15 Ruby 6 JavaScript 16 Swift 7 SQL 17 Assembly language 8 Visual Basic 18 Kotlin 9 Go 19 R 10 Fortran 20 Scratch {{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px);"
{{{#!folding [ 21위 ~ 50위 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px"21 COBOL 36 Scala 22 Classic Visual Basic 37 Transact-SQL 23 LISP 38 PL/SQL 24 Prolog 39 ABAP 25 Perl 40 Solidity 26 (Visual) FoxPro 41 GAMS 27 SAS 42 PowerShell 28 Haskell 43 TypeScript 29 Dart 44 Logo 30 Ada 45 Wolfram 31 D 46 Awk 32 Julia 47 RPG 33 Objective-C 48 ML 34 VBScript 49 Bash 35 Lua 50 Elixir
- [ PYPL 2024 ]
- ||<tablewidth=100%><width=9999><-4><bgcolor=green><tablebgcolor=#fff,#222> 2024년 8월 기준 검색어 점유율 상위 20개 프로그래밍 언어 ||
1 Python 11 Objective-C 2 Java 12 Go 3 JavaScript 13 Kotlin 4 C# 14 MATLAB 5 C/C++ 15 PowerShell 6 R 16 VBA 7 PHP 17 Dart 8 TypeScript 18 Ruby 9 Swift 19 Ada 10 Rust 20 Lua
}}} ||
프로그래밍 언어 목록 · 분류 · 문법 |
1. 개요
어떠한 일에는 여러 가지 방법이 존재한다.
There is more than one way to do it.
펄(Perl)은 프로그래밍 언어의 일종이다. 1987년 발표되어 현재 [age(1987-01-01)]년 된 언어이다. 만든 이는 래리 월(Larry Wall)이다. 본인 말로는 가장 많은 명성과 가장 적은 돈을 가져다 줬다고 한다.(프로그래밍언어론 8판 수록 인터뷰 참고)There is more than one way to do it.
이름 자체는 Practical Extraction and Reporting Language(실용적인 데이터 취득 및 리포트 작성 언어)의 약자라고 한다. 본래는 붙일만한 이름을 찾을 수 없었던 제작자가 성서에서 아무 단어나 따와서 붙인 이름. Pearl(진주)라는 이름을 붙이고 싶어했지만 이미 그런 이름을 가진 프로그래밍 언어가 있었기에 철자만 살짝 바꿔서 Perl이라는 이름을 붙였다. 약자는 나중에 가져다 붙인 것이다. 비슷해 보이는 건 우연이 아니다! 다만 Perl은 독일어로 진주라는 뜻이 있다.
철학은 TIMTOWTDI(There is more than one way to do it, 어떠한 일에는 여러 가지 방법이 존재한다). Python의 '가장 아름다운 하나의 답이 존재한다'와는 정반대다.
유닉스 쪽에서는 디폴트 컴파일 언어인 C와 함께 디폴트 스크립팅 언어로 베이스 시스템에 들어가있는 경우가 많다. 리눅스에 익숙하지 않은 초심자의 경우 최소 설치를 추구하다가 perl마저 빼버리는 크나큰 실수를 저지르기도 한다...
2010년대 초반까지만 해도 웹, 언어처리 분야에서 꽤 보이던 언어였으나 2010년대 후반대부터 파이썬에게 모든 지위를 넘겨주고 사실상 역사속으로 사라진 언어가 되었다. 본 문서에 써진 내용도 리그베다 위키 시절 작성되어 지금까지 편집 없이 이어진게 많으니 그 시절에는 그랬구나... 쯤으로 생각하자.
2. 특장점
C와 비슷한 구문에 sed, awk, 셸 스크립트 등과 같은 여러 유명한 유닉스 기능을 포함하고 있으며 언어 자체의 자유도가 높고 표현력도 뛰어나며 코딩도 쉽다.특히 텍스트를 처리하는 기능이 최강점으로 꼽힌다. 프로그래밍을 좀 해본 사람이라면 텍스트를 다루는 코딩이 얼마나 번거로운지 알고 있을 것이다. Perl은 텍스트를 처리하는 기능이나 문자열의 일치 여부 검색 및 치환등을 매우 짧은 코드로 처리 가능하고 성능도 매우 뛰어나다. 보간 처리에 있어서는 스크립트 언어 뿐만 아니라 전체 언어 중에서 성능, 기능상 탁월하다. 그런 장점 덕분에 언어학 전공자들이 많이 이용하고 Perl 관련 책을 보더라도 언어학 관련 책들이 많다.
GUI, 웹프로그래밍, 시스템 관리, 그 밖에 간단한 작업을 하는 스크립트 작성하는 데에 넓게 이용되며 생물정보학 쪽에서도 광범위하게 이용되는 편. 특히 다른 언어에 비해 정규표현식과 함께 문자열을 다루는 방법이 다양하고 강력하게 제공되고 있으므로, 언어학쪽에서 많이 다루는 언어이기도 하다.
인터프리터 언어다 보니 코드를 수정할 때마다 컴파일을 반복할 필요가 없어 프로그램 구현이나 디버깅이 쉬운 편이기도 하다. 자유 및 무료 소프트웨어여서 비용 면에서도 굉장한 장점을 지니고 있는 편. 각종 유닉스 시스템이나 맥 OS X에 기본으로 탑재되어 있다. 윈도우즈 계열에서는 StrawberryPerl[1] 을 설치해 쓸 수 있다.
한편으로는 미칠 듯한 축약이 가능하다는 점에서 "Perl은 Pathologically Eclectic Rubbish Lister(병적으로 폭넓은 잡동사니 출력기)의 약자."라는 농담도 가끔 들을 수 있다.[2]
2.1. CPAN
CPAN이라고 펄로 제작된 소프트웨어들을 모아놓은 자료실이 있다. 이 CPAN의 방대함은 펄 관련 문제 해결의 보고이자 펄의 자랑거리이다. MetaCPAN을 보면 하루에 올라오는 신규 모듈과 업데이트가 지금도 어마어마하다.CPAN의 방대함만큼이나 같은 목적의 다른 특징있는 구현이 많다. 여기서 특유의 문화가 나타나게 되는데, 이러한 모듈을 통합해주는 상위 인터페이스 모듈이 등장하고(
Any::
로 시작하는 모듈이 대표적이다.) 이렇게 탄탄하게 추상화된 모듈 위에서 다시 다른 모듈이 작성된다. 자연 선택적으로 많이 이용된 모듈이 대세가 되고 대세인 모듈을 이용한 프로그램간에는 하위 레벨에서의 확장이 가능하게 된다.기존에 있던 모듈의 패키지명을 확장해 다른 사람이 별도의 모듈로 만들어 업로드할 수도 있다. 내가 올린 모듈을 다른 사람이 확장해주는 효과가 있다.
실제로 타 언어에 비해서 별 기능이 없는 모듈의 의존성 트리가 엄청난 경우가 많고 이것이 다시 CPAN의 의존도를 크게하는 역효과를 가져왔다.
3. 단점
인터프리터 언어라는 태생적 한계에 의해 처리 속도가 C의 처리 속도보다 조금 느리다. 요즘 컴퓨터들은 성능이 뛰어나 웬만한 프로그램들이야 그 차이를 체감할 일은 별로 없겠지만, 그래도 단순 계산 반복 면에서는 오래 하다 보면 꽤 큰 차이가 되는 경우가 있다. 그러나, 사실 인터프리터 언어와 컴파일 언어를 성능으로 단순 비교하는 것은 의미없는 일이다. 이 둘은 보통 용도가 확연히 달라, 경쟁하는 언어라 보기 힘들기 때문이다. 퍼포먼스가 중요치 않은, 스크립팅 언어로 간단히 끝낼 작업에 C와 같은 언어를 끌어쓰는 것도 웃긴 일이며, 반대로 퍼포먼스가 최우선순위인 부분에 스크립팅 언어를 사용하는 경우도 당연히 찾아보기 힘들다. 즉, 오늘날 언어 1개로 모든 것을 처리하는 경우는 거의 없다고 볼 수 있다. 게다가 특정 환경/목적에서 펄에 더 빠른 수행 시간을 내는 경우도 있으며, 언어 자체와 하드웨어의 발전으로 인해 수행시간의 차이도 점점 줄어들고 있다. 프로그래밍 언어 간 성능 비교 참조.
일부 부분에서 기교적인 사용을 요구하는 것도 문제. 함수와 객체의 선언이 가장 기교적인 부분인데 Moose를 사용하지 않는 경우는 직관적으로 이해하기 어려운 문제가 있다. 지연연산과 제너레이터, 레퍼런스를 사용하는 부분에 있어서는 경쟁 언어들에 비해 조금 어려운 감이 있다.
특히 가독성이 낮은 것은 가장 큰 단점으로 꼽힌다. Write Once, Read Never 언어 중의 하나라고도 한다. 펄로 짜놓으면 일자리가 보장된다는 농담반 진담반도 있다. 다시 말해, 다른 프로그래머가 해독하지 못해 인원 대체가 불가능하다는 뜻. 자유도가 높기 때문에 아무래도 돌아가는 것만 중시한다거나 초심자들의 경우 더러운 코드를 만들기 쉬운것이 단점. 그러나, 숙련된 프로그래머들만으로 팀을 이룬 경우, 프로젝트가 꽤 커져도 그다지 큰 문제는 없다는 이야기도 있긴 하다. 어쨌든 낮은 가독성과 기교적 사용에 대한 반성으로 modern Perl programming 을 제시하고 있다.
심지어 이런 연구도 있다. 초보자에게 프로그래밍 문법을 가르쳐주고 얼마나 정확하게 짜는지 측정해보았는데 문법을 랜덤으로 생성한 언어가 더 나았다고 한다.(...)[3]
웹프로그래밍에 많이 쓰이고, 소스 코드가 더러워보이는 특성 때문에, "인터넷을 땜빵 연결하고 있는 덕트 테이프"라고 불리기도 한다.(...) 다시 말하지만 이런 건 초심자의 얘기고 코딩을 깨끗하게 하는 경력자가 짜면 가독성이 나쁘지 않다.
perlcc라는 툴을 이용하면 단독으로 사용되는 코드를 만들 수 있었으나 지금은 제대로 작동되지 않는다. 대체재로는
PAR::Packer
가 있다.4. 차기작
4.1. Raku (구 Perl 6)
Perl 6은 언어 명세 그 자체를 뜻한다. Perl 6의 테스트 케이스를 모두 통과한 프로그램은 Perl 6를 구현한 컴파일러라 부를 수 있다.프로그래밍 언어계 희대의 떡밥으로 유명하다. Perl 6 개발은 2000년도부터 시작됐었고 나온다 나온다 소리가 계속 있었으나 지금까지 무려 21년간 개발 중이다. 어느 정도 Specification은 나온 상태고 그 것에 기반한 컴파일러도 몇 개 있긴 하지만 Production-level 사용은 불가능한 수준이다. 이렇게 늦어지는 이유중 하나는 OOP도 보강하고, Lisp이나 Haskell 등에서 사용되는 기능들도 넣고 여러모로 Perl 5 에서 이어진다기보다 재창조에 가까운 수준의 기획인 점도 있으나 무엇보다 어떤 기업의 지원도 받지 못하고 있어 완전한 Community-Driven 개발이 이루어지고 있기 때문이다. 그리고 이렇게 늦어지다보니 이미 상당수의 스크립트 유저들은 파이썬으로 넘어간 상태. Python 3 vs Perl 6 의 떡밥도 웹에서 자주 보이나, 상당수는 Python 4 vs Perl 6 이 현실적이지 않냐는 반응.
2015년 1월, Larry Wall이 Production Level의 Perl 6를 공개 발표할 예정이다. MoarVM을 백엔드로 쓰는 Rakudo는 이미 대부분의 언어 스펙을 구현했고 퍼포먼스도 크게 향상되었는데 여전히 느리긴 하다. 하지만 20년 가까이 된 세월만에 첫 발을 내딛은 Perl 6이니 기대를 가져봄직하다.
2019년에는 Perl 6이 아예 Raku라는 별도의 언어로 분화되었다. 기존 Perl과는 완전 별개의 노선을 탈 계획인 듯하다.
4.2. Perl 7
- 2020년에는 2021년을 목표로 Perl 7의 개발이 발표되었으나 금방 취소되었다. Perl 7은 Raku와는 달리 재창조가 아닌 Perl 5의 파생이 될 예정이었는데, Perl 5를 계속 개발하고 메이저 업데이트가 언젠가 찾아올 경우 그 때 Perl 7이라는 이름을 붙이는 걸로 변경되었다.[4]
- 2022년 출시된 Perl 5.36도 대형 업데이트였지만 Perl 7이라는 이름은 붙이지 않았다.
5. 기타
한국에서는 과거 개인용 웹 프로그램용 언어로 각광을 받았으나, 현재는 PHP에 완전히 자리를 내준 상태. 유행1997년 ~ 2000년대 초까지 웹 CGI로 널리 쓰였고, 당시 게스트 북 purelife dream, pury bbs이나 현재 블로그와 유사한 IRiS 시리즈도 펄로 작성 되었다. 이 때문인지 perl == CGI 로 인식되는 경향이 있는데, 웹 관련 프레임워크, 비동기/네트워크/동시성 프레임워크, GUI 및 그래픽, 과학 및 수치계산, 시스템관리 및 자동화 등에 쓸 수 있는 등 사용 방법은 무궁무진하다.
특기할 만한 점으로 변수 앞에
$
기호를 붙인다는 점과[5] 문자열 결합시 덧셈 기호(+
) 대신 점(.
)을 쓴다는 점인데[6], 이것의 영향으로 PHP도 이 특징을 갖고 있다.어쩐지 Python과 라이벌 관계를 형성하고 있다. 둘 다 스크립트 언어에서 시작해서 세를 넓혔지만, Python은 TIMTOWTDI를 배제하고 문제를 해결하는 명확한 하나의 방법을 추구하기 때문. 문법적으로도 매우 자유분방한 Perl과는 달리, 들여쓰기까지도 문법의 일부로 제한하는 등 덜 자유롭지만 정갈한 코드를 지향한다. 이 점에 매료되어 Perl과 Python 사이의 선택지에서 Python을 선택하는 사람이 많고, 특히 Perl 커뮤니티가 사멸하다시피(...) 한 한국에서는 Python 쪽이 대중적이다.
소스만 1.9메가인 C++ 소스를 Java로 포팅 하는데, Perl의 정규표현식과 직접 제작한 논리엔진으로 사흘만에 포팅, 실행에 성공했다는 사례도 있다카더라.
2024년 현재 Perl 관련 서적은 모두 절판 또는 품절 상태이다.[7]
6. 정규 표현식
자세한 내용은 정규 표현식 문서 참고하십시오.7. 외부 링크
달력의 각 날짜를 클릭하면 온갖 기괴한 사용 사례를 볼 수 있다.
- Perl Advent Calendar 2010
- Perl Advent Calendar 2011
- Perl Advent Calendar 2012
- Perl Advent Calendar 2013
- Perl Advent Calendar 2014
- Perl Advent Calendar 2015
- Perl Advent Calendar 2016
- Perl 부처님 오신 날 기념 달력
[1] gcc와 make등의 빌드툴들도 함께 설치되어 윈도우즈를 지원하는 네이티브 라이브러리도 설치가 가능하다.[2] 본인이 인터뷰에서 직접 언급했다.[3] http://developers.slashdot.org/story/11/10/27/213231/is-perl-better-than-a-randomly-generated-programming-language[4] What happened to Perl 7?[5] 배열 앞에는
@
, Python의 딕셔너리와 유사한 해시 앞에는 #
을 붙인다.[6] 덧셈 기호를 사용하면 문자열을 수로 파싱해서 값을 더한다. "1"+1은 2이고 "Hello "+"world"는 0이다.[7] https://www.yes24.com/24/Category/Display/001001003022012[8] 이쪽이 더 편리하다.