首页 > 试题广场 >

从运行层面上来看,从四个选项选出不同的一个( )

[单选题]
从运行层面上来看,从四个选项选出不同的一个( )
  • JAVA
  • Python
  • objectC
  • C#
推荐
答案:B
A,C,D都是类C语言,B不是
Python是解释执行的,其他语言都需要先编译
编辑于 2015-01-10 21:12:50 回复(26)
作者:rainoftime
链接:https://www.zhihu.com/question/19918532/answer/21647195
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

类型系统的一些概念,众说纷纭,使用上也比较乱。有些东西,甚至不好严格定义。以下算学术界的一种相对“严格”的说法。


1. 先定义一些基础概念

Program Errors

  • trapped errors。导致程序终止执行,如除0,Java中数组越界访问
  • untrapped errors。 出错后继续执行,但可能出现任意行为。如C里的缓冲区溢出、Jump到错误地址

Forbidden Behaviours

语言设计时,可以定义一组forbidden behaviors. 它必须包括所有untrapped errors, 但可能包含trapped errors.


Well behaved、ill behaved

  • well behaved: 如果程序执行不可能出现forbidden behaviors, 则为well behaved
  • ill behaved: 否则为ill behaved...

2. 有了上面的概念,再讨论强、弱类型,静态、动态类型

强、弱类型

  • 强类型strongly typed: 如果一种语言的所有程序都是well behaved——即不可能出现forbidden behaviors,则该语言为strongly typed。
  • 弱类型weakly typed: 否则为weakly typed。比如C语言的缓冲区溢出,属于trapped errors,即属于forbidden behaviors..故C是弱类型
前面的人也说了,弱类型语言,类型检查更不严格,如偏向于容忍隐式类型转换。譬如说C语言的int可以变成double。 这样的结果是:容易产生forbidden behaviours,所以是弱类型的

动态、静态类型

  • 静态类型 statically: 如果在编译时拒绝ill behaved程序,则是statically typed;
  • 动态类型dynamiclly: 如果在运行时拒绝ill behaviors, 则是dynamiclly typed。
3. 误区
大家觉得C语言要写int a, int b之类的,Python不用写(可以直接写a, b),所以C是静态,Python是动态。这么理解是不够准确的。譬如Ocaml是静态类型的,但是也可以不用明确地写出来。。
Ocaml是静态隐式类型
静态类型可以分为两种:
  • 如果类型是语言语法的一部分,在是explicitly typed显式类型;
  • 如果类型通过编译时推导,是implicity typed隐式类型, 比如ML和Haskell

4.下面是些例子
无类型: 汇编
弱类型、静态类型 : C/C++
弱类型、动态类型检查: Perl/PHP
强类型、静态类型检查 :Java/C#
强类型、动态类型检查 :Python, Scheme
静态显式类型 :Java/C
静态隐式类型 :Ocaml, Haskell



编辑于 2017-11-02 16:01:12 回复(0)
c 不需要运行时虚拟机
发表于 2015-04-02 23:54:09 回复(3)
java是解释型语言好不好,只不过解释的不是源码而是字节码,不要乱解释好吗
发表于 2015-09-04 17:26:20 回复(4)
abd都有虚拟机,我选c
发表于 2016-10-10 15:53:44 回复(1)
脚本语言( JavaScript Python 等,是弱类型语言)介于 HTML C , C++ ,Java, C# (强类型语言)等编程语言之间:
编辑于 2015-09-11 16:45:59 回复(0)
JAVA、objectC、C#为编译型语言。
python为脚本语言。

发表于 2016-02-06 16:02:42 回复(7)
真要说运行层面,C才是正确答案。 java是先编译后解析执行的语言 python是直解析语言 c#也是 这三者运行都依赖各自的虚拟机解析执行 只有objectC是类c的语言,不需要虚拟机
发表于 2018-05-06 19:50:08 回复(0)
解释型或者编译型已经不足以划分现代编程语言了 这种题没什么可出的 

可以看看大神的解释 rednaxelafx.iteye.com/blog/492667
发表于 2017-07-10 00:30:10 回复(0)
这个问题不够严谨,JAVA可以说既是编译又是解释;所以最好把JAVA换成C。
发表于 2021-01-07 18:36:19 回复(0)
Python是解释执行,其他三个都是需要先编译再执行。
发表于 2019-09-18 20:19:28 回复(0)
选项里面只有python是属于动态语言,动态语言就是:使用的时候再定义变量都可以,但是其他三项是静态语言,使用前,变量都是要先定义、声明的
发表于 2019-02-22 20:00:44 回复(0)
需要虚拟机或解释器的语言:java,python,c#
编译后直接可交付操作系统运行的:objectC

需要编译一下才可以执行的语言:编译型语言(c、cpp、objectC),虚拟机语言(java系、.net系)
解释器直接解释运行的:js系、Python
发表于 2018-11-22 11:22:12 回复(0)
Python,和javascript一样都是解释性语言,不需要经过编译生成obj文件,代码解析顺序从上到下。
Java,C++,C#,Oc等都是编译性语言,代码需要经过编译生成obj、class文件等。
发表于 2018-08-12 18:29:05 回复(0)
Python是在编译前不执行,编译时才执行,属于解释执行的语言,脚本语言
发表于 2017-09-26 16:16:37 回复(0)
不了解什么叫运行层面
发表于 2017-09-19 22:28:41 回复(0)
python是脚本语言
发表于 2017-01-05 21:43:44 回复(0)
最典型的 javascript 使用的变量或对象都不需要 new,包含 python, js在内的弱类型语言都是直接解释执行的,不需要编译。  
发表于 2016-12-05 17:04:06 回复(0)
Python为弱类型语言,其他都为强类型
发表于 2016-10-09 13:11:16 回复(4)
Python解释执行
发表于 2016-06-08 10:13:54 回复(0)
Python  只有它是动态语言
动态语言的定义:动态编程语言     高级程序设计语言   的一个类别,在计算机科学领域已被广泛应用。它是一类   运行时可以改变其结构的语言   :例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。动态语言目前非常具有活力。众所周知的   ECMAScript     JavaScript   )便是一个动态语言,除此之外如   PHP     Ruby     Python   等也都属于动态语言,而   C     C++   等语言则不属于动态语言。----来自 维基百科

http://www.tuicool.com/articles/mQfAz2
编辑于 2016-08-17 12:27:29 回复(4)