• 编程语言的思考


    工作几年,先后接触c/c++,python,lua,dart,JavaScript,java各种语言,记录下对于一个编程语言的理解

    对一个编程语言的理解,应该关注两个方面

    一、语言特性

    语言特性由编译器具体实现,具体包括:

    1. 强类型vs弱类型

    强类型就是类型很硬,不太接受转换

    比如c++就是强类型,不同类型转换需要各种cast

    JavaScript就是弱类型,一个变量,一会数字,一会字符串,一会对象都没问题

    2. 静态类型vs动态类型

    静态类型:程序运行前确定变量类型,需事先声明或者由编译器推导

    动态类型,程序运行时才进行类型绑定和检查

    3. 静态语言vs动态语言

    程序在运行时可以更改代码结构,比如JavaScript随时给一个对象添加成员或者添加函数

    4. 值类型vs引用数据类型

    JavaScript中除了基本数据类型外,其他都是引用类型,所以变量赋值后其实指向的是同一对象

    总结:变量声明时是否需要指定类型->静态类型vs动态类型

    声明后的类型能否相互转换->强类型vs弱类型

    程序运行时,能否改变对象内部结构->动态语言vs静态语言

    但,所有这些都不算数,对于dart语言

    既可以编译成二进制,AOT,又可以解释运行

    变量声明既可以指定类型,也可以dynamic声明不指定类型

    不支持反射,所以是静态语言

    类型不可随意转换,是强类型语言

    二、运行环境

    运行环境就是runtime,包括虚拟机或者真实的操作系统,需要注意的有

    1. 编译运行vs解释执行

    编译型:源代码->编译器->可执行代码

    解释型:解释器读取源代码,编译,然后运行。

    区别仅仅是源代码翻译成目标代码的时机不同。

    c/c++是编译型,各源文件编译成obj,后经过连接器链接为可执行文件,后操作系统加载执行

    js,python是解释型,先编译为字节码,后由虚拟机加载执行。

    要注意编译单位:c/c++是以文件为单位,nodejs和python同样,但网页中js是以代码块(<script>分割)独立翻译,执行,但各代码块共享变量

    2. 异步编程模型

    nodejs是单线程异步模型,异步模型导致回调地狱问题,后出现await,async,以同步编程方式来编写异步代码。更好维护

    3. 垃圾回收

    只管使用,不用操心内存释放。

    越高级语言,开发者越不需要关心底层,c/c++,不需要关心汇编指令,但是需要负责内存的申请和释放,而java,js,dart等现代化语言,开发者不需要关心内存问题,这是语言发展的必然。

    个人理解,希望有大神可以纠正或补充。

  • 相关阅读:
    同一电脑登录多个github账号
    如何用HAProxy+Nginx实现负载均衡
    Windows10下 tensorflow-gpu 配置
    机器学习数据处理时label错位对未来数据做预测
    机器学习经典模型简单使用及归一化(标准化)影响
    学机器学习,不会数据处理怎么行?—— 二、Pandas详解
    版本控制系统 git 之基础讲解
    学机器学习,不会数据处理怎么行?—— 一、NumPy详解
    Reinforcement Learning 的那点事——强化学习(一)
    读研 or 工作?对计算机类专业学习的看法
  • 原文地址:https://www.cnblogs.com/zhaiyunyun/p/12004744.html
Copyright © 2020-2023  润新知