当前位置: 首页 > news >正文

一个实际的Lisp项目开发心得

在万家灯火,元宵节的烟花绚烂绽放的时刻,checkin了代码,随手统计了下代码行,恰好1000行整(包括空行)。冥冥中自有天意?

这个项目是一个分布编译打包发布程序,需要控制多台远端的服务器进行编译,编译过程有很多步骤,还要根据需要增删build 的步骤即参数。

最早的程序是用Python写的,只在一台机器上作,后来随着项目越来越复杂,打包编译花的时间越来越多。于是决定重写,那谁说重写代码是创业公司自杀行为来着?简直扯淡。

我决定使用 Common Lisp 来重写它。经过一周多时间,基本完成。

这一千行代码作的事情却一点也不少,它包含了:

1. 一个web界面,大概6、7个控制器,两个主要的view (没有html模板文件,都是通过lisp代码生成)

2. 一大堆的编译配置选项

3. 操作数据库的部分

4. 解析遗留系统 json 文件的部分

5. 通过ssh 执行命令,并将命令输出结果显示到web页面的部分

6. 编译任务的部分 : 创建、运行状态跟踪、命令输出

再整理下代码,估计可以缩减到 700行以内。

通过这个项目实践,对自己使用lisp的信心更足了。越复杂的项目,它的优势体现的越明显。

Common Lisp开发相比其他语言的一个核心优势是它的开发流程!

通过emacs + slime 这类工具,可以实现程序边运行边修改。程序运行中,可以修改函数代码,也可以修改程序中的变量的值,而不需要重新启动程序。这一点是相比其他开发语言来说非常显著的优势。

用common lisp开发的一个典型工作状态是: 打开emacs , 通过slime 开始执行程序,然后在源代码的各处敲敲打打,边修改边看执行的状态,还可以立刻在 repl 环境下修改变量的值。

这种边运行边开发的模式与PHP那种还不同,PHP程序虽然修改完可以在网页上立刻看到效果,但是是重新启动了一个执行的进程,之前的运行环境都要重新来。

Python也一样,虽然python有类似Lisp REPL那样的交互环境,但是却难以修改源代码,并非不可能,实在是没有趁手的工具。

再往下说 Java C++一类编译型语言,写程序与编译调试运行,整个流程分的太开,流程太长。

这种快速增量开发的模式,带来的就是更高的开发效率,和更复杂问题的处理能力。


相关文章:

  • js判断当前页面在移动设备还是在PC端中打开
  • 元宵,你团圆了吗
  • 获取本机IP
  • Windows Phone 7 不温不火学习之【DeepZoom 详细使用方法】
  • 集合框架遍历方式之——for-each循环
  • ArcGIS API for Android 案例教程 6
  • 类的单列模式
  • Lisp的特性 (评论发不出,只好写一篇新的)
  • 数据图表插件Echarts(一)
  • 一只布谷鸟,两只火鸡,三匹赛马,移动竞赛的改变
  • 2016年 前端学习网站
  • --自定义事件
  • C++ VS C#(10):构造函数与析构函数
  • oracle 10g OEM常规错误解决
  • Hibernate实体关系映射(OneToMany单边)——完整实例
  • 【技术性】Search知识
  • 0x05 Python数据分析,Anaconda八斩刀
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • django开发-定时任务的使用
  • Java 23种设计模式 之单例模式 7种实现方式
  • Javascript Math对象和Date对象常用方法详解
  • Linux CTF 逆向入门
  • Mithril.js 入门介绍
  • Mysql优化
  • Node + FFmpeg 实现Canvas动画导出视频
  • PHP 小技巧
  • 百度地图API标注+时间轴组件
  • 关于 Cirru Editor 存储格式
  • 看域名解析域名安全对SEO的影响
  • 前端相关框架总和
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 人脸识别最新开发经验demo
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 正则表达式小结
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #微信小程序:微信小程序常见的配置传值
  • (pytorch进阶之路)扩散概率模型
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (学习日记)2024.02.29:UCOSIII第二节
  • (转)linux 命令大全
  • (转载)PyTorch代码规范最佳实践和样式指南
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • ... 是什么 ?... 有什么用处?
  • ./configure、make、make install 命令
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .NET Reactor简单使用教程
  • .net 流——流的类型体系简单介绍
  • .NET的微型Web框架 Nancy
  • .net生成的类,跨工程调用显示注释
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • @angular/cli项目构建--Dynamic.Form