디노 (소프트웨어)![]()
Deno는 V8 자바스크립트 엔진 및 러스트 프로그래밍 언어를 기반으로 하는 자바스크립트 및 타입스크립트용 런타임이다. Node.js의 원저자인 라이언 달이 만들었으며 생산성에 중점을 두고 있다.[6] 공식적인 발음은 디노[Dēnō][7]다. 라이언 달은 2018년 "Node.js에 관해 후회하는 10가지" 강연[8]에서 Deno를 발표했다. Deno는 별도의 패키지 관리 프로그램이 필요없는데 단일 실행 파일 내에서 런타임 및 패키지 관리자의 역할을 명시적으로 수행하기 때문이다.[9][10] 역사라이언 달이 JSConf EU 2018에서 "Node.js에 관해 후회하는 10가지"를 이야기할 때 Node.js의 초기 디자인 결정에 대해 다음과 같은 후회들을 했다.[11]
이에 대한 해결 방안으로 프로토콜 버퍼와 같은 직렬화 도구로 메시지 전달을 통해 시스템 호출 바인딩을 달성하고 접근 제어를 위해 명령 줄 플래그를 제공하는 Deno의 프로토타입을 발표했다. Deno는 처음에 Go로 작성되었으며 권한있는 쪽 (Go, 시스템 호출 액세스 포함)과 권한없는 쪽 (V8) 간의 직렬화를 위해 프로토콜 버퍼를 사용했다.[12] 하지만 Go는 이중 런타임과 쓰레기 수집 부담에 대한 우려 때문에 곧 Rust로 대체되었다.[13] 또, 비동기 이벤트 기반 플랫폼으로 libuv 대신 Tokio (software)[14]가 도입되었으며, 더 빠른 "제로-카피" 직렬화 및 역직렬화를 위해 FlatBuffers가 채택되었다.[15] 하지만 2019년 4월, 벤치마크 게시 후 직렬화의 상당한 오버헤드가 측정되었다.[16] 때문에, 2019년 8월 말 FlatBuffers는 제거되었다.[17] Deno의 표준 라이브러리[18]는 Go의 표준 라이브러리 모델을 기반으로, 광범위한 도구와 유틸리티를 제공하기 위해 2018년 11월에 생성되었다. 이로써 Node.js의 의존성 트리 폭발 문제를 부분적으로 해결하였다. 공식 Deno 1.0은 2020년 5월 13일에 릴리즈하였다.[19] 2021년 3월 29일, 개발을 촉진시키고 사용자에게 상업적 용도의 개발을 제공하기 위해 Deno 회사가 설립됐음을 발표했다. 이 회사는 Shasta Ventures, 모질라 코퍼레이션 등의 회사로부터 수 백만 달러를 지원 받았다. 개요Deno는 모던 프로그래머를 위한 생산적인 스크립팅 환경을 목표로 한다.[20] 또, Node.js와 마찬가지로 동기/비동기 코어 입출력 유틸리티 세트를 제공하는 이벤트 기반 아키텍처를 강조한다. Deno는 웹 서버를 만들고 과학적 계산을 수행하는데 사용할 수 있다. Deno는 MIT 라이선스에 따른 오픈 소스 소프트웨어다.[21] Node.js와 비교공통점 Deno와 Node.js는 구글 크롬의 엔진인 V8 JavaScript 엔진 기반으로 구축된 런타임 환경이다. 둘 다 내부 이벤트 루프가 있고 스크립트와 광범위한 시스템 유틸리티를 실행하기위한 명령 줄 인터페이스를 제공한다. 차이점[22]
릴리즈예시파일 시스템 또는 네트워크 권한 없이 다음과 같이 기본 Deno 스크립트를 실행할 수 있다. (샌드박스 모드) deno run main.ts
필요할 경우, 명시적 플래그로 권한을 활성화 해야한다. deno run --allow-read --allow-net main.ts
스크립트의 의존성 트리를 deno info main.ts
Deno의 기본 Hello, World! 프로그램은 Node.js와 같다. console.log("Hello, World!");
전역 /* cat.ts */
/* Deno APIs are exposed through the `Deno` namespace. */
const { stdout, open, copy, args } = Deno;
// Top-level await is supported
for (let i = 0; i < args.length; i++) {
const filename = args[i]; // Obtains command-line arguments.
const file = await open(filename); // Opens the corresponding file for reading.
await copy(file, stdout); // Performs a zero-copy asynchronous copy from `file` to `stdout`.
}
deno run --allow-read cat.ts myfile
기본 HTTP 서버를 구현하는 예제 // Imports `serve` from the remote Deno standard library, using URL.
import { serve } from "https://deno.land/std@v0.21.0/http/server.ts";
// `serve` function returns an asynchronous iterator, yielding a stream of requests
for await (const req of serve({ port: 8000 })) {
req.respond({ body: "Hello, World!\n" });
}
이 프로그램을 실행할 때 Deno는 원격 표준 라이브러리 파일을 자동으로 다운로드 및 캐시한 뒤, 코드를 컴파일한다. URL을 입력 파일 이름으로 제공하여, 다운로드하지 않고 직접 표준 라이브러리 스크립트를 실행할 수 있다.
예를 들면, file_server ( $ deno run -A https://deno.land/std/http/file_server.ts
Download https://deno.land/std/http/file_server.ts
Compile https://deno.land/std/http/file_server.ts
...
HTTP server listening on http://0.0.0.0:4500/
더 많은 예시는 deno 메뉴얼 - 예시들에서 찾아볼 수 있다. 참고 문헌
외부 링크 |
Portal di Ensiklopedia Dunia