ios开发 解释器和编译器

儿子和女儿——解释器和编译器的区别与联系

  菜鸟经常将编译器和解释器弄混淆,无奈之下,于是向高手请教。

  高手说:

  解释器是一条一条的解释执行源语言。比如php,postscritp,javascript就是典型的解释性语言。  

  编译器是把源代码整个编译成目标代码,执行时不在需要编译器,直接在支持目标代码的平台上运行,这样执行效率比解释执行快很多。比如C语言代码被编译成二进制代码(exe程序),在windows平台上执行。

  菜鸟说:“我还是不明白,能给个形象的比喻么?”

  高手说:“给你讲个故事。”

  母亲打电话给儿子说:“你爸最近身体不好,家里人少不热闹”。

儿子想,对啊,爸年纪大了,身体不好,买点牦牛骨髓壮骨粉不错,于是儿子就去超市买了牦牛骨髓壮骨粉。

  儿子又想啊,最近黄金搭档很火,买点给爸试试。于是儿子又去买了黄金搭档。

  从超市回来后,儿子又寻思母亲说的“家里不热闹”,嗯,家里的小皇帝自从上寄宿学校后就比较少回来,估计是老人家想孙子了。儿子于是给上高中的儿子打了个电话,让他周末回来看看。

  

  母亲打电话给女儿说:“你爸最近身体不好,家里人少不热闹”。

  女儿就想,应该给爸做点什么呢?于是她拿出张纸开始罗列条目,先写上了壮骨粉和黄金搭档。然后,想着让老人家看看外孙应该不错,于是就在纸上加上了一句,一家人回爸妈那里看望看望。最后纸上就写着:

  1.壮骨粉和黄金搭档

  2.一家人去看望爸妈

女儿见到女婿后,就将这张纸上的信息编成短信发给了工作的女婿。

  女婿一看就明白了,下班后先去超市买了补品,然后开车回家带着妻儿就去看望岳父岳母了。

想到什么了吗?

  菜鸟说:

  我这样说不知道对不对:儿子就像是解释器,是想到一点做一点。女儿就像编译器,女婿就像平台,女儿听完后,在纸上罗列出所有要做的事情,女婿就按着指示办事了。

  高手说:

  就是这样的。儿子对于母亲的话是一条一条执行,女儿是将母亲的话整个翻译成平台能理解的目标语言--短信,整个由女婿直接执行。后者的执行效率会更高。

  从功能上看,解释器和编译器确实不一样。

  然而,从流程和结构上看,二者却非常相似。

  儿子和女儿听到母亲的话以后,都是从两个方面来思考:老人的身体和老人对小辈的思念。以此为据,儿子和女儿都做出了自己的决定。只不过一个直接去做了,另一个却将所要做的事情翻译成另一种载体--短信--给存储起来。

解释器和编译器也是如此,读入源语言后,解释器和编译器都要进行词法分析、语法分析和语义分析,之后,二者开始有所分别。解释器在语义分析后选择了直接执行语句;编译器在语义分析后选择将将语义存储成某一种中间语言,之后通过不同的后端翻译成不同的机器语言(可执行程序)。如下图所示:

  总之,解析器和编译器它们在功能上是不一样的,然而从结构上看却有诸多相同,而且在开发时也并没有本质上的差别,这也是很多人将二者混淆的原因之一。究竟是开发解析器还是编译器?只需要依据功能上的实际需要来做出决定就ok了。

时间: 2024-10-30 16:10:50

ios开发 解释器和编译器的相关文章

【转】iOS开发------使用Xcode编译器定位抛出异常的位置 -- 不错不错!!!

原文网址:http://blog.csdn.net/runintolove/article/details/51297734 虽然Objective-C对异常进行了封装,但日常敲代码的时候,往往会因为马虎,代码段出现了一点小小的错误,自己却发现不了.当然,很多时候,Xcode就会直接报错(也就是俗话说的崩了)告诉我们,这个时候只要根据报出的异常堆栈,就可以找到错误的具体位置. 可是有一种情况,相信大家肯定遇到过,程序不崩或者崩了但是没有告诉我们异常堆栈,但错误原因告诉我们了: *** First

[iOS开发]开启/关闭编译器警告

全局开启/关闭 “Build Settings” -> “Apple LLVM - Warnings”中选择需要开启/关闭的警告 “Build Settings” -> “Apple LLVM - Custom Compiler Flags”中添加标识,开启标识为-W...,关闭标识为-Wno... -Wall 并不是所有警告.这一个警告组开启的是编译器开发者对于“你所写的代码中有问题”这一命题有着很高的自信的那些警告.要是在这一组设定下你的代码出现了警告,那基本上就是你的代码真的存在严重问题

iOS开发核心语言Objetive C —— 编译器指令@[email protected]自定义构造方法及类工厂

本分享是面向有意向从事iOS开发的伙伴们,或者已经从事了iOS的开发者.如果您对iOS开发有极高的兴趣,可以与我一起探讨iOS开发,一起学习,共同进步.如果您是零基础,建议您先翻阅我之前分享的iOS开发分分钟搞定C语言系列,然后在开始Objective C语言的学习,如果您遇到问题也可以与我探讨,另外将无偿分享自己整理的大概400G iOS学习视频及学习资料,都是干货哦!可以新浪微博私信?关注极客James,期待与您的共同学习和探讨!!由于时间有限,每天在工作之余整理的学习分享,难免有不足之处,

iOS开发——面试篇&OC基本语法总结(面试)

OC基本语法总结(面试) C和OC对比 OC中主要开发在什么平台上的应用程序? 答:可以使用OC开发Mac OS X平台和iOS平台的应用程序 OC中新增关键字大部分是以什么开头? 答:OC中新增关键字大部分是以@开头 OC中新增加了那些数据类型? 答: Block类型 指针类型(Class, id类型) 空类型 特殊类型(SEL, nil) 面向对象特性是什么? 答:继承性,封装性,多态性 import和#include有什么区别? 答:import 的功能和 include一样, 是将右边的

iOS开发中多线程基础

耗时操作演练 代码演练 编写耗时方法 - (void)longOperation { for (int i = 0; i < 10000; ++i) { NSLog(@"%@ %d", [NSThread currentThread], i); } } 直接调用耗时方法 // 1> 直接调用耗时方法 [self longOperation]; 运行測试效果 在后台运行耗时方法 // 2> 在后台运行耗时方法 [self performSelectorInBackgro

iOS开发 - 多线程实现方案之Pthread篇

pthread基础 pthread是POSIX thread的简写,一套通用的多线程API,适用于Unix.Linux.Windows等系统,跨平台.可移植,使用难度大,C语言框架,线程生命周期由程序员管理,百度百科上有详细的介绍,去查看,由于iOS开发几乎用不到,以下就简单运用pthread开启一个子线程,用来处理耗时操作 pthread创建子线程步骤 1.导入头文件 #import <pthread.h> 2.pthread创建子线程 - (void)viewDidLoad { [supe

iOS开发基础笔试题(3)

前言 以下部分题目来源于网络,笔者在此处收集起来,既是要巩固自我,也希望能够帮助到同样需要的人!参考答案均为笔者所写,其有疑问或者出错之处,请在评论中提出,谢谢!不喜勿喷! 1.即时聊天App不会采用的网络传输方式 1 2 3 4 5 6 A UDP B TCP C HTTP D FTP 参考答案:D FTP:是文件传输协议,是File Transfer Protocol的简称,它的作用是用于控制互联网上文件的双向传输,因此一定不会是即时聊天使用的: UDP:是面向无连接的传输层协议,数据传输是

iOS开发-KVO的奥秘

iOS开发-KVO的奥秘 字数2933 阅读3842 评论28 喜欢57 序言 在iOS开发中,苹果提供了许多机制给我们进行回调.KVO(key-value-observing)是一种十分有趣的回调机制,在某个对象注册监听者后,在被监听的对象发生改变时,对象会发送一个通知给监听者,以便监听者执行回调操作.最常见的KVO运用是监听scrollView的contentOffset属性,来完成用户滚动时动态改变某些控件的属性实现效果,包括渐变导航栏.下拉刷新控件等效果. 渐变导航栏 使用 KVO的使用

IOS开发--数据持久化篇文件存储(二)

前言:个人觉得开发人员最大的悲哀莫过于懂得使用却不明白其中的原理.在代码之前我觉得还是有必要简单阐述下相关的一些知识点. 因为文章或深或浅总有适合的人群.若有朋友发现了其中不正确的观点还望多多指出,不胜感激. 承接上篇博客我们来看看IOS开发中是如何将一个自定义的对象进行归档的 本篇博客将介绍以下几个方面的内容 1)普通的单个对象归档操作 2)拥有继承关系的对象归档 3)同时将多个对象进行归档 1.普通的单个对象归档操作 首先我们来看下最简单的单个对象归档操作 1.自定义一个跟小明一样有名的类(