# Nova - Rust로 작성된 JavaScript & WebAssembly 엔진

> Clean Markdown view of GeekNews topic #17845. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=17845](https://news.hada.io/topic?id=17845)
- GeekNews Markdown: [https://news.hada.io/topic/17845.md](https://news.hada.io/topic/17845.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-11-19T12:33:22+09:00
- Updated: 2024-11-19T12:33:22+09:00
- Original source: [github.com/trynova](https://github.com/trynova/nova)
- Points: 7
- Comments: 1

## Summary

Nova는 Rust로 작성된 JavaScript 및 WebAssembly 엔진으로, 데이터 지향적 설계를 통해 성능과 캐시 효율성을 극대화하고 메모리 취약점을 방지합니다. JavaScript 힙에 할당된 데이터는 유형별 벡터에 저장되며, 이는 메모리 안전성과 크기 효율성을 제공합니다. 현재 개발 중인 Nova는 기능이 제한적이며 test262 테스트의 약 47%만 통과했습니다.

## Topic Body

- Nova는 데이터 지향적 설계를 특징으로 하는 JavaScript 엔진으로, 성능과 캐시 효율성을 극대화하기 위해 고안된 구조를 채택하고 있음  
  - 메모리 취약점 방지와 성능 최적화를 동시에 추구  
- 주요 특징:  
  - JavaScript 힙에 할당된 모든 데이터는 유형별 벡터에 저장됨 (숫자는 숫자 벡터, 문자열은 문자열 벡터 등).  
  - 힙 참조는 유형에 따라 구분된 인덱스로 처리되며, 이는 메모리 안전성과 크기 효율성을 제공함.  
  - 객체는 유형별로 나누어 벡터에 저장됨 (일반 객체, 배열, DataView 등).  
  - 비일반 객체는 필요한 경우에만 일반 객체 데이터를 참조하도록 설계됨.  
  - 객체는 사용하지 않는 데이터 읽기를 피하기 위해 공격적으로 분리되어 저장됨.  
- 아직 개발중임. 엔진은 ​​기능이 매우 제한적이어서 test262 테스트 모음의 약 47% 만 통과

## Comments



### Comment 31488

- Author: neo
- Created: 2024-11-19T12:33:22+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=42168166)   
- 아키텍처적 선택에 대한 논의는 흥미롭지만, 대부분의 사람들은 비교할 수 있는 맥락이 부족함. V8의 아키텍처와 비교했을 때 어떤 이점이 있는지 이해하기 어려움  
- Lisp 인터프리터와 같은 프로젝트에 대해 생각해본 적이 있으며, 몇 가지 주요 이점을 식별했음  
  - 균일한 할당은 정렬 간격이 없음을 의미함  
  - 가비지 컬렉션에서 선형 접근의 이점  
  - 포인터보다 작은 인덱스  
  - 타입에 따라 구분된 인덱스는 크기를 절약할 수 있음  
- V8과의 비교는 즉시 하지 않아도 됨. V8은 수십억 달러 규모의 프로젝트임  
- Fabrice Bellard의 JS 엔진을 참고하면 좋을 것 같음  
- V8의 데이터 할당 방식  
  - 모든 데이터는 여러 힙 부분 중 하나에 할당됨  
  - 힙 참조는 실제 포인터이거나 포인터 압축을 사용할 경우 힙 베이스에서의 오프셋임  
  - V8의 객체는 필요한 모든 데이터를 포함하며, 대부분 단일 할당에 저장됨  
- 데이터 지향 설계는 데이터 접근 방식을 아는 것에 의해 주도됨. 일반적인 데이터 접근이 동일한 타입의 객체에 대한 선형 접근이라고 가정하는 이유가 궁금함  
- "숫자는 숫자 벡터로 들어간다"는 일반적이지 않음. JS 엔진은 보통 NaN-boxing이나 인라인 작은 정수를 사용함  
- NaN-boxing 사용을 고려해봤는지 궁금함. 타입별 벡터는 GC에 의해 압축되는지, 아니면 자유 목록을 유지하는지 궁금함  
- "Don’t Stop the BIBOP: Flexible and Efficient Storage Management for Dynamically Typed Languages"를 읽어볼 것을 추천함  
- 이 JS 엔진이 실험적인 것인지, ECMAscript 사양 전체를 구현하려는 것인지 궁금함  
- Rust Boa 프로젝트를 팔로우하고 있지만, 아직 프로덕션 준비가 되지 않았다고 생각함  
- 데이터 지향 접근 방식과 타입별 벡터는 V8과 같은 전통적인 아키텍처와 상당히 다름  
  - 실제 시나리오에서의 성능: 복잡하고 비선형적인 데이터 접근 패턴을 포함한 시나리오에서 Nova를 V8이나 SpiderMonkey와 비교한 벤치마크가 있는지 궁금함  
  - 가비지 컬렉션에서의 트레이드오프: 벡터 성장과 압축이 메모리 단편화나 성능 병목 현상을 초래할 수 있는지 궁금함  
- 특정 응용 프로그램 프로파일을 염두에 두고 있는지 궁금함  
  - 게임에 스크립팅 엔진을 내장하는 데 유용할 수 있음  
- "kind-specific vectors"에서 "kind"라는 단어의 의미가 궁금함  
  - `function X(a) { this.a = a; }`와 `function Y(b) { this.b = b; }`가 다른 종류의 객체로 간주되는지 궁금함  
  - 리터럴로 객체를 생성할 때 `{a: 1}`과 `{b: 2}`가 다른 종류의 객체로 간주되는지 궁금함
