关于 Lisp.. 你所了解到的编程语言都是怎样管理模块的?

2012-11-16 10:31:56 +08:00
 jiyinyiyong
在 Lispcn 邮件列表看盖楼.. 为此去把 Scheme 的模块用法看了一些
再拿来和别的我了解过的编程语言对比...

Node.js 我最熟悉的, 用 npm 命令可以上传下载中央仓库的模块
脚本会到系统 Path 和当前路径和父(父*)路径检测 node_modules 文件
下载的文件是 JS 源码, 可能有 C/C++ 写的扩展自动编译
简单的比如直接 Github 上下载来, require 函数写对就能用了
浏览器端按 SeaJS 就是模块在项目路径下, 按路径引用

Lua 似乎是用户主目录下用 rocks 安装的, 跟 JS 相似点很多
从路径引用也是有的.

Python 是用 pip easy_install 命令下载到全局的某个路径.
Python 的仓库不清楚在哪.. 我猜不止一个吧
Ruby 使用 gem 命令下载到用户目录下的某个路径
Gems 至少是有在线的搜索, 仓库模块数量很大
这样都是引用模块的名字, 虽然也有路径

Racket 用 raco planet 把模块下载到用户路径下载的某个路径
Racket 有 PLaneT 中央仓库, 不少的模块
Guile 模块是放到安装目录下一个 site 文件夹下才能被索引到
Chicken chicken_install 也是在用户目录下, 下载的代码会被编译到二进制码
Chicken Eggs 里用不少模块, 目测比 PLaneT 要多
Scheme 语言还有个 load 函数按照路径引用模块
不过 Scheme 没有直接类似 JS 的表结构, 暴露的都是函数?

Clojure 用 lein deps 安装依赖, 在项目路径下一个文件夹放 .jar 包
根据路径的引用, 安装 Java 的 com.example 好难懂的感觉
印象比较深的说按 'dir/file.clj' 路径引用不被推荐.
而自己写的 Clojure 打包可以上传到 clojar 仓库里, 数量就大了

Haskell 的 cabal 印象最深就是编译, Wiki 和包的数量都很多
Hackage 上估计不难上传模块, 我没有了解过..
Haskell 能很自然地按路径引用. 下载的包安装在用户主目录下

CommonLisp 听说过 QuickLisp 用来管理模块, 可看页面上内容挺少的
没有使用经验...

更多语言求补充吧... 还有纠正...
Node 以外我都只是看了文档尝试下, 错误见谅

上面凭印象写的.. 细节应该会有错, 我拿这个来对比
看 Lisp Curse 时我一直在抱怨, Lisp 模块管理工具太不顺手
自打用了 Linux, 我觉得下载模块拓展一个平台是很正常的事情
而且 Firefox, GNOME3, Sublime, 这些工具都是靠扩展才强大的

Lisp 一直被赞誉, 强大的宏, 扩展能力不需要怀疑了
可是模块管理上, 我能下载模块看几眼文档来直接 require 过来用么?
Clojure 用的 Java 的包, 大多压缩过的 jar
Chicken 用的 C 写的模块, 也是下载过来编译了
Guile 在 GNOME 平台上才玩得好, Racket 是我没看懂的 .plt 文件
那种从 Github 看文档 clone 下载直接用的感觉就不用想了
也许对于大项目的语言, Lisp 依然有些特性神一样存在着
可是相对某些动态语言的灵活, Lisp 真心没那么方便

..以上 Scheme 入门水平的个人观点..
我想再对比下别的语言, 还有一些我不懂的和没考虑到的, 求水..
4057 次点击
所在节点    问与答
7 条回复
somethin
2012-11-16 11:23:28 +08:00
racket 用planet上的模块的话,就是(require (planet owner/lib:version))啊.然后就可以用了啊
jiyinyiyong
2012-11-16 11:53:53 +08:00
@somethin 文档里说是自动下载的. 回想应该是网速原因吧, 我没跑成功
somethin
2012-11-16 11:55:22 +08:00
@jiyinyiyong 哦.如果用drracket的话,可以看到下载状况的.
jiyinyiyong
2012-11-16 12:11:30 +08:00
@somethin 也是, 能看进度体验就好很多了
还是很不习惯 GUI 去编程, 每种 GUI 设计的都不一样
qsun
2012-11-16 12:41:51 +08:00
SBCL

(require :asdf-install)
(asdf-install:install :hunchentoot)
(require :hunthentoot)
hunchentoot:*version*
somethin
2012-11-16 12:59:50 +08:00
@jiyinyiyong 恩.drracket支持emacs键绑定.我感觉还蛮好用的.
duhastmich
2012-11-16 16:35:12 +08:00
python一般用virtualenv, 那样pip就不会装到全局了, gem差不多的,需要rvm,rbenv这类的, 默认也是装全局的;
php有个composer, 不用全局,不用路径,代码可从github 导入

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/52511

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX