Racket 和 Scheme の差别

Racket 和 Scheme 确实有一些重要的差别,尽管 Racket 最初是作为 Scheme 的一个实现开始的。让我详细解释一下它们之间的主要差异:

  1. 语言哲学:

    • Scheme:注重简洁性和最小主义,保持核心语言较小。
    • Racket:强调"语言为中心的编程",提供更多的特性和工具。
  2. 标准化:

    • Scheme:有标准规范(如 R5RS, R6RS, R7RS)。
    • Racket:不遵循 Scheme 标准,而是自己独立发展。
  3. 模块系统:

    • Scheme:模块系统在不同实现间可能有差异。
    • Racket:有强大且统一的模块系统,支持创建新的语言。
  4. 宏系统:

    • Scheme:通常使用 hygienic macros。
    • Racket:提供更强大的宏系统,包括语法对象和相位级别。
  5. 类型系统:

    • Scheme:通常是动态类型的。
    • Racket:支持可选的静态类型系统(Typed Racket)。
  6. 标准库:

    • Scheme:标准库相对较小。
    • Racket:提供非常丰富的标准库,包括 GUI、网络、数据库等。
  7. 面向对象编程:

    • Scheme:通常通过闭包实现对象系统。
    • Racket:内置支持类和接口。
  8. 并发和并行:

    • Scheme:并发支持因实现而异。
    • Racket:提供内置的并发和并行工具(如 futures, places)。
  9. 开发环境:

    • Scheme:开发环境视具体实现而定。
    • Racket:提供集成的 DrRacket IDE,支持多种语言。
  10. 语言特性:

    • Racket 引入了许多 Scheme 中没有的特性,如 contracts, units, mixins 等。
  11. 语法:

    • 虽然基本语法相似,但 Racket 引入了一些新的语法结构。
  12. 性能:

    • Racket 通常比许多 Scheme 实现提供更好的性能优化。
  13. 社区和生态系统:

    • Racket 有一个活跃的社区和丰富的包管理系统。
  14. 应用领域:

    • Scheme 更多用于教育和研究。
    • Racket 除了教育外,也广泛用于实际应用开发。
  15. 版本兼容性:

    • Racket 更注重向后兼容性。

示例代码比较:

Scheme (R7RS):

(define (factorial n)
  (if (zero? n)
      1
      (* n (factorial (- n 1)))))

(display (factorial 5))
(newline)

Racket:

#lang racket

(define (factorial n)
  (if (zero? n)
      1
      (* n (factorial (- n 1)))))

(println (factorial 5))

主要区别:

  1. Racket 使用 #lang​ 指令指定语言。
  2. Racket 使用 println​ 而不是 display​ 和 newline​ 的组合。

虽然 Racket 源自 Scheme,但它已经发展成为一个独立的、更加丰富和强大的语言。如果您熟悉 Scheme,学习 Racket 会相对容易,但您会发现 Racket 提供了更多的工具和功能。选择使用哪个取决于您的具体需求和项目要求。

  • 待分类

    用户发帖时如果不填标签,则默认加上“待分类”。这样做是为了减少用户发帖的负担,同时也减少运营维护的工作量。具有帖子更新权限的用户可以帮助社区进行帖子整理,让大家可以更方便地找到所需内容。这里是关于这样设计的一些思考,欢迎讨论。

    12 引用 • -279 回帖 • 4 关注

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    41 引用 • 130 回帖 • 266 关注
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    336 引用 • 639 回帖
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 7 关注
  • 自由行
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    7464 引用 • 33938 回帖 • 197 关注
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    311 引用 • 546 回帖
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    175 引用 • 994 回帖
  • 创业

    你比 99% 的人都优秀么?

    83 引用 • 1398 回帖
  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    406 引用 • 3568 回帖
  • GraphQL

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。

    4 引用 • 3 回帖 • 17 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 196 关注
  • OnlyOffice
    4 引用 • 5 关注
  • 链滴

    链滴是一个记录生活的地方。

    记录生活,连接点滴

    149 引用 • 3772 回帖 • 1 关注
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    148 引用 • 257 回帖
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    4 引用 • 16 回帖
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 5 关注
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    58 引用 • 22 回帖 • 3 关注
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 518 关注
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    927 引用 • 937 回帖 • 2 关注
  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 212 关注
  • 分享

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

    246 引用 • 1786 回帖 • 1 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 13 关注
  • Kotlin

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

    19 引用 • 33 回帖 • 59 关注
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    230 引用 • 1454 回帖
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    5 引用 • 26 回帖 • 514 关注