写点什么

在 Lisp 中使用 RDNZL 调用.NET 类库

  • 2007-08-23
  • 本文字数:731 字

    阅读完需:约 2 分钟

长期以来对 Lisp 的诟病之一就是 Lisp 缺乏高质量的类库。尽管有不少人在争论这个观点是否正确,但是能够访问.NET 平台下不计其数的高质量类库,确实能给人们带来很多价值。

RDNZL 为 Windows 平台下的 Lisp 开发人员提供了一个访问.NET 类库的途径。尽管目前它还不能支持其它的 CLR 实现,比如说 Mono,但是 RDNZL 的维护人员正在接纳这些平台的补丁。

在 Lisp 一方,这套类库支持 Corman Common List、ECL、Allegro 和 LispWorks。SBCL 和 GNU CLISP 的移植版目前尚在开发中。

RDNZL 完成诸如对象创建、.NET 风格数组、枚举类型、装箱(Boxing)、.NET/Lisp 类型转换和起来类似的基础工作,相对来说容易不少,而方法调用可以用两种方式完成。最为容易的方式是使用 Lisp 函数调用、属性或者字段。这些方法使用反射来调用下面的.NET 方法。如果希望避免反射,并使调用时间减半,开发人员可以使用define-rdnzl-call来为相应函数创建一个 Lisp 包装器。

使用这个类库对性能最严重的影响就是对所传送数据的重新编组的时间损耗。出于这一原因,控制跨平台方法调用的数量是更可取的,而人们尤其应当注意避免在 Lisp 中的一个紧凑循环中频繁调用.NET 代码。

由于要为 COM 类库创建 CLR 可调用的包装器(CLR Callable Wrapper)是件易如反掌的事情,RDNZL 也为开发人员提供了调用 Windows 平台上浩如烟海的 COM 类库的途径。在链接页面中,有不少示例,其中就有一个从 Lisp 中通过 Microsoft Office 自动化调用 Excel 对象的例子。

事件处理器和其它的委托(delegate)可以通过向委托的构造方法传入一个 Lisp 闭包的方式创建。不过要这样做必须小心从事,因为这样可能会创建出一个循环引用,从而扰乱 Lisp 和.NET 的垃圾收集器。

查看英文原文: Call .NET Libraries from Lisp Using RDNZL

2007-08-23 23:003160
用户头像

发布了 117 篇内容, 共 15.6 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

C++ primer --第十一章 使用类

Dreamer

c++

C++ primer -- 第17章 输入,输出和文件

Dreamer

c++

架构设计-学习总结笔记

Xuenqlve

6.6Doris分析案例(一): NoSQL案例

张荣召

6.7Doris分析案例(二):高可用和集群扩容设计

张荣召

架构师训练营第一期 - 第六周学习总结

卖猪肉的大叔

极客大学架构师训练营

C++primer-函数探幽

Dreamer

c++

C++ 第九章 内存模型和名称空间

Dreamer

c++

C++ primer -- 第十章 对象和类

Dreamer

c++

架构师训练营 第六周作业

haha

架构师一期

Week 2 :框架设计(学习总结)

Sean Chen

C++ primer -- 第十三章 类继承

Dreamer

c++

架構師訓練營第 1 期 - 第 06 周總結

Panda

架構師訓練營第 1 期

Ubuntu常见问题解决方案与使用技巧

jiangling500

ubuntu

极客大学 - 架构师训练营第一期 - 第六周作业

Black Eyed Peter

极客大学架构师训练营

架构师训练营第一期 - week6

习习

Here I come

Dreamer

C++ primer -- 第十五章 友元,异常和其他

Dreamer

c++

6.5搜索引擎的基本架构

张荣召

架构师训练营第一期 - 第六周课后作业

卖猪肉的大叔

极客大学架构师训练营

学习笔记--week06

张荣召

6.4Zookeeper与分布一致性架构

张荣召

第二周学习总结

刘洋

极客大学架构师训练营

6.8Doris分析案例(三):扩容伸缩设计

张荣召

第二周作业-学习总结

jingx

架构师训练营第六周学习笔记

一马行千里

学习 极客大学架构师训练营

架构师训练营第 6 周:技术选型 (二)

子青

C++ primer -- 第16章 string类和标准模版库

Dreamer

c++

week2- 作业二,学习总结-框架设计

未来已来

C++ primer -- 第十二章 类和动态内存分配

Dreamer

c++

c++ primer -- 第14章 C++中代码重用

Dreamer

c++

在Lisp中使用RDNZL调用.NET类库_.NET_Jonathan Allen_InfoQ精选文章