函数式编程
函数式编程是一种编程范式,
它强调程序的构建是通过应用(applying)和组合函数(composing functions)来实现的
函数式编程属于“结构化编程”的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用
Lambda Calculus
函数式编程语言
早期的函数式语言 LISP
Erlang, 它由瑞典公司爱立信在20世纪80年代后期开发,最初用于实现容错电信系统.RabbitMQ服务器是用Erlang语言编写的
工业中使用的函数式编程语言包括多范型的Scala F#,还有Wolfram语言、Common Lisp、Standard ML和 Clojure 等
分类
01.纯函数式编程语言通常不允许直接使用程序状态以及可变对象,
典型语言有:Miranda、Haskell 和 Idris 等。
02.非纯函数式编程语言可按类型系统分为两类:
静态类型语言:ML家族的 Standard ML、OCaml、F#,还有 Scala、Typed Racket[25]等。
动态类型语言:Lisp家族的 Scheme、Common Lisp、Clojure、Racket,还有LOGO、Erlang、Wolfram语言和 R 等。
03.其他特殊风格的函数式编程语言有:APL/J和jq等。
概念:Lambda
函数 闭包 (Closure) 纯函数 副作用 惰性计算
柯里化 (Haskell Brooks Curry)
函数是一等公民 高阶函数 (Higher-order function) Functions are first-class citizens
算子 函数的组合要满足结合律 (associativity)
函子:Functor Monad
闭包 (Closure):函数和其周围的状态(词法环境)的引用捆绑在一起形成闭包
纯函数:相同的输入永远会得到相同的输出,而且没有任何可观察的副作用
编程
01.元编程范式是一种编程范式,(reflect)
它允许程序员在运行时创建、修改和操作程序的结构和行为
02.泛型 : 一种语言机制,能够帮助实现一个通用的标准容器库。所谓通用的标准容器库
类型推导
数据格式:
序列化:序列化最终的目的是为了对象可以跨平台存储和进行网络传输
Protocol Buffers
Parquet 是一种列式存储格式,旨在提供一种高效的方式来存储和处理大型数据集
Parquet 不是“运行时内存格式”,它属于文件格式
Avro 格式 是一种远程过程调用(RPC)和数据序列化语言,它允许基于Avro的结构读写数据
Arrow IPC 机制基于 Arrow 内存中格式
数据格式
json xml yaml
json: JSON (JavaScript Object Notation)
XML (eXtensible Markup Language)
Arrow 的核心数据结构是统一的列式内存格式:
定义一套通用数据结构和 API,使数据可以在不同的编程语言和计算引擎之间以零复制(zero-copy)的方式进行共享和交换,从而提高数据处理的效率
创建自定义数据结构来表示正在处理的内存中的数据集
应用:
JSON和XML适用于前后端数据交互,
Protocol Buffers和MessagePack适用于高性能的数据序列化,
而Java对象序列化在Java应用内部可以方便地进行对象持久化和传输
大批量结构化数据:使用 Parquet 将数据存储在磁盘上并以 Arrow 格式将其读入内存
其他序列化
Java对象序列化:`java.io.Serializable`接口来实现
C++ 函数式编程
C++借鉴了一些函数式编程的思想和方法,并用自己的方式来实现了部分功能
通过使用高阶函数、闭包等概念来接近函数式编程的理念
标签:函数,编程语言,编程,C++,格式,序列化,语言
From: https://www.cnblogs.com/ytwang/p/18186316