fakescript 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
fakescript 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
fakescript 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 MIT
开发语言 C/C++
操作系统 Linux
软件类型 开源软件
开源组织
地区 国产
投 递 者 SHFUITCK
适用人群 未知
收录时间 2014-11-22

软件简介

fake

Author PlatformScript License

轻量级嵌入式脚本语言

 

简介

fake是一款轻量级的嵌入式脚本语言, 使用c++语言编写, 语法吸取自lua、golang、erlang, 基于flex、bison生成语法树, 编译成字节码解释执行。

 

脚本特性

  • 运行环境linux amd64、MacOS amd64
  • 支持VM, JIT(实验性质)
  • 支持fake testfunc(param1)产生routine, 在单线程上实现多线程效果(此特性不支持JIT)
  • 支持调试, 自带gdb风格的命令行调试器, 以及VS风格的可视化编辑调试ide, 也可在C里直接通过接口调用, 开始命令行调试
  • 支持热更新
  • 支持C风格函数和C++类成员函数的绑定
  • 支持profile, 可获取脚本各个函数运行时间
  • 支持array, map, 可以无限嵌套
  • 支持多返回值
  • 支持Int64
  • 支持const定义
  • 支持包
  • 支持struct
  • 支持打包bin文件或可执行文件

 

产品应用

image疯狂炸翻天 image我是大主宰 image天天炫斗

 

示例



-- 当前包名
package mypackage.test

-- 引入的文件
include "common.fk"

-- 结构体定义
struct teststruct
	sample_a
	sample_b
	sample_c
end

-- 常量值
const hellostring = "hello"
const helloint = 1234
const hellomap = {1 : "a" 2 : "b" 3 : [1 2 3]}

-- func1 comment
func myfunc1(arg1, arg2)
	
	-- C函数和类成员函数的调用
	arg3 := cfunc1(helloint) + arg2:memfunc1(arg1)
	
	-- 分支
	if arg1 < arg2 then	
		-- 创建一个协程
		fake myfunc2(arg1, arg2)
	elseif arg1 == arg2 then	
		print("elseif")
	else
		print("else")
	end
	
	-- for循环
	for var i = 0, i < arg2, i++ then
		print("i = ", i)
	end
	
	-- 数组
	var a = array()
	a[1] = 3
	
	-- 集合
	var b = map()
	b[a] = 1
	b[1] = a
	
	-- Int64
	var uid = 1241515236123614u
	log("uid = ", uid)

	-- 子函数调用
	var ret1, var ret2 = myfunc2()

	-- 其他包的函数调用
	ret1 = otherpackage.test.myfunc1(arg1, arg2)
	
	-- 结构体
	var tt = teststruct()
	tt->sample_a = 1
	tt->sample_b = teststruct()
	tt->sample_b->sample_a = 10

	-- 分支
	switch arg1
		case 1 then
			print("1")
		case "a" then
			print("a")
		default
			print("default")
	end

	-- 多返回值
	return arg1, arg3
	
end

 

C++示例

// 创建一个实例
fake * fk = newfake();
// 注册全局函数
fkreg(fk, "cfunc1", cfunc1);
// 注册类成员函数, 不同的类注册一样的函数名字不冲突
fkreg(fk, "memfunc1", &class1::memfunc1);
// 解析fake脚本文件
fkparse(fk, argv[1]);
// 执行myfunc1函数, 传入两个参数分别为1和2
ret = fkrun<int>(fk, "myfunc1", 1, 2);
// 删除实例
delfake(fk);

 

性能比较

运行cd benchmark/ && ./benchmark.sh ,在MacBook Pro 2.3 GHz Intel Core i5上的数据

  Lua Python Fake Fake JIT
Loop 0.8s 2.3s 1.3s 0.2s
Prime 13.5s 20.9s 12.8s 5.9s
String 0.8s 0.4s 1.2s 3.2s

注:因为JIT目前无法GC,所以String反而最慢

 

如何使用

复制 include/fake-inc.h 和 bin/libfake.so 到你的工程, 直接使用

 

如何编译

  1. 安装cmake
  2. (可选)安装flex, bison, 运行./gen.sh
  3. 安装gcc, gcc-c++
  4. ./build.sh 或者 ./build.sh release

 

测试示例

  1. test/sample 目录下有脚本示例代码
  2. 运行方法 cd test && ./test.sh
  3. bin/fakebin 为可执行文件,可以自己编写运行,如:./fakebin your.fk

 

调试环境

  • IDE (bin/fakeide.app)

image

  • 命令行 (bin/fakebin)

image

展开阅读全文

代码

评论

点击加入讨论🔥(2) 发布并加入讨论🔥
发表了资讯
2019/08/08 20:33

fakescript 1.5 发布,轻量嵌入式脚本

fakescript 1.5发布,更新内容包括: 重新梳理了项目结构 优化了gc 添加 benchmark 优化执行速度 fake 是一款轻量级的嵌入式脚本语言, 使用 c++ 语言编写, 语法吸取自 lua、golang、erlang, 基于 flex、bison 生成语法树, 编译成字节码解释执行。

1
8
发表了资讯
2015/08/19 00:00

fakescript 1.3 发布,增加ide及命令行调试

fakescript 1.3发布,更新内容包括: 修复bug,添加调试信息及接口 增加ide,简单的集成开发环境,可运行调试脚本,查看调用栈、协程、字节码及修改变量 为fake.exe增加命令行调试功能,使用方法类似gdb,通过参数-d开启 项目地址:https://github.com/esrrhs/fakescript fakescript是一款轻量级的嵌入式脚本语言,使用c++语言编写,语法吸取自lua、golang、erlang,基于flex、bison生成语法树,编译成字节码解释执行。与lua相比...

0
1
发表了资讯
2015/07/18 00:00

fakescript 1.2 发布,轻量级脚本语言

fakescript 1.2发布,更新内容包括: 修复bug,优化解释器性能,优化字节码生成 增加打包脚本成二进制文件的功能 增加fake.exe功能,添加primes.fk脚本测试脚本性能 项目地址:https://github.com/esrrhs/fakescript fakescript是一款轻量级的嵌入式脚本语言,使用c++语言编写,语法吸取自lua、golang、erlang,基于flex、bison生成语法树,编译成字节码解释执行。与lua相比,运行速度不相上下,更易使用,源代码可读性更强...

6
14
发表了资讯
2015/03/12 00:00

fakescript 1.1 发布,轻量级脚本语言

fakescript 1.1发布,更新内容包括: 修复bug,提升性能 增加struct定义,const定义 增加package功能,增加网络、文件、字符串、XML、模板库等 项目地址:https://github.com/esrrhs/fakescript fakescript是一款轻量级的嵌入式脚本语言,使用c++语言编写,语法吸取自lua、golang、erlang,基于flex、bison生成语法树,编译成字节码解释执行。与lua相比,运行速度不相上下,更易使用,源代码可读性更强...

4
5
发表了资讯
2014/11/23 00:00

fakescript 1.0 发布,比Lua更轻量的嵌入式脚本语言

fakescript 1.0 发布,fakescript 是一款轻量级的嵌入式脚本语言 与Lua相比,它的运行速度更快,更容易使用,同时源代码可读性更强 脚本特性: @.代码风格类似lua @.全部为函数 @.支持array,map,可以无限嵌套 @.支持fake testfunc(param1)产生routine,实现假多线程效果 @.支持C函数和类成员函数的绑定 @.自带解释器,JIT部分支持 @.支持多返回值 @.自带profile,可获取脚本各个函数运行时间 @.支持热更新 @.支持Int64 示例:...

32
35
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
暂无内容
2 评论
46 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部