当前位置: 首页 > news >正文

脚本语言和编译语言的区别 什么是解释器? 什么是编译器 ?解释器和编译器有什么区别?

我一直没搞明白什么是脚本语言 

网上的解释有一大段 看都看不懂 感觉说的都不是人话

其实就是解释器和编译器的区别。

当然这里就要衍生出来个 非常经典的问题

什么是解释器 什么是编译器?

首先 解释器和编译器都是翻译官

计算机只能识别1和0 这样二进制的数字

你编程的时候是不是都写的英文比如while循环 for循环

那你觉得系统能识别吗 肯定不能啊

所以要翻译

翻译有两种,一种是编译,另外一种是解释。两种方式之间的区别在于翻译的时间点不同。编译器以解释方式运行的时候,也称之为解释器。

解释性语言又叫脚本语言 python javascript

编译性语言 c,c++ 二者最大的不同 你从感知上来讲 其实最明显的就是  编程难度和规范

还有就是跨平台性

运行的速度

其他你也感知不出来

编译性语言 比如 现在你写了三行语言

#include<iostream>

using namespace std;

int main()

{
int a=0;

int b=0;

int c=a+b;

cout<<c<<endl;

}

那么如果是编译性语言  那他会一次性把这些你写的 永久打包生成exe可执行文件 但只能在这个win系统上运行 然后你每次想用 点一下这个exe就行了 但是你要是换成mac系统 他还能继续运行吗? 不行了 你要换一个编译器 重新编译 重新打包成mac格式的可执行文件 每次想用再重新点

编译型语言不能跨平台表现在两个方面:

1) 可执行程序不能跨平台

可执行程序不能跨平台很容易理解,因为不同操作系统对可执行文件的内部结构有着截然不同的要求,彼此之间也不能兼容。不能跨平台是天经地义,能跨平台反而才是奇葩。

比如,你不能将 Windows 下的可执行程序拿到 Linux 下使用,也不能将 Linux 下的可执行程序拿到 macOS 下使用(虽然它们都是类 Unix 系统)。

注意:相同操作系统的不同版本之间也不一定兼容,比如不能将 x64 程序(Windows 64 位程序)拿到 x86 平台上(Windows 32 位平台)运行。但反之一般可行,因为 64 位 Windows 对 32 位程序做了很好的兼容性处理。

2) 源代码不能跨平台

不同平台支持的函数、类型、变量等都可能不同,基于某个平台编写的源代码一般不能拿到另一个平台直接运行。下面以C语言为例进行说明。

【实例1】在C语言中,要想让程序暂停,我们可以使用“睡眠”函数。在 Windows 平台下该函数是 Sleep() ,并以毫秒为时间单位,而在 Linux 平台下则是 sleep(), 以秒为单位。可以看出,首先两个函数的首字母大小写不同,再者 Sleep() 的参数是毫秒,而 sleep() 的参数是秒,单位也不一样。

以上两个原因导致具有暂停功能的C语言程序不能跨平台,除非在代码层面对平台的兼容性做出处理,但这非常麻烦。

【实例2】虽然不同平台的C语言都支持 long 类型,但不同平台下 long 类型所占用的字节长度却不相同。例如 Windows 64 位平台下的 long 占用 4 个字节,Linux 64 位平台下的 long 却占用 8 个字节。

如果在 Linux 64 位平台下编写代码时,将 8 字节的值赋值给 long 类型的变量,这是完全没有问题的,但如果是在 Windows 平台下就会导致数值溢出,让程序产生错误的运行结果。

但是如果上面是解释性语言 ,那他会一行一行的运行。而且 比如你今天运行完了 电脑关机了 你第二天起来 又想运行 他又要重新从第一行开始 一行一行地运行。 

但是 同样的代码 你在win上可以运行 在mac上怎么办呢 你要安装mac的解释器 源代码需要修改吗 不需要修改 然后又可以用了 

部分参考编译型语言和解释型语言的区别Python 是一门解释型的编程语言,因此它具有解释型语言的运行机制。 计算机程序,其实就是一组计算机指令集,能真正驱动机器运行的是机器指令,但让普通开发者直接编写机器指令是http://c.biancheng.net/view/4136.html

相关文章:

  • volatile的作用是什么
  • Linux的shell脚本爬虫实战之图片爬取
  • 浏览器缓存顺序
  • LeetCode高频题:子串权值定义为,最长有效括号子序列的长度,请你返回字符串s的所有子串权值的和是多少
  • 使用Python,dlib进行对象实时追踪
  • Pytorch量化感知训练
  • 设计模式——迭代器模式
  • STM32F407的时钟
  • Opencv形态学——腐蚀、膨胀、开运算与闭运算、梯度运算、礼帽、黑帽
  • [Django开源学习 1]django-vue-admin
  • JavaEE初阶:网络编程套接字
  • JAVA猎才学员成长心得分享
  • 2022年0903我的SpringBoot框架入门的第一个程序
  • 【高阶数据结构】并查集的实现(含压缩路径)及其应用-C++版本
  • Java——线程不安全的原因(图解)
  • Angular 2 DI - IoC DI - 1
  • flask接收请求并推入栈
  • Java的Interrupt与线程中断
  • Laravel核心解读--Facades
  • Next.js之基础概念(二)
  • React-Native - 收藏集 - 掘金
  • Shadow DOM 内部构造及如何构建独立组件
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • 百度小程序遇到的问题
  • 大主子表关联的性能优化方法
  • 手机端车牌号码键盘的vue组件
  • 突破自己的技术思维
  • 一、python与pycharm的安装
  • 用mpvue开发微信小程序
  • 正则与JS中的正则
  • UI设计初学者应该如何入门?
  • 移动端高清、多屏适配方案
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (六)vue-router+UI组件库
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET MVC第三章、三种传值方式
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET建议使用的大小写命名原则
  • .NET应用架构设计:原则、模式与实践 目录预览
  • .NET中 MVC 工厂模式浅析
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • /run/containerd/containerd.sock connect: connection refused
  • ?
  • [20171101]rman to destination.txt
  • [ACTF2020 新生赛]Upload 1
  • [AutoSar]BSW_OS 01 priority ceiling protocol(PCP)
  • [BZOJ3211]:花神游历各国(小清新线段树)
  • [bzoj4240] 有趣的家庭菜园
  • [CERC2017]Cumulative Code
  • [Firefly-Linux] RK3568 pca9555芯片驱动详解
  • [HUBUCTF 2022 新生赛]
  • [Java基础] Java中List.remove报错UnsupportedOperationException
  • [jQuery]div滚动条回到最底部