【plang 1.4.6】Plang高级编程语言(发布)

系统简介

        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"));
        }
}

,运行结果:

20200830232054704.png

命令解析:

plang -c HelloWorld 指明运行的类名;

plang -s src 指明源文件编译路径;

 

PLANG介绍

  • Plang语言是简单的:
    1. 继承C++、Java语言的语法特点。
    2. 消除void、extends、implements等关键字。
    3. 支持内存自动回收功能。
    4. 支持通过PNI(Plang Native Interface)调用C语言函数库。
    5. 添加功能局限的反射功能。
  • Plang语言是面向对象的:
    1. 提供类、接口等面向对象的数据结构。
    2. 完全支持封装+继承+多态。
  • Plang语言是解释型的:
    1. Plang程序(后缀为ps的文件)被编译成字节码格式(后缀为p的文件),然后可以在PC平台下由解释器运行。
  • Plang语言是支持协程的:
    1. 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;
    }
}
  • 引用类型
    1. 对象、数组都属于引用类型。
    2. 引用类型默认值为null。
class Foo
{
    public static main()
    {
        a->int[] = new int[8];
        b->double[][] = new double[5][2];
        c->john[] = new John[3];
    }
}
  • 类型转换
    1. 语法格式为:数据->(类型),例如
class Foo
{
    public static main()
    {
        a->byte = 123->(byte);
        b->float = 123.4->(float);
        john->(Man).sayHello();
    }
}

PLANG运算符

  • 支持C/Java编程语言绝大部分算术、逻辑、位、关系等运算符,具体请参考《Plang用户文档》。

 

PLANG控制语句

  • 条件语句
    1. if语句
    2. if…else语句
    3. if…else if…else语句
  • 循环结构
    1. while循环
    2. do…while循环
    3. break中断
    4. continue中断
    5. for循环(暂不支持,本质为语法糖)
  • 异常处理语句
    1. throw语句
    2. try...catch语句
  • 协程语句
    1. co_start语句
    2. co_await语句
    3. co_yield语句

协程调度

Plang语言支持协程,由关键字co_start,co_await,co_yield提供支持。主方法为默认主协程,子协程的执行顺序按照分发先后依次执行。Plang虚拟机维护一个协程队列,一个协程需要在前个协程让出执行权后,才能运行。如果程序结束时仍存在阻塞协程(程序处于死锁状态),则中断运行并且提示错误(该情况往往归咎于程序设计者)。

  • co_start语句
    1. 用于创建协程。协程方法需要具备以下条件:
      • 返回值为空。
      • 非构造方法。
      • 非native方法。(native方法,概念类似Java)

示例:

public class Foo
{
    public static main() 
    {
        co_start Foo.foo();
    }
    
    static foo(){}
}
  • co_await语句
    1. 用于阻塞当前协程。语句后接绑定对象实例。例如:co_await john;
    2. 所接对象若为null,程序报错。

示例:

public class Foo 
{
    public static main() 
    {
        john->John=new John();
        co_await john;
    }
}
  • co_yield语句
    1. co_yield用于切换程序执行权,其后接绑定对象;
    2. 若后接对象存在与之绑定的阻塞协程(由于调用了co_await指令),则切换当前协程,并唤醒关联的阻塞协程。例如:co_yield john;
    3. 若后接对象为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");
    }
}

输出:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NzI5MzYy,size_16,color_FFFFFF,t_70

组件介绍(软件包)

1、plang.exe/plang32.exe(win10平台)

Plang语言源代码编译器+虚拟机。命令行环境下,通过输入“plang.exe”查看命令格式信息。

2、pdb.exe/pdb32.exe(win10平台)

Plang语言字节码调试器。命令行环境下,通过输入“pdb.exe”查看命令格式信息。

 

自研路途艰难,少许支持却力量巨大

github仓库:plang-1.4.6

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChivenZhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值