`
robbin
  • 浏览: 4799231 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
377a9ecd-1ea1-34ac-9530-9daa53bb2a7b
robbin谈管理
浏览量:135743
社区版块
存档分类
最新评论

静态类型语言的优势究竟是什么?

    博客分类:
  • Java
阅读更多
在参与这个讨论的过程中,产生了一个新的话题,很想和大家探讨一下:

http://www.iteye.com/topic/33890

引用
是像Java或者C#这样强类型的准静态语言在实现复杂的业务逻辑、开发大型商业系统、以及那些生命周期很长的应用中也有着非常强的优势


这是一个存在于大家心里常识了。我承认我自己在潜意识里面也觉得静态强类型语言适合开发复杂,大型系统。而弱类型脚本语言不适合开发太复杂,太大型的项目。但是在参与这个讨论过程中,我突然开始置疑这个观点,事实究竟是不是这样的呢?

先定义一下标准:

强类型语言(静态类型语言)是指需要进行变量/对象类型声明的语言,一般情况下需要编译执行。例如C/C++/Java/C#

弱类型语言(动态类型语言)是指不需要进行变量/对象类型声明的语言,一般情况下不需要编译(但也有编译型的)。例如PHP/ASP/Ruby/Python/Perl/ABAP/SQL/JavaScript/Unix Shell等等。

引用
观点一:静态类型语言因为类型强制声明,所以IDE可以做到很好的代码感知能力,因为有IDE的撑腰,所以开发大型系统,复杂系统比较有保障。


对于像Java来说,IDEA/Eclipse确实在代码感知能力上面已经非常强了,这无疑能够增加对大型系统复杂系统的掌控能力。但是除了Java拥有这么强的IDE武器之外,似乎其他语言从来没有这么强的IDE。C#的Visual Studio在GUI开发方面和Wizard方面很强,但是代码感知能力上和Eclipse差的不是一点半点。至于Visual C++根本就是一个编译器而已,羞于提及Visual这个字眼。更不要说那么多C/C++开发人员都是操起vi吭哧吭哧写了几十万行代码呢。特别是像Linux Kernel这种几百万行代码,也就是用vi写出来的阿,够复杂,够大型,够长生命周期的吧。


引用
观点二:静态语言相对比较封闭的特点,使得第三方开发包对代码的侵害性可以降到很低。动态语言在这点上表现的就比较差,我想大家都有过从网上下载某个JS包,然后放到项目代码里发生冲突的经历


也就是说静态类型语言可以保障package的命名空间分割,从而避免命名冲突,代码的良好隔离性。但是这个观点也缺乏说服力。

静态类型语言中C,VB都缺乏良好的命名空间分割,容易产生冲突,但是并没有影响他们做出来的系统就不够大,不够复杂。

而Visual C++开发的DLL版本冲突也是臭名昭著的,似乎C++的命名空间没有给它带来很大的帮助。

而动态类型语言中Ruby/Python/Perl都有比较好的命名空间,特别是Python和Perl,例如CPAN上面的第三方库成吨成吨的,也从来没有听说什么冲突的问题。

诚然像PHP,JavaScript这样缺乏命名空间的动态语言很容易出现问题,但是这似乎是因为他们缺乏OO机制导致的,而不是因为他们动态类型导致的吧?

说到大型系统,复杂业务逻辑系统,Google公司很多东西都是用python开发的,这也证明了动态类型语言并非不能做大型的复杂的系统。其实我个人认为:

动态类型语言,特别是高级动态类型语言,反而能够让人们不需要分心去考虑程序编程问题,而集中精力思考业务逻辑实现,即思考过程即实现过程,用DSL描述问题的过程就是编程的过程,这方面像Unix Shell,ruby,SQL,甚至PHP都是相应领域当之无愧的DSL语言。而显然静态类型语言基本都不满足这个要求。

那静态类型语言的优势究竟是什么呢?我认为就是执行效率非常高。所以但凡需要关注执行性能的地方就得用静态类型语言。其他方面似乎没有什么特别的优势。
分享到:
评论
5 楼 dongbin 2006-11-13  
引用
我感觉类似Java这样的强类型的准静态语言还有一个重要的特点。一旦程序员基本掌握了语法规则和书写规范,写出来的程序的可读性会强很多,因为它本身的限制更多。在一个大型系统中,Team成员之间互相可以知道对方在写什么是非常关键的,这也成为了交流的重要基础。

然而Ruby这样的语言,虽然看上去更加符合“描述问题即解决问题”,但是对于同一段逻辑,同样可以满足要求,写法上却差别很大。我曾经见过用1行写出来的解决数读算法的Ruby解法,谁能看懂?


从何讲Java的可读性?

我更经常见到的是Java程序员屁大点事写几百行,Ruby几行就搞定了。哪一个更好读?

代码量虽然不是全部,但是从一个侧面反映了代码的可读性。
4 楼 JeffreyHsu 2006-11-13  
robbin兄,关于敏捷开发,我需要你的一些建议:

最近我自己有一个网站项目(小型房产网站的部分模块),周期很紧,加上平时工作也较忙,不想采用已经很熟悉的ww+spring(那个开发速度简直是),后来想选用Seam/RoR的,考虑到Seam都是java标准的东西,一是比较熟悉,学习起来可能比较快一点,二来j2ee的东西以后功能和规模扩展肯定没问题,但是发现实际上手进行很不顺利 -- seam/jboss as版本间的不兼容,开发工具也不好用,也没有详细可用的指导,seam的例子按照tutorial很多跑不起来,很是受挫,真没信心短时间内掌握seam并付诸实际开发。
后来看了你的《应用Rails进行敏捷Web开发》中文版书评,很是心动,但现在问题是我对于Ruby / rails一点都不了解,能很快从一点不懂到开发上面所说的站点么,在一个月的时间内?
谢谢robbin.
3 楼 LucasLee 2006-11-13  
downpour 写道

然而Ruby这样的语言,虽然看上去更加符合“描述问题即解决问题”,但是对于同一段逻辑,同样可以满足要求,写法上却差别很大。我曾经见过用1行写出来的解决数读算法的Ruby解法,谁能看懂?


对这一点我也有类似的看法,有人曾经用例子试图说明ruby在写代码时如何短小,经常写在一行,其实逻辑单元都一样多,反而降低了可读性。看上去并不诱人。
2 楼 downpour 2006-11-13  
我感觉类似Java这样的强类型的准静态语言还有一个重要的特点。一旦程序员基本掌握了语法规则和书写规范,写出来的程序的可读性会强很多,因为它本身的限制更多。在一个大型系统中,Team成员之间互相可以知道对方在写什么是非常关键的,这也成为了交流的重要基础。

然而Ruby这样的语言,虽然看上去更加符合“描述问题即解决问题”,但是对于同一段逻辑,同样可以满足要求,写法上却差别很大。我曾经见过用1行写出来的解决数读算法的Ruby解法,谁能看懂?
1 楼 together 2006-11-13  
引用
说到大型系统,复杂业务逻辑系统,Google公司很多东西都是用python开发的,这也证明了动态类型语言并非不能做大型的复杂的系统。其实我个人认为:

动态类型语言,特别是高级动态类型语言,反而能够让人们不需要分心去考虑程序编程问题,而集中精力思考业务逻辑实现,即思考过程即实现过程,用DSL描述问题的过程就是编程的过程,这方面像Unix Shell,ruby,SQL,甚至PHP都是相应领域当之无愧的DSL语言。而显然静态类型语言基本都不满足这个要求。

那静态类型语言的优势究竟是什么呢?我认为就是执行效率非常高。所以但凡需要关注执行性能的地方就得用静态类型语言。其他方面似乎没有什么特别的优势。

嗯,我的一点感觉,动态语言足够灵活,因此虽然它能够让人更集中精力思考业务逻辑的实现,同时也向人工智能的方向走得更近一些,但因此它也更依赖于开发人员本身的技术功底,初学者、中级开发者,难以很好的利用它。

而静态类型语言,与我们计算机教学的基本科目(c/pascal/basic)延续性比较好,所以对于刚毕业的学生而言,更好接受和学习。

因此我觉得还是学习/培训/开发成本占主要因素。

一个不太恰当的例子:javascript的正则表达式,虽然功能强大,但并不易理解和学习。一般只能copy/paste来用。所以很多情况下,还是宁愿手写标准js来处理。

相关推荐

    Kotlin静态类型共享和重用Kotlin静态类型共享和重用Kotlin静态类型共享和重用

    作为一门静态类型语言,Kotlin旨在成为一种用于开发Android应用程序、Web后端、原生应用和跨平台解决方案的通用编程语言。本文将为您介绍Kotlin的特点、优势、应用领域以及如何使用Kotlin进行开发。 一、Kotlin的...

    JetBrains Kotlin ,一种开源的静态类型编程语言,由 JetBrains 和开源贡献者支持和开发

    JetBrains Kotlin ,一种开源的静态类型编程语言,由 JetBrains 和开源贡献者支持和开发,支持多平台编程是 Kotlin 的主要优势之一。它减少了为不同平台编写和维护相同代码所花费的时间 ,同时保留了本机编程的灵活性...

    bryg:一种用于 Java 的静态类型和 JIT 编译的模板语言

    布里格Bryg 是一种用于 JVM 的静态类型和 JIT 编译的模板语言。 它的开发目标如下: 模板应该是直观的。 另一方面,HTML 不是。 我们将冗余量降至最低。 模板应该很快。 虽然我们的编译器不如 Java 的编译器先进,但...

    Kotlin语言教程.docx

    Kotlin 是一种现代的、静态类型的、面向对象的编程语言,由 JetBrains 公司于 2011 年首次发布,并于 2016 年正式推出 1.0 版本。它以其简洁的语法、强大的功能和卓越的互操作性在开发者社区中迅速获得认可,尤其在 ...

    aardio桌面软件开发工具v30.0 支持COM动态静态接口+标准DLL组件.zip

    唯一能同时支持动态类型、静态类型开发的语言。 兼容流行C系语法、Pascal语法,学习成本最低。 可内嵌c语言、汇编、Java、PHP、Javascript、VBS.支持面向对象、Ducking Type、支持中文编程。 支持COM动态、静态接口...

    快手编程集成帮助

    兼具动态、静态语言优势,语法更可兼容大部分流行语言,学习成本低,开发速度快,并永久免费。 面向个人或企业用户,商业或非商业应用,本软件永久免费。 一键发布为绿色软件,生成独立EXE执行文件,适合桌面软件...

    汇编语言还原高级语言demo.zip

    汇编语言是一种低级编程语言,它直接对应于计算机的机器语言,但使用了人类可读的助记符和符号来替代机器语言中的二进制指令和地址。以下是关于汇编语言的详细说明: ### 基本概念与特性 1. **机器相关性**: - *...

    底层编程语言:汇编语言asm.zip

    汇编语言是一种低级编程语言,它直接对应于计算机的机器语言,但使用了人类可读的助记符和符号来替代机器语言中的二进制指令和地址。以下是关于汇编语言的详细说明: ### 基本概念与特性 1. **机器相关性**: - *...

    汇编语言练习《汇编语言》王爽.zip

    汇编语言是一种低级编程语言,它直接对应于计算机的机器语言,但使用了人类可读的助记符和符号来替代机器语言中的二进制指令和地址。以下是关于汇编语言的详细说明: ### 基本概念与特性 1. **机器相关性**: - *...

    七彩效果全行业带产品展示新闻动态企业网站模板下载

    模板类型:普通静态企业展示网站 模板语言:html/css,gbk 文件大小:2M(含数据包) 支持系统:建站宝盒(NiceBox v6.0) 支持页面:包含首页、公司介绍、产品设计展示、留言板、联系我们、设计咨询等多个常见企业...

    汇编语言笔记 参考《汇编语言 第三版》王爽.zip

    汇编语言是一种低级编程语言,它直接对应于计算机的机器语言,但使用了人类可读的助记符和符号来替代机器语言中的二进制指令和地址。以下是关于汇编语言的详细说明: ### 基本概念与特性 1. **机器相关性**: - *...

    汇编语言.zip

    汇编语言是一种低级编程语言,它直接对应于计算机的机器语言,但使用了人类可读的助记符和符号来替代机器语言中的二进制指令和地址。以下是关于汇编语言的详细说明: ### 基本概念与特性 1. **机器相关性**: - *...

    汇编语言作业.zip

    汇编语言是一种低级编程语言,它直接对应于计算机的机器语言,但使用了人类可读的助记符和符号来替代机器语言中的二进制指令和地址。以下是关于汇编语言的详细说明: ### 基本概念与特性 1. **机器相关性**: - *...

    汇编语言程序.zip

    汇编语言是一种低级编程语言,它直接对应于计算机的机器语言,但使用了人类可读的助记符和符号来替代机器语言中的二进制指令和地址。以下是关于汇编语言的详细说明: ### 基本概念与特性 1. **机器相关性**: - *...

    练习汇编语言.zip

    汇编语言是一种低级编程语言,它直接对应于计算机的机器语言,但使用了人类可读的助记符和符号来替代机器语言中的二进制指令和地址。以下是关于汇编语言的详细说明: ### 基本概念与特性 1. **机器相关性**: - *...

    汇编语言学习.zip

    汇编语言是一种低级编程语言,它直接对应于计算机的机器语言,但使用了人类可读的助记符和符号来替代机器语言中的二进制指令和地址。以下是关于汇编语言的详细说明: ### 基本概念与特性 1. **机器相关性**: - *...

    汇编语言初探.zip

    汇编语言是一种低级编程语言,它直接对应于计算机的机器语言,但使用了人类可读的助记符和符号来替代机器语言中的二进制指令和地址。以下是关于汇编语言的详细说明: ### 基本概念与特性 1. **机器相关性**: - *...

    汇编语言实验.zip

    汇编语言是一种低级编程语言,它直接对应于计算机的机器语言,但使用了人类可读的助记符和符号来替代机器语言中的二进制指令和地址。以下是关于汇编语言的详细说明: ### 基本概念与特性 1. **机器相关性**: - *...

    8086汇编语言.zip

    汇编语言是一种低级编程语言,它直接对应于计算机的机器语言,但使用了人类可读的助记符和符号来替代机器语言中的二进制指令和地址。以下是关于汇编语言的详细说明: ### 基本概念与特性 1. **机器相关性**: - *...

    王爽汇编语言.zip

    汇编语言是一种低级编程语言,它直接对应于计算机的机器语言,但使用了人类可读的助记符和符号来替代机器语言中的二进制指令和地址。以下是关于汇编语言的详细说明: ### 基本概念与特性 1. **机器相关性**: - *...

Global site tag (gtag.js) - Google Analytics