scheme 一个好玩的开源库 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
evilbinary
V2EX    Lisp

scheme 一个好玩的开源库

  •  1
     
  •   evilbinary 2017-06-12 00:43:59 +08:00 7780 次点击
    这是一个创建于 3049 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一个很好玩的开源库 https://github.com/evilbinary/scheme-lib

    scheme-lib

    scheme-lib 是一个 scheme 使用的库。目前支持 android mac linux windows,其它平台在规划中。

    linux、mac

    装编译

    1. linux 下安装apt-get install freeglut3-dev libgles1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libalut-dev libopenal-dev libffi-dev依赖库。
    2. mac 安装 xcode command line tool。
    3. 执行make命令就可以编译,对应平台的文件在bin目录下。
    4. 进入bin目录,执行source env.sh,然后运行./scheme --script ../apps/hello.ss就可以运行例子。

    截图

    android

    新手入门

    环境安装

    1. 先安装scheme-release-1.2.apk
    2. 将手机连接电脑,开启 adb 调试模式(需要安装 adb 命令,不会用 goolge )。进入cd scheme-lib/android/src/packages,在 shell 下执行python sync.py命令,这样每次修改后,会自动同步 packages 下的代码到手机/sdcard/org.evilbinary.chez/lib目录下面,这样方便运行了。
    3. 在 run 界面里面输入测试代码。比如:
    (import (test) (gles1) (glut) ) (load "/sdcard/org.evilbinary.chez/lib/apps/hello.ss") 

    demo 例子

    ;imgui 例子 ;imgui hello,world (define (imgui-test-hello-world) (glut-init) (imgui-init) (imgui-scale 2.5 2.5) (glut-touch-event (lambda (type x y) (imgui-touch-event type x y) )) (glut-key-event (lambda (event) (imgui-key-event (glut-event-get event 'type) (glut-event-get event 'keycode) (glut-event-get event 'char) (glut-event-get event 'chars)) (if (= 4 (glut-event-get event 'keycode )) (begin (imgui-exit) (glut-exit))) )) (glut-display (lambda () (imgui-render-start) ;(imgui-test) (imgui-set-next-window-size (imgui-make-vec2 200.0 140.0) 0) (imgui-begin "evilbinary" 0) (imgui-text "hello,world") (imgui-end) (imgui-render-end) )) (glut-reshape (lambda(w h) (imgui-resize w h) )) (glut-main-loop) (imgui-exit)) 

    运行效果如下:

    测试配置

    1. 在手机上输入运行代码可能不方便,所以弄了个配置文件,把需要运行的代码放到配置中会自己加载代码运行。配置文件为config.xml内容如下:

      <?xml version='1.0' encoding='utf-8' standalOne='yes' ?> <map> <string name="debugCode">(import (test) (gles1) (glut) ) (load "/sdcard/org.evilbinary.chez/lib/apps/draw-point.ss") ;(imgui-test-hello-world) </string> </map> 
    2. adb push config.xml /sdcard/org.evilbinary.chez/conf/config.xml

    3. 打开 scheme app 就可以直接运行啦。

    高级篇

    android 使用外部库

    1. 手工添加 Android.mk 和源码文件到scheme-lib/android/src下命名为 libhadd 的文件夹。 add.c 内容如下:

      #include <stdio.h> #include <stdarg.h> int add(int a,int b){ return a+b; } 

      Android.mk 内容如下:

      LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) include $(LOCAL_PATH)/../Optimizations.mk LOCAL_MODULE := add LOCAL_SRC_FILES := add.c LOCAL_C_INCLUDES := LOCAL_CFLAGS += -I. -I./c/ LOCAL_CFLAGS += -g -Wall -DANDROID -DINLINES -DGC_MACROS -Wno-unused-parameter -pie -fPIE -fPIC LOCAL_LDLIBS += -ldl -llog -lz include $(BUILD_SHARED_LIBRARY) 
    2. 执行make android

    3. 将编译后生成的库android/src/libs/libadd.so 同步到/sdcard/org.evilbinary.chez/lib目录下,这样能调用外部库了。

    4. 调用外libadd.so库和使用代码如下:

      (import (scheme) (utils libutil) ) (load-lib "libadd.so") (define-c-function int add (int int) ) (display (add 100 1234)) 
    4 条回复    2018-10-07 10:53:12 +08:00
    qinix
        1
    qinix  
       2017-06-12 01:57:58 +08:00 via iPhone
    似乎是基于 Chez Scheme 搞的,何不分享一下背后的故事和感受
    jakobliao
        2
    jakobliao  
       2018-03-09 17:05:53 +08:00
    lisp 世界真小,鸭子全平台推广啦
    evilbinary
      &nbs; 3
    evilbinary  
    OP
       2018-09-09 13:28:14 +08:00
    @jakobliao 啦啦啦
    yoyohaha
        4
    yoyohaha  
       2018-10-07 10:53:12 +08:00
    鸭子,是我
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1208 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 23:46 PVG 07:46 LAX 16:46 JFK 19:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86