写点什么

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

  • 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:36725
用户头像

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

关注

评论

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

千锋小狮视觉“未来设计师就业实战训练营”圆满收官,2周年庆即将开启!

千锋IT教育

远程办公提高效率的工具:在线协作文档

Baklib

效率 效率工具 协作文档

满足客户需求,提高客户体验:在线产品手册

Baklib

产品 推广 客户 客户体验 在线产品手册

APICloud AVM 框架 纵向滚动通知栏组件

YonBuilder低代码开发平台

SAP | abap基本语法规则

暮春零贰

SAP abap 10月月更

企业团队知识如何管理?来试试这个办法!

Baklib

效率 效率工具 知识管理 团队

【GOF】三种工厂模式~

游坦之

设计模式 java 编程 10月月更

【Vue】Axios详解

游坦之

前端 axios vue2 10月月更

细说js变量、作用域和垃圾回收

hellocoder2029

JavaScript

浅谈理想中的业务开发模式

久歌

架构 开发 技术架构 服务编排

彻底搞懂JS原型与原型链

hellocoder2029

JavaScript

制造业转型加速密钥——低代码开发平台

力软低代码开发平台

华为王泽锋:协作创新、开源的魅力所在

科技热闻

前端页面之“回流重绘”

CoderBin

CSS html 面试 前端 10月月更

从0到1实现一套CICD流程之CD

okokabcd

后端

odejs+Redis实现简易消息队列

coder2028

node.js

Nodejs相关ORM框架分析

coder2028

node.js

研发流程管理中,如何实现项目管理与代码信息的协同?

LigaAI

研发管理 解决方案 #GitLab LigaAI 企业号十月PK榜

模块二作业

知足🐏

设计模式之桥接模式

游坦之

设计模式 java 编程 10月月更

java的可变参数

TimeFriends

设计模式之建造者模式

游坦之

设计模式 java 编程 10月月更

数字化时代,企业知识管理软件应该怎么选

Baklib

知识管理 企业知识管理工具 知识管理系统

AIGC时代到来?聊聊其中最出圈的语言模型GPT-3

Baihai IDP

AI NLP 大模型 AIGC GPT-3

细说Js中的this

hellocoder2029

JavaScript

BizWorks助力企业应用的高效开发与复用

阿里云E2企业云服务

阿里云 开发者 云原生 低代码

Java 19中新推出的虚拟线程到底是怎么回事儿?

Hollis

Java

推荐有礼 | 京东云推荐返利活动说明

京东科技开发者

京东云 云推客 代理商 分销 渠道

【从0到1学算法】7.直接插入排序

Geek_65222d

10月月更

【Vue】悬浮窗和聚焦登录组件经验总结

游坦之

前端 vue2 10月月更

朋友圈架构设计

Jack

架构实战训练营9期

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