zoukankan      html  css  js  c++  java
  • c语言 程序与系统关系 dark语言的演进

    单文件代码:
    源代码 是符号,他只是地址的映射。最初 所有代码都在一个文件里,在编译的时候 首先需要将源代码翻译成机器语言,这包括两个步骤:
    1:源代码语义转换,即将人类语言转换为机器语言,将字母符号转化为数字符号
    2:在上一个步骤中,只是将字母符号翻译成数字符号而已,之所以翻译成数字符号 是因为计算机可以看的懂,及计算机可以区分这些符号,下面就是给符号加上真正的地址,因为符号本身是没有意义的,只有在他的背后 存在值的时候 才具有意义。
    通过上面两个步骤,我们的代码 就可以被计算机运行起来,因为我们的代码变成了二进制,同时这些二进制 中又明确的将数据保存在了内存中,同时明确的告诉了计算机如何运算,同时又调用了系统库 进行控制台输出。因为在链接的时候 实际上 将系统库调用这个符号 给赋予了真正的意义,即计算机本社已经包含了系统库,只不过存在其他的地方,链接只不过是将符号引入 改为引入真正的系统库地址,因为系统库后面连接着系统,这样我们就完成了系统调用。

    多文件模块:
    随着代码的增多,势必需要将代码分在多个文件中,每个文件中都有方法和变量,那么文件之间是如何互相使用到对方的方法和变量呢?这和系统库引入类似,都是在完成机器码转换后,在链接过程中 完成地址添加。

    程序的本质:
    程序的本质 就是编写算法,通过系统引入参数,然后输出参数,在这里,输入输出是系统库提供的能力,算法本身由cpu执行。所以我们的程序除了系统调用与所在系统有关,其他的都没有关系。

    系统是如何运行程序的:
    安装:程序安装只不过是将编译生成的可执行文件拷贝到系统目录里,顺带将依赖库拷贝到系统目录里,有的时候 设置一下注册表,安装前后 实际上没有什么不同。
    启动:启动是指,用户点击了快捷图标,告诉系统 想要启动某个应用,于是系统将数据从硬盘拷贝到内存,然后执行程序入口文件。程序入口文件 因为依赖了很多扩展包,所以可以实现 图形绘制,网络请求,后台监听等多种功能。
    运行:操作系统为了可以运行多个程序,于是发明了进程的概念,对于程序而言,进程环境就是计算机,因为它提供了计算机环境的一切,但是实际上这些都是假的,例如,内存只是虚拟内存,cpu也不是时刻都被运行的,但是即使如此,程序本身并不知道。当启动的时候,系统会为程序提供一个进程,相当于为程序提供了一个子计算机,让程序运行。

    动态链接库:
    程序在打包的时候 会将标准库也打包进项目中,而标准库本质上 是可以单独拿出来放到系统中的,这样既减少了程序的体积,也有助于降低程序运行时候的内存,这就是动态连接库。

    运行时:
    运行时是动态链接库的升级版,运行时 的目的是屏蔽底层不同系统之间的差异,同时顺便做到了其他的事情,比如 程序公用的部分 都可以放到运行时里面去,但是运行时和动态链接库 都有一个缺点就是需要用户提前安装到系统中。

    AOT:运行前编译,性能更好
    JIT:即时编译,借助于虚拟机实现跨平台

    dark语言的策略:
    dark语言可以针对不同平台进行打包,这有点类似于c++, 同时提供JIT模式 方便开发
    https://cloud.tencent.com/developer/article/1637321

    v8引擎的策略:
    v8引擎 采用JIT模式,但是做了许多优化


    GUI本质:
    cpu负责给出界面数据结构图,gpu负责将数据结构图绘制成界面,然后将界面放到帧缓冲区中,显示器从帧缓冲区获取到界面后 就会显示。

    skia:
    skia是一个独立于系统的第三方图形绘制库,skia生成图形数据后,将数据直接交给gpu。

    框架与平台:
    平台是指汇聚多个开发者在一起,针对某一个生活领域的数字化解决方案来构建生态。
    框架是指 针对某个场景开发出一个完备的解决方案,使得开发人员通过使用这个解决方案 可以很方便的进行开发,而不需要考虑其他事情,例如:
    vue react使得前端人员专注于业务开发,而不需要关注界面绘制,
    jvm虚拟机 使得开发人员只需要关注编写程序,而在不同系统的适配问题 由jvm负责
    node使得开发人员只需要关注开发,而在不同系统的兼容问题 则由node负责
    .net framework使得开发人员只需要关注开发,其他的关于 适配系统,适配屏幕等所有的事情 都交给框架去完成
    操作系统甚至也是一个框架,他让程序只需要放心运行即可,至于底层硬件的兼容 则交给系统去解决
    编译器也可以理解为一个框架,它使得开发人员只需要使用编程语言去写即可,剩下的如何让机器执行 ,交给编译器去处理
    flutter也是一个框架,它使得开发人员只需要专注于一套代码,剩下的在不同系统之间的问题 由flutter解决

    flutter原理:
    fluter利用skia的跨平台性,实现了GUI的跨平台,选择dark语言而不是js语言实现了 运行层面性能的提升。
    1:开发人员使用dark语言和数据绑定的方式构建出应用程序
    2:flutter在监听到数据的改变后,会根据双向绑定的原理 重新绘制出界面数据
    3:flutter将数据交给skia
    4:skia将flutter给出的数据 改为GPU可以看懂的格式
    5:GPU拿到数据后,生成界面,交给帧缓冲区
    6:显示器从帧缓冲区拿到界面后,开始显示

    1:开发人员希望调用系统API
    2:使用flutter提供的管道机制可以与原生进行通信
    3:开发人员在原生测写出调用api的方法
    4:开发人员在flutter测使用管道机制 去调用原生测写好的方法


    1:开发人员希望访问文件
    2:由flutter提供 文件API

    1:开发人员希望进行网络请求
    2:flutter通过在底层监听原生的数据变动,实时的数据拿到程序中

    程序的本质:
    抽象化业务逻辑,以数理逻辑的方式描述出来,并使用系统调用与系统融合一体。

  • 相关阅读:
    Atitit. visual studio vs2003 vs2005 vs2008  VS2010 vs2012 vs2015新特性 新功能.doc
    Atitit. C#.net clr 2.0  4.0新特性
    Atitit. C#.net clr 2.0  4.0新特性
    Atitit.通过null 参数 反射  动态反推方法调用
    Atitit.通过null 参数 反射  动态反推方法调用
    Atitit..net clr il指令集 以及指令分类  与指令详细说明
    Atitit..net clr il指令集 以及指令分类  与指令详细说明
    Atitit.变量的定义 获取 储存 物理结构 基本类型简化 隐式转换 类型推导 与底层原理 attilaxDSL
    Atitit.变量的定义 获取 储存 物理结构 基本类型简化 隐式转换 类型推导 与底层原理 attilaxDSL
    Atitit.跨语言反射api 兼容性提升与增强 java c#。Net  php  js
  • 原文地址:https://www.cnblogs.com/mrzhu/p/13574278.html
Copyright © 2011-2022 走看看