写点什么

在 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:003193
用户头像

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

关注

评论

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

《自动机理论、语言和计算导论》阅读笔记:p428-p525

codists

编译原理

基于国产 Web 组态软件 TopStack 搭建隧道照明控制系统

图扑物联

物联网 组态软件 web组态 智慧隧道

深度探究:职业发展必备——能力模型解析

测试人

软件测试

AI原生实践:测试用例创作探索

百度Geek说

测试用例 企业号 5 月 PK 榜 AI原生实践 企业号2024年5月PK榜

如何优雅地使用Appium元素定位工具进行移动端测试?

测吧(北京)科技有限公司

测试

豆瓣8.7分,30000人都在阅读的量化用户体验实操书全面更新!

博文视点Broadview

深度探究:职业发展必备——能力模型解析

测吧(北京)科技有限公司

测试

DcmMWL-SDK

birdbro

andiod Java' DICOM

CCE云原生混部场景下的测试案例

华为云开发者联盟

云原生 华为云 华为云开发者联盟 华为云CCE

聚道云助力航空巨头,管理与信息化效率飙升!

聚道云软件连接器

案例分享

大数据基础工程技术团队4篇论文入选ICLR,ICDE,WWW

阿里云大数据AI技术

大数据 阿里云

营销H5测试综述

京东零售技术

测试 企业号 5 月 PK 榜

GreptimeDB 助力国家电网数字换流站打造稳定高效的时序数据底座

Greptime 格睿科技

时序数据库 国产化 智慧电网 国家电网

mybatis使用多参数查询

百度搜索:蓝易云

云计算 Linux 运维 mybatis 云服务器

Ubuntu 20.04网卡命名规则

百度搜索:蓝易云

Linux ubuntu 云服务器 eth1 eth0

php出现SSL certificate problem: unable to get local issuer certificate的解决办法

百度搜索:蓝易云

php Linux 运维 ssl curl

LED全彩显示屏的三种基色

Dylan

技术 图像 LED LED显示屏 现代技术

Partisia Blockchain 生态zk跨链DEX上线,加密资产将无缝转移

股市老人

Xilinx ZYNQ的应用开发介绍

芯动大师

开发板 驱动 ZYNQ

【Git】删除本地分支;报错error: Cannot delete branch ‘wangyunuo-test‘ checked out at ‘XXX‘

百度搜索:蓝易云

git 云计算 Linux 运维 云服务器

国内小白用什么方法充值使用ChatGPT4.0?

蓉蓉

openai GPT-4 ChatGPT4

Go-Zero技能提升:深度探究goctl的妙用,轻松应对微服务开发挑战!(三)

王中阳Go

Go golang 微服务 Go进阶 gozero

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