Raven 工作专贴

By guenchi at 置顶 • 1人收藏 • 1441人看过

欢迎加入Raven开源项目:

https://github.com/guenchi/Raven


注意:Raven项目建议使用sc作为后缀,表明不加修改即可运行于支持 r6rs 版本实现(未来的r7rs large)以区别于其他后缀的 r5rs / r7rs small实现。

工作原理 仿造node的npm


Raven 采用树状模式管理当前项目库依赖,并用-g选项安装可运行的工具


  1. ravensc.com 服务器请求api


    ravensc.com/<ModuleName>    请求包的最新版本号,如无此包返回空。

    ravensc.com/<ModuleName>/<VersionCode>  请求相应版本下载链接

                                                                                Version必须是N.N.N格式


2. 

Raven文件:Raven文件安装在/usr/local/lib/raven/raven下,并链接到/usr/local/bin

Raven 自身版本: Raven脚本内用常量储存自身版本,在更新时用于和ravensc.com/raven发送回的版本进行对比

自更新: raven update  如果有新版本,下载新版本并覆盖到安装目录,需要root权限


3. 

 命令 raven install

读入命令当前文件夹下的package.json文件,并取得其中 dependencies键包含依赖散列表。
除去重复依赖项,从 ravensc.com/库名/版本号 依次下载依赖库到项目下lib文件夹。

命令 raven install <ModuleName>

从 ravensc.com/<ModuleName>获取最新版本信息,然后从ravensc.com/<ModuleName>/<Version> 下载库到项目下lib文件夹,并将库和版本写入package.json文件。

命令 raven install <ModuleName>@<VersionCode>

从ravensc.com/<ModuleName>/<Version> 下载相应版本库到项目下lib文件夹,并将库和版本写入package.json文件。

 命令 raven uninstall <ModuleName>

从lib文件夹删除库,并将其从package.json文件删除。

 选项 -dev

安装和卸载时选项,区别在于写入json时加入devDependencies

选项 -g

代表全局安装,需要root权限,通常是用于全局使用的工具。将其装入/usr/local/lib/raven/<ModuleName>之下,并链接到/usr/local/bin

json示例

{  
    "name": "", 
    "version": "1.0.0",  
    "description": "",  
    "author": "",  
    "private": true,  
    "scripts": 
     {    
         "dev": "",    
         "build": "",    
         "g": "",    
         "start": "",    
         "precommit": "",    
         "lint": ""
      },  
      "dependencies": 
      {    
          "LIBNAME": "0.15.3"
      },
      "devDependencies": 
      {    
          "LIBNAME": "7.1.1"
      }
}


25 个回复 | 最后更新于 置顶
置顶   #1

关于抹平树状依赖的想法:


是否可以这样:


在每一个库的主文件夹中,建立一个index.sc

这个index就是对库文件中不同版本的索引

(("default" . "1-1-0)
("1.0.1" . "1-0-1")
("0.9.2" . "0-9-2"))

文件夹示例
-- libuvsc
     - index.sc
     - 1-1-0
     - 1-0-1
     - 0-9-2

当依赖import没有版本编号时,自动使用default指向的文件夹。

当依赖具有版本编号时,使用相应的文件夹。


每次版本升级,会自动更新index.sc


这样所有的依赖目录都可以指向顶层,依赖的依赖也可以指向顶层而不会引起版本冲突。

置顶   #2

已推出测试版本 欢迎大家试用


     英文手册:https://guenchi.gitbooks.io/raven/content/

     中文手册:https://guenchi.gitbooks.io/raven-zhcn/content/


置顶   #3

v0.1.0 to v0.2.0 -20171220

  1. Raven文件结构变化: 单文件无依赖库 => 具有自身依赖软件包

  2. Raven安装位置变化: /usr/local/bin => /usr/local/lib/raven/raven

  3. Raven安装模式变化: 改为Scheme解释器安装,除去Python解释器依赖。


置顶   #4

v0.2.0 to v0.2.1 -20171220

  1. 经过三个星期的纠结,我们决定将使用s-表达式代替json。


package.sc 模版

(("name" . "Raven")    
("vesion" . "0.2.1")    
("description" . "a package manager for Chez Scheme")    
("keywords"     
("tool" "package manager" "chez-scheme"))    
("license" . "MIT")    
("homepage" . "http://ravensc.com")    
("bugs"    
("url" . "https://github.com/guenchi/raven/issues"))    
("contributors"     
 	("quenchi" "chclock"))    
("private" . #f)    
("scripts"     
 	("dev" . "")     
	("build" . "")    
 	("test" . "")    
 	("start" . "")    
 	("clean" . "")    
 	("lint" . ""))    
("dependencies"     
 	("raven" . "1.0.1")    
 	("irreg" . "1.0.9"))    
("devDependencies"     
 	("raven" . "1.0.1")    
 	("irreg" . "1.0.9")))


置顶   #5

Raven正式可以安装!欢迎试用!

置顶   #6

关于特异化安装和自动编译c库


解决方案:放在script项


如果检测到script项 有build键  则自动make (需要包有makefile)

如果检测到script项 有install键 则自动运行install键的值

置顶   #7

有对初学者简单易用的编辑环境吗?另外现在这个项目什么时候可用?

置顶   #8

回复#7 @zero :

Chez 自带的REPL就挺好用的

编辑器 推荐使用VSC

https://code.visualstudio.com


有学习的疑问欢迎发帖询问

置顶   #9

回复#7 @zero :

raven主体功能现在已经可以使用了 下一步是完善它的库

置顶   #10

多谢

置顶   #11

Raven 网站完工!


欢迎访问


ravensc.com

置顶   #12

晚上花了一点时间查找了一下GNU Guile有没有Package Manager,很遗憾,搜索的结果让我很失望。


Raven能否定位成一个General 的 Scheme Package Manager?


我看现在的定位是:a Convenient and Engineering Package Manager for Chez Scheme


置顶   #13

回复#12 @sadhen :

第一是guile 是有现成的package manager的

第二 Raven完全可以用于其他的Scheme实现,只要是以“scheme”的名称启动就行。之所以没有注明支持所有Scheme实现,1. 是因为一些包会使用到Chez Scheme的自带库,当然以后我们也有计划将这个自带库独立出来,让其他实现也能使用这些功能。2. 是Raven的一些高级编译功能只有Chez的编译器才支持。


其实,现在我们的力量还是比较小的,无法做到面面俱到,说要支持所有实现,在当下只是无谓的加长工期和分散力量,所以只能在众多的实现中,选择Chez这一个完成度和速度都比较高的实现作为基石。

置顶   #14

我大体试用了一下Akku,感觉功能还算挺完善的:

https://weinholt.se/articles/so-many-scheme-package-managers/

就是它把所有的源都初始化在一个项目里面的目录下太感觉重复性大

这里看到 raven 基本比较类似 node的npm.
但是我觉得应该 支持像npm 一样直接通过 git地址直接安装 之后在后面加上一定的参数。 这样有两个好处。

  1. 方便开发者本地测试库的行为。当然这里指的是复杂的调用。当然如果分离模块后进行测试,是不需要 用户在raven install 一次再测试的。 但是实际业务代码中很有可能出现了,写好了觉得没有问题后已经发生问题的情况。(当然 如果有一种 类似maven安装 可以本地mvn install 就安装到本地的方法就更好了。)

  2. 不需要用户 过分依赖官方库。这样其实是更加自由的。应该让他们按照raven的标准去开发和使用,但是不用为他们写的“垃圾”代码买单。 我是说:允许他们畅通无阻的使用 raven 官方的库,只要慢慢的审核他们的提交请求就好了。

我看了项目的源码。希望支持这一特性,但是我并不清楚您是否认同上面的观点和特性。所以并没有开始添加功能的工作。我发现这里的代码
image
中 入参和调用的位置要进行改造。 还有 在package.cs文件中的定义方式和install 参数的方式也要改造。任务是个我不能决策的改动所以来征求你的意见。如果你打算实现那么太好了。期待你的回复。


置顶   #16

回复#15 @黄油香蕉君 :

我没有懂 npm可以直接通过 git 安装是什么意思?

能举个例子吗?

置顶   #17

回复#14 @yanying :

akku作者的技术能力很强的

但是这个库管理器的方式我不太喜欢

不想在不需要情况下导入太多东西

另外我觉得 有必要做一个chez专用的库管理器而不是RnRS同用的管理器

因为在向Real Word的探索过程中,发现Scheme编程(或者说任意语言编程)中,FFI的(或者说ABI兼容端口)作用是无可取代的,那么在R7RS large定义通用FFI端口之前,Raven的发展止步于为Chez提供包管理器而不是所有实现通用。

@guenchi 

ok! 是这样的! (我用npm的功能举例)

比如我们可以自己写一个私有库 地址在 git.xxx.com/myproject 然后他里面是有一个关于包的定义的(这里就是package.json) 比如这个包叫做 A

那么我们就可以 通过命令安装这个包


npm install git@git.xxx.com/myproject


然后在package.json文件里就会生成 一条依赖 叫做

”A“:"git@git.xxx.com/myproject"


然后如果要指的版本号 要是用#号 比如这样

”A“:"git@git.xxx.com/myproject#v1.0.0"

命令行里 是

npm install git@git.xxx.com/myproject#v1.0.0


我就是希望在 raven 里也支持这样的安装方式 因为这样 测试自己的库很方便。还有就是比较利于公司搭建私服的成本(理论上搭建一个自己的gitlab就行了)


如果你同意这个思路我想我可以承担一下代码上的任务。


置顶   #19

是类似common lisp的asdf那种包管理器吗?

回复#19 @physcrf :

我使用过 现在还是不太像CL的asdf  (PS 如果你使用Comon Lisp 我建议你使用 quicklisp 这个工具 使用起来会简单很多很多!)

我使用的感觉更加类似node的npm 无论是使用上还是 在package的定义风格上。

说点有趣的 如果作者没有使用S-表达式替换json作为定义的话。哈哈 那么几乎和node的npm包管理一模一样。

置顶   #21

回复#20 @黄油香蕉君 :

好的,其实quicklisp一直用着的

置顶   #22

回复#20 @黄油香蕉君 :


最初的版本还真是json作为定义... 然后被社区批评了 ... 有S-表达式为什么要用json

置顶   #23

@guenchi  美女班长,win7 下 raven 安装不成功,安装后在 C:\Users\Administrator\raven\raven 虽然提示成功,但少了 raven.bat 文件,我都摸索了好久才发现,手工从

https://github.com/guenchi/Raven 拷贝了 raven.bat 放到那个目录下后才能使用


置顶   #24

回复#15 @黄油香蕉君 : 不赞成学 npm 的方式,君不见node 的作者重新造轮子搞另一套替代 node 的 deno 了么?(node 名字换两个字母顺序就成 deno),包管理都完全重新设计更轻便的了


登录后方可回帖

登 录
信息栏

Scheme中文社区

推荐实现 ChezScheme / r6rs / r7rs large
theschemer.org
Q群: 724577239

精华导览

社区项目

包管理器:Raven
HTTP服务器:Igropyr (希腊火)
官方插件:vscode-chez

社区目标:

完善足以使Scheme工程化和商业化的库,特别是开发极致速度的Web服务器和ANN模块。

一直以来Scheme缺少一个活跃的中文社区,同时中文资料的稀少,导致大多数因为黑客与画家和SICP而接触Scheme的朋友,在学完SICP后无事可做,不能将Scheme转换为实际的生产力。最后渐渐的放弃。
同时Chicken等实现,却因效率问题无法与其他语言竞争。本社区只有一个目的,传播Scheme的文明之火,在最快的编译器实现上,集众人之力发展出足够与其他语言竞争的社区和库。


友情链接:

Clojure 中文论坛
函数式·China


Loading...