zoukankan      html  css  js  c++  java
  • 编译器二次开发定制服务?

    数据和 Microsoft 中间语言 (MSIL) 并可选择在磁盘上生成 PE 文件的类。这些类的主要客户端是脚本引擎和编译器。很多时候,对于某个行业的业务而言,所使用的编程语言的某个功能是非常频繁,而别的功能基本很少使用。

    因此对于寻附上重点的功能,原有的语言,难以满足要求,

    所以世界上出现了很多的专用语言。

    但是重新开发一门专用语言,工作量是巨大的,所以跟通用的c,c++,C#,vb, java, delphi相比 很多专用语言的通用功能非常弱, 连基本的语句结构,可能也有很大的缺陷,编辑器和调试器功能就相当弱。

    那充,如何在一门成功的主流语言里面,加入所需的功能呢?

    能不能开放(不是开源)编译器语法API,这样认都可以跟写c++,vb,C#,java一样,简单的就能开发新的语言元素? 

    像那个parallet语言,本来只是加入异步支持,却要从头写个全功能的编译器,后面还有编辑器的智能提示,语法高亮,调试...一大堆的问题!

    如果编译器(结合IDE)提供二次开发,那么就可以加入自己专用的语法,关键字,扩充已有功能,当然不能去掉已有的功能,但是可以替换 override,overload,或者deprecate(对原有功能进行标记,注为过期,如果使用,提出提示,警告,建议新功能,但向后兼容,可以正确编译运行)。

    你喜欢VB,就可以把VB的某些语言功能加入进来,喜欢Java,就把Java中想要的功能加进来,喜欢lisp,就把lisp的功能加进来,python,ruby,boo,js,fortran, matlab, r ... 

    这样就获得了原编译器的所有功能,编辑器的智能提示,语法高亮等功能,以及IDE的调试等... 

    注:编译器二次开发,跟.net提供的System.Reflection.Emi不一样。Emit是元数据和中间语言工具,我这里说的目标是开发一门新语言,或者在语言特性(主要是DSL,不是扩充函数,类)

  • 相关阅读:
    耐人寻味的 8 幅Java技术图
    什么是线程安全?怎么样才能做到线程安全?
    线程池
    ExecutorService的正确关闭方法
    js中let和var定义变量的区别
    sql的left join 、right join 、inner join之间的区别
    Collections.sort排序
    Mysql声明变量及使用
    java集合容器汇总
    TortoiseSVN提交commit提示Unable to create pristine install stream.系统找不到指定的路径 之解决方法
  • 原文地址:https://www.cnblogs.com/xiexiaokui/p/2087762.html
Copyright © 2011-2022 走看看