God of the code – Virtual Machine(代码的上帝 - 虚拟机)
2012-08-09 10:50
495 查看
Java的Virtual Machine也许不是第一个也不是最好的一个,但似乎是Java的流行使得Virtual Machine(以下简称VM)开始大行其道。有很多主流的高级编程语言都是采用这种形态,如Perl、Python和Ruby等。甚至有些语言开始跨VM移植,例如在JVM和.NET(当然.NET不是严格意义上的VM)平台上都开始支持Python。
最近发现,我似乎对于VM的意义低估了。我一直以来只是肤浅地把VM当做一个解释执行的环境而已,甚至无端地有点歧视,觉得解释执行的玩意不如编译后执行的高贵,莫非这是源于对C语言的偏爱?直到我开始深入地理解和研究Python的时候,终于发现和感悟了VM的意义:God of the code。VM就是代码的上帝、天神,VM无所不知、无所不能,而借助VM神力的编程者似乎也有了超越以往的神通,变得半人半仙起来。
为什么这样说?我们试着回想一下,在C/C++/Pascal这类编译型的语言中,你所能作的事情就是编写类、方法/函数,编译后交给CPU去玩转,千万次地重复入栈出栈的游戏。在每个函数里,你能够看到的是全局变量、静态变量、参数、返回值等等。那么,在VM形态的语言中你能看到什么呢?在Java中,利用Reflection机制,你可以知道任意对象所属的类,他的属性和方法。在Python中,更加登峰造极,除了知道任意对象的类、方法、属性外,你可以一路追查到是谁在调用你以及谁在调用调用你的人(呵呵,有点绕嘴了),可以把整个调用堆栈翻个遍。发现了不同没有?作为编程者的你,开始有权知晓代码运行背后的机制和元数据,例如堆栈里的内容。那些原来只有编译器在编译期才知道的奥秘,你可以在运行期轻易地拿来把玩。Woo!突然之间你成了代码的主宰者,你就是它的上帝。这绝对是VM带来的革命性的改变。
其实,在编译型语言领域,就多多少少产生过类似的需要,只是苦于一直没有有效手段。也许引入非常底层的汇编可以奏效,但这种屠龙之技几乎没有几个人能够掌握,并且非常不通用。现在,站在VM大神的肩膀上,编程者变得法力无边,他成功地穿过了一层无形的厚障壁,从台前进入幕后,开始全面掌控代码的一切。这种吸引力绝对是无法抗拒的。
在可预见的未来,VM将统治更大范围的领域和程序员群体,因为他非常彻底地满足了作为人类的程序员的控制欲,尽管,有点狐假虎威的味道。^_^
相关文章推荐
- The target assembly contains no service types. You may need to adjust the Code Access Security policy of this assembly." 目标程序集不包含服务类型。可能需要调整此程序集的代码访问安全策略。
- 一个用UpdateLayeredWindow实现窗体半透明的delphi的代码-The realization of a form with translucent UpdateLayeredWindow code delphi
- 代码的规范化:《Refactoring: Improving the Design of Existing Code》
- 重构-改善既有代码的设计Refactoring - Improving the Design of Existing Code
- 笔记-重构-改善既有代码的设计(Refactoring - Improving the Design of Existing Code)
- Viewing the interface of your Swift code,查看Swift代码的头文件的三种方法
- 在执行一行代码之前CLR做的68件事[The 68 things the CLR does before executing a single line of your code]
- How to get the source code of the chromium of the specified revision
- HDU 4150 Powerful Incantation / Codeforces 625B - War of the Corporations
- An error occurred at line: 307 in the generated java file The code of method _jspService (HttpServle
- Fix The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 b
- Codeforces Round #377 (Div. 2) Cormen --- The Best Friend Of a Man
- Where-To-Put-The-Auto-Layout-Code(AutoLayout代码应该放在哪里?)
- the code of 4sum
- #112 – Navigating the Visual Tree in Code(在后台代码中导航可视树)
- 20 issues of porting C++ code on the 64-bit platform
- 《Code:The Hidden Language Of Computer Hardware and Software》 ——笔记
- Intel Code Challenge Final Round Xor-matic Number of the Graph -- 线性基
- Question 25: For the code snippet below, which of the following statements provide the correct order of constructor calls when o
- codechef_Home » Compete » January Challenge 2013 » The Minimum Number Of Moves