Vico Bill< 刘 利 波 > 的个人网站

记录关于学习、工作中的技术点滴

C,C++,Rust,Ruby爱好者;热衷于游戏开发、任务自动化与跨平台;沉迷于游戏引擎与图形表现;深信'简单、多元'哲学的力量。


访问主页

编程语言-编程语言特性

编程语言选取

当你选择一个编程语言时,选择的是它的生态圈。

当一款新编程语言不能给你带来新的思想时,它毫无用处。

  • 候选者:

    编程语言 特点
    C 静态。简单,快速,包含指针,基本宏,内存自管理。原始的模块(文件包含)
    C++ 静态。C基础上,添加面向对象,模板,lambda,类型推导。
    Rust 类型推导,lambda,模板,契约式,模式匹配,迭代,模块。
    Go 静态。类型推导,lambda,契约式,模式匹配,迭代,模块(包),异步(channel)。垃圾回收。
    Ruby 动态。类型推导,lambda,代码块,面向对象,类开闭,模块。完善的类型系统。垃圾回收。
    Lua 动态。简单,类型推导,lambda,原始模块,迭代。垃圾回收。
    Python 动态。简单,类型推导,完善的类型系统,模块,迭代,lambda,多返回值。垃圾回收。
    Swift 动静结合。类型推导,完善的类型系统。模块。迭代。lambda,多返回值。契约式。模式匹配。垃圾回收。
  • 类型:

    • 提供类型推导和自省。
      • is 判断是否是某类型
      • as 转换成某类型
      • let 类型推导关键字
    • 提供基本数据结构:tuple,array,hashmap,
    • 基本数据结构字面量构建:
      • (),[],{},
      • 0x,0,0b,1_000_000,”ABC”,’A’
  • 函数,与数据是同等重要的。

    • lambda
      • (arg1,arg2) => {}
      • 闭包。能绑定及捕获参数作用域
    • 多返回值
      • 能对多返回值进行解包
    • 块:编写DSL
    • 异步执行
    • 让权
    • 函数别名
  • 控制结构:

    • 模式匹配
    • 迭代:对容器对象进行迭代
      • for .. in ..
      • arr.each x {dowith(x)}
      • arr.each {x => dowith(x)}
  • 面向对象:

    • 开闭。类都是可打开的,可以扩展功能,以实现更定制化的功能。
      • class Array{}
      • fn Array.classExtMethod() {}
      • fn arr.instanceExtMethod{}
    • 单继承 + 混合
    • 协议/契约式
  • 模块化:

    • 模块定义
      1. 通过显式的module关键字
      2. 通过文件系统,文件结构与文件名
    • 模块导入
      1. import 关键字,导入模块
      2. 通过文件系统,文件结构与文件名
最近的文章

编程语言-特性术语

鸭子类型:只要能响应此消息,那它就归于此类。trait:可提供完整方法定义来定义行为,但不携带状态。protocol/interface:通过方法签名定义多个行为。有时interface和trait互称。mixin:不表示is-a-type-of关系的多重继承。用于添加行为到多个类。提供完整方法定义并可携带状态。delegation:委托,指在另一原对象(发送者)环境下,对某对象(接收者)成员(属性或方法)求值。// 1. 组合方式class A { void foo();}clas...…

继续阅读
更早的文章

编程语言-C

翻译阶段 以实现定义方式,映射源文件的单独字节,为源字符集的字符。特别是以换行字符替代依赖OS的行尾指示符。以对应的单字节表示替换三标符。 删除行尾反斜杠和换行符 以空格字符替换注释;并分析语法。 执行预处理器。#include语句所引入的每个文件都经历上面4各过程,递归执行。此阶段结束,从源码移除所有预处理器指令。 将字符常量和字符串字面量所有字符及转义字符,从源字符集转换成执行字符集。 连接相邻的字符串字面量 编译。按照语法和语义分析记号,并将它们翻译成翻译单元。 链接...…

继续阅读