编程语言的独特特征

时间:2010-11-20 06:15:30

标签: programming-languages syntax

除了每种语言的语法(例如print v.echo)之外,要注意区分编程语言的一些关键特征是什么?

作为编程的初学者,我仍然对每种编程语言的优点和缺点感到困惑,以及如何将它们区分为常见本机函数的别名。我认为基于一组独特的特征来分类语言要容易得多,例如: OOP诉。功能。

8 个答案:

答案 0 :(得分:6)

有很多东西可以定义PL,这里我列出一些:

  • 是程序性的,OO,势在必行吗?
  • 是否具有强类型检查(C#,C ++,Delphi)或动态(PHP,Pythong,JS)
  • 如何处理引用? (它是否隐藏了像C#这样的指针?)
  • 是否需要运行时(C#,Java)或它是操作系统的本机(C,C ++)
  • 它是否支持线程(例如E.g Eiffel需要额外的库)

还有其他人可能喜欢垃圾收集器,处理params等等.Eiffel语言有一个有趣的功能,即契约设计,我还没有看到任何其他语言(我认为C#4.0有它现在),但如果使用得当它可能非常有用。

我建议你看看Bertrand Meyer的工作,以深入了解PL的工作方式和定义它们的方法。另一个可以定义PL的东西是与系统的交互级别,这就是低级语言和高级语言之间的区别。

希望我能帮忙

答案 1 :(得分:4)

在域(命令性,功能性,连接性,术语重写)中,有时最好查看是否存在任何特定功能集。例如,对于主流命令。

  1. 首阶函数
  2. 闭包
  3. 内置类,原型继承或工具包(例如:C ++,Self / JavaScript,Lua / Perl)
  4. 复杂数据类型(超过数组)
  5. 内置并发原语
  6. 期货
  7. 传递值,按名称传递,按引用传递或其组合
  8. 是否收集了垃圾?什么样的?
  9. 基于事件
  10. 基于接口的类型,基于类的类型或无用户类型(Go,Java,Lua)

答案 2 :(得分:0)

您可以考虑以下内容:

  • 你能打电话给函数吗?
  • 您可以将功能传递给其他功能吗?
  • 你能创造新功能吗? (在C中,您可以将函数指针传递给函数,但不能创建新函数)
  • 您可以创建新的数据类型吗?
  • 您是否可以使用对其进行操作的功能创建新的数据类型? (“OO”语言的典型基础)
  • 您是否可以执行编译时不可用的代码(可能使用eval函数)?
  • 编译时必须知道所有类型吗?
  • 是否在运行时提供类型?

答案 3 :(得分:0)

低级高级语言之间的区别。 (即使“低”和“高”是相对术语。)

高级语言将使用抽象来隐藏低级语言将向用户公开的细节。例如,在Matlab或Python中,您可以在单个命令中初始化N维数组。在C或汇编中不是这样。

答案 4 :(得分:0)

恕我直言,语言的力量取决于你可以用它做多少事情;你实现目标的速度和速度有多快。

语言的弱点是您在尝试实现目标时遇到的约束(各种类型)的总和。

答案 5 :(得分:0)

编程语言可能支持许多功能。此外,这些功能并不总是相互排斥。例如,OCaml和F#都是功能性的和面向对象的。此外,在这里编写一个语言可以支持的所有范例列表都是详尽无遗的,但是有一本书Programming Language Pragmatics可以全面地处理编程语言中的许多范例。

但是,对我而言,使用某种语言时我需要知道的重要事项如下:

  • 是动态还是静态类型
  • 它是一种打字语言,如果打字是强还是弱?
  • 是垃圾收集
  • 它是支持按值传递还是通过引用语义或两者传递?
  • 它是否支持一阶函数(即函数可以被视为变量)
  • 是否面向对象
  • 多态性。它是参数化的还是临时的。
  • 类型系统的表现力如何(即我可以创建非泄漏的抽象)
  • 重载方法
  • 泛型(模板)
  • 异常处理。

答案 6 :(得分:0)

一般评论:许多这种分类方案并不全面,也不是那么好。链接主要在维基百科。所以要注意。

答案 7 :(得分:0)

您可以考虑其他特征,例如:

  • 强与弱,静态与动态打字,支持通用打字
  • 如何处理内存(它是抽象的还是你可以直接控制你的数据,通过ref传递vs传递值)
  • 编译vs解释与一点点
  • 可用的用户定义类型的形式......类,结构,元组,列表等。
  • 线程设施是内置的还是您需要转向外部库
  • 生成编码的工具...... C ++模板元编程是本
  • 的一种形式
  • 对于OOP,单对多继承,接口,匿名/内部类等。
  • 语言是否是多范式(即C#及其对函数式编程的支持)
  • 反思的可用性
  • 语言的冗长或'语法糖'的数量......例如在迭代向量时,C ++非常冗长。当匿名内部类用于事件处理时,Java非常简洁。 Python的列表推导可以节省大量的输入。