弱类型语言与强类型语言的区别呢?不要以 开发效率,规范,定义(一个加数据类型,一个不加),学习容易度,等 众所周知的区别讨论。可以从其它方面展开讨论 比如:1 变量内存分配上2 变量内存使用上3 定义变量速度上4 存在安全问题上5 整体的性能上6 编译时的速度上(以上六点 仅 用于 举例!!)

2010-11-18 06:17:23

6 Answers

使用了很久的C/C++这种的强类型语言了,感觉弱类型语言有一个地方是比较好的:内存管理使用自动垃圾回收。按我的经验来说,用C/C++开发程序出现的问题估计至少有一半是指针使用方法,内存方法操作,内存和资源泄漏。垃圾回收机制帮程序员解决了这个很大的问题,在这样的语言中,没有指针类型,不用考虑内存的分配与释放,开发的压力就减少了很大一部分。

2010-11-18 10:01:09

弱类型使用简单,更灵活多变。对于程序员来讲这是个优点。
像c/c++应该是强类型吧,类型转换的时候非常严格,这跟语言特点有关系,
c/c++是直接操纵内存,容易出内存越界和泄漏的问题。在类型的转换方面
是很多约束,甚至强制转换也要很谨慎,一不小心就出大问题。
比如c++提倡用xxx_cast之类的转换操作,避免c类型的强制转换。
弱类型语言一般都会牺牲一些运行性能,不过简单好用,而且相对安全。
其实两种类型对应的语言本身其他的差异已经很大了,整个区别还是比较明显的。

2010-11-18 11:55:28

我在老李的基础上补充下。主要从使用角度

与函数相关

类型数据脱离不了函数的存在, 强类型的语言(例如C++) 解决同一个函数支持多类型的方法是重载和模板,但是都是在编译前进行处理的。弱类型的就没有这个问题,入口参数想怎么传就怎么传,返回值想怎么给就怎给。 根据这点,有时候很怀疑弱类型语言干嘛还要搞面向对象。

动态类型鉴别

动态类型语言比较难绕开的一个是动态类型鉴别,弱类型也只是在创建的时候弱类型,语言还是会提供比较完善的类型鉴别机制让开发人员使用。

2010-11-18 13:15:21

弱类型语言允许将一块内存看做多种类型。比如直接将整型变量与字符变量相加。C and C++ 是静态语言,也是弱类型语言;Perl and PHP 是动态语言,但也是弱类型语言。

强类型语言在没有强制类型转化前,不允许两种不同类型的变量相互操作。Java、C# 和 Python 等都是强类型语言。

使用哪种语言还是要按需而定。编写简单小应用,使用弱类型语言可节省很多代码量,有更高的开发效率。而对于构建大型项目,使用强类型语言可能会比使用弱类型更加规范可靠。

2010-11-18 14:59:18

强类型定义语言
一种总是强制类型定义的语言。Java和Python是强制类型定义的。如果你有一个整数,如果不显示地进行转换,你不能将其视为一个字符串
弱类型定义语言
一种类型可以被忽略的语言,与强类型定义相反。VBScript是弱类型定义的。在VBScript中,可以将字符串 '12' 和整数 3 进行连接得到字符串 '123',然后可以把它看成整数 123,而不需要显示转换。

强类型语言编译质量更好,执行速度更快,但代码臃肿、死板。弱类型语言开发更敏捷,自由度更高,但效率略低。反正我感觉就是弱语言好多任务都交给了解释器执行,肯定要付出相应的代价,但是方便了程序员和开发。

弱类型,可以不停一直用一个变量名, 多壮观~~

2010-11-18 15:44:14

弱类型语言内存布局上一般是个Union结构,并且要包含一个类型字段,因为计算机底层还是要知道明确的类型信息。

因为包含类型信息,所以在代码的上下文中,可能会进行隐含的类型转换,比如把字符串转整型,整型转字符串,这样会稍损性能,并且可能会不符合程序本意。

弱类型语言都是脚本语言,在运行时确定值,所以跟编译不相关。

我的经验是弱类型在大项目开发上,还是不方便,需要在整个框架结构上做规范,否则多人合作开发比较麻烦。

2010-11-18 08:38:25
您不能回答该问题或者回答已经关闭!

相关文章推荐

  • C#中using指令的几种用法

    using + 命名空间名字,这样可以在程序中直接用命令空间中的类型,而不必指定类型的详细命名空间,类似于Java的import,这个功能也是最常用的,几乎每个cs的程序都会用到

  • C#实例解析适配器设计模式

    将一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够一起工作

  • C#开发高性能Log Help类设计开发

    项目中要在操作数据库的异常处理中加入写Log日志,对于商业上有要求,写log时对其它操作尽可能影响小,不能因为加入log导致耗时太多

  • 使用托管C++粘合C#和C++代码(二)

    本文实现一下C++代码调用C#代码的过程。我构造一个简单并且直观的例子:通过C++ UI 触发C# UI.

  • Async和Await使异步编程更简单

    C#5.0中async和await两个关键字,这两个关键字简化了异步编程,之所以简化了,还是因为编译器给我们做了更多的工作

  • C#开发中的反射机制

    反射的定义:审查元数据并收集关于它的类型信息的能力。元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等

  • C#运行时相互关系

    C#运行时相互关系,包括运行时类型、对象、线程栈和托管堆之间的相互关系,静态方法、实例方法和虚方法的区别等等

  • C#协变和逆变

    “协变”是指能够使用与原始指定的派生类型相比,派生程度更大的类型,“逆变”则是指能够使用派生程度更小的类型

  • C#基础概念之延迟加载

    延迟加载(lazy load)是Hibernate3关联关系对象默认的加载方式,延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作

  • C#中的索引器的简单理解和用法

    C#中的类成员可以是任意类型,包括数组和集合。当一个类包含了数组和集合成员时,索引器将大大简化对数组或集合成员的存取操作

  • 使用托管C++粘合C#和C++代码(一)

    C#在xml读写,数据库操纵,界面构造等很多方面性能卓越;C++的效率高,是底层开发的必备武器

  • 深入C# 序列化(Serialize)、反序列化(Deserialize)

    C#中的序列化和反序列化,序列化是.NET运行时环境用来支持用户定义类型的流化的机制