"해석 된"및 "컴파일 된"언어의 정의에 따라 다릅니다. 그리고 그때조차도 항상 구현에 의존합니다.
Lars가 의미하는 바는 JavaScript가 코드를 실행하여 클래스 구조 (및 기타 전역 상태)를 작성한다는 것입니다. Dart에서 전역 상태는 언어 구문에 의해 설명되므로 파싱 만 필요합니다 (심지어 대부분이 먼저 건너 뛸 수 있습니다). 결과적으로 다트 프로그램은 자바 스크립트 프로그램보다 "실제"코드를 빠르게 실행할 수 있습니다.
JavaScript로 컴파일 된 프로그램은 클래스를 작성하는 데 JavaScript 메커니즘을 사용해야하므로 분명히 Dart VM에만 적용됩니다.
편집 (자세한 내용) :
포획, 예를 들어, 다음과 같은 매우 간단한 클래스 A
: 다트에서
: 자바 스크립트에서
class A {
final x;
A(this.x);
foo(y) => y + x;
}
:
function A(x) { this.x = x; }
A.prototype.foo = function(y) { return y + this.x; }
다트 VM이 시작되면 프로그램을 통해 시작됩니다. class
키워드를보고 클래스 이름 (A
)을 읽고 클래스의 끝으로 건너 뛸 수 있습니다 (여는 중괄호와 닫는 중괄호를 계산하여 문자열에 없는지 확인). A
이 실제로 인스턴스화 될 때까지 A
의 내용을 고려하지 않습니다. 이제 실제로 클래스를 살펴보고 모든 멤버를 찾습니다.하지만 이 아니라면은 필요하기 전까지 메서드 내용을 읽습니다. 어쨌든 매우 빠른 처리 단계에서이 작업을 수행합니다.
자바 스크립트에서 일이 더 복잡해집니다 : 빠른 VM은 A
(Dart가하는 것과 비슷합니다)의 실제 본문을 건너 뛸 수 있지만 A.prototype.foo = ...
을 보면 프로토 타입 객체를 만드는 코드를 실행해야합니다.즉, 함수 객체 (A
)를 할당하고 프로토 타입 속성을 찾아보고이 객체 (새 속성 추가)를 새 함수 객체로 변경해야합니다. 다른 말로하면 : 클래스가 있다는 것을보기 위해서라도 코드를 실행해야합니다.
고마워요 @Florian Loitsch,하지만 당신이 "다트에서, 글로벌 상태는 언어 구문에 의해 기술되어 파싱 만 필요합니다"라는 의미를 설명해 주실 수 있습니까? 모든 언어가 구문 분석 할 필요는 없습니까? 네가 다시 설명해 주시면 감사하겠습니다. – Cheshie
고마워요. @FlorianLoitsch – Cheshie
'결과적으로 다트 프로그램은 JavaScript 프로그램보다 빠른 "실제"코드를 실행할 수 있습니다. DOM이로드 된 후에'main()'이 호출되기 때문에 이것은 브라우저에서 완전히 올바르지 않습니다. JS는 DOM이 준비되기 전에 실행될 수 있으므로 실제 애플리케이션에서는 JS가 더 빨리 실행될 수 있습니다. [출처] (http://stackoverflow.com/questions/8435519/how-to-tell-when-the-dom-is-ready-in-dart). 그러나 언어 측면에서 당신은 옳습니다. – tjameson