自研产品:Plang游戏语言

        Plang是一款C++开发的高级程序设计语言。语言主要用于Microsoft Windows10平台下C++系统的嵌入式游戏脚本开发(支持win10/mac os/linux系统)。本文通过简单的示例让用户了解Plang编程语言。

 

第一个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语言是简单的:
    1. 继承C++、Java语言的语法特点。
    2. 消除void、extends、implements等关键字。
    3. 支持内存自动回收功能。
    4. 支持通过PNI(Plang Native Interface)调用C语言函数库。
  • Plang语言是面向对象的:
    1. 提供类、接口等面向对象数据结构。
    2. 完全支持封装+继承+多态。
  • Plang语言是解释型的:
    1. Plang程序(后缀为ps的文件)被编译成字节码格式(后缀为p的文件),然后可以在PC平台下由解释器运行。
  • Plang语言是支持协程的:
    1. Plang语言在语法层面支持协程。协程是一种单线程环境下支持异步执行的解决方案。相比内核调度的多线程,协程将调度权交给开发者,以减少内核环境切换的开销,更能适应大量且耗时极短的异步应用场景。

PLANG基本数据类型

Plang语言提供内置数据类型、引用类型、常量。

  • 内置数据类型

数据类型

最小值

最大值

byte

-128(-2^7)

127(2^7-1)

char

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

    示例如下:

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。

PLANG控制语句

  • 条件语句
    1. if语句
    2. if…else语句
    3. if…else if…else语句
  • 循环结构
    1. while循环。
    2. do…while循环。
    3. break中断。
    4. continue中断。
  • 异常处理语句
    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. 用于创建协程。协程方法需要具备以下条件:
      1. 返回值为空。
      2. 非构造方法。
      3. 非native方法。

示例:

public class Foo {

    static foo(){ }

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

示例:

public class Foo {

    static foo(){ }

    public static main() {
        john->John=new John();
        co_await john;
    }
}
  • co_yield语句
    1. co_yield用于切换程序执行权,其后接绑定对象;
    2. 若后接对象存在与之绑定的阻塞协程,则切换当前协程,并唤醒关联的阻塞协程。例如:co_yield john;
    3. 若后接对象为null,则仅切换当前执行权。例如:co_yield null;

示例:

import std::IO;

class Foo {

    static foo() {
        IO.printf("in foo0\n");
        co_yield null;
        IO.printf("in foo1\n");
    }

    public static main() {
        co_start Foo.foo();
        IO.printf("in main0\n");
        co_yield null;
        IO.printf("in main1\n");
    }
}
输出:

组件介绍(软件包)

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

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

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

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

 

仓库路径:plang-1.4.* -- github.com

 

posted @ 2020-10-04 14:09  ChivenZhang  阅读(77)  评论(0)    收藏  举报