简单了解 xlang

  • XLANG 是什么?

  • xlang是一门程序设计语言, 用于windows、Linux、Mac OSX应用开发。

    使用 C/C++ 系语法。

    跨平台,支持在Windows(兼容XP),linux各发行版及架构、MacOS、iOS、android等平台上独立运行,虽然支持win xp系统,但由于系统原因,可能尚存在不明确的问题.

    语言特性简单,较为接近java语言,例如新建项目中的控制台程序模板:

    Code   ViewPrint
    1. /*** xlang **/  
    2. /*** 定义package System **/  
    3. package System{  
    4.         // 定义类 out   
    5.     public class out{  
    6.                 // 定义静态方法   
    7.         public static int println(String text){  
    8.                        // 使用内建的接口向控制台输出   
    9.             return _system_.consoleWrite(text + "\n");  
    10.         }  
    11.         public static int print(String text){  
    12.             return _system_.consoleWrite(text);  
    13.         }  
    14.     };  
    15. };  
    16.     
    17.     
    18. //声明使用 package System,即可在全局范围内使用该 package 的成员   
    19. using { System; };  
    20.     
    21.     
    22. // 如同C和java一样 需要一个入口方法来执行  
    23. int main(String [] args){  
    24.         调用上面定义的方法来输出文字  
    25.     System.out.println("hello World!");  
    26.     
    27.     return 0;  
    28. }  
    29.     
    30. /*** END ***/  

    强类型与自动内存回收,提高开发效率,降低后期成本,更适合做框架。

    支持多线程和闭包,提高并行任务能力,使用多线程的例子:

    Code   ViewPrint
    1. int main(String [] args) {  
    2.    
    3.     int n = 0;  
    4.        
    5.     //创建线程   
    6.     Thread t = new Thread() {  
    7.         void run()override {  
    8.             //实现 Thread 类的run方法, 可在线程方法内使对象 n 自增并打印  
    9.             System.out.println("n = " + n++);  
    10.         }  
    11.     };  
    12.    
    13.     //使线程开始工作  
    14.     t.start();  
    15.     //等待线程返回  
    16.     t.join();  
    17.     return 0;  
    18. }  
    19.    
    20. /*** END ***/  

    语法结构简单、同时支持重载操作符、泛型、注解.如下例:

    Code   ViewPrint
    1. //xlang 重载操作费  
    2.    
    3. class cout{  
    4.     // 重载 << 操作符  
    5.     public static cout operator << (String txt){  
    6.         _system_.consoleWrite(txt);  
    7.         return new cout();  
    8.     }  
    9. };  
    10.    
    11. int main(String [] args) {  
    12.     // 使用 << 操作符输出字符串  
    13.     cout << "hello" << " " << "world!";  
    14.     return 0;  
    15. }  
    16.    
    17. /*** END ***/  

    重载操作符与模板类使用实例:

    Code   ViewPrint
    1. //xlang 模板  
    2. //定义模板类   
    3. class MyArray<T>{  
    4.     private T [] _array;  
    5.        
    6.     public MyArray(int presize){  
    7.         _array = new T[presize];  
    8.     }  
    9.     // 重载[] set操作符, [] 两个参数为set  
    10.     public void operator [] (int n, T o){  
    11.         if (n >= 0 && n < _array.length){  
    12.             _array[n] = o;  
    13.         }else{  
    14.             throw new IndexOutOfBoundsException();  
    15.         }  
    16.     }  
    17.     // 重载[] get操作符, [] 一个参数为get  
    18.     public T operator [](int n){  
    19.         if (n >= 0 && n < _array.length){  
    20.             return _array[n];  
    21.         }else{  
    22.             throw new IndexOutOfBoundsException();  
    23.         }  
    24.         return nilptr;  
    25.     }  
    26. };  
    27.    
    28. int main(String [] args) {  
    29.     // 定义对象MyArray, T = String  
    30.     MyArray<String> _ma = new MyArray<String>(10);  
    31.     // 设置第三个元素的值  
    32.     _ma[3] = "hi!";  
    33.     //获取并打印第三个元素的值  
    34.     _system_.consoleWrite(_ma[3]);  
    35.     return 0;  
    36. }  
    37.    
    38. /*** END ***/  

    除使用模板外,还可以使用 Object 类型:

    1. //xlang 模板  
    2. //定义类   
    3. class MyArray{  
    4.     private Object [] _array;  
    5.        
    6.     public MyArray(int presize){  
    7.         _array = new Object[presize];  
    8.     }  
    9.    
    10.     // 重载[] set操作符, [] 两个参数为set  
    11.     public void operator [] (int n, Object o){  
    12.         if (n >= 0 && n < _array.length){  
    13.             _array[n] = o;  
    14.         }else{  
    15.             throw new IndexOutOfBoundsException();  
    16.         }  
    17.     }  
    18.    
    19.     // 重载[] get操作符, [] 一个参数为get  
    20.     public Object operator [](int n){  
    21.         if (n >= 0 && n < _array.length){  
    22.             return _array[n];  
    23.         }else{  
    24.             throw new IndexOutOfBoundsException();  
    25.         }  
    26.         return nilptr;  
    27.     }  
    28. };  
    29.    
    30. int main(String [] args) {  
    31.     // 定义对象MyArray, T = String  
    32.     MyArray _ma = new MyArray(10);  
    33.    
    34.     // 设置第三个元素的值  
    35.     _ma[3] = "hi!";  
    36.    
    37.     //获取并打印第三个元素的值  
    38.     Object s = _ma[3];  
    39.    
    40.     //判断是否String类的实例   
    41.     if (s.instanceOf(String)){  
    42.         _system_.consoleWrite((String)s);  
    43.     }  
    44.     return 0;  
    45. }  
    46.    
    47. /*** END ***/  

    注解功能:

    Code   ViewPrint
    1. //xlang   
    2. //定义类   
    3. @Compiler(version = ">=4.0")        // 提示该代码至少使用xlang 4.0的编译器  
    4. @SuppressWarnings                   //抑制警告  
    5. @Native(CallConvention = "stdcall"// 本地化此方法, 使得此方法可以在C/C++代码中回调  
    6. void foo(String s){  
    7.     _system_.consoleWrite(s);       //向控制台输出文字  
    8. }  
    9.   
    10. /*** END ***/  

    支持跨平台,专用的集成开发环境, 使用第三方库Qt开发,具有可视化UI设计、在任一平台的开发都同样便利.

    能作为主要语言来开发应用,且能够调用C/C++ 或者其他更低级语言编写的动态库, 例如调用C/C++导出方法:

    注解功能:

    Code   ViewPrint
    1. //xlang 模板  
    2.   
    3. //定义类   
    4. class Winapi{  
    5.     // 加载user32 dll, 不必写扩展名或者前置lib, 系统会自动在当前目录、程序根目录、以及libs目录下寻找  
    6.     public import "user32"{  
    7.         // 导入user32 的C函数 MessageBoxA, 调用约定为 stdcall  
    8.         int stdcall MessageBoxA(Pointer, String text, String title, int flag);  
    9.     };  
    10. };  
    11.   
    12. int main(String [] args) {  
    13.     // 调用C函数  
    14.     Winapi.MessageBoxA(0L,"Hello 2024","hi",0);  
    15.     return 0;  
    16. }  
    17.   
    18. /*** END ***/  
    注:native调用是不安全的,需确保类型、调用约定、资源等正确处理,否则可能出现不可挽回的RuntimeExceptione导致中断退出, xlang 类型与C/C++类型互转,请参阅文档

    更多示例请见XStudio示例代码和文档。

    ......






  • 最后:

  • xlang 是一门虚拟机语言, 运行在虚拟机之上,可产出带虚拟机外壳的独立执行程序,也可以产出字节码程序、动态库、静态库,可以很方便的实现热加载.

    xlang 更适合开发桌面应用的框架.

    xlang 的编译器和虚拟机现阶段暂未开源.

    xlang 的所有基础库都是开源的。

    XStudio 是开源的。

    上述已开源的项目在github和gitee中可找到全部源代码。

  • 其他疑问请联系QQ群.