저는 Titanium Mobile 1.0으로 iPhone 앱을 구축하는 중이며 기본 iPhone 바이너리로 컴파일되는 것을 확인했습니다. 어떻게 작동합니까? 280 North의 Objective-J 및 Cappuccino와 같은 수퍼 세트 언어없이 JavaScript 코드를 분석하고 Objective-C로 직접 번역하는 데는 많은 작업이 필요할 것 같습니다.
저는 Titanium Mobile 1.0으로 iPhone 앱을 구축하는 중이며 기본 iPhone 바이너리로 컴파일되는 것을 확인했습니다. 어떻게 작동합니까? 280 North의 Objective-J 및 Cappuccino와 같은 수퍼 세트 언어없이 JavaScript 코드를 분석하고 Objective-C로 직접 번역하는 데는 많은 작업이 필요할 것 같습니다.
답변:
Titanium은 Javascript 코드를 가져 와서 분석하고 전처리 한 다음 Titanium API의 애플리케이션 사용을 기반으로 해석되는 기호 세트로 사전 컴파일합니다. 이 심볼 계층 구조에서 기본 Titanium 라이브러리 심볼에 매핑되는 심볼 종속성 매트릭스를 구축하여 앱에 특별히 필요한 API (및 관련 종속성, 프레임 워크 등)를 이해할 수 있습니다. 언어에 따라 조금씩 다르기 때문에 기호라는 단어를 반 일반적인 방식으로 사용하고 있습니다. iPhone에서 심볼은 궁극적으로 ARM / i386 아키텍처 용으로 컴파일 된 컴파일 된 .o 파일에 매핑되는 진정한 C 심볼에 매핑됩니다. 자바의 경우 .class 파일 등입니다. 프런트 엔드가 종속성 매트릭스를 이해하면 SDK 컴파일러 (예 : iPhone 용 GCC,
따라서 그것에 대해 생각하는 간단한 방법은 JS 코드가 거의 일대일로 네이티브 랜드의 대표 기호로 컴파일된다는 것입니다. 해석 모드에서 여전히 실행중인 인터프리터가 있습니다. 그렇지 않으면 동적 코드와 같은 것이 작동하지 않습니다. 그러나 훨씬 더 빠르고 훨씬 더 간결하며 가능한 한 순수한 네이티브 매핑에 가깝습니다.
우리는 여전히 이것을 개선하고 작업 할 여지가 충분합니다. 지금까지 우리의 최신 1.0 테스트에서는 동일한 Objective-C 직접 코드와 거의 구별 할 수 없습니다 (대부분의 경우 정확히 매핑되기 때문에). 그러나 CompSci의 관점에서 우리는 이제 GCC 컴파일러가 오늘날 이미하고있는 것처럼 인간이 쉽게 할 수없는 일을 최적화 할 수 있습니다.
jhaynie가 말했듯이 애플리케이션은 네이티브 코드로 컴파일되지만 여전히 일부 자바 스크립트를 실행하는 인터프리터가있어 애플리케이션을 매우 동적으로 만들 수 있습니다.
간단한 코드를 패키징하면 ~ 80MB gzip 아카이브 (원래 코드 ~ 1kB)가 생성됩니다. 패키지 내에서-무엇보다도-내 소스 html 및 js 파일을 찾을 수 있습니다. 패키지와 함께 제공되는 많은 라이브러리 (예 : SSL)도 있습니다 (이 프레임 워크 내에서 많은 항목에 대한 저수준 액세스를 가질 수 있기 때문입니다).
나는 그들이 당신의 코드를 가지고 어떤 종류의 인터프리터 소프트웨어와 라이브러리를 감싸고 있다고 생각합니다. 내 경우에는 내 사이트 만 표시하는 작은 브라우저 옆에 내 html 및 js 코드를 포장하는 것과 같습니다.
그러나 코드가 지원되는 모든 시스템에서 동일한 방식으로 작동하는 한 좋은 점이 있습니다.