关于 Lisp.. 你所了解到的编程语言都是怎样管理模块的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jiyinyiyong
V2EX    问与答

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

  •  
  •   jiyinyiyong 2012-11-16 10:31:56 +08:00 4474 次点击
    这是一个创建于 4767 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在 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 入门水平的个人观点..
    我想再对比下别的语言, 还有一些我不懂的和没考虑到的, 求水..
    7 条回复    1970-01-01 08:00:00 +08:00
    somethin
        1
    somethin  
       2012-11-16 11:23:28 +08:00
    racket 用planet上的模块的话,就是(require (planet owner/lib:version))啊.然后就可以用了啊
    jiyinyiyong
        2
    jiyinyiyong  
    OP
       2012-11-16 11:53:53 +08:00
    @somethin 文档里说是自动下载的. 回想应该是网速原因吧, 我没跑成功
    somethin
        3
    somethin  
       2012-11-16 11:55:22 +08:00
    @jiyinyiyong 哦.如果用drracket的话,可以看到下载状况的.
    jiyinyiyong
        4
    jiyinyiyong  
    OP
       2012-11-16 12:11:30 +08:00
    @somethin 也是, 能看进度体验就好很多了
    还是很不习惯 GUI 去编程, 每种 GUI 设计的都不一样
    qsun
        5
    qsun  
       2012-11-16 12:41:51 +08:00
    SBCL

    (require :asdf-install)
    (asdf-install:install :hunchentoot)
    (require :hunthentoot)
    hunchentoot:*version*
    somethin
        6
    somethin  
       2012-11-16 12:59:50 +08:00
    @jiyinyiyong 恩.drracket支持emacs键绑定.我感觉还蛮好用的.
    duhastmich
        7
    duhastmich  
       2012-11-16 16:35:12 +08:00
    python一般用virtualenv, 那样pip就不会装到全局了, gem差不多的,需要rvm,rbenv这类的, 默认也是装全局的;
    php有个composer, 不用全局,不用路径,代码可从github 导入
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2676 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 11:29 PVG 19:29 LAX 03:29 JFK 06:29
    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