SBCL 启动与停止:从 Shell 到 Lisp 再到核心映像

本贴最后更新于 216 天前,其中的信息可能已经事过景迁

🚀 启动 SBCL

SBCL,这个强大的 Common Lisp 实现,就像一个通往 Lisp 世界的传送门,让我们可以自由地探索这个充满逻辑和优雅的编程世界。那么,如何开启这段旅程呢?

从 Shell 到 Lisp

最简单的启动方式,就是打开你的终端,输入 sbcl​,然后按下回车键。就像打开一扇通往 Lisp 王国的魔法之门,你将被带到一个充满交互式命令的奇妙世界——REPL(读取-求值-打印-循环)。

$ sbcl This is SBCL 0.8.13.60, an implementation of ANSI Common Lisp. More information about SBCL is available at <http://www.sbcl.org/>. SBCL is free software, provided as is, with absolutely no warranty. It is mostly in the public domain; some portions are provided under BSD-style licenses. See the CREDITS and COPYING files in the distribution for more information. * (+ 2 2) 4 * (exit) $

在 REPL 中,你可以输入 Lisp 表达式,SBCL 会立即计算并返回结果。就像一个忠诚的助手,它随时准备着为你执行你的指令。

Emacs:Lisp 的最佳拍档

如果你是一位 Lisp 爱好者,Emacs 绝对是你不可或缺的伙伴。它不仅是一个强大的文本编辑器,更是一个 Lisp 的完美环境。在你的 .emacs​文件中,设置好 SBCL 的路径和参数,就可以在 Emacs 中轻松地启动 SBCL,并享受编辑、调试和运行 Lisp 代码的无缝体验。

;;; The SBCL binary and command-line arguments (setq inferior-lisp-program "/usr/local/bin/sbcl --noinform")

Shebang 脚本:Lisp 的魔法咒语

想要让你的 Lisp 程序像其他脚本一样直接运行吗?Shebang 脚本可以实现这个愿望。在你的 Lisp 文件开头添加一行特殊的注释,就可以直接在终端中执行它,就像执行其他脚本一样。

#!/usr/local/bin/sbcl --script (wirte-line "Hello, World!")

🚪 停止 SBCL

旅程总有结束的时候,我们也需要优雅地退出 Lisp 的世界。

退出:告别 Lisp 王国

在 REPL 中,输入 (exit)​,就像挥动魔法棒,你将回到熟悉的 Shell 环境。

文件结尾:Lisp 的自然结束

在终端中输入 Control-D​,或者当 SBCL 作为管道的一端遇到输入结尾时,它也会自动退出。

保存核心映像:Lisp 的冬眠

SBCL 可以将它的状态保存到一个文件中,就像将一个充满活力的 Lisp 世界封存起来,以便日后重新唤醒。

sb-ext:save-lisp-and-die core-file-name &key toplevel executable [函数]

错误退出:Lisp 的意外旅程

如果在运行过程中遇到错误,SBCL 会自动退出,并提供错误信息,帮助你找到问题所在。

⚙️ 命令行选项

就像魔法师的咒语,命令行选项可以赋予 SBCL 不同的能力,让它按照你的意愿运行。

运行时选项

  • --core corefilename​:保存核心映像。
  • --dynamic-space-size megabytes​:设置动态内存空间大小。
  • --control-stack-size megabytes​:设置控制堆栈大小。
  • --noinform​:禁用启动信息。
  • --disable-ldb​:禁用调试器。
  • --lose-on-corruption​:在检测到内存损坏时退出。
  • --script filename​:运行 Lisp 脚本。
  • --merge-core-pages​:合并核心页面。
  • --no-merge-core-pages​:禁用合并核心页面。
  • --default-merge-core-pages​:使用默认的合并核心页面策略。
  • --help​:显示帮助信息。
  • --version​:显示版本信息。

顶层选项

  • --sysinit filename​:指定系统初始化文件。
  • --no-sysinit​:禁用系统初始化文件。
  • --userinit filename​:指定用户初始化文件。
  • --no-userinit​:禁用用户初始化文件。
  • --eval command​:执行 Lisp 表达式。
  • --load filename​:加载 Lisp 文件。
  • --noprint​:禁用输出。
  • --disabled-debugger​:禁用调试器。
  • script filename​:运行 Lisp 脚本。

📚 初始化文件

就像一个魔法师的笔记本,初始化文件记录着 SBCL 启动时的初始设置。

系统初始化文件

默认位置:$SBCL_HOME/sbclrc​ 或 etc/sbclrc​。

用户初始化文件

默认位置:$HOME/.sbclrc​。

🪝 初始化和退出钩子

就像魔法师的预言和告别仪式,初始化和退出钩子在 SBCL 启动和退出时执行特定的操作。

  • sb-ext:*init-hooks*​:在系统初始化后,或者从保存的核心映像启动时,以不确定的顺序执行的函数列表。
  • sb-ext:*exit-hooks*​:在 SBCL 退出时,以不确定的顺序执行的函数列表。

总结

SBCL,就像一个通往 Lisp 世界的魔法之门,让我们可以自由地探索这个充满逻辑和优雅的编程世界。通过各种启动和停止的方式,以及灵活的命令行选项和初始化文件,我们可以定制 SBCL,使其成为我们探索 Lisp 世界的最佳伙伴。

参考文献

  1. SBCL Documentation
  2. SBCL GitHub Repository
  • Lisp
    38 引用 • 13 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    289 引用 • 4492 回帖 • 655 关注
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 81 关注
  • OneNote
    1 引用 • 3 回帖
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 164 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • RESTful

    一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    30 引用 • 114 回帖 • 6 关注
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    187 引用 • 318 回帖 • 256 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    95 引用 • 901 回帖
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    54 引用 • 37 回帖
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    29 引用 • 66 回帖
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    173 引用 • 518 回帖 • 1 关注
  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    143 引用 • 442 回帖 • 1 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    180 引用 • 408 回帖 • 489 关注
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    37 引用 • 157 回帖
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    99 引用 • 367 回帖
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 503 关注
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 593 关注
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖 • 1 关注
  • JSON

    JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。

    52 引用 • 190 回帖
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    245 引用 • 1338 回帖
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 548 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 668 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 295 关注
  • OpenResty

    OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

    17 引用 • 57 关注
  • 分享

    有什么新发现就分享给大家吧!

    248 引用 • 1794 回帖 • 2 关注
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖 • 1 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 2 关注