C/C++ yaml 库

news2024/9/20 16:59:08

文章目录

  • 一、yaml 介绍
    • 1.1 yaml 介绍
    • 1.2 yaml 教程
    • 1.3 yaml 在线工具
    • 1.4 yaml 出现背景
  • 二、C/C++ yaml 库选型
    • 2.2 libfyaml
    • 2.3 yaml-cpp

一、yaml 介绍

1.1 yaml 介绍

YAML(YAML Ain’t Markup Language)是一种人类可读的数据序列化格式,通常用于配置文件和数据交换。它由Clark Evans在2001年创建,旨在成为一种简单、直观且易于理解的格式。以下是YAML的一些关键特点和优势:

  1. 简洁性

    • YAML的设计目标是尽可能简洁,易于阅读和编写。它使用缩进来表示层次结构,而不是像XML那样的标签。
  2. 易读性

    • YAML文件的可读性非常高,适合人类阅读和编辑,而不仅仅是机器解析。
  3. 灵活性

    • YAML支持多种数据类型,包括标量(如字符串、整数、浮点数)、序列(列表)、映射(键值对集合)等。
  4. 扩展性

    • 可以通过YAML标签和锚点实现数据的扩展和重用。
  5. 跨语言支持

    • YAML被广泛支持,有多种编程语言的库可以解析和生成YAML格式的数据。
  6. 数据表示

    • YAML提供了多种方式来表示数据,例如使用连字符(-)表示列表项,使用冒号(:)表示键值对。
  7. 缩进敏感

    • YAML使用缩进来表示数据的层次结构,不同的缩进级别表示不同的数据层级。
  8. 注释支持

    • YAML支持使用井号(#)添加注释,这使得配置文件更加易于理解和维护。
  9. 数据转换

    • YAML可以轻松地与其他格式(如JSON)进行转换,许多库都提供了这种转换功能。
  10. 安全性

    • YAML文件通常不包含执行代码,这使得它们在安全性方面比某些其他格式更优。

YAML的基本语法

  • 标量:基本的数据类型,如字符串、整数、浮点数。

    age: 25
    message: "Hello, YAML!"
    
  • 序列:有序的集合,使用连字符(-)表示。

    fruits:
      - apple
      - banana
      - orange
    
  • 映射:无序的键值对集合,使用冒号(:)表示。

    person:
      name: John Doe
      age: 30
    
  • 复合结构:可以组合使用序列和映射。

    employees:
      - name: John Doe
        age: 30
      - name: Jane Smith
        age: 28
    
  • 注释

    # This is a comment
    configuration: production
    

应用场景

  • 配置文件:用于应用程序的配置。
  • 数据交换:在不同的系统或应用程序之间交换数据。
  • 文档存储:存储结构化数据,如数据库模式或文档元数据。

YAML因其简洁和易读性,已经成为许多项目的首选配置文件格式。

1.2 yaml 教程

  • https://yaml.org/
  • https://yaml.org/spec/
  • https://github.com/yaml
  • https://www.yaml.info/learn/index.html
  • YAML 入门教程
  • YAML 语言教程
  • YAML 和 JSON 之间有什么区别?

1.3 yaml 在线工具

  • yaml 在线编辑转JSON:https://www.bejson.com/validators/yaml_editor/
  • yaml 在线编辑转JSON:http://nodeca.github.io/js-yaml/

1.4 yaml 出现背景

YAML(YAML Ain’t Markup Language)是一种用于数据序列化的语言,它被设计为易于人类阅读和编写,同时机器解析也相对简单。以下是 YAML 的历史和出现背景的详细介绍:

出现背景

  1. 可读性:传统的数据表示格式如 XML 和 JSON 虽然易于机器解析,但对人类来说阅读和编写较为繁琐。YAML 的设计初衷是提高数据表示的可读性。
  2. 简洁性:YAML 使用缩进来表示层级结构,避免了大量结束标签的使用,使得数据结构更加直观和简洁。
  3. 通用性:YAML 被设计为一种通用的数据交换格式,可以用于配置文件、数据存储、网络通信等多种场景。

发展历程

  1. 2001年:YAML 的概念首次被提出。当时,Bruce Potter 和 Clark Evans 在他们的项目中需要一种新的数据表示方法,他们开始探索一种更易于人类阅读和编写的格式。
  2. 2006年:Orson Peters 和 Kirill Simonov 重新设计了 YAML 的语法,发布了 YAML 1.1 版本。这个版本引入了许多新的特性,如标签、多文档支持等。
  3. 2009年:YAML 1.2 版本发布,进一步改进了语言的规范和解析器的实现。YAML 1.2 版本增加了对 Unicode 的支持,改进了解析器的错误处理机制。

语言特性

  1. 缩进:YAML 使用缩进来表示层级结构,每个层级的缩进通常是两个空格。
  2. 无括号:YAML 不使用括号来表示数据结构,而是使用缩进和冒号(:)来分隔键值对。
  3. 多文档:YAML 支持在一个文件中包含多个文档,每个文档之间用 --- 分隔。
  4. 数据类型:YAML 支持多种数据类型,包括标量(如字符串、整数、浮点数)、序列(如列表、数组)和映射(如字典、哈希表)。
  5. 标签:YAML 允许使用标签来指定数据的类型,提高数据的表达能力。

YAML 的设计哲学是“人类可读性优于机器可读性”,这使得它在需要人类参与和编辑的场景中非常受欢迎。随着技术的发展,YAML 也在不断地演进和改进,以满足更多的应用需求。

二、C/C++ yaml 库选型

  • 参考:
    • https://yaml.org/
    • https://www.yaml.info/libraries/index.html
  • 开源库:
    • libfyaml:https://github.com/pantoniou/libfyaml
    • yaml-cpp:https://github.com/jbeder/yaml-cpp
    • libyaml、libcyaml:不支持yaml 1.2

在这里插入图片描述

在这里插入图片描述

2.2 libfyaml

在这里插入图片描述

2.3 yaml-cpp

在这里插入图片描述

mkdir build; cd build

# cmake [-G generator] [-DYAML_BUILD_SHARED_LIBS=on|OFF] ..

# 默认编译静态库
cmake -DCMAKE_INSTALL_PREFIX=$PWD/install ..

# 配置编译动态库
cmake -DCMAKE_INSTALL_PREFIX=$PWD/install -DYAML_BUILD_SHARED_LIBS=on ..

# 开启TEST
cmake -DCMAKE_INSTALL_PREFIX=$PWD/install -DYAML_CPP_BUILD_TESTS=ON ..

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1936030.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在安卓手机上原生运行docker

前言 之前的文章(香橙派5plus上跑云手机方案一 redroid(带硬件加速))在Ubuntu的docker里运行安卓,这里说下怎么在安卓手机下运行docker,测试也可以跑Ubuntu。 想在手机上运行docker想的不是一天两天了,其实很久之前就有这个想法了&#xff…

12款超实用的视频压缩软件,帮你一键压缩视频

视频压缩软件这么多,我们该怎样正确使用它们并高效地压缩视频大小呢?数字化时代,高清画面的视频往往意味着更大的视频文件大小,它们往往会影响电脑占用内存、视频传输速度。本文将为您提供12款视频压缩技巧,帮您轻松将…

智能化革新:数字装备场的移动信息终端实战攻略!

智慧营区发展项目在数字化装备管理领域取得了显著进展,得益于物联网、大数据和人工智能等先进技术的融合应用,极大地增强了装备场所硬件之间的互动性和协同作业能力。 此外,该系统亦提供了定制化的在线业务流程管理服务,使得管理活…

小白新手搭建个人网盘

小白新手搭建个人网盘 序云服务器ECS重置密码远程连接ECS实例 安装OwnCloud安装Apache服务PHP运行环境NAS挂载挂载验证操作体验 序 阿里云文件存储NAS(Apsara File Storage NAS)是一个可大规模共享访问,弹性扩展的分布式文件系统。本文主要是…

3.4、matlab实现SGM/BM/SAD立体匹配算法计算视差图

1、matlab实现SGM/BM/SAD立体匹配算法计算视差图简介 SGM(Semi-Global Matching)、BM(Block Matching)和SAD(Sum of Absolute Differences)都是用于计算立体匹配(Stereo Matching)的…

什么是上网行为审计系统?有哪些功能?一文全搞定!

员工A(好奇地):“嘿,你听说了吗?公司最近要安装上网行为审计系统,说是要监控我们的上网行为。” 员工B(惊讶地):“真的吗?那岂不是很没有隐私?”…

xpeviewer.exe工具查看pe结构

1、下载地址 Releases horsicq/XPEViewer (github.com) 2、效果图

MATLAB R2023b下载安装教程汉化中文版设置

MATLAB R2023b下载安装教程汉化中文版设置 Matlab 是一款功能强大的商业数学软件 Matlab(Matrix Labortory)即矩阵实验室,它在数值计算、数据分析、算法开发、建模与仿真等众多领域都发挥着重要作用。 Matlab 具有以下显著特点和优势&…

力扣第十七题——电话号码的字母组合

内容介绍 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入:digits "23" 输出…

关于Centos停更yum无法使用的解决方案

最近在使用Centos7.9系统时候,发现yum仓库无法进行安装软件包了,官方说2024年6月30日进行停更,停更后无法提供对应的软件服务。 我在使用yum安装包的时候发现确实不能使用官方服务了: CentOS停更的影响 CentOS停止更新之后&#…

Python基础——数据容器(超详细版!)

目录 数据容器简介: list(列表) 列表特点: 列表定义: 列表的下标索引: 列表的常用方法: 列表的遍历: tuple(元组) 元组嵌套list: string(字符串) 字符串常用方法: 序列: 集合: 集合特点: 集合常用方法: 前言: 本篇文章主要讲解Python数据容器的基…

Starrocks on hive如何判断Hive表存在数据倾斜

存在数据倾斜时MaxTime和MinTime相差过大: 不存在数据倾斜时MaxTime和MinTime相差不大:

基于词级ngram的词袋模型对twitter数据进行情感分析

按照阿光的项目做出了学习笔记,pytorch深度学习实战项目100例 基于词级ngram的词袋模型对twitter数据进行情感分析 什么是 N 符? N 格是指给定文本或语音样本中 n 个项目的连续序列。这些项目可以是音素、音节、字母、单词或碱基对,具体取…

算法日记day 12(栈实现队列|队列实现栈|有效的括号)

队列是先进先出的,就像排队一样,谁在前谁先获得服务 栈是一种先进后出的数据结构 一、用栈实现队列 题目: 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty)&#xf…

GuLi商城-商品服务-API-品牌管理-品牌分类关联与级联更新

先配置mybatis分页: 品牌管理增加模糊查询: 品牌管理关联分类: 一个品牌可以有多个分类 一个分类也可以有多个品牌 多对多的关系,用中间表 涉及的类: 方法都比较简单,就不贴代码了

可解释医学视觉问答的反事实因果干预| 文献速递-基于深度学习的多模态数据分析与生存分析

Title 题目 Counterfactual Causal-Effect Intervention for Interpretable Medical Visual Question Answering 可解释医学视觉问答的反事实因果干预 01 文献速递介绍 深度学习的进步在计算机视觉、自然语言处理和信息检索领域成功地取得了最先进的(SOTA&…

SpringBoot连接PostgreSQL+MybatisPlus入门案例

项目结构 一、Java代码 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://mave…

基于秒杀系统的企业开发设计思考

一、需求分析 需求描述为实现某商品秒杀活动&#xff0c;结果为商品库存为0&#xff0c;订单数量和商品原有库存数量相等&#xff0c;即保障系统数据一致性同时&#xff0c;保障系统稳定性 二、流程设计 三、数据库设计 本次示例仅涉及商品表、订单表&#xff0c;这里分享数…

2024可信数据库发展大会:TDengine CEO 陶建辉谈“做难而正确的事情”

在当前数字经济快速发展的背景下&#xff0c;可信数据库技术日益成为各行业信息化建设的关键支撑点。金融、电信、能源和政务等领域对数据处理和管理的需求不断增加&#xff0c;推动了数据库技术的创新与进步。与此同时&#xff0c;人工智能与数据库的深度融合、搜索与分析型数…

《Towards Black-Box Membership Inference Attack for Diffusion Models》论文笔记

《Towards Black-Box Membership Inference Attack for Diffusion Models》 Abstract 识别艺术品是否用于训练扩散模型的挑战&#xff0c;重点是人工智能生成的艺术品中的成员推断攻击——copyright protection不需要访问内部模型组件的新型黑盒攻击方法展示了在评估 DALL-E …