实现几种算法用哪种Lisp比较好?

因为需要读写二进制文件,emacs lisp肯定不适合

我以前用过common lisp的实现clisp,在单板机上实现了几个现如今不敢再回去看代码的功能后被HyperSpec和各种reference劝退

clojure也是一样,因为太依赖Java虚拟机,将来不会再用

现如今比较关注picolisp,语法和emacs lisp比较接近,而且可以用C语言做扩展,社区也比较活跃

不知道诸位认为还有哪种lisp值得使用?多谢大家

既然提到clojure,有个有趣的题外话,Rich Hickey的退休金总算攒够了 :rofl:

1 个赞

Clojure这么原教旨的lisp要不是要用jdbc连数据库真不知道有什么理由用这个

至于NASA的支持,NASA一向是追涨杀跌,选编程语言如同炒股,NASA的做法基本上不能当作考量的因素

我觉得在选语言的时候可以先宏观的把一些条件列出来:

  1. 需求听起来是在意高性能的文件读写
  2. 能选 picolisp 说明生态不是考虑因素,要做的东西应该是个小东西

条件越多就越能看出来什么语言比较合适

1 个赞

为什么不敢在回去看代码,是代码写得太难看吗

对lambda和克里化没用到位

  1. 需要读取二进制文件,可能还要调用OpenCV
  2. 需要使用3DNow!指令,封装好的只有一些.h文件
  3. 代码将来可能需要改写成C语言
  4. 运行效率需要尽可能地高,至少要比Java快,否则不知道是算法的问题还是lisp的问题

这些大概就是需求

Gerbil Scheme

CHICKEN Scheme Scheme-to-C compiler

嵌入式系统还是老老实实用c吧。。。别跟自己过不去。。。

你还是老老实实用C或者C++吧。其实随便乱写写的C还未必能比Java快,C要比Java快有两个办法

  1. 自己管理内存分配和释放,因为可以针对自己的算法来优化,可以设法做得比通用的垃圾收集快一点。或者至少是不在关键部分引起无法预测的卡顿。
  2. 使用Java无法方便地访问的平台特性,例如你提到的3DNow!指令等。

至于高性能I/O,你还需要确保使用对应平台上的异步I/O编程接口,否则很难达到最高性能。这点用Java也不是很方便,就算能做到性能上恐怕也会因为额外的抽象而损失一点。用LISP的话就更难了。

这个不错,我仔细研究一下,多谢!

这个我也研究一下,多谢!

C语言不大适合做算法,因为它本身做的就是在CPU和IO之间搬运数据的工作,要是想写出体现逻辑的代码还得是Lisp

用Vanilla Java都做不到比C++快,再加上那堆Java框架,不跑成宕机就不错了,所以Java是绝对不能用,与其这样我还不如选一种Lisp,至少出了问题我不用排查是我自己代码的问题还是框架的问题

快不快要测试了才知道,主观感觉常常是不准的。你不要小瞧了Java虚拟机这许多年的优化,纯数值运算,不涉及大量内存分配的,Java的速度不比C慢的(假如C不使用SIMD指令的话),至于比LISP快基本上是没有什么疑问的,除非你把LISP写成C或者汇编语言的形状,那样话其实也没有必要用LISP了。

听起来是要做个 mvp 版,那没有必要追求性能。要有 opencv 使用例子相关,偏主流一点的语言为佳。

Java纸面实力强,但用在真实场合就不知道了,Java声称的可以在单板机上平稳运行,但是当年Palm的WebOS就是基于Java,给至少一代人造成了心理阴影,美国人坑美国人都心狠手辣,我是真有点怕

其实OpenCV可以舍,输入格式统一使用bmp,主要是担心OpenCV这么大的框架在单板机上搞出乱子,目前只会用到读取功能而已

https://www.graalvm.org/, GraalVM compiles your Java applications ahead of time into standalone binaries. These binaries are smaller, start up to 100x faster, provide peak performance with no warmup, and use less memory and CPU than applications running on a Java Virtual Machine (JVM).

可以了解一下这个,native build 比较慢,可能还会有各种问题,已经很不错了。