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

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

    博客分类:
  • 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来处理。

相关推荐

    弱类型语言允许将一块内存看做多种类型

    - **C 和 C++**:尽管 C 和 C++ 被认为是静态类型语言,但在某些情况下它们表现出了弱类型行为。例如,可以直接将整型变量与字符变量相加,而无需显式类型转换。 - **Perl 和 PHP**:这两种语言都是典型的弱类型语言...

    国内首个实现纯浏览器内编译、执行全链路的自研静态类型的编译型通用编程语言 为 WebAssembly 而生的通用编程语言

    静态类型语言要求在编译时声明变量类型,这有助于防止运行时类型错误,提高代码的稳定性和性能。 3. **浏览器内的编译和执行**:在浏览器内完成编译和执行可以减少对服务器的依赖,提高用户体验,因为用户无需等待...

    cpp-Ravi编程语言是Lua53的一个衍生有限的可选静态类型

    Ravi编程语言是一种基于Lua 5.3的衍生语言,其设计目的是在保留Lua的简洁性和易用性的同时,引入了有限的可选静态类型。这使得Ravi在某些方面比纯动态类型的Lua更适合大型项目或性能敏感的应用,因为静态类型可以...

    通用首页静态化工具-可以把首页转化为静态页面

    在IT行业中,静态页面与动态页面是两种常见的网页类型。静态页面是由HTML、CSS和JavaScript等静态文件组成的,内容在服务器端创建后直接发送到客户端,而动态页面则是在用户请求时由服务器端的脚本(如PHP、ASP、JSP...

    Python-Pyre是Facebook推出Python的静态类型检查工具

    **什么是静态类型检查?** 静态类型检查是在程序执行前进行的一种分析,它通过检查源代码中的类型声明来发现潜在的类型错误。与动态类型检查(Python默认的类型检查方式)不同,动态类型检查是在运行时进行的,这...

    cpp-Empirical是用于时间序列分析的一种语言拥有静态类型的Dataframe

    cpp-Empirical是一种专门针对时间序列分析的语言,它在C++的基础上构建,提供了静态类型的DataFrame数据结构。这个框架的设计目标是为科学家、工程师和分析师提供一个高效且易于使用的工具,以便处理和理解时间相关...

    Kotlin编程语言,一种开源的静态类型编程语言,从入门到精通

    Kotlin编程语言,作为近年来备受关注的开源静态类型编程语言,已经在软件开发领域崭露头角。它由著名软件公司JetBrains发起,并且得到了全球开发者社区的广泛支持和贡献。Kotlin的设计理念旨在提高开发效率,降低...

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

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

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

    - **静态类型**:作为一种静态类型语言,Kotlin在编译阶段就进行了严格的类型检查,这有助于早期发现错误并提高代码质量。 - **类型推断**:Kotlin能够根据上下文自动推断变量的类型,这减少了显式类型声明的需求...

    各种语言比较

    这个主题通常涉及广泛,包括静态类型语言和动态类型语言的对比,编译型语言与解释型语言的区别,以及各自在性能、开发效率、可维护性等方面的表现。 描述中的“NULL”表明没有提供具体的描述,但我们可以从常见的...

    基于Java平台的多语言混合编程.pdf

    Java平台的多语言混合编程是指在Java虚拟机(JVM)上运行多种语言,包括静态类型语言和动态类型语言、命令式语言和声明式语言等。这种混合编程方式可以充分发挥Java平台的优势,实现跨平台、跨语言的开发。 Java...

    自动生成静态页面

    静态页面生成通常分为两种类型:预渲染(Prerendering)和按需生成(On-Demand Generation)。 1. 预渲染:在项目构建阶段,静态页面生成器会遍历所有路由,根据模板和数据生成对应的HTML文件。这些文件会被上传到...

    后台ASP生成前台静态网页

    在IT行业中,动态网站与静态网站是两种常见的网页类型。动态网站主要依赖服务器端脚本,如ASP(Active Server Pages),来实时生成内容并交互,而静态网站则是预先编译好的HTML页面,直接由浏览器解释执行。后台ASP...

    C++安装注意事项需要考虑三点,C++和Python语言相比的优势在哪里?.docx

    Python的语法较为宽松,支持动态类型,而C++则采用了静态类型系统,要求开发者在编写代码时明确指定类型。 2. **应用领域**:Python因其简单易学和丰富的库支持,在数据科学、机器学习、Web开发等领域受到欢迎。而...

    Atom-linter-mypy,lint python的atom linter插件可选静态类型,如pep 484中所定义.zip

    4. **静态类型检查**:与动态类型语言不同,静态类型检查是在程序运行前进行的。通过这种方式,可以在代码执行前发现类型错误,避免运行时出错。Python本身是动态类型的,但PEP 484引入了对静态类型的支持,使得...

    30编程范式游记(3)- 类型系统和泛型的本质1

    静态类型语言(如C++、Java)在编译时就确定了变量的类型,这种强制性类型检查可以在早期发现错误,提高代码安全性,并为编译器优化提供信息。相反,动态类型语言(如Python、JavaScript)在运行时才确定变量类型,...

    旅游网站静态模板

    一、静态页面的优势 1. **快速加载**:静态页面的内容在用户请求时不需要通过服务器处理,直接由浏览器解析,这使得页面加载速度更快,对于旅行者来说,快速获取信息是非常关键的。 2. **低维护成本**:静态页面的...

    java和go相比有什么优势和劣势?

    4. 静态类型:Go 是静态类型的,这在编译时就能发现类型错误,提高了代码的可靠性。 5. 简洁明了:Go 语言的语法简洁,易于学习和使用,减少了理解成本。 然而,Go 语言也有其不足: 1. 生态系统不成熟:相比于 ...

    静态(static)方法的继承和重写

    在Java编程语言中,静态方法是一种特殊类型的方法,它与类相关联,而不是与类的实例相关联。静态方法在类加载时就会被加载到内存中,因此它们可以在没有创建对象的情况下被调用。静态方法的继承和重写是面向对象编程...

    图片展示静态模板

    在IT行业中,静态页面是一种常见的网页设计类型,它主要用于创建简单、快速加载且内容不需频繁更新的网站。"图片展示静态模板"标题暗示我们这里关注的是一个专门用于展示图片的静态网页模板,这种模板通常包含精心...

Global site tag (gtag.js) - Google Analytics