首页 > 编程语言 >C++_函数式编程-以及常用序列化

C++_函数式编程-以及常用序列化

时间:2024-05-11 13:31:11浏览次数:21  
标签:函数 编程语言 编程 C++ 格式 序列化 语言

函数式编程

 函数式编程是一种编程范式,
     它强调程序的构建是通过应用(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

相关文章

  • C和C++中size sizeof strlen length的对比
    一、sizeof()sizeof是一个操作符,它在编译期间确定的,返回的是静态大小。它可以应用于基本类型、类类型、数组和指针等。例如:sizeof(int)或sizeof(array)。对于数组,sizeof返回整个数组的大小(包括所有元素)。对于指针,sizeof返回指针本身的大小(通常取决于平台和编译器,例如在3......
  • gcov - 标准c/c++代码覆盖率测试工具+lcov - GCC测试覆盖率的前端图形展示工具+gprof
    1、advent-calendar-of-circuits-2020-一个月每天用KiCad设计一个PCB项目GregoryDavill是来自澳大利亚的一个技术牛人,在开源硬件领域非常有名且活跃。他在2020年12月坚持每一天设计一个电路板,用KiCad完成电路设计到PCB的布局布线完成,这便是advent-calendar-of-circuits-......
  • 嵌入式系统设计的轻量级框架+在Linux中用于外围设备访问C库+自研的编程语言和集成开发
    1、mr-library-一个专为嵌入式系统设计的轻量级框架mr-library是一个专为嵌入式系统设计的轻量级框架,模块化的软件架构充分考虑了嵌入式系统的资源和性能要求。通过提供标准化的设备管理等,极大地简化了嵌入式应用的开发难度,帮助开发者快速构建嵌入式应用程序。设备框架 为......
  • 序列化的另一个思路
    #混入类,提供Model实例to_dict方法classModelMixin(object):__slots__=()defto_dict(self,excludes:tuple=None,selects:tuple=None)->dict:ifnothasattr(self,'_meta'):raiseTypeError('<......
  • 理解 iOS 中的多线程编程
    在iOS应用开发中,多线程编程是一项关键技术,可以帮助应用实现更好的性能和响应性。本文将详细解释iOS中的多线程编程,并讨论如何在应用中正确地使用多线程以提高性能和响应性。1.什么是多线程编程?多线程编程是指在一个应用程序中同时执行多个线程(线程是进程中的执行单元),从而实......
  • C++中的string
    一、定义和初始化string1、默认初始化:std::stringstr;//str是一个空字符串2、使用字面值初始化:std::stringstr1="Hello,World!";//str1包含字符串"Hello,World!"3、使用字符数组初始化:chararr[]="Hello,World!";std::stringstr3(arr);//str3包含字......
  • 探究:响应式编程(Reactive Programming)
    在当今软件开发领域,响应式编程(ReactiveProgramming)成为了一个备受关注的话题。它提供了一种新的编程范式,与传统的命令式编程有着显著的不同。本文将详细讲解什么是响应式编程,以及它与传统的命令式编程的不同之处。1.什么是响应式编程?响应式编程是一种编程范式,它基于数据流和变......
  • 网络编程
    1.IO模型2.网络编程IO调用分2个阶段:数据准备、数据copy.BIO:同步阻塞,一个连接一个线程,第一阶段等待,直到有数据了,该线程copy并返回,等到的过程一直浪费资源,优化:用连接池多线程,不用新建、销毁线程,直接拿池子里现成的。NIO:同步非阻塞,多个连接注册到多路复用器Selector上通......
  • C++ 类的继承(Inheritance)
    一、继承(Inheritance)C++有一个很好的性质称为inheritance(继承),就是声明一个class(derivedclass),把另一个或多个class(baseclass)的所有内容(包括datamembers和memberfunction)统统继承下来(有无存取权限是另一回事)。如果直接继承自一个baseclass,称为单一继承;如果直接继承自一......
  • 面向对象编程(basic)
    面向对象内容的三条主线:Java类及类的成员:(重点)属性、方法、构造器;(熟悉)代码块、内部类面向对象的特征:封装、继承、多态、(抽象)其他关键字的使用:this、super、package、import、static、final、interface、abstract等1.面向对象VS面向过程面向过程思想线性思维步......