写点什么

语言是如何影响框架设计的?

  • 2008-02-25
  • 本文字数:1205 字

    阅读完需:约 4 分钟

是 Ruby 语言使得 Rails 这样高生产力的框架如此容易使用吗?是 Java 语言的特性阻碍了高生产力框架的创建吗?Frank Sommers 写道,框架是开发人员生产力背后的核心驱动力,而且他对是不是某些语言的土壤可以生长出优秀的框架而有些语言却不能这个问题进行了一番研究。他的帖子引起了大规模争论,其中有针对闭包是否会引出更好的Java 框架的相关讨论。

Sommers 参考了 Cay Horstmann 将 Java 的样板式语法和它缺少“合适的Web 框架”视为遗憾的帖子。Sommers 拿Java 和Ruby 进行对比后说到,Ruby 的代码很优雅整洁,容易学习,写一个典型的Rails 应用也用不着像Java 需要那么多的代码。Rails 利用了Ruby 的元对象协议和模块系统来把开发人员隔离于众多复杂性之外。

Sommers 还拿 Flex 和 ActionScript 与 Rails 和 Ruby 进行了对比:

在 Flex 身后的是 ActionScript 3 语言。它是逐渐成型的 EcmaScript 4 规范的一个版本,它合并了 Java 语法中最丑陋的部分和 JavaScript 最离奇孤僻的一些特性。ActionScript 3 试图在一锅汤里面同时加入动态型别和静态型别这两味主菜,此外还有函数式编程和面向对象编程。这锅汤已经没法喝了,看一眼都会让人眼花缭乱、头晕目眩。 但是 Flex 的设计者把这些复杂性都隐藏起来了——就像 Rails 一样——Flex 应用只是由一些简短的 ActionScript 代码片段、小段函数,与一个基于 XML 的 UI 布局语言混合而成。学习 Flex 比学习 ActionScript 3 高级特性的难度低多了,不过要掌握 Flex 框架如何实现某些关键性功能也绝非易事。

Flex 和 Rails 都选择了它们所尊崇的语言中相对容易掌握的某些方面,而且在它们的设计意图中也在强烈建议开发者使用这些特性。这正是每一个框架都应该做的。

Sommers 随后讨论了可扩展性语言的设计思想。Java 的可扩展性很强,但是处理小问题却不是那么得心应手。Ruby 的可扩展性也许不是那么好,但 Rails 为 Ruby 完成了这一切。Sommers 认为 Scala 具有优秀的伸缩性,或许可以在它的基础上创建出简单的框架。

在这场讨论之外,Bruce Tate曾经撰文介绍过 Seaside ——一个拥有可与 Rails 的生产力相媲美的基于 Smalltalk 的 Web 应用框架:

我并不是说在未来 10 年里我们都将使用 Smalltalk 编程。那列靠站的火车已经锈痕斑斑。不过我认为如果有足够吸引人的经济利益驱动的话,语言的问题就会消失得无影无踪。给我一个用凌乱无序荆棘丛生的语言编写的应用,要是它能比流行语言所写的应用快上 5 倍,还容易维护,我每天所消耗的时间精力也能减少 2/3,我才不去管你用的是哪门子语言呢。

Appcelerator 这个 Web 框架走了一条不一样的路。它是与语言无关的,为 Java、Ruby、PHP、.NET 和 Python 都提供了 SDK。

也许 Tim Berners-Lee 的最小能力原则(Rule of Least Power)是人们应该记住的:“在适合用来表示万维网中的信息、约束或是程序的语言中,请使用功能最少的那一个”。

查看英文原文 How Does Language Impact Framework Design?

2008-02-25 04:361194
用户头像

发布了 197 篇内容, 共 63.7 次阅读, 收获喜欢 21 次。

关注

评论

发布
暂无评论
发现更多内容

实时语音如何过质量关?

cv君

深度学习 算法 音视频 引航计划

Impala架构剖析

大数据技术指南

大数据 5月日更

DDD这样落地

码农戏码

DDD

带你认识时域、频域与Android系统Visualizer

Changing Lin

音视频 5月日更

后悔:要是当初那样就好了

石云升

思维方式 5月日更 后悔 人生选择

面试被问 Spring cloud 上下文,可以这样回答

Damon

spring SpringCloud 5月日更

想要做网页游戏怎么办 ?PixiJs 篇(四)

空城机

JavaScript 大前端 游戏 pixi 5月日更

高耦合:为何代码一直被绑架?

Jxin

10年后,区块链的世界将会变成什么样子?

CECBC

架构实战训练营 - 模块四课后作业

Johnny

架构实战营

Android 音视频采集那些事

LoveYFan

音视频

大数据中的工作流调度

五分钟学大数据

大数据 5月日更

学会这12个Java开发框架轻松拿到30K+

北游学Java

Java spring Netty mybatis 框架

架构师实战营 模块四总结

代廉洁

架构实战营

领域驱动设计101 - 实体

luojiahu

领域驱动设计 DDD

架构实战营 - 模块 4- 作业

泄矢的呼啦圈

架构实战营

《Redis入门指南(第 2 版)》读后感

codists

redis

行车数据上链,国产汽车很上道

CECBC

项目管理学习到的教训

胡迪伦

项目管理

利用Nginx流量镜像,优雅的接入waf

运维研习社

nginx WEB安全 waf 5月日更

架构师实战营 模块四作业(设计千万级学生管理系统的考试试卷存储方案)

代廉洁

架构实战营

架构训练营模块4作业

Geek_649372

架构训练营

线性表,栈,队列,数组草图

鲁米

这5个浏览器工具,让你的上网舒适度提升150%

彭宏豪95

效率 工具 浏览器 脚本 5月日更

架构师实战营 模块四作业(设计千万级学生管理系统的考试试卷存储方案)

代廉洁

架构实战营

架構實戰營 - 模塊 4 作業

Frank Yang

架构实战营

【LeetCode】数组中两个数的最大异或值Java题解

Albert

算法 LeetCode 5月日更

从 Netflix 到 Alibaba,Spring Cloud 更好了吗?

博文视点Broadview

Redis - 列表

旺仔大菜包

redis

架构实战营 - 模块 4- 作业

请弄脏我的身体

架构实战营

没有发生GC也进入了安全点?这段关于安全点的JVM源码有点意思!

CoderW

Java 源码分析 JVM GC

语言是如何影响框架设计的?_Ruby on Rails_Michael Bushe_InfoQ精选文章