프로그래밍 사이트 선정 프로그래밍 언어 순위 목록 | ||||
{{{#!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
}}} ||
프로그래밍 언어 목록 · 분류 · 문법 |
웹어셈블리 WebAssembly | |
<colbgcolor=#fff,#1c1d1f><colcolor=#654FF0> 특징 | 명령형, 구조적, 정적 타이핑 |
최초 공개 | 2017년 3월 |
설계 | W3C |
개발 | W3C, Intel, Red Hat, Fastly, Mozilla, Microsoft, Google, Apple |
라이선스 | Apache License 2.0 |
파일 확장자 | .wat (텍스트 포맷) .wasm (바이너리 포맷) |
[clearfix]
1. 개요
2008년에 WASM+WASI가 있었다면 Docker를 만들 필요가 없었을 것입니다. 그만큼 중요합니다. 서버의 웹어셈블리는 컴퓨팅의 미래입니다.
Docker 설립자 Solomon Hykes[1]
웹어셈블리(WebAssembly)는 웹 브라우저에서 실행하는 프로그래밍 언어로, Java, C# 등과 비슷한 바이트코드 언어이다. 스크립트 언어인 JavaScript의 느린 속도를 보완 및 대체하기 위해 2015년부터 개발되었고, 2019년부터 웹브라우저 밖 다양한 환경에서 활용하는 (런타임, WASI 등) 연구가 진행중이다.Docker 설립자 Solomon Hykes[1]
C, C++, Rust, Go, 파이썬, AssemblyScript[2] 등 컴파일러만 만들 수 있으면 아무 언어로 프로그램을 작성하고 컴파일이 가능하다.[3]
2. 코드 비교
- C 소스 코드
{{{#!syntax cpp
int factorial(int n) {
if (n == 0)
}return 1;
elsereturn n * factorial(n-1);
}}}
- WebAssembly IR
{{{get_local 0
if (result i64)
i64.const 1
elseget_local 0
get_local 0
i64.const 1
i64.sub
call 0
i64.mul
endget_local 0
i64.const 1
i64.sub
call 0
i64.mul
}}}
- WebAssembly 바이너리
{{{20 00
04 7E
42 01
05
20 00
20 00
42 01
7D
10 00
7E
0B
}}}
3. 현황 및 전망
웹어셈블리에 타기팅이 가능한 언어 목록이미 웹어셈블리를 타깃으로 컴파일이 가능한 언어는 저렇게 많다. 인기 좀 있다 싶은 언어들은 다 되는 수준. 성능도 이미 사전에 약속한 대로 "거의 네이티브에 가까운" 속도가 나오고 있다. 자바스크립트에 비하면 당연히 훨씬 빠르다. 일단 광고하기로는 네이티브 코드에 비해 약 10% 정도 느리다고 하지만 실제로는 이보다는 훨씬 느리다. 2019년 USENIX에 발표된 벤치마크에서 최소 55% 최대 150%의 속도 저하(즉, 네이티브에 비해 1.5 ~ 2.5배 더 시간이 걸림)가 보고 되었다. 2년 후인 2021년에 이루어진 한 개인적인 테스트에서도 100% 속도 저하(2배 느림)를 보였고 2023년에 실시된 또 다른 비교에서도 최대 130% 속도 저하(2.32배 느림)를 보인 것을 보면 '네이티브 대비 10% 속도 저하'는 아무리 좋게 봐줘도 일부 애플리케이션에 한정된 뻥카이며 앞으로 개선될 전망은 적어도 당분간은 보이지 않는다. 물론, 아래 기술된 대로 자바스크립트에 비하면 확실한 장점들도 있고 속도 향상 측면에서도 근본적인 문제는 코드 최적화이기 때문에 희망의 끈은 놓을 필요는 없을 것이다.
이런저런 이유로 웹어셈블리가 한국에서도 활성화되고 성숙하고 나면 기존의 자바스크립트에게는 사실상의 시한부 인생 카운트다운이 내려질 것이라고 점치는 사람들도 적지 않다. 왜냐하면 자바스크립트는 호불호가 극단적으로 갈리는 동시에 아무래도 싫어하는 사람들이 좀 많기 때문이다. 자바스크립트가 항상 인기도 면에서 1위인 이유는 웹용 언어이고 웹에서 수십년 간 대체재가 전혀 없는, 말하자면 공인된 독점 시장이었기 때문인데, 그렇기 때문에 애착을 가진 사람들도 많은 반면 설계상 깔끔하지도 않은 누더기 언어를 강제당하는 개발자들의 원한도 엄청나다. 자바스크립트 옹호론자들은 npm의 패키지 누적량이 세계 최고이며 자바스크립트의 우월성을 증명하는 것이라고 하지만... 반대로 구석구석마다 서드 파티 라이브러리를 쓰지 않고서는 답이 안나오는 덜떨어진 언어를 직업상 써야 하니까 직접 확장하는 경우가 많을 수밖에 없다는 반론도 만만치 않다.
즉, 지금도 자바스크립트 사용을 피하기 위해 타입스크립트나 커피스크립트 등을 써가며 자바스크립트를 컴파일 타깃 취급하는 경향이 많은데 컴파일 타깃마저 웹어셈블리로 옮겨가고 나면 누가 수백 가지 함정을 감수해 가며 자바스크립트를 쓰겠냐는 것이 논지이다.
일단 웹어셈블리 개발 기획상으로는 자바스크립트를 대체하는 것이 아니라 서로 보완하는 관계가 될 것이라고는 하지만[4] 정말로 자바스크립트의 역할이 단지 각종 웹어셈블리의 글루코드 역할만 하게 된다면 그건 사실상 죽는 것이나 다름없긴 하다.(그마저도 여타 유사 자바스크립트 언어 등에서 트랜스파일 해버린다면?)
물론, 실제로 자바스크립트가 사장되는 일은 쉽게 일어나지는 않을 것이고, 일어나더라도 시간이 좀 걸릴 것이다. 한 가지 이유는 이미 자바스크립트로 작성된 웹사이트는 유지보수를 해야 되기 때문이고, 주니어 웹 개발자를 찍어내는 가장 빠른 방법이 자바스크립트를 가르치는 것이기 때문이다. 또 하나의 이유는 같은 기능을 구현했을 때 웹어셈블리 배포 파일의 크기가 자바스크립트 보다 꽤 크다는 점이다. 배포 파일 로딩 시간 보다 실행 성능이 중요한 기능 구현에는 웹어셈블리가 유리하겠지만 (예: 게임, 사진 편집, 동영상 편집, 온라인 IDE), 로딩 시간이 더 중요한 컨텐츠 위주 웹사이트들의 프론트엔드에는 웹어셈블리가 불리하다. (예: 뉴스, 쇼핑, SNS) 그리고 자바스크립트 언어의 한계를 보완한 유사 자바스크립트 언어 중 현재 가장 대표적인 타입스크립트는 자바스크립트에 타입 문법을 추가한 것이라서, 먼저 자바스크립트를 공부해야 한다.
어셈블리가 낡은 IT 기술의 상징으로 취급됨에도 불구하고 웹어셈블리 커뮤니티는 젊은 사람들의 참여가 활발하다. WASM을 웹 관련 기업과 협회가 주도하고 있고 배우는 사람들도 웹 기술을 통해 처음 접하는 경우가 많기 때문이다. 현재 WASM 해석기(인터프리터)를 사용할 수 있는 CPU 아키텍처는 X86, ARM, MIPS, RISC-V 등이 있다. 운영체제는 POSIX 기반 시스템(리눅스, BSD 등) 및 윈도우즈가 호환된다.
대한민국에선 어셈넥스트(AsmNEXT) 팀이 2022년도 바이트코드 연합(Bytecode Alliance)에 정식 회원으로 참가하여, 웹어셈블리 런타임의 버그를 수정하는데 기여하고 한국에서 웹어셈블리 컨퍼런스를 개최하는 활동을 하였다.[5]
2022년 기준 바이트코드 연합 참여 목록은 다음과 같다.
- [ 펼치기 · 접기 ]
- * 모질라
4. 주요 프레임워크
- Blazor: C# 기반. ASP.NET에 템플릿 엔진인 Razor을 웹어셈블리로 포트했다.
- Flutter: Skia 렌더러를 웹상에서 원활히 돌리기 위해 WebAssembly를 쓰는 CanvasKit을 만들었다.
- PyScript: 웹브라우저용 Python 개발 도구
- 비주얼 노벨 개발 도구 아르테미스 엔진
- Unity
- Unreal Engine: 공식적으로는 4.22버전까지만 사용 가능하다.
- 이더리움: 이더리움 2.0부터 기존의 EVM을 Ethereum WebAssembly(eWASM)로 전환한다.
- AutoCAD
- Qt
- AWS Lambda
- Microsoft Azure AKS(Azure Kubernetes Service)
- 레드햇 오픈시프트 Service Mesh
- wasmCloud
- istio Envoy Proxy
- Cloudflare: V8 기반 worker에서 WASM으로 빌드된 코드를 실행할 수 있다.
- Krustlet
- WasmEdge
- Wasmer
- Wasmtime
5. 기타
수많은 언어들이 WebAssembly로의 컴파일을 지원하기 때문에, WebAssembly를 네이티브 바이너리로 컴파일함으로써 결과적으로 여러 언어를 네이티브로 컴파일하는 걸 지원하려는 여러 프로젝트들이 존재한다. 대표적인 것으로는 InNative가 있다.구글은 이 기술의 대응하는 기술로 PPAPI라는 것을 가져왔다가 망했다.
[1] 웹어셈블리에 주목하라[2] TypeScript의 변형으로 만들어진 목적부터가 WebAssembly를 만드는 것이다.[3] 웹어셈블리 지원 언어[4] 아직까지 웹어셈블리는 직접 웹사이트를 조작하는 것이 아니라 자바스크립트에서 모듈처럼 불러와서 그 기능만을 사용하게 되어 있다.[5] https://m.boannews.com/html/detail.html?idx=105951