|
xlang v4.0 Release
程序设计语言基础库文档
|
● xlang 是一门面向对象的跨平台编程语言, xlang语言采用C系语法为主要风格, 与java语言较为相似, 具有强类型、简单性、易用性、安全性、动态性、多线程、垃圾回收、跨平台等诸多特性。
● xlang 是虚拟机语言, 与java有所不同的是, xlang相当轻量,且xlang不仅可生成字节码程序,也支持(交叉)生成目标平台的可执行文件(含虚拟机), 同时也支持动态加载及热更新。
● xlang 目前没有过多优化及使用jit引擎, 因而 xlang 的性能仍然低于现有的一些主流语言,但性能并不是 xlang 诞生的主要目的和需要解决的问题,xlang旨在提高开发效率和应用稳定性而出现的,并且xlang具有良好的与C/C++或者其他更低级的语言交互能力,包括支持生成低级语言所支持的结构体、动态回调函数等,以及具有指针等特性,在某些极端需要性能的场景,可能仍需要开发者使用诸如C/C++ 或者汇编语言进行配合使用,而在大多数的客户端应用开发场景,这种极端的性能需求很少出现, xlang在未来将会进行性能优化和支持jit。
● XStudio 是一个开放源代码的基于xlang的可扩展开发平台,XStudio 是完全用 xlang 语言开发的, 得益于xlang及其他第三方类库的跨平台特性, XStudio 可运行在Windows xp(含)以上全系列版本和架构的操作系统、 以及Linux 的全系列发行版和MacOSX操作系统上。
● XStudio 2.0版本采用LSP协议结合xlang的lsp语言服务,为xlang的开发带来极大的辅助和便利, 并且XStudio支持其他语言和项目的插件定制化开发。
● XStudio 的UI系统为Qt(基于LGPL),且采用Qt为默认UI开发组件,根据协议要求, 封装器已全部开源(见github),该封装与xlang完全独立,为 xlang 的第三方UI组件库。
● Studio 现已支持开发xlang app 和跨平台的 C/C++项目开发(需要安装扩展).
源文件扩展名: *.x(源文件)(3.1新增) *.xcs(源文件) *.xcsm(模块源文件)
目标文件扩展名: *.exc(x可执行文件,需安装xre[X运行环境]) *.lix(x静态库)
共享库扩展名: *.slx(2.3新增)
链接库扩展名: *.xl(2.3新增)
XStudio为开源软件,开源地址为: http://ixlang.github.io/
注意:xlang 与 XStudio 非商业软件,可自由使用.
xlang编译系统和运行环境均不依赖其他组件, 但为方便开发,随安装包提供一些已封装的的第三方基础库,在这些第三方库中可能使用了Qt等非商业授权的组件, 封装部分都已开源,并且根据不同的开源协议(如gpl和lgpl等)进行了分别编译,如需使用在商业用途, 请加以甄别和自行裁剪.
xlanglsp 的前端采用自动机解析,且未做精修, 语法错误可能提示不够准确.
本文档为xlang的基础类库和默认第三方类库接口文档,点击页面上方菜单进行查阅,注意:在版本变更中有存在极少部分信息与文档不符,如需要请索取.
命令行参数:
| 命令行 | 说明 |
|---|---|
| 概要 | xlang [-lix] [-libpath path..] [-incpath path...] [-lib libs...] -[c|ce|gs|e|cr] intputfile [outputfile|outputdir] |
| -c intput output | 编译为字节码 |
| -lix -c intput output | 编译为静态库 |
| -gs intput outdir | 生成native的C代码框架 |
| -cr intput | 编译并在编译器中运行 |
| -ce intput output | 编译为可执行exe文件 |
| -e intput [args] | 运行字节码文件 |
| -arch:[x86, x86_64, arm, arm64, mips] | 指定目标处理器架构 (v6.0 beta 新增) |
| -xcross-[osname] | 指定交叉生成的目标操作系统(仅限于-ce编译,可选项-xcross-[windows,linux,drawin]).(v1.5 release 新增) |
| -w | 忽略所有警告 (v6.0 beta 新增) |
| -dbg | 编译可调试版本 (v6.0 beta 新增) |
| -ico filepath | 为目标可行执行程序指定图标(仅Windows -ce编译) (v7.0 beta 新增) |
| -libpath [path...] | 设置编译器的连接路径 |
| -lib [lib.lix...] | 设置要链接的静态库 |
| -incpath [path...] | 设置编译器的inc\require路径 |
| -nd | 不生成调试信息, 将使生成的文件更小,应用启动速度略微加快,但意味着出现Exception时,无法获得详尽的跟踪信息 |
| 注: | 编译时采用默认优化,暂无可用优化选项, 无论生成调试信息与否, 均不会影响运行时性能. |
支持直接编译为操作系统支持运行的可执行文件, 因而未提供运行字节码的独立虚拟机.
| 序号 | 与java相同的部分特性 |
|---|---|
| 1 | 面向对象 |
| 2 | 支持泛型编程(模板类,不支持模板函数) |
| 3 | 支持多态,所有方法均为虚方法,可以在类中声明纯虚函数,或者声明interface类,但需要在派生类中实现才可以被实例化. |
| 4 | 支持闭包 |
| 5 | 支持package. |
| 6 | 支持多线程. |
| 7 | 自动的垃圾回收(同时提供手动gc接口) |
| 8 | synchronized块同步语法 |
| 9 | 入口点程序格式: int main(String [] args){ } |
| 序号 | 与C++相同的部分特性 |
|---|---|
| 1 | include 或者require 包含文件,但不存在头文件之类的, 所有文件都是源文件 |
| 2 | 重载操作符,支持 + - / * += -= *= /= == != >> << < > <= >= <<= >>= & | ^ ~ &= |= ^= [] .(小数点) 。 |
| 序号 | 新的内容 |
|---|---|
| 1 | 无论class还是interface,都只能单继承, 不允许多重继承. |
| 2 | enum数据类型 |
| 3 | 增强了native api的功能调用,只需要声明 import "**.dll/so" 就可以调用native函数 |
| 4 | 编译源码不用再强调编译或者声明的先后顺序,只要在源码看得到的地方,可以随便调用. |
| 5 | 支持不同参数的函数重载. |
| 6 | synchronized_read \ synchronized_write 块读写同步语法 |
| 7 | 所有的interface都是静态,interface内不可以有变量声明 |
| 8 | 字符串断行不需要用\, 用 + 连接更好(不会产生运行时代码) |
| 9 | 派生类构造方法中显式调用基类构造方法应放在第一行且仅能调用一次. |
| 10 | 派生类构造方法(无论是否有参)中若没有显式调用基类构造将隐式调用基类默认构造方法. |
| 11 | 基类(该类是另一个类的派生类)若无默认构造函数,在派生类构造的时候将跳过基类构造直接调用基类的基类默认构造方法. |
| 12 | 类中存在有参构造方式且不存在显式默认构造方式时, 将禁用默认构造方法 |
| 13 | 面向过程开发 |
| 14 | 注解 |
| 15 | 强化的Native调用与回调功能 |
| 运算符 | 定义形式说明 |
|---|---|
| + | 类型 operator + (类型 参数名) |
| - | 类型 operator - (类型 参数名) |
| / | 类型 operator / (类型 参数名) |
| * | 类型 operator * (类型 参数名) |
| += | 类型 operator += (类型 参数名) |
| -= | 类型 operator -= (类型 参数名) |
| *= | 类型 operator *= (类型 参数名) |
| /= | 类型 operator /= (类型 参数名) |
| == | 类型 operator == (类型 参数名) |
| != | 类型 operator != (类型 参数名) |
| >> | 类型 operator >> (类型 参数名) |
| << | 类型 operator << (类型 参数名) |
| < | 类型 operator < (类型 参数名) |
| > | 类型 operator > (类型 参数名) |
| <= | 类型 operator <= (类型 参数名) |
| >= | 类型 operator >= (类型 参数名) |
| <<= | 类型 operator <<= (类型 参数名) |
| >>= | 类型 operator >>= (类型 参数名) |
| & | 类型 operator & (类型 参数名) |
| | | 类型 operator | (类型 参数名) |
| 类型 operator ^ (类型 参数名) | |
| ~ | 类型 operator ~ (类型 参数名) |
| &= | 类型 operator &= (类型 参数名) |
| |= | 类型 operator |= (类型 参数名) |
| ^= | 类型 operator ^= (类型 参数名) |
| ++ | 前置自增 : 类型 operator ++ () |
| ++ | 后置自增 : 类型 operator ++ (int) |
| – | 前置自减 : 类型 operator – () |
| – | 后置自减 : 类型 operator – (int) |
| . | 读\写成员操作 : 类型 operator . (String, value[写操作]) |
| [] | 读\写成员操作 : 类型 operator [] (String, value[写操作]) |
| 注意 | 操作符的优先级同数学运算的优先级相同 |
| 优先级 | 操作符 | 描述 | 结合方向 |
|---|---|---|---|
| 1 | () | 调节优先级的括号操作符 | 从左到右 |
| 1 | [] | 数组下标访问操作符 | 从左到右 |
| 1 | new{}/[] | 创建对象/数组 | 从右到左 |
| 1 | . | 访问成员的操作符 | 从左到右 |
| 1 | ++ | 后置自增操作符 | 从左到右 |
| 1 | – | 后置自减操作符 | 从左到右 |
| 2 | ! | 逻辑取反操作符 | 从右到左 |
| 2 | ~ | 按位取反 | 从右到左 |
| 2 | ++ | 前置自增操作符 | 从右到左 |
| 2 | – | 前置自减操作符 | 从右到左 |
| 2 | - | 一元取负操作符 | 从右到左 |
| 3 | * | 乘法操作符 | 从左到右 |
| 3 | / | 除法操作符 | 从左到右 |
| 3 | % | 取余数操作符 | 从左到右 |
| 4 | + | 加法操作符 | 从左到右 |
| 4 | - | 减法操作符 | 从左到右 |
| 5 | << | 按位左移操作符 | 从左到右 |
| 5 | >> | 按位右移操作符 | 从左到右 |
| 6 | < | 小于比较操作符 | 从左到右 |
| 6 | <= | 小于或等于比较操作符 | 从左到右 |
| 6 | > | 大于比较操作符 | 从左到右 |
| 6 | >= | 大于或等于比较操作符 | 从左到右 |
| 7 | == | 等于比较操作符 | 从左到右 |
| 7 | != | 不等于比较操作符 | 从左到右 |
| 8 | & | 按位与操作符 | 从左到右 |
| 9 | 按位异或操作符 | 从左到右 | |
| 10 | | | 按位或操作符 | 从左到右 |
| 11 | && | 逻辑与操作符 | 从左到右 |
| 12 | || | 逻辑或操作符 | 从左到右 |
| 13 | ? : | 三元条件操作符 | 从右到左 |
| 14 | = | 赋值操作符 | 从右到左 |
| 14 | += | 复合赋值操作符(加法) | 从右到左 |
| 14 | -= | 复合赋值操作符(减法) | 从右到左 |
| 14 | *= | 复合赋值操作符(乘法) | 从右到左 |
| 14 | /= | 复合赋值操作符(除法) | 从右到左 |
| 14 | %= | 复合赋值操作符(取余) | 从右到左 |
| 14 | &= | 复合赋值操作符(按位与) | 从右到左 |
| 14 | ^= | 复合赋值操作符(按位异或) | 从右到左 |
| 14 | |= | 复合赋值操作符(按位或) | 从右到左 |
| 14 | <<= | 复合赋值操作符(按位左移) | 从右到左 |
| 14 | >>= | 复合赋值操作符(按位右移) | 从右到左 |