CN105893103A - 编译方法及其编译器 - Google Patents
编译方法及其编译器 Download PDFInfo
- Publication number
- CN105893103A CN105893103A CN201410687717.8A CN201410687717A CN105893103A CN 105893103 A CN105893103 A CN 105893103A CN 201410687717 A CN201410687717 A CN 201410687717A CN 105893103 A CN105893103 A CN 105893103A
- Authority
- CN
- China
- Prior art keywords
- compiler
- compilation
- source file
- code
- compilation method
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
一种编译方法,其涉及一种编译器,所述编译方法主要包括以下步骤:首先需要在编译器上编写源代码,然后将编写好的源代码在编译器上执行,此时开始读取源文件,所述编译器对源文件进行编译,当需要引用其他编译单元时,此时引用其他编译单元,回到上述读取源文件步骤;不需要引用其他编译单元时,直接对该源文件进行编译,所述编译器进行动态链接引用库,然后进行二次编译,将源文件编译成机器码,同时输出机器码,然后进行动态链接,最后由宿主平台执行该机器码。
Description
技术领域
本发明涉及一种计算机技术领域,尤其是涉及一种编译方法及其编译器。
背景技术
随着大规模集成软件架构的兴起,脚本语言与传统编译型语言之间的集成互动越来越广泛。而脚本语言大多数是属于面向过程类语言(如JavaScript、VBScript等),所以行业中一直缺乏一种既能够具备编译型面向对象语言特征,又能够具备传统脚本语言优势,并能够与脚本语言从源代码级别上相兼容的新兴专门用于集成领域的语言。虽然美国的科学家发明了Scala语言,在一定程度上同时具备了面向对象编译型语言与脚本语言的特性,但它无法做到与传统的脚本语言在源代码级别的兼容。
因此,有必要提供一种新的技术方案以克服上述缺陷。
发明内容
本发明的目的在于提供一种可以有效解决上述技术问题的编译方法及其编译器。
为达到本发明之目的,采用如下技术方案:一种编译方法,其涉及一种编译器,所述编译方法主要包括以下步骤:首先需要在编译器上编写源代码,然后将编写好的源代码在编译器上执行,此时开始读取源文件,所述编译器对源文件进行编译,当需要引用其他编译单元时,此时引用其他编译单元,回到上述读取源文件步骤;不需要引用其他编译单元时,直接对该源文件进行编译,所述编译器进行动态链接引用库,然后进行二次编译,将源文件编译成机器码,同时输出机器码,然后进行动态链接,最后由宿主平台执行该机器码。
所述编译器主要包括引导模块、编译模块、设备适配模块、内存模块及服务供应接口扩展模块。
所述内存模块包括堆内存和常量池内存。
与现有技术相比,本发明具有如下有益效果:本发明编译方法采用了与当前主流编译型语言(如Java、C#)等类似的语法和设计风格,使得它具备了作为软件的主要编程语言而出现在软件研发过程中的能力。同时编译器能够将其在运行时自动编译成对应平台的与原生EcmaScript规范兼容的代码而能够运行在任何兼容EcmaScript规范的平台上。在源代码的编写中,编程人员可以自由在脚本语言与宿主环境(Java或C#或Object-C)之间做无缝集成。同时编译器本身即采用JavaScript语言编写,并能够在某些优化环境(如Google V8Engine)下被编译成原生的机器码以获得可以与C++相媲美的执行效率。该编译方法具备边写边执行的能力,但其对底层宿主平台的要求比Java和C#更小。任何一个能支持EcmaScript规范的引擎(甚至是裸机)都可以用来运行由该编译方法开发的软件,该编译方法特别适合开发对设备要求苛刻的嵌入式环境。
具体实施方式
下面将对本发明编译方及其编译器做出清楚完整的说明。
本发明编译方法主要涉及编程接口、服务供应商接口、服务实现子集、语言运行时间及宿主平台。所述编程接口是本编译方法的主要体现方式,用户通过编程接口进行编程,实现其欲在宿主平台上实现的功能,所述编程接口包括通用编程接口及专用编程接口,所述专用编程接口可以根据不同的设备及应用场景进行专门设计。所述服务供应商接口使得任何人都可以按照本编译方法的服务供应接口为上层的编程接口提供具体的服务实现,从而使得本方法成为开放式平台模式。语言运行时间为本编译方法的运行时环境,主要包括了即时编译器以及基本原生编程接口的实现。所述服务实现子集,是由各服务供应商在不同的应用场合下提供不同的服务实现,以子集的方式为本编译方法生态圈提供重要的支撑。所述宿主平台主要是指为本编译方法提供底层运行的各种设备以及任何可支持JavaScript运行时的环境,比如Web浏览器、Google V8引擎等。
所述编译方法主要通过一下步骤实现:首先需要在编译器上编写源代码,然后将编写好的源代码在编译器上执行,此时开始读取源文件,所述编译器对源文件进行编译,当需要引用其他编译单元时,此时引用其他编译单元,回到上述读取源文件步骤;不需要引用其他编译单元时,直接对该源文件进行编译,所述编译器进行动态链接引用库,然后进行二次编译,将源文件编译成机器码,同时输出机器码,然后进行动态链接,最后由宿主平台执行该机器码。
所述编译方法涉及一种编译器,所述编译器采用JavaScript语言编写,以满足在任何支持JavaScript规范的宿主设备上运行,以实现跨平台的特性。所述编译器主要包括引导模块、编译模块、设备适配模块、内存模块及服务供应接口扩展模块。所述引导模块主要涉及引导过程,所述引导过程为本编译方法运行时环境与宿主设备建立物理适配的过程,从而使得本编译方法编译的语言在运行时能够将上层指令直接映射到宿舍设备的物理I/O。所述编译模块主要将本编译方法的源代码,按照类为单位,编译成每一个独立的JavaScript原生代码,所述编译模块采用JavaScript编写,并建立在引导模块提供的I/O映射智商,因此具备跨平台的编译效能,编译器为即时编译。所述内存模块分为堆内存和常量池内存,所述堆内存采用由宿主JavaScript引擎(如浏览器、JVM等)来进行托管,而常量池内存则为本编译方法管理,比如类信息、方法、属性、常量等等都受管于所述常量池内存中。所述服务供应接口模块为本编译方法平台重要的扩展接口,任何人或组织都可以成为本编译方法的服务供应者,所述服务供应接口模块实现将本编译方法的编程接口向宿主平台进行映射。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (3)
1.一种编译方法,其涉及一种编译器,其特征在于所述编译方法主要包括以下步骤:首先需要在编译器上编写源代码,然后将编写好的源代码在编译器上执行,此时开始读取源文件,所述编译器对源文件进行编译,当需要引用其他编译单元时,此时引用其他编译单元,回到上述读取源文件步骤;不需要引用其他编译单元时,直接对该源文件进行编译,所述编译器进行动态链接引用库,然后进行二次编译,将源文件编译成机器码,同时输出机器码,然后进行动态链接,最后由宿主平台执行该机器码。
2.如权利要求1所述之编译方法,其特征在于:所述编译器主要包括引导模块、编译模块、设备适配模块、内存模块及服务供应接口扩展模块。
3.如权利要求2所述之编译方法,其特征在于:所述内存模块包括堆内存和常量池内存。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410687717.8A CN105893103A (zh) | 2014-11-26 | 2014-11-26 | 编译方法及其编译器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410687717.8A CN105893103A (zh) | 2014-11-26 | 2014-11-26 | 编译方法及其编译器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105893103A true CN105893103A (zh) | 2016-08-24 |
Family
ID=56698965
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410687717.8A Pending CN105893103A (zh) | 2014-11-26 | 2014-11-26 | 编译方法及其编译器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105893103A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111176625A (zh) * | 2019-12-31 | 2020-05-19 | 杭州趣链科技有限公司 | 一种在浏览器端高效编译Solidity智能合约的方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1265488A (zh) * | 2000-03-06 | 2000-09-06 | 周大凯 | 程序执行方法 |
CN1504881A (zh) * | 2002-12-02 | 2004-06-16 | 三星电子株式会社 | 爪哇执行设备和爪哇执行方法 |
US20100169869A1 (en) * | 2005-11-09 | 2010-07-01 | Graham Hamilton | Supporting method references in the JAVA language |
-
2014
- 2014-11-26 CN CN201410687717.8A patent/CN105893103A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1265488A (zh) * | 2000-03-06 | 2000-09-06 | 周大凯 | 程序执行方法 |
CN1504881A (zh) * | 2002-12-02 | 2004-06-16 | 三星电子株式会社 | 爪哇执行设备和爪哇执行方法 |
US20100169869A1 (en) * | 2005-11-09 | 2010-07-01 | Graham Hamilton | Supporting method references in the JAVA language |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111176625A (zh) * | 2019-12-31 | 2020-05-19 | 杭州趣链科技有限公司 | 一种在浏览器端高效编译Solidity智能合约的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101697131B (zh) | 一种可重定位文件动态加载的方法及装置 | |
CN108765158A (zh) | 一种基于区块链的智能合约引擎系统及其合约执行方法 | |
CN102298535B (zh) | 绑定数据并行设备源代码 | |
CN103744709B (zh) | 补丁加载方法及装置 | |
CN105830023B (zh) | 用于在执行上下文中运行动态代码程序的方法和装置 | |
US9928156B2 (en) | Missing include suggestions for external files | |
CN106095620A (zh) | 一种嵌入式Linux存储分区的开发方法 | |
CN105224370A (zh) | 一种加载elf文件的方法和装置 | |
CN106415495A (zh) | 用于应用开发的编程系统和语言 | |
CN102696012A (zh) | 从代码使用中创建所推断的符号 | |
CN105630491A (zh) | 程序的功能变更方法及装置 | |
CN100530108C (zh) | 一种调用函数的方法及系统 | |
CN103677921A (zh) | 一种Android系统兼容wifi芯片的方法及系统 | |
CN102929682A (zh) | 自动扩展tcl语言的预处理方法和装置 | |
CN102999370A (zh) | 脚本的执行方法及系统 | |
CN102364437A (zh) | 多语言站点开发系统及其实现方法 | |
CN102968373A (zh) | 一种测试系统的维护方法及装置 | |
CN102184101A (zh) | 一种面向智能手机的软件应用框架及其开发系统 | |
CN106020921A (zh) | 外设应用程序的移植方法及其系统 | |
CN101334737A (zh) | 一种嵌入式设备的启动或复位方法 | |
de Lara et al. | Domain-specific textual meta-modelling languages for model driven engineering | |
CN103677778A (zh) | 一种CAP文件Classref常量的解析方法 | |
CN109558121A (zh) | 接口驱动程序的开发方法、装置、设备及存储介质 | |
CN105893103A (zh) | 编译方法及其编译器 | |
CN101944061A (zh) | 一种代码调试的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20160824 |