C/C++ yaml 库

文章目录

  • 一、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 Doeage: 30
    
  • 复合结构:可以组合使用序列和映射。

    employees:- name: John Doeage: 30- name: Jane Smithage: 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.mzph.cn/pingmian/47681.shtml

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

相关文章

模型训练中出现loss为NaN怎么办?

文章目录 一、模型训练中出现loss为NaN原因1. 学习率过高2. 梯度消失或爆炸3. 数据不平衡或异常4. 模型不稳定5. 过拟合 二、 针对梯度消失或爆炸的解决方案1. 使用torch.autograd.detect_anomaly()2. 使用 torchviz 可视化计算图3. 检查梯度的数值范围4. 调整梯度剪裁 三、更具…

uni-app开发日志:unicloud使用时遇到的问题解决汇总(不断补充)

插件安装后提示与原数据库表冲突(2024.7.18) 安装uni-admin后再安装uni-cms,在uni-admin中添加好菜单,结果提示该错误 回到hbuilder中uniCloud/database中找到冲突的部分 比较一下,选中老的删除 opendb-news-articl…

HarmonyOS根据官网写案列~ArkTs从简单地页面开始

Entry Component struct Index {State message: string 快速入门;build() {Column() {Text(this.message).fontSize(24).fontWeight(700).width(100%).textAlign(TextAlign.Start).padding({ left: 16 }).fontFamily(HarmonyHeiTi-Bold).lineHeight(33)Scroll() {Column() {Ba…

eclipse免安装版64位 2018版本

前言 eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。 一、下载地址 下载地址:http://source/download 选择如下图红色框文件内容下载 二、安装步骤 1、…

Day16_集合与迭代器

Day16-集合 Day16 集合与迭代器1.1 集合的概念 集合继承图1.2 Collection接口1、添加元素2、删除元素3、查询与获取元素不过当我们实际使用都是使用的他的子类Arraylist!!! 1.3 API演示1、演示添加2、演示删除3、演示查询与获取元素 2 Iterat…

分词任务介绍-(十)

分词任务 中文分词正向最大匹配实现方式一实现方式二 反向最大匹配双向最大匹配jieba分词上述分词方法的缺点总结基于机器学习 总结分词技术经验总结 中文分词 正向最大匹配 分词的步骤 1.收集整理一个词表,类似于字典。如下图 2.对于待分词的句子,或者…

机器学习西瓜书笔记(一)

机器学习西瓜书笔记 第一章(chapter 1) 绪论 (参考机器学习西瓜书)第一节(section 1)引言第二节(section 2)基本术语第三节(section 3)假设空间第四节(section 4)归纳偏好第五节(section 5)发展历程第六节(section 6)应用现状第一章(chapter 1) 绪论 (参考机…

C++编程小游戏------斗罗大陆(1)魂力测评和武魂觉醒

#include <bits/stdc.h> #include <windows.h> using namespace std; string name,wh; int hl,wh1; int gj50,fy50,jy5000,hp60; int main() { // 共十个武魂["昊天锤","蓝电霸王龙","七杀剑","火凤凰","尖尾雨燕&qu…

麒麟系统arm架构上部署开发环境。

今天早早来到公司&#xff0c;这也是再公司搬址前在老地址待得最后一天&#xff0c;昨天把前面重要的一个任务也完成的差不多了&#xff0c;遂现在记录一下。 收到任务&#xff0c;要将公司的开发环境和生产环境配置在银河麒麟v10服务器上。这个服务器是向华为申请得到的&…

实战:Eureka的概念作用以及用法详解

概叙 什么是Eureka&#xff1f; Netflix Eureka 是一款由 Netflix 开源的基于 REST 服务的注册中心&#xff0c;用于提供服务发现功能。Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分&#xff0c;基于 Netflix Eureka 进行了二次封装&#xff0c;主要负责…

高性能分布式IO系统BL205 OPC UA耦合器

边缘计算是指在网络的边缘位置进行数据处理和分析&#xff0c;而不是将所有数据都传送到云端或中心服务器&#xff0c;这样可以减少延迟、降低带宽需求、提高响应速度并增强数据安全性。 钡铼BL205耦合器就内置边缘计算功能&#xff0c;它不依赖上位机和云平台&#xff0c;就能…

数据仓库实践:使用 SQL 计算材料BOM成本单价

背景 在制造业财务数据分析建设过程中&#xff0c;有时需要通过BOM汇总计算材料的单价&#xff0c;一般会有采购核价&#xff0c;库存成本&#xff0c;还有下阶材料单价按用量汇总得到的单价参与。 这些单价来源一般会根据优先级获取并在计算后作为最终的BOM 单价结果。参与财…

iOS ------ 编译链接

编译流程分析 编译可以分为四步&#xff1a; 预处理&#xff08;Prepressing)编译&#xff08;Compilation&#xff09;汇编 &#xff08;Assembly)链接&#xff08;Linking&#xff09; 预编译&#xff08;Prepressing&#xff09; 过程是源文件main.c和相关头文件被&#…

window11 部署llama.cpp并运行Qwen2-0.5B-Instruct-GGUF

吾名爱妃&#xff0c;性好静亦好动。好编程&#xff0c;常沉浸于代码之世界&#xff0c;思维纵横&#xff0c;力求逻辑之严密&#xff0c;算法之精妙。亦爱篮球&#xff0c;驰骋球场&#xff0c;尽享挥洒汗水之乐。且喜跑步&#xff0c;尤钟马拉松&#xff0c;长途奔袭&#xf…

FastAPI 学习之路(五十九)封装统一的json返回处理工具

在本篇文章之前的接口&#xff0c;我们每个接口异常返回的数据格式都不一样&#xff0c;处理起来也没有那么方便&#xff0c;因此我们可以封装一个统一的json。 from fastapi import status from fastapi.responses import JSONResponse, Response from typing import Unionde…

= null 和 is null;SQL中关于NULL处理的4个陷阱;三值逻辑

一、概述 1、NULL参与的所有的比较和算术运算符(>,,<,<>,<,>,,-,*,/) 结果为unknown&#xff1b; 2、unknown的逻辑运算(AND、OR、NOT&#xff09;遵循三值运算的真值表&#xff1b; 3、如果运算结果直接返回用户&#xff0c;使用NULL来标识unknown 4、如…

Go语言并发编程-Channel通信_2

Channel通信 Channel概述 不要通过共享内存的方式进行通信&#xff0c;而是应该通过通信的方式共享内存 这是Go语言最核心的设计模式之一。 在很多主流的编程语言中&#xff0c;多个线程传递数据的方式一般都是共享内存&#xff0c;而Go语言中多Goroutine通信的主要方案是Cha…

JavaEE:Lombok工具包的使用以及EditStarter插件的安装

Lombok是一个Java工具库&#xff0c;通过添加注解的方式&#xff0c;简化Java的开发。 目录 1、引入依赖 2、使用 3、原理解释 4、更多使用 5、更快捷的引入依赖 1、引入依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lomb…

pdf提取其中一页怎么操作?提取PDF其中一页的方法

pdf提取其中一页怎么操作&#xff1f;需要从一个PDF文件中提取特定页码的操作通常是在处理文档时常见的需求。这种操作允许用户选择性地获取所需的信息&#xff0c;而不必操作整个文档。通过选择性提取页面&#xff0c;你可以更高效地管理和利用PDF文件的内容&#xff0c;无论是…

Linux编辑器——vim的使用

目录 vim的基本概念 命令模式 底行模式 插入模式 注释和取消注释 普通用户进行sudo提权 vim配置问题 vim的基本概念 一般使用的vim有三种模式&#xff1a; 命令模式 底行模式和插入模式&#xff0c;可以进行转换&#xff1b; vim filename 打开vim&#xff0c;进入的…