100 行 Arc 代码加上你自己的 Hacker News 框架扩展:博客应用实战指南
2026/8/23 17:27:47 网站建设 项目流程

100 行 Arc 代码加上你自己的 Hacker News 框架扩展:博客应用实战指南

【免费下载链接】hackernewsHacker News web site source code mirror.项目地址: https://gitcode.com/gh_mirrors/hack/hackernews

Hacker News 框架扩展入门:本文带你用约 100 行 Arc 代码,在这套 Hacker News 同源的轻量 Web 框架上搭出属于自己的博客应用,并完整解析 blog.arc 示例背后的三大核心机制。无需数据库、无需框架配置,一个 Scheme 文件就是一个网站 🚀

框架长什么样:先认识 4 个核心文件

这个仓库是 Hacker News 早期站点(Hacker News web site source code)的源码镜像,用 Hacker News 之父 Paul Graham 亲自设计的Arc 语言写成。整套 Web 框架只有几千行代码,麻雀虽小五脏俱全:

文件职责
srv.arcHTTP 服务器:解析请求、路由分发、防 DoS 限流
app.arc应用层:用户登录、Cookie、管理员系统
html.arcHTML 生成宏:whitepage、表单、表格等页面积木
news.arcHacker News 站点本体(2600 行的"参考应用")

理解了这 4 个文件的分工,你就理解了"扩展 Hacker News 框架"到底在扩展什么。

三步跑起来:Hacker News 框架快速启动

第 1 步:安装 MzScheme 372 版本(这一步不能省——README 明确警告,372 之后的版本让列表变为不可变,Arc 将无法运行)。

第 2 步:启动 Arc REPL

mzscheme -m -f as.scm

第 3 步:加载应用并启动服务。以 News 本体为例(详见how-to-run-news):

(load "news.arc") (nsv)

打开http://localhost:8080,一个完整的 Hacker News 站点就跑起来了。整个过程没有配置文件、没有数据库初始化——数据直接存成 Arc 表文件。

框架三大核心机制:一次讲透

1️⃣defop:URL 路由注册

srv.arc中的defop宏把 URL 路径绑定到一个处理函数。访问/viewpost?id=3,服务端就调用srvops*表里注册的viewpost

(defop viewpost req (blogop post-page req))

一个宏 = 一个路由,这是整个框架最核心的扩展点。

2️⃣aform:表单提交的"往返"

aform接受一个处理函数 + 表单字段。提交后服务端拿到req,读取arg req "字段名",渲染出新的页面——没有模板引擎,HTML 就是 Lisp 代码直接打印出来的。

3️⃣whitepage/widtable:页面布局积木

whitepage生成带标题和版权栏的整页,widtable生成定宽表格。blog.arc里所有页面都由blogpage宏(第 23–32 行)拼装,30 秒就能复制出自己的"页面外壳"。

跟着 blog.arc 走:用 100 行代码搭一个博客

blog.arc全文仅 94 行,是官方给的"扩展框架"标准范例。跟着走 5 步:

① 定义数据结构(第 12 行)——deftem即 Arc 版的 struct,post只有idtitletext三个字段。

② 存储(第 14–19 行)——没有数据库。每篇文章是一个序列化文件,存在arc/posts/目录下,文件名就是帖子 id;load-posts启动时把整个目录读进内存表posts*

③ 路由——三个defop注册三个页面:

(defop viewpost req ...) ; 文章详情页 (defopl newpost req ...) ; 新文章表单 (defop blog req ...) ; 首页,展示最近 4 篇

④ 表单(第 53–59 行)——aform包裹"标题输入框 + 正文文本域",提交回调里调用addpost落盘,然后直接渲染详情页,一步到位。

⑤ 启动(第 90–93 行)——bsv宏做三件事:确保目录存在 → 载入全部文章 → 调app.arcasv起服务。

(load "blog.arc") (bsv)

浏览器访问http://localhost:8080/blog,你就拥有了一个支持登录、写文、改文、归档的完整博客,总计代码不超过 100 行。

举一反三:同一套模式做论坛、Wiki、任务板

news.arc本身就是终极范本:item模板(第 50–68 行)承载帖子/评论,defop注册几十条路由,投票、排序、karma 全在同一套机制上生长。你只需要替换:

  • 数据deftem换成自己的结构;
  • 路由defop换成自己的页面;
  • 布局:仿照blogpage宏换一套"页面外壳"。

性能调优小贴士(摘自how-to-run-news),在 Arc REPL 中执行:

(= static-max-age* 7200) (declare 'direct-calls t) (declare 'explicit-flush t)

分别表示:静态文件浏览器缓存 7200 秒、承诺不重定义函数、自行负责输出刷新。

总结:你的下一个应用,就是一个 Arc 文件

Hacker News 框架扩展的精髓在于"** Lisp 即网站 **:路由是宏(defop),表单是宏(aform),HTML 是函数调用,数据是磁盘上的 Arc 表。读完blog.arc这 94 行,你拿到的不是一个博客模板,而是一把能打开论坛、Wiki、任务板等一切小型 Web 应用大门的钥匙 🔑

【免费下载链接】hackernewsHacker News web site source code mirror.项目地址: https://gitcode.com/gh_mirrors/hack/hackernews

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询