Skip to content

Commit 44637de

Browse files
authored
Merge pull request #36 from yuhuoyingxiongniao/add-update-multiple-document
update multiple documents
2 parents 2f7f420 + e8722bf commit 44637de

5 files changed

Lines changed: 36 additions & 6 deletions

File tree

docs/第一章 介绍/1.1 scheme-lib库.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
# 1 基本概念
2-
scheme-lib基于chezscheme内核,扩展了基本库,scheme缺少一个生态的库,而scheme-lib正是为此而开发的。它支持后端服务器开发,到前端gui开发。拥有大量的库,帮助scheme开发者更好的作出好应用。
2+
文档1.0中提到Scheme的哲学是:设计计算机语言不应该进行功能的堆砌,而应该尽可能减少弱点和限制,使剩下的功能显得必要。这是scheme的一大优点,在scheme中基本没有繁复的设计和不必要的内容。但正如很多人指出的那样,scheme的标准库显得太小了,能完成的功能显得太少了。
3+
scheme-lib正是为此而开发的,scheme-lib基于chezscheme内核,扩展了基本库。scheme-lib是一个强大的库,它支持后端服务器开发,到前端gui开发。scheme-lib拥有大量的功能,帮助scheme开发者更好的作出好应用。scheme-lib中文文档丰富,也是学习scheme好的入门工具。中国籍的开源软件贡献者这么少,还不支持一下?
34

4-
scheme-lib 目前支持android mac linux windows,其它平台在规划中。可以加入社区一起来讨论scheme-lib的各种话题。
5+
源代码下载地址:[https://github.com/evilbinary/scheme-lib](https://github.com/evilbinary/scheme-lib)
56

6-
下载地址:[https://github.com/evilbinary/scheme-lib](https://github.com/evilbinary/scheme-lib)
7+
scheme-lib 目前支持android mac linux windows,其它平台在规划中。可以加入社区群一起来讨论scheme-lib的各种话题。
78

89
官方社区QQ群:Lisp兴趣小组 239401374
910

docs/第二章 入门/2.1 scheme-lib安装.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
3. 进入`bin`目录,执行`source env.sh`,然后运行`./scheme --script ../apps/hello.ss`就可以运行例子。
77

88
# 2 windows
9-
1. 下载[scheme-lib-2.0-win32.zip][2],解压后进入bin,打开cmd运行`run.bat ../apps/gui-test.ss`就可以运行例子了
9+
1. 下载[scheme-lib-2.0-win32.zip][2],解压后进入bin,打开cmd运行`run.bat ../apps/gui-test.ss`就可以运行例子了(这个压缩包里的版本非常旧了建议加社区群下载新的版本,详见文档 2.2 的下载方式)
1010
2. 编译可以参考2.2章节window下编译安装
1111

1212
# 3 android
@@ -78,3 +78,4 @@
7878

7979
[1]: https://raw.githubusercontent.com/evilbinary/scheme-lib/master/data/apk/scheme-release-1.6.apk "scheme apk"
8080
[2]: https://github.com/evilbinary/data/blob/master/pic/scheme-lib-2.0-win32.zip "scheme-lib-2.0-win32.zip"
81+

docs/第二章 入门/2.2 win下编译安装.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
## 0 警告⚠️
2-
对window不熟悉,建议直接下载编译好的,否则你会吐血。
2+
对window不熟悉,建议直接下载编译好的,否则你会吐血。win用户最好加社区群(企鹅号:239401374)下载最新便携包,无需编译或者是安装即可使用。下载的名称类似于scheme-lib-2.1-win32-thread 2.1为版本号 win32指32位windows程序 thread指多线程优化版本
33
## 1 准备环境
44
下载Msys2 从"http://www.msys2.org/" 下载 "msys2-i686-xxx.exe",不懂安装请参考这篇文章 "http://blog.csdn.net/liyuanbhu/article/details/39397931"。
55

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
## 什么是 ffi ?
2+
ffi (FFI) 是 foreign function interface 的简写,该术语来自Common Lisp规范,该规范明确指代用于跨语言调用的语言功能;这个词也被Haskell和Python编程语言正式使用。其他语言使用其他术语指代这一概念,如Java将其FFI称为JNI(Java本机接口)或JNA(Java本机访问),外部功能接口已成为提供此类服务的机制的通用术语。
3+
外部函数接口的主要功能是将一种编程语言的语义和调用约定与另一种编程语言的语义和约定进行匹配。该过程还必须考虑两者的运行时环境和/或应用程序二进制接口。
4+
5+
只有大约一半的语言有FFI或者类似的实现,因为:
6+
1. 如果一种语言支持垃圾回收(GC),而另一种不支持;必须注意非GC语言代码不会导致其他GC失败。例如,在JNI中,它从Java接收到的对象引用的C代码必须在Java运行时环境(JRE)中“注册”。否则,Java可能会在C完成对象之前删除它们。
7+
2. 复杂的对象或数据类型可能很难从一个环境映射到另一个环境。
8+
3. 由于上述映射问题,两种语言都可能无法维护对可变对象的同一实例的引用。
9+
4. 一种或两种语言可能正在虚拟机(VM)上运行;此外它们还可能是不同的VM。
10+
5. 跨语言继承可能特别困难。
11+
12+
chez scheme作为一种Lisp的一种方言具有强大的FFI功能,通过ffi scheme可以与几十种语言交互。
13+
14+
## ffi相关库的综述
15+
ffi 相关的库是 scheme-lib 的精华之一 ,scheme-lib 的 ffi 库种类繁多,功能完备,下面将各自的功能和位置进行介绍,名称用类似`(c c-ffi )`的形式表示,`(c c-ffi )`表示ffi功能以c-ffi.ss的形式提供,位置位于scheme-lib的packages目录的c文件夹下。
16+
* `(c c-ffi )` 是从C语言及其库中ffi出的函数,例如:`c-a64l c-abort c-abs c-atexit c-atof c-atoi c-atol c-bsearch c-calloc c-div c-drand48 c-ecvt c-erand48 c-exit c-fcvt c-free c-gcvt c-getenv c-getsubopt c-grantpt c-initstate c-l64a c-labs` 这些函数基本和原来C语言的对应函数一致,如`c-free`基本和`free`一致的。
17+
* `(cffi cffi)``(c c-ffi )`不同,这是一个将用户写的C语言库链接到scheme的库,详见文档5.1
18+
* `(dffi dffi)`是下一代 cffi 库,功能与 cffi 基本相同,性能略好于cffi。
19+
* `(mongoc bson-ffi )` 是对bson进行 ffi 操作的库,BSON是MongoDB数据库扩展JSON形成的一种数据交换格式,BSON之名缘于JSON,含义为Binary JSON(二进制JSON),主要用于MongoDB数据存储和网络传输。
20+
* `(mongoc mongoc-ffi )` 是通过C对MongoDB数据库进行 ffi 操作的库,包含了MongoDB数据库的所有主要功能,MongoDB是著名的非关系型数据库,适合文档的存储查询。
21+
* `(mysql mysql-ffi )` 是对mysql数据库进行 ffi 操作的库,包含了mysql数据库的所有主要功能,mysql就不多做介绍了,世界上最有名的数据库之一。
22+
* `(net )` 中有四个和网络相关的ffi库, `(net curl-ffi ) `是对libcurl进行 ffi 操作的库。libcurl主要功能就是用不同的协议连接和沟通不同的服务器,libcurl当前支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议,同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传(当然你也可以使用PHP的ftp扩展), HTTP基本表单上传,代理,cookies,和用户认证。`(net event2-ffi )` 是对libevent进行 ffi 操作的库,这是一个网络高性能服务框架,目前版本已更新至2.X.X,目前libevent支持/dev/poll、kqueue(2)、事件端口、POSIX select(2)、Windows select()、poll(2)和epoll(4)。内部事件机制完全独立于公开的事件API,简单的libevent更新可以提供新的功能,而无需重新设计应用程序。`(net socket-ffi )` 是对网络libsocket进行 ffi 操作的库,socket中文名称是套接字,是一种独立于协议的网络编程接口,很受通信软件编写者欢迎。`(net uv-ffi)` 是对网络libuv进行 ffi 操作的库,libuv是一个关于异步IO的跨平台支持库。
23+
* `(regex )` 和正则表达式相关的ffi库
24+
* `(sqlite sqlite3-ffi)` 是对sqlite进行ffi操作的库。sqlite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。同时这是一个在嵌入式设备上也能正常运行的数据库,sqlite3是它较新的一个版本,需要注意的是过去的sqlite相比正常的数据库而言性能比较低,而目前已经比较接近。
25+
* `(tensorflow tensorflow-ffi ) `是对tensorflow进行ffi操作的库。tensorflow是一个基于数据流编程(dataflow programming)的符号数学系统,被广泛应用于各类机器学习(machine learning)算法的编程实现
26+
* `(termios termios )` 是对 libtermios 进行 ffi 操作的库。
27+
* `(thread thread-ffi )` 是对 libthread 进行 ffi 操作的库。
28+
* `(thread scm-ffi )` 是对 libscm 进行 ffi 操作的库。
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ cffi库可以静态、动态调用c函数。为此它可以生成各种基础ffi
55

66
```scheme
77
(import (scheme) (cffi cffi)) ;;使用cffi库
8-
(load-librarys "foo") ;;加载动态库
8+
(load-librarys "foo") ;;加载动态库,这里的foo是dll的名字,即库的扩展名为foo.dll或者foo.so默认地址在鸭库的bin目录下,当然也支持绝对地址。
99
```
1010

1111
## 1.2 申明函数

0 commit comments

Comments
 (0)