说说动态语言(转)-程序员宅基地

技术标签: python  java  ruby  

五一长假之前,我跟好几个开发一线的朋友聊技术的发展,突出的一个感觉是大家都在关注动态语言。有的是使用多年,眼见发展态势不错,大有为自己的先见之明扬眉吐气之感,有的则是刚刚使用,仍处在兴奋不已的状态之中,当然也有仍然保持观望态度的,不过即使是最“保守”的,也能够对动态语言表现出尊重。这与两三年前相比,已经是很大的进步。记得两年前我与Python爱好者tangtao合作策划《程序员》的第一个“动态语言专题”的时候,内内外外都还有不少质疑的声音,用J2EE的挥舞着“企业级”的大棒质疑动态语言的“严肃性”,用ASP.NET则沉醉于拖拖拽拽的GUI构造方式,自以为开发效率老子天下第一,对于动态语言嗤之以鼻。当时我们感到,动态语言在中国的发展时机还不成熟,所以最后给专题起了一个很有些无奈的名字:《动态语言:隔岸观火》。两年之后的现在,是业界的朋友反过来批评我们的杂志和网站对于动态语言的关注过于薄弱,落后于工业实践。惭愧之余,我这个动态语言的一贯拥护者不禁喜从中来:想不到形势会发展得这样快!

从最近得到的印象来看,我大胆地预言,动态语言在中国的大流行,不会是太远的事情了。首先是在Web开发领域PHP的迅速推广,很快应该会在互联网产业(面向公众的Internet应用)中广泛使用动态语言。这是一大类应用,而且是最活跃、增长最迅速的领域。在这个领域中,动态语言与开源系统结合起来,已经取得了巨大的进展,而且肯定还会取得更大的成功。往下是企业应用,这是主战场,相对来说在这个领域传统力量还是相当强大。动态语言在企业应用领域的道路还很比较长,不过机会仍然很大。在往下是PC软件开发领域,在国外,动态语言正在沁入,不过这个领域基本饱和,不太受关注。国内的软件产品开发,规模小,类型单一,影响力更是可怜,不提也罢。总之,几年之内,动态语言一定会像野火一样蔓延开,势不可挡。

我这个看法不仅仅是对于形式发展的总结,也来自于对软件技术发展趋势的认识。节前在CSDN跟gigix和xjy做过一个视频访谈,就谈了这个问题。我们觉得,广泛采用动态语言是互联网和企业迅速变化的现实所决定的一个趋势。

现在的企业应用跟十年前的MIS可是大不一样了,需求不断变化,修改没完没了。而互联网应用呢?在变化的剧烈和频繁方面,与企业应用相比可谓有过之而无不及。这本质上是因为企业在迅速变化,消费者在迅速变化,人们的需求在迅速变化,世界在迅速变化。现在经验比较丰富的企业开发者越来越达成共识,即事先分析企业应用、对抗需求变更,几乎肯定是死路一条,不管你采用什么先进的软件工程方法、建模工具、UML语言,都无法根本解决问题。你所服务的对象自己都天天在变,你怎么可能事先量好人家的需求然后慢吞吞地去添砖加瓦呢?既然无法避免变化,不如适应变化。与其想办法预见变化,不如让自己有能力迅速随需应变,提高自己对变化的反应能力,降低变化带来的成本。

这已经是共识了,问题在于怎么随需应变。分歧就在这里了。今天做ASP.NET、J2EE开发的离不开XML,就是为了“随需应变”,在变更发生时用XML来重新配置系统。以J2EE为例,高水平的J2EE开发者把XML文件越写越复杂,最后根本就就是把XML当成领域语言来用。说白了,就是把J2EE往上扩展成一个面向领域的引擎,再用一层标准化的、薄博的XML来最后的编程,我称之为“强引擎,弱脚本”方案。这样做是有原因的,Java/C#好歹是个编译语言,变更修改重新部署的成本比较大,所以要配合XML使用。但结果怎么样?并不理想。首先系统设计难度还是很大,你还是要设计一个强劲的引擎,设计得不好就带不动XML脚本。而设计这个强劲的引擎还是挺难的,设计错了修改起来还是挺麻烦的,发布以后也难免还要花大力气维护的。这问题没解决多少。

其次,也是我个人最反感的,就是XML的滥用。XML那东西本质上是用来在程序之间进行数据交换用的,是给程序读写的,不是给人读写的。无论从哪个角度来看,XML对人的阅读和创作都是非常不友好的。结果为了配合J2EE,硬是赶鸭子上架,让XML充当DSL,逼程序员去学习读写XML这种非常没有趣味的“语言”,真是不人道。更有甚者,为了使用各种框架、面向各个领域,开发者还很可能要学会多种不同语义的XML方言,而且很多这样的XML方言根本就没有经过设计,是土法炮制出来的。两种截然不同的语言搅和在一个系统里已经够糟了,更糟的是多种土法炮制的XML方言土语一起搅和在系统里,结果搞得各种语义不同的XML就像癌细胞一样在程序里扩散,这样的系统只能用恶心来形容。

总之,这种“强引擎,弱脚本”的方式,我认为是没有前途的。

相反,动态语言解决问题的方式是提供相对小而灵活的引擎,强大的语言机制,极其庞大丰富的可复用模块。你基本上在动态语言的范畴之内搭建整个系统,脚本与核心对象浑然一体,解决问题直截了当,无须转弯抹角,无须看似精妙其实无奈的一大堆架构、模式。动态语言一般实现了数据和程序的统一,基本不需要XML,程序易于变化,任何一处均可随时修改。语言的动态性也赋予你模拟领域语言的便利条件。结果便是,适应变化的能力大大增强,变化成本大大降低。很多以前的不可能将成为可能。

所以我觉得,是变化的世界要求我们使用对变化友好的动态语言。这就是结论。

另外,从程序员的角度来说,使用动态语言编程要比使用传统的编译语言,尤其是编译型面向对象语言轻松自如的多,从而也有趣得多。没有那么多条条框框,没有那么多城府沟壑。比如C++/Java/C#都极力反对用异常作为正常情况下程序跳转的工具,所谓“只在异常情况下使用异常”,说来容易,做起来常大费周章。而Python/Ruby都纵容甚至鼓励你使用异常作为正常程序流控制手段。比如Python中for循环的终止,在内部就是通过引发StopIteration异常实现的。能随意用异常作为流程控制手段,真是能省下不少脑细胞。比如我们平常津津乐道的不少设计模式,在动态语言里根本就是多此一举,一切来得直截了当,根本不用如此拐弯抹角。再比如Ruby可以在一个class被定义并且在系统中已经被应用的情况下,在系统运行时随意修改这个类的定义,Python中只要略施小计也可以做到,这在传统OOP语言中根本不可能。而Ruby在其招牌项目Rails中表现出来的declarative language的能力,也是令人惊羡的。使用这些动态语言,要先解放思想,之后就会有挣脱束缚,放开手脚的感觉。对于程序员来说,这当然是很惬意的。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33910137/article/details/85398309

智能推荐

硬盘S.M.A.R.T技术原理与使用_hard disk s.m.a.r.t需要开启吗-程序员宅基地

文章浏览阅读3.4k次。2008-12-31早在上个世纪九十年代,人们就意识到数据的宝贵性胜于硬盘自身价值,渴望有种技术能对硬盘故障进行预测并实现相对安全的数据保护,因此S.M.A.R.T技术应运而生。目前,虽然大多数硬盘的平均无故障时间(MTBF)已达30000~50000小时以上,然而对于不少用户,特别是商业用户而言,一次普通的硬盘故障便足以造成灾难性后果,所以时至今日,S.M.A.R.T技术仍为我们所用。 一、S.M.A.R.T究竟是什么? S.M.A.R.T的全称为“Self-Monitorin_hard disk s.m.a.r.t需要开启吗

Linux串口驱动(1) - serial层_linux serial-程序员宅基地

文章浏览阅读1.3k次。1. serial 层的初始化以IMX6的串口驱动为例,文件在drivers/tty/serial/imx.c,初始化概述如下:module_init(imx_serial_init) -->uart_register_driver(&imx_reg); -->tty_set_operations(normal, &uart_ops); -->driver->ops = op; -->tty_register_..._linux serial

Mysql区间查询的注意点_mysql check 区间-程序员宅基地

文章浏览阅读7.4k次。1. Description   最近在使用mysql区间查询的时候遇到的一个问题。在此简单记录以下SELECT * from table where 1 < id <100 ;这样查询会返回table表中所有的数据或者空数据,实际上的sql其实是SELECT * from table where 1; SELECT * from table where 0;2..._mysql check 区间

hwpf POI-程序员宅基地

文章浏览阅读214次。样式集StyleSheet styleSheet = hwpfDocument.getStyleSheet();字体集hwpfDocument.getFontTable().getMainFont(0)hwpfDocument.getFontTable().getAltFont(0)Times New RomanTimes New RomanSymbolSy..._poi stylesheet操作hwpf

微信小程序 多选框的使用_微信小程序多选框两列布局-程序员宅基地

文章浏览阅读8.1k次,点赞5次,收藏37次。微信小程序 多选框的使用需求需求![在这里插入图片描述](https://img-blog.csdnimg.cn/20181229092342945.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RzZngwNTE0MzVhZHNs,..._微信小程序多选框两列布局

初投稿:关于Volley请求的乱码处理-程序员宅基地

文章浏览阅读210次。在Volley请求中,我们会遇到通过Volley请求时返回的数据是乱码的,这个问题对于我来说非常地头疼,于是我到网上寻找合适的解决方案。终于发现一个比较简单的解决方法,只需一个方法就可以解决请求乱码了。现在,我就给大家分享一下关于Volley请求返回数据乱码处理,大家可以参考一下。protected Response<String> parseNetworkResponse(Netw...

随便推点

RESTful API 设计规范_40500状态码-程序员宅基地

文章浏览阅读297次。RESTful API 设计规范该仓库整理了目前比较流行的 RESTful api 设计规范,为了方便讨论规范带来的问题及争议,现把该文档托管于 Github,欢迎大家补充!!Table of ContentsRESTful API 设计规范关于「能愿动词」的使用ProtocolAPI Root URLVersioning 在 URL 中嵌入版本编号通过媒体类型来指定..._40500状态码

你所了解的Vim是什么样的,如何打造一款高级的Vim编辑器_vim编辑器长什么样子-程序员宅基地

文章浏览阅读764次。1.1vim简介vim是linux上一个比较实用的文本编辑器,它在代码补全、编译及错误跳转等方便编程的功能上特别丰富,在程序员中被广泛使用。1.2vim使用1.2.1vim安装如果你还没有安装vim可以使用下面命令安装(ubuntu环境安装,如果是centosd的话使用yum)sudo apt-get install vim1.2.2vim编辑器的三种状态vim 编辑器可以简单分为“命令控制模式” 和 “文本编辑模式” 从命令控制模式到 文本编辑:a i o..._vim编辑器长什么样子

正则判断字符串是否为数值(正数、负数、小数)_判断是否数值的正则-程序员宅基地

文章浏览阅读1w次,点赞3次,收藏6次。在用MapReduce进行处理业务时,发现HDFS中的数据有的列为汉字、有的列为字符串、有的列为正数、有的为负数、有的为小数,根据业务要求只有数字参与运算,因此首先清洗数据,用正则提取所有数值:public boolean isNumber(String str){ String reg = "^[-\\+]?([0-9]+\\.?)?[0-9]+$"; ret..._判断是否数值的正则

秦始皇陵-程序员宅基地

文章浏览阅读198次。秦始皇陵 2010年11月30日  风水传说    骊山以它特有的温泉和风景而闻名于世。西周末年的周幽王与爱妾褒姒曾在这里演出了一场兴起烽火戏诸侯的历史悲剧,从而葬送了西周王朝。相传秦始皇生前在骊山与神女相遇,游览当中欲戏神女,神女盛怒之下,朝他脸上唾了一口,秦始皇很快就长了一身的烂疮。虽然这是一个神话故事,但隐隐约约可以看出秦始皇与骊山似乎有些缘分。他的墓地也选在骊山之旁。秦始皇..._秦始皇陵背山面水左右各是什么

【vscode】vscode中文支持设置_如何让vscode支持注释中文-程序员宅基地

文章浏览阅读209次。1)打开vscode工具;2)使用快捷键组合【Ctrl+Shift+p】,在搜索框中输入“configure display language”,点击确定后;3)修改locale.json文件下的属性“locale”为“zh-CN”;4)重启vscode工具;如果重启后vscode菜单等仍然是英文显示,在商店查看已安装的插件,把中文插件重新安装一遍(如下图),然后在重启工具。在上图中商..._如何让vscode支持注释中文

STM8学习笔记---串口uart1_stm8串口发送字符串-程序员宅基地

文章浏览阅读1.4w次,点赞3次,收藏14次。使用uart1串口,需要用到stm8s_uart1.c和stm8s_uart1.h两个文件1、建立工程目录结构如下:2、编写uart.h文件如下:#ifndef __UART_H#define __UART_H#include "stm8s.h"#include "stm8s_clk.h"void USART_Configuration(void); //串口配置函数void UART_sen..._stm8串口发送字符串