• Stars
    star
    198
  • Rank 196,898 (Top 4 %)
  • Language
    C++
  • License
    MIT License
  • Created almost 10 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

嵌入式脚本语言 Lightweight embedded scripting language

fake

Codacy Badge

轻量级嵌入式脚本语言

README_EN

简介

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

Java版本fake

Go版本fake

脚本特性

  • 运行环境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

Stargazers over time

Stargazers over time

More Repositories

1

pingtunnel

Pingtunnel is a tool that send TCP/UDP traffic over ICMP
Go
2,603
star
2

spp

A simple and powerful proxy
Go
622
star
3

majiang_algorithm

麻将胡牌算法以及AI算法
Java
350
star
4

xiaohuangji

小黄鸡表情收集
Shell
294
star
5

atmosphere-switch

大气层switch破解方案
213
star
6

hookso

linux动态链接库的注入修改查找工具 A tool for injection, modification and search of linux dynamic link library
C++
202
star
7

fuckbaiduyun

百度网盘快速加解密工具
Go
80
star
8

go-engine

golang engine
Go
63
star
9

pingtunnel-qt

pingtunnel qt
Go
63
star
10

texas_algorithm

texas algorithm 德州扑克算法
Java
62
star
11

docker-thunder-xware

迅雷离线下载 docker 镜像 采用centos镜像和最新的xware 修复了大文件会挂掉的bug
Shell
49
star
12

fakejava

嵌入式脚本语言 Lightweight embedded scripting language
Java
49
star
13

lua-family-bucket

Lua全家桶,命令行调试、性能分析、代码覆盖率等. Lua family bucket, command line debugging, performance analysis, code coverage
43
star
14

dLua

类似gdb的lua调试器。Lua debugger like gdb
C++
38
star
15

yellowsocks

transparent TCP to SOCKS5 redirector
Go
32
star
16

go-cpuminer

纯go实现的cpu挖矿工具。cpu miner implemented by pure go
Go
30
star
17

connperf

多协议带宽测试工具. network bandwidth perf
Go
28
star
18

go-mosaic

相片马赛克 (Photographic mosaic)
Go
27
star
19

fanqiang-diy

自己搭建科学上网环境
21
star
20

cLua

Lua的代码覆盖率工具 Lua code coverage.
Go
20
star
21

fakengine

c++编写的游戏服务器引擎
C
17
star
22

teenpatti_algorithm

teenpatti algorithm
Java
13
star
23

wireshark_protobuf_plugin

wireshark的protobuf协议插件
C++
12
star
24

yellowdns

dns server proxy
Go
11
star
25

socksserver

simple socks5 server
Go
11
star
26

paodekuai_ai

跑得快AI 采用蒙特卡洛算法
Java
10
star
27

farmer_ai

斗地主AI 采用蒙特卡洛算法
Java
9
star
28

libmeng

跨平台的轻量级协程库
Assembly
8
star
29

selfmd5

计算自身md5的最小ELF64程序.The minimum ELF64 program to calculate its own md5
C
7
star
30

fakelua

FakeLua is a library for fast implementation of custom Lua
C++
7
star
31

socksfilter

socks5过滤器。socks5 server with filtering and forwarding
Go
7
star
32

AliEncoder

阿里味编解码。Alibaba Style Encoder
JavaScript
6
star
33

fakego

嵌入式脚本语言 Lightweight embedded scripting language
Go
6
star
34

spp-shadowsocks-plugin

spp shadowsocks plugin
Go
6
star
35

fakechat

P2P聊天工具
C++
6
star
36

wLua

监视lua状态机内部的工具。a tool that watch running lua state
C
6
star
37

bLua

C++ binding to Lua
C++
5
star
38

fake_game_server

fake脚本写的游戏服务器框架
C++
5
star
39

fastreplace

多线程文件替换工具. fast replace file content
Go
4
star
40

fLua

Diffing and patching for Lua variable
C++
4
star
41

liblu

c++ net framwork
C++
4
star
42

switch-crack

switch破解经验
4
star
43

spp-shadowsocks-plugin-android

spp shadowsocks plugin android
Shell
4
star
44

tetris

tetris ai
JavaScript
4
star
45

frps-GUI

frp server GUI
Visual Basic
3
star
46

gohome

some common go library
Go
3
star
47

fakecore

core code for game
Java
3
star
48

oLua

Optimize lua code
Go
3
star
49

fuck-music-player

C++
3
star
50

libmo

memory lib
C++
2
star
51

tcloud-cns-tool

腾讯云-域名解析-查询设置-工具
Go
2
star
52

fruit_machine

用cmd模拟水果机转圈算法
C++
2
star
53

renpy_translate

auto translate renpy game script
Batchfile
2
star
54

esrrhs.xyz

个人网站
CSS
1
star
55

printf_vector

like libc printf, but can use vector input
C++
1
star
56

multisim

1
star
57

build-v8

1
star
58

get-your-wheel

No need to reinvent the c++ wheel
1
star
59

fastremove

fast remove
Go
1
star
60

libyang

消息生成工具
C++
1
star
61

mLua

Lua's memory optimization management tool
C++
1
star