问题标签 [ecl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
lisp - 如何分发 asdf/quicklisp 依赖项以及使用 Embeddable Common Lisp 编译的应用程序?
我已经尝试过这个示例ECL 存储库 asdf 示例,它工作正常,但它没有任何 asdf 依赖项。如果我添加
:depends-on (#:inferior-shell)
到 example.asd 然后运行编译的独立可执行文件会出现此错误:
是什么导致了这个错误,处理 asdf 对ECL的依赖的惯用方法是什么?
windows - 可嵌入的 Common-Lisp asdf:defsystem 返回无效的相对路径名
我正在尝试学习如何使用 Common-Lisp 的 asdf,并且我有以下代码:
但是,我不断收到错误消息:
我在与这两个 Lisp 文件相同的目录中启动 repl,但我不明白为什么会出现错误。我错过了什么?我在 Windows 上使用 ECL
windows - asdf:make-build on Windows fails
I have the following files
example.asd:
first.lisp:
second.lisp:
I can successfully load the system, but doing (asdf:make-build :example :type :program :move-here ".")
gives the following error:
LINK : fatal error LNK1149: output filename matches input filename 'C:\path\to\example.lib'
Is there something I'm not configuring properly? It seems to be creating example.lib, then making example.exe link example.lib, and cl does not like them being named the same. Is there a way to specify the name of the resulting executable? Or is this just a bug in ECL's asdf:make-build?
I'm using ECL on Windows 10 with Visual Studio 2015's developer tools.
common-lisp - 将字符串从 ECL 传递到 C++
我正在尝试进入 C++ 中嵌入的 Common Lisp 的迷人世界。我的问题是我无法从 C++ 中读取和打印由 ECL 中定义的 lisp 函数返回的字符串。
在 C++ 中,我有这个函数来运行任意 Lisp 表达式:
我可以通过这种方式使用数字来做到这一点:
电汇:
用 C++ 读取和打印:
一切都设置好了,工作正常,但我不知道用字符串而不是数字来做。这是我尝试过的:
电汇:
C++:
打印字符串的结果是这样的:
一个字符串:0x3188b00
我猜是字符串的地址。
这里是调试器的捕获和y cl_object 的内容。y->string.self 类型是一个 ecl_character。
common-lisp - 如何将 *standard-input* 和 *standard-output* 重定向到另一个 PTY、FIFO 或套接字?
我想知道是否可以重定向 ECL 的 Linux stdio,使其不与嵌入的应用程序共享流。
我的问题是主机应用程序出于自己的目的接管了标准输入、标准输出和标准错误。所以,我想有一个单独的控制台来处理 lisp 噪音,并在 SLIME/SWANK 崩溃回到顶层时进行恢复。目前 SWANK hiccups 将CL-USER>
提示放入应用程序调试日志中,C opperation (read) signalled an error
stdout 的失败被重定向,stdin 很可能被父进程关闭或使用。
我知道你可以setf *standand-output*
等到一个新的流,但我还没有找到一种方法来附加一个终端,比如屏幕或 xterm 或套接字。我需要底层的 Linux/C 文件描述符,然后我可以制作一个 PTY。
如果有某种方法可以将标准流附加到我可以使用 telnet 连接到的套接字服务器上,那就更好了。
更新
根据评论中的建议,我尝试了以下代码:
它并没有完成这项工作。问题是,虽然一些 IO 被重定向 SWANK,但似乎仍然有办法获取真正的流。我想这需要一些研究才能弄清楚 SWANK 是如何做到的。哦,便利的高价!
更新 2
我的错。没有*standard-error*
,只有*error-output*
。你能告诉我我对 Lisp 很陌生吗?
现在,一切都被重定向了。不过,SLIME 现在不会和 SWANK 说话了,有点违背了目的……
更新 3
胜利!在连接 SLIME 之前,您需要在终端中运行类似以下的 shell 脚本来创建您的顶级 shell:
原因,我猜不出来。但幸运的是它仍然有效。
顺便说一句,不要阻止任何想要发布更好答案的人
我确信有人可以制作一个套接字服务器或屏幕分离的 PTY,无论是否有人在看它们,都可以让流保持快乐。那将是一个更经典的解决方案。
common-lisp - 为什么 (probe-file #P"/") 返回 nil?
这似乎可能是 ECL 实现中的一个错误——或者由于标准中的一些细节:
还有一个案例:
更新,FWIW,SBCL 符合我的期望:
c++ - 在 C++ 中将 ECL 符号名称作为字符串获取
我正在将 Embeddable Common Lisp 嵌入到一个库中,并且我一直在编写实用函数来将 ECL 转换cl_object
为各种 C/C++ 类型——例如,将cl_object
表示字符串的字符串转换为 std::string。
我的问题是——为什么我无法在 ECL 中检索到包含符号名称的字符串?
我无法让以下函数ecl_symbol_to_string
正常工作,它应该采用 ECL 符号并返回一个 std::string 及其名称:
请注意,这ecl_string_to_string
适用于 lisp 字符串。
一个简单的单元测试说明了失败:
此测试用例会打印出来MM
以调用 cout。我还尝试与失败的“MYSYMBOL”和通过的“M”进行比较。
LispRuntime::eval_script 简单地转换和评估形式:
我在本地编译了 ECL 版本 16.1.3,启用了 C++ 选项、调试符号和所有其他默认设置。非常感谢任何帮助。
common-lisp - 当回溯缺少信息时调试 Quicklisp
快速加载失败时您的一般方法是什么?我想我想知道引发问题的那一行,但我得到的只是一个回溯,其中引用了一个字节编译函数。我应该如何确定导致问题的包、文件和表单?
更新
我的环境是 Emacs 中的 ECL。回溯由 SLIME 调试器提供。
common-lisp - Embeddable Common Lisp (ECL):使用扩展函数加载共享库
是否可以在 ECL 中加载共享库,导入一些接收和返回的 C 函数cl_object
(好像它们是用 定义的ecl_def_c_function()
)并在 REPL 中调用它们(不编译 *.lisp 文件)?
例如:
正如我发现没有办法告诉 ECL(通过 UFFI)C 函数处理cl_object
,而不是常规指针(void*)
。
common-lisp - 使用 ECL 构建可执行文件:缺少依赖项或在 asdf/interface 中找不到 make-build
我正在尝试使用 ECL 构建可执行文件。我查看了文档和其他SO 问题,我们了解到使用 ECL v <= 16.1.3 我们必须添加一个
然后我将我的项目推送到 asdf 注册表:
我加载它:
我的程序显然有 Quicklisp 依赖项。
我将 Quicklisp 的初始化从我的复制.sbclrc
到~/.eclrc
:
所以我可以快速加载我的项目:(此步骤未出现在文档中,但这允许找到项目依赖项)
我也
但现在,因为我想构建可执行文件
我得到错误
在#<"ASDF/INTERFACE" package> 中找不到外部符号 MAKE-BUILD。
有人可以帮忙吗?谢谢 !
ECL 16.1.3
ps:而且好像,在REPL中,进入重启nb是没有效果的。
我的生成文件:
结果:
10 月 27 日编辑 - 进度
现在最简单的路径似乎不确定是否使用捆绑到 ECL 中的 ASDF,这将具有该make-build
命令。
由于我的 Quicklisp 的初始化代码为~/.eclrc
. 我删除了它,现在我有了 ASDF v3.1.8.2,没关系。但是现在,ECL 不知道任何依赖项:
组件 :DEXADOR 未找到,# 需要。
确实,因为不再有 Quicklisp。
ECL 文档说将所有库路径包含到asdf:*central-registry*
. 一次偶然的机会,Quicklisp 将所有库安装到~/quicklisp/dists/quicklisp/software/
.
首先,我想知道这将如何在 Quicklisp 之前没有运行过的 CI 管道中工作……</p>
然后我看到只添加这个目录是不够的,Dexador的依赖又会找不到,我必须精确地添加dexador的目录:
那么我真的必须编写代码来包含这里的每个目录吗?
当 Quicklisp 以前没有运行过一次时如何使这项工作?
更新:使用与 Roswell 一起安装的 Ecl:require
在我的 .eclrc 中的所有内容之前输入 asdf,在 Quicklisp 初始化 3.2.1 和make-build
符号未知之后给出版本 3.1.8.2。
使用 Debian 的 Ecl:首先是 v2.33.10,然后是 v3.2.1。
看起来像一个死胡同。
11 月更新:我等待 ASDF 3.3.0 的发布来手动更新。这是越野车。邮件列表上的消息:等待 3.3.1:再次出现错误。
使用lisp-devel Docker 镜像,发布 ECL 16.1.3。(我不想在每个 VPS 上自己编译 ECL)。我可以构建一个可执行文件(重量为 52Mo),但出现运行时错误:
类型条件:在 > 编译文件 NIL 中引用但尚未创建的 SIMPLE-ERROR 包 ((UIOP/STREAM . #))