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.arc | HTTP 服务器:解析请求、路由分发、防 DoS 限流 |
app.arc | 应用层:用户登录、Cookie、管理员系统 |
html.arc | HTML 生成宏:whitepage、表单、表格等页面积木 |
news.arc | Hacker 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只有id、title、text三个字段。
② 存储(第 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.arc的asv起服务。
(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),仅供参考