`
izuoyan
  • 浏览: 9279140 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

一个实际的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++一类编译型语言,写程序与编译调试运行,整个流程分的太开,流程太长。

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


分享到:
评论

相关推荐

    Autolisp编程心得.doc

    ### Autolisp编程心得知识点详解 #### 一、养成良好的书写习惯 1. **选择合适的编辑器**:选择一个能够支持Autolisp编程特性的编辑...通过深入理解和实践这些技巧,开发者可以更加高效地完成Autolisp项目的开发工作。

    Practical Common Lisp 英文版

    3. **Practical: A Simple Database**:通过构建一个简单的数据库应用来演示Common Lisp在实际项目中的应用。 4. **Syntax and Semantics**:详细介绍Common Lisp的语法结构和语义特征。 5. **Functions**:深入探讨...

    Practical Common lisp

    与其他关于Common Lisp的书籍不同,《Practical Common Lisp》不仅系统介绍了Common Lisp的基本语法和特性,更重要的是它侧重于展示如何将Common Lisp应用于实际项目中,通过大量的实例和案例来帮助读者理解并掌握这...

    Linux资料

    Emacs是由GNU项目开发的,由Richard Stallman领导,其设计理念是“一切皆为文本”。Emacs不仅是一个编辑器,它还提供了邮件阅读、新闻阅读、计划管理等众多功能,甚至可以作为一个完整的操作系统环境。Emacs的核心是...

    ROS机器人学习小结.docx

    ROS(Robot Operating System),尽管名字中包含“操作系统”,但它实际上并不是一个真正的操作系统,而是一个灵活的框架,用于编写机器人软件。它集成了大量的工具、库和协议,提供了类似操作系统提供的功能,如...

    各种计算机语言简介和总结 v1.0

    其丰富的第三方库支持使其成为一个非常强大的开发工具。此外,Python也支持面向对象编程和函数式编程风格。 ##### 3. C++ - **C++**是C语言的一种扩展,是一种面向对象的编程语言。它支持类和对象的概念,能够高效...

    函数式编程报告template1

    3. **Scheme** - 是Lisp的一个简化版本,由Gerald Jay Sussman和Guy L. Steele Jr.设计,注重简洁性和可扩展性,是教育领域的常用语言。 4. **Erlang** - 由Joe Armstrong在Ericsson公司为构建分布式系统而创建,...

    史上最全的前端资源汇总

    2. **前端开源资源库**:汇集了大量的开源项目和工具,是前端开发者获取灵感和实际开发经验的重要来源。 3. **国内老牌技术社区**: - **OSChina**:中国最大的开源技术交流社区之一。 - **博客园**:专注于.NET、...

    sicp-study-group:一个研究计算机程序结构和解释(SICP)的研究小组

    3. **讨论论坛**:可能有一个在线平台,如GitHub仓库的Issue或讨论区,供成员分享问题、讨论解决方案和交流心得。 4. **作业与挑战**:为了深化理解,项目可能会提供一些编程练习,鼓励成员将理论知识应用到实际问题...

    编译原理实践-语言认知1

    【编译原理实践-语言认知1】 在计算机科学领域,理解和掌握编程语言是至关重要的,因为它们是我们与计算机沟通...实验不仅是理论知识的巩固,更是实践能力的提升,为后续编译原理的学习和实际项目开发打下坚实的基础。

    学会开放性的思维

    - **应用示例:** 如果我们想要开发Web应用程序,学习Python(如Flask或Django框架)将是一个不错的选择;而如果需要进行高性能计算,则可能需要考虑C/C++等语言。 **3. 不同编程语言的特点及其应用场景:** - **...

    emacs编辑工具学习资料

    它不仅是一个编辑器,更是一个高度可扩展的集成开发环境(IDE)。这个"emacs编辑工具学习资料"压缩包包含了丰富的资源,帮助初学者到进阶者全面掌握Emacs的使用。 首先,"Emacs_教程中文版"是为中文用户准备的基础...

    程序员能力矩阵——包括数据结构等

    - **log(n) (Level 3):** 自己维护一个技术博客,分享个人见解和技术心得,并与读者互动交流。 综上所述,程序员的能力矩阵涵盖了多个维度的知识和技能,每个维度都设定了不同的级别以评估程序员的专业水平和发展...

    emacs org-mode教程

    **Org-Mode** 是 Emacs 中一种非常强大的模式,它不仅提供了一个高效的文字处理环境,还支持任务管理、项目规划、笔记记录等功能。该模式的核心在于其对结构化文档的支持以及强大的组织能力。 **1.1 概述** Org-...

    码农第11期

    成书手记是作者在完成一本书过程中的一些思考和总结,它不仅记录了创作过程,也可能包含了一些关于写作和出版的心得。而精益思想(Lean Thinking)是一种以最小资源消耗,获得最大产出效益的管理哲学。这种思想强调...

    Clojure代码的100天:日记现在移至https://github.comjr0cketdeveloper-journal

    “clojurescript”是Clojure的一个分支,主要用于Web开发,它编译成JavaScript,可以运行在浏览器环境中;“Clojure”标签可能指的是与Clojure语言相关的广泛话题,包括但不限于语言设计、工具链、生态系统等。 ...

    clojure-study-group:资料库和课程培训中心

    【clojure-study-group:资料库和课程培训中心】是一个专注于Clojure编程语言学习资源的集合,它提供了丰富的教程、示例代码、实践项目以及学习路径,旨在帮助开发者深入理解和掌握Clojure及其相关技术。Clojure是一...

    rain-1.github.io

    【标题】"rain-1.github.io" 指的很可能是一个个人编程博客的GitHub Pages站点。GitHub Pages是一种服务,允许用户在GitHub上免费托管静态网页,通常用于展示个人项目、博客或其他在线文档。 【描述】"下雨-1....

    Masterminds of Programming

    《Masterminds of Programming》是一本深度探讨编程语言设计与实现的著作,它汇集了众多编程语言创始人的心得与智慧,为我们揭示了编程语言背后的哲学和创新思维。这本书的描述表明,它不仅涉及技术层面的知识,更...

Global site tag (gtag.js) - Google Analytics