Changkun's Blog欧长坤的博客

Science and art, life in between.科学与艺术,生活在其间。

  • Home首页
  • Ideas想法
  • Posts文章
  • Tags标签
  • Bio关于
  • TOC目录
  • Overview概览
Changkun Ou

Changkun Ou

Human-AI interaction researcher, engineer, and writer.人机交互研究者、工程师、写作者。

Bridging HCI, AI, and systems programming. Building intelligent human-in-the-loop optimization systems. Informed by psychology, sociology, cognitive science, and philosophy.连接人机交互、AI 与系统编程。构建智能的人在环优化系统。融合心理学、社会学、认知科学与哲学。

Science and art, life in between.科学与艺术,生活在其间。

276 Blogs博客
165 Tags标签
Changkun's Blog欧长坤的博客

谈谈对编程语言的一般性认识

Published at发布于:: 2014-03-22   |   Reading阅读:: 1 min   |   PV/UV: /

前段时间做了个无聊的事情,算了算我大概学会使用了多少门编程语言,最后的结果是:十二门。(C, C++, Objective-C, Mathematica, Maple, Linux Shell, Java, Matlab, Lua, Python, assembly, R.)

然而细细一想又觉得很不靠谱,因为真正我自己觉得可能算是精通的的语言只有两门:Mathematica(我把它简称为MM) 和 Objective-C(我把它简称为OC)。

OC学起来很快,它和C++、Java这些面向对象的语言十分类似,不过,差距也显得比较突兀,我自己的学习顺序是:C -> C++ -> Java -> OC,好在我在学习OC之前对Java有了一个较为全面的了解,加之对C++一些肤浅的理解,算是稍微理解了一些OC的范式与模板了。

OC采用的是一种叫做“Messaging Structure”而非"Function Calling"的机制。我们可以对比一下下面的代码:

1
2
3
// Function Calling (c++)
Person *person = new Person;
person->walk(parameter1, parameter2);
1
2
3
#pragma mark Messaging Structure (oc)
Person *person = [Person new];
[person walkWith:parameter1 and:parameter2];

他们一个比较本质的区别在于,使用Messaging Structure的语言,运行时所应执行的代码是由运行环境决定的,而使用函数调用的语言,则是由编译器决定的。如果调用的函数是多态的,那么运行时就需要一种叫做“Virtual Table”的机制来检查到底应该执行哪个寒素实现。采用消息结构的语言,不论是否多态,总是在运行时才会去查找所需执行的方法。其实,编译器都不会去关心接受消息的对象是什么类型。接受消息的对象问题也需要再运行时处理,其实这样的一个过程就是我们所熟知的“Dynamic Binding”。

OC的重要工作都是由运行期组件而非编译器完成的。举个例子,运行期组件里面含有全套内存管理的方法,运行期组件本质上就是一种与开发者所编代码相链接的一个所谓的"Dynamic Library",其代码能把开发者编写的所有程序粘合起来。这样的话,只要更新相应的运行期组件,马上就可以获得性能的提升,而那些很多工作都是处于编译期完成的语言(比如C++),想要获得类似的性能提升,就需要重新编译了。

下面配一张动态绑定这一特性,c++的OOP和其他语言的OOP的态度。

#C# #Objective-C# #C++#
  • Author:作者: Changkun Ou
  • Link:链接: https://changkun.de/blog/posts/%E8%B0%88%E8%B0%88%E5%AF%B9%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80%E7%9A%84%E4%B8%80%E8%88%AC%E6%80%A7%E8%AE%A4%E8%AF%86/
  • All articles in this blog are licensed under本博客所有文章均采用 CC BY-NC-ND 4.0 unless stating additionally.许可协议,除非另有声明。
Python QuickStart
写 App & 与打砖块:无尽版

Have thoughts on this?有想法?

I'd love to hear from you — questions, corrections, disagreements, or anything else.欢迎来信交流——问题、勘误、不同看法,或任何想说的。

hi@changkun.de
© 2008 - 2026 Changkun Ou. All rights reserved.保留所有权利。 | PV/UV: /
0%