Fake: лёгкий встраиваемый скриптовый язык
Краткое введение Fake — это лёгкий встраиваемый скриптовый язык, использующий язык C++, грамматику из Lua, Golang и Erlang, основанный на генеративной грамматике Flex и Bison, компилируемый в байт-код и интерпретируемый.
Особенности скрипта
В производстве
Пример
-- Current package name
package mypackage.test
-- include file
include "common.fk"
-- struct define
struct teststruct
sample_a
sample_b
sample_c
end
-- const define
const hellostring = "hello"
const helloint = 1234
const hellomap = {1 : "a" 2 : "b" 3 : [1 2 3]}
-- func1 comment
func myfunc1(arg1, arg2)
-- C function calls and class member functions
arg3 := cfunc1(helloint) + arg2:memfunc1(arg1)
-- Branch
if arg1 < arg2 then
-- create routine
fake myfunc2(arg1, arg2)
elseif arg1 == arg2 then
print("elseif")
else
print("else")
end
-- for loop
for var i = 0, i < arg2, i++ then
print("i = ", i)
end
-- array use
var a = array()
a[1] = 3
-- map use
var b = map()
b[a] = 1
b[1] = a
-- Int64
var uid = 1241515236123614u
log("uid = ", uid)
-- sub func call
var ret1, var ret2 = myfunc2()
-- other package call
ret1 = otherpackage.test.myfunc1(arg1, arg2)
-- struct use
var tt = teststruct()
tt->sample_a = 1
tt->sample_b = teststruct()
tt->sample_b->sample_a = 10
-- switch branch
switch arg1
case 1 then
print("1")
case "a" then
print("a")
default
print("default")
end
-- multi return value
return arg1, arg3
end
C++ пример
// create instance
fake * fk = newfake();
// regist global func
fkreg(fk, "cfunc1", cfunc1);
// regist class mem func, diffent class type can regist the same name
fkreg(fk, "memfunc1", &class1::memfunc1);
// parse script file
fkparse(fk, argv[1]);
// run script func myfunc1, put in two param 1 and 2
ret = fkrun<int>(fk, "myfunc1", 1, 2);
// delete instance
delfake(fk);
Сравнение производительности
Запустите cd benchmark/ && ./benchmark.sh
Данные на MacBook Pro 2.3 ГГц 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 в настоящее время не может выполнять сборку мусора, String является самым медленным. |
Как использовать Скопируйте include/fake-inc.h и bin/libfake.so в свой проект.
Дополнительная информация Для получения более подробной информации о том, как использовать и настроить Fake, обратитесь к документации или исходному коду проекта. Компиляция
./gen.sh
../build.sh
или ./build.sh release
.Тестирование
test/sample
.cd test && ./test.sh
.bin/fakebin
— это исполняемый файл, для которого вы можете написать и запустить собственный скрипт. Для этого используйте команду ./fakebin your.fk
.Среда отладки
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )