当前位置:网站首页>【plang 1.4.6】Plang高级编程语言(发布)
【plang 1.4.6】Plang高级编程语言(发布)
2022-08-02 03:29:00 【ChivenZhang】
系统简介
Plang是一门体现JVM(Java Virtual Machine)规范,使用C++自主开发的高级编程语言,主要用于Windows10平台下C++游戏系统脚本开发(预计支持mac os/linux系统)。本文通过简单的示例让大家了解Plang编程语言。
注:Plang既可拆解为“plan game”:游戏脚本,也可拆解为“parasite language”:寄生虫语言,两种理解方式表明Plang是一种嵌入式的游戏脚本语言,当然PNI也能使之成为通用编程语言。
第一个Plang程序
import std::IO;
import std::Type;
public class HelloWorld
{
public static main()
{
IO.printf("%s,%s!", Type.get("Hello"), Type.get("world"));
}
}
,运行结果:
命令解析:
plang -c HelloWorld 指明运行的类名;
plang -s src 指明源文件编译路径;
PLANG介绍
- Plang语言是简单的:
- 继承C++、Java语言的语法特点。
- 消除void、extends、implements等关键字。
- 支持内存自动回收功能。
- 支持通过PNI(Plang Native Interface)调用C语言函数库。
- 添加功能局限的反射功能。
- Plang语言是面向对象的:
- 提供类、接口等面向对象的数据结构。
- 完全支持封装+继承+多态。
- Plang语言是解释型的:
- Plang程序(后缀为ps的文件)被编译成字节码格式(后缀为p的文件),然后可以在PC平台下由解释器运行。
- Plang语言是支持协程的:
- Plang语言在语法层面支持协程。协程是一种单线程环境下支持异步执行的解决方案。相比内核调度的多线程,协程将调度权交给开发者,以减少内核环境切换的开销,更能适应大量且耗时极短的异步应用场景。
PLANG基本数据类型
Plang语言提供内置数据类型、引用类型、常量。
- 内置数据类型(遵循IEEE 754标准)
数据类型 | 最小值 | 最大值 |
char | -128(-2^7) | 127(2^7-1) |
byte | 0 | 256(2^8) |
short | -32768(-2^15) | 32767(2^15 - 1) |
int | -2,147,483,648(-2^31) | 2,147,483,647(2^31 - 1) |
long | -9,223,372,036,854,775,808(-2^63) | 9,223,372,036,854,775,807(2^63 -1) |
float | IEEE 754标准 | IEEE 754标准 |
double | IEEE 754标准 | IEEE 754标准 |
boolean | false | true |
class Foo
{
public static main()
{
b->boolean=false;
c->char='a';
i->int=0;
l->long=0L;
f->float=0.0F;
d->double=0.0D;
}
}
- 引用类型
- 对象、数组都属于引用类型。
- 引用类型默认值为null。
class Foo
{
public static main()
{
a->int[] = new int[8];
b->double[][] = new double[5][2];
c->john[] = new John[3];
}
}
- 类型转换
- 语法格式为:数据->(类型),例如
class Foo
{
public static main()
{
a->byte = 123->(byte);
b->float = 123.4->(float);
john->(Man).sayHello();
}
}
PLANG运算符
- 支持C/Java编程语言绝大部分算术、逻辑、位、关系等运算符,具体请参考《Plang用户文档》。
PLANG控制语句
- 条件语句
- if语句
- if…else语句
- if…else if…else语句
- 循环结构
- while循环
- do…while循环
- break中断
- continue中断
- for循环(暂不支持,本质为语法糖)
- 异常处理语句
- throw语句
- try...catch语句
- 协程语句
- co_start语句
- co_await语句
- co_yield语句
协程调度
Plang语言支持协程,由关键字co_start,co_await,co_yield提供支持。主方法为默认主协程,子协程的执行顺序按照分发先后依次执行。Plang虚拟机维护一个协程队列,一个协程需要在前个协程让出执行权后,才能运行。如果程序结束时仍存在阻塞协程(程序处于死锁状态),则中断运行并且提示错误(该情况往往归咎于程序设计者)。
- co_start语句
- 用于创建协程。协程方法需要具备以下条件:
- 返回值为空。
- 非构造方法。
- 非native方法。(native方法,概念类似Java)
- 用于创建协程。协程方法需要具备以下条件:
示例:
public class Foo
{
public static main()
{
co_start Foo.foo();
}
static foo(){}
}
- co_await语句
- 用于阻塞当前协程。语句后接绑定对象实例。例如:co_await john;
- 所接对象若为null,程序报错。
示例:
public class Foo
{
public static main()
{
john->John=new John();
co_await john;
}
}
- co_yield语句
- co_yield用于切换程序执行权,其后接绑定对象;
- 若后接对象存在与之绑定的阻塞协程(由于调用了co_await指令),则切换当前协程,并唤醒关联的阻塞协程。例如:co_yield john;
- 若后接对象为null,则仅切换当前执行权。例如:co_yield null;
示例:
import std::IO;
class Foo
{
public static main()
{
co_start Foo.foo();
IO.printf("in main0\n");
co_yield null;
IO.printf("in main1\n");
}
static foo()
{
IO.printf("in foo0\n");
co_yield null;
IO.printf("in foo1\n");
}
}
输出:
组件介绍(软件包)
1、plang.exe/plang32.exe(win10平台)
Plang语言源代码编译器+虚拟机。命令行环境下,通过输入“plang.exe”查看命令格式信息。
2、pdb.exe/pdb32.exe(win10平台)
Plang语言字节码调试器。命令行环境下,通过输入“pdb.exe”查看命令格式信息。
自研路途艰难,少许支持却力量巨大
github仓库:plang-1.4.*
gitee仓库:plang-1.4.*
QQ群:Plang编程语言
边栏推荐
- MPU6050 加速度计和陀螺仪传感器与 Arduino 连接
- 连接本地MySql时出现2003-Can‘t connect to MySql server on ‘localhost‘(10061)
- 【Arduino连接时钟模块在LCD1602上显示时间】
- [Arduino connects the clock module to display the time on LCD1602]
- D类音频功放NS4110B电路设计
- PCB Design Ideas
- Case | industrial iot solutions, steel mills high-performance security for wisdom
- Scala,Spark依赖jar包冲突解决方法
- 【水位传感器与 Arduino 连接测量水位】
- 【土壤湿度传感器与 Arduino 测量土壤湿度】
猜你喜欢
随机推荐
移动云物联网预研及阿里云开发对比分析
SyntaxError: unexpected character after line continuation character
【水位传感器与 Arduino 连接测量水位】
【科普贴】I2C通讯协议详解——偏软件分析和逻辑分析仪实例分析
【Arduino连接GPS 模块 (NEO-6M)读取定位数据】
【科普贴】UART接口通讯协议
GM7150 CVBS转BT656视频解码芯片详细内容及设计要求
GM8284DD,GM8285C,GM8913,GM8914,GM8905C,GM8906C,国腾振芯LVDS类芯片
【科普贴】SD卡接口协议详解
使用Vercel托管自己的网站
TC358860XBG BGA65 东芝桥接芯片 HDMI转MIPI
Arduino点亮数码管
MC1496乘法器
Transformer结构解析及常见问题
野火ISO-V2学习
【Arduino connects DHT11 humidity and temperature sensor】
MIPI解决方案 ICN6202:MIPI DSI转LVDS转换芯片
How to remotely debug PLC?
C# Form按ESC关闭窗体
Comparative analysis of mobile cloud IoT pre-research and Alibaba Cloud development