社区精选 |终于实现了一门属于自己的编程语言
今天小编为大家带来的是社区作者 crossoverJie 的文章。
前言
特性
println("hello world");
❯ gscript hello_world.gs
hello world
例子
void fib(){
int a = 0;
int b = 1;
int fibonacci(){
int c = a;
a = b;
b = a+c;
return c;
}
return fibonacci;
}
func int() f = fib();
for (int i = 0; i < 5; i++){
println(f());
}
0
1
1
2
3
// fib returns a function that returns
// successive Fibonacci numbers.
func fib() func() int {
a, b := 0, 1
return func() int {
a, b = b, a+b
return a
}
}
func main() {
f := fib()
// Function calls are evaluated left-to-right.
fmt.Println(f(), f(), f(), f(), f())
}
语法
基本类型
先来看看基本类型,目前支持 int/string/float/bool 四种基本类型以及 nil 特殊类型。
变量声明语法和 Java 类似:
int a=10;
string b,c;
float e = 10.1;
bool f = false;
数组
// 声明并初始化
int[] a={1,2,3};
println(a);
// 声明一个空数组并指定大小
int[] table = [4]{};
println();
// 向数组 append 数据
a = append(a,4);
println(a);
for(int i=0;i<len(a);i++){
println(a[i]);
}
// 通过下标获取数组数据
int b=a[2];
println(b);
int[] a=[2]{};
println("数组大小:"+len(a));
a = append(a,1);
println("数组大小:"+len(a));
println(a);
a[0]=100;
println(a);
数组大小:2
数组大小:3
[<nil> <nil> 1]
[100 <nil> 1]
Class
class ListNode{
int value;
ListNode next;
ListNode(int v, ListNode n){
value =v;
next = n;
}
}
// 调用构造函数时不需要使用 new 关键字。
ListNode l1 = ListNode(1, nil);
// 使用 . 调用对象属性或函数。
println(l1.value);
class Person{
int age=10;
string name="abc";
int getAge(){
return 100+age;
}
}
// 无参构造函数
Person xx= Person();
println(xx.age);
assertEqual(xx.age, 10);
println(xx.getAge());
assertEqual(xx.getAge(), 110);
// 大小为 16 的 Person 数组
Person[] personList = [16]{};
函数
普通的全局函数。 类的函数。
// 判断链表是否有环
bool hasCycle(ListNode head){
if (head == nil){
return false;
}
if (head.next == nil){
return false;
}
ListNode fast = head.next;
ListNode slow = head;
bool ret = false;
for (fast.next != nil){
if (fast.next == nil){
return false;
}
if (fast.next.next == nil){
return false;
}
if (slow.next == nil){
return false;
}
if (fast == slow){
ret = true;
return true;
}
fast = fast.next.next;
slow = slow.next;
}
return ret;
}
ListNode l1 = ListNode(1, nil);
bool b1 =hasCycle(l1);
println(b1);
assertEqual(b1, false);
ListNode l4 = ListNode(4, nil);
ListNode l3 = ListNode(3, l4);
ListNode l2 = ListNode(2, l3);
bool b2 = hasCycle(l2);
println(b2);
assertEqual(b2, false);
l4.next = l2;
bool b3 = hasCycle(l2);
println(b3);
assertEqual(b3, true);
add(int a){}
闭包
// 外部变量,全局共享。
int varExternal =10;
func int(int) f1(){
// 闭包变量对每个闭包单独可见
int varInner = 20;
int innerFun(int a){
println(a);
int c=100;
varExternal++;
varInner++;
return varInner;
}
// 返回函数
return innerFun;
}
// f2 作为一个函数类型,接收的是一个返回值和参数都是 int 的函数。
func int(int) f2 = f1();
for(int i=0;i<2;i++){
println("varInner=" + f2(i) + ", varExternal=" + varExternal);
}
println("=======");
func int(int) f3 = f1();
for(int i=0;i<2;i++){
println("varInner=" + f3(i) + ", varExternal=" + varExternal);
}
0
varInner=21, varExternal=11
1
varInner=22, varExternal=12
=======
0
varInner=21, varExternal=13
1
varInner=22, varExternal=14
func int(int) f2 = f1();
标准库
MapString
int count =100;
MapString m1 = MapString();
for (int i=0;i<count;i++){
string key = i+"";
string value = key;
m1.put(key,value);
}
println(m1.getSize());
assertEqual(m1.getSize(),count);
for (int i=0;i<count;i++){
string key = i+"";
string value = m1.get(key);
println("key="+key+ ":"+ value);
assertEqual(key,value);
}
内置函数
int[] a={1,2,3};
// len 返回数组大小
println(len(a));
// 向数组追加数据
a = append(a,4);
println(a);
// output: [1,2,3,4]
// 断言函数,不相等时会抛出运行时异常,并中断程序。
assertEqual(len(a),4);
// 返回 hashcode
int hashcode = hash(key);
总结
项目源码:https://github.com/crossoverJie/gscript
下载地址:https://github.com/crossoverJie/gscript/releases/tag/v0.0.6
关注公众号:拾黑(shiheibook)了解更多
赞助链接:
关注数据与安全,洞悉企业级服务市场:https://www.ijiandao.com/
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号
随时掌握互联网精彩
随时掌握互联网精彩
- 美元兑人民币汇率2024年1月6日
- 1月活动速递 | Microsoft Discovery Day、Microsoft 365公开课、法律合唱团...
- 坚持持续创新,中国显示技术标准走向世界
- 玩套路?手机总是越更新越卡,背后谜团终于揭开......
- 头部企业全线满产,全球晶圆行业景气度持续上行
- 年轻人逃离制造业 | 劳资观察
- 终于,LoRaWAN成全球物联网标准!LoRa将拿下LPWAN领域50%市场?
- 亿欧智库发布《2021年科技赋能中医药产业发展报告》
- 苹果推送 iOS 14.5 正式版;美团涉嫌垄断被调查;研究发现打车软件加剧了城市交通拥堵|Do早报
- 这款有趣的应用,Android 比 iPhone 版本强... 9.16 倍?
- 海外代孕风云录:金钱与生命,利益与伦理
- 洛雪音乐助手下载 UOS统一操作系统音乐下载软件
赞助链接