1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/esrrhs-fakescript

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README_EN.md

Fake: лёгкий встраиваемый скриптовый язык

Краткое введение Fake — это лёгкий встраиваемый скриптовый язык, использующий язык C++, грамматику из Lua, Golang и Erlang, основанный на генеративной грамматике Flex и Bison, компилируемый в байт-код и интерпретируемый.

Особенности скрипта

  • Операционная среда: Linux amd64, MacOS amd64.
  • Поддержка виртуальной машины и JIT (экспериментальная).
  • Поддержка fake testfunc (param1) для генерации подпрограмм, достижения многопоточности на одном потоке (эта функция не поддерживает JIT).
  • Поддержка отладки, автономного отладчика командной строки в стиле GDB и визуального редактирования отладки IDE в стиле VS, также можно вызвать непосредственно через интерфейс C, начать командную строку отладки.
  • Поддержка горячих обновлений.
  • Поддержка привязки функций C-стиля и функций-членов класса C++.
  • Поддержка профиля, возможность получить время выполнения каждой функции скрипта.
  • Поддержка массивов, карт, может быть бесконечно вложенной.
  • Поддержка нескольких возвращаемых значений.
  • Поддержка Int64.
  • Поддержка определения const.
  • Поддержка пакета.
  • Поддержка struct.
  • Возможность упаковывать бинарные файлы или исполняемые файлы.

В производстве

image 疯狂炸翻天

image 我是大主宰

image 天天炫斗

Пример

-- 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, обратитесь к документации или исходному коду проекта. Компиляция

  1. Установите CMake.
  2. (Необязательно) Установите flex, bison, запустите ./gen.sh.
  3. Установите GCC и GCC++.
  4. Запустите ./build.sh или ./build.sh release.

Тестирование

  1. Разместите пример кода в каталоге test/sample.
  2. Запустите cd test && ./test.sh.
  3. bin/fakebin — это исполняемый файл, для которого вы можете написать и запустить собственный скрипт. Для этого используйте команду ./fakebin your.fk.

Среда отладки

  • IDE (bin/fakeide.app).
  • Командная строка (bin/fakebin).

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Лёгкий встраиваемый скриптовый язык. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/esrrhs-fakescript.git
git@api.gitlife.ru:oschina-mirror/esrrhs-fakescript.git
oschina-mirror
esrrhs-fakescript
esrrhs-fakescript
master