首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Rust日报】 2019-08-14:Facebook反复出现 C++ bug

Reddit讨论:CppCon 2017 - Facebook反复出现 C++ bug #Facebook 该贴主提到,他看了Facebook工程总监CppCon 2017分享,其中谈到Facebook...它很像Arc,但是如果你实际多线程环境中使用它,你仍然有可能出错。Rust既有rc又有Arc,它会阻止你将Rc发送到不同线程。...这里真正问题是,C++中,std::mutex没有连接到它所保护数据,而在Rust中,如果不锁定它,就根本不可能访问受Mutex保护数据。...附送Bug : C++中,很容易意外地对事物进行深度复制(Clone)。...演讲中从未提到Rust,但如果里面提到Rust的话,该演讲就是Rust最好广告了 :D (Libra 选择 Rust,某种意义,可能也是苦C++久矣) Read More: https://www.reddit.com

80720

3D打印机Marlin固件串口功能解析和程序移植

原版Marlin固件硬件平台基于arduino,采用C++类对串口操作函数函数进行了封装,代码注释中介绍了这些函数功能。...(引用)串口数据处理机制是数据接收并原样回发机制是:成功接收到一个数据,触发进入中断, 中断函数中将数据读取出来,然后立即处理。...这一种数据处理机制是“非缓冲中断方式”,虽然这种数 据处理方式不消耗时间,但是这种数据处理方式严重缺点是:数据无缓冲区,如果先前接收 数据如果尚未发送完成(处理完成),然后串口又接收到新数据,新接收数据就会把尚未处理...串口接收部分创建环形缓冲区便可以很好避免因收发速度不 一致产生数据丢包。 串口缓冲区实现 接下来具体分析下Marlin串口缓冲区实现(下面分析代码为移植到STM32实现代码,原理一致。)..._t Mserial_read(void) //按存入顺序逐个读取缓冲区数据 { uint8_t c; /*如果头不是前面,将收不到任何字符*/ if (rx_buffer.head

2.5K30
您找到你想要的搜索结果了吗?
是的
没有找到

Rust实战系列-Rust介绍

“Cargo.lock 指定了所有依赖项的确切版本号,这样, Cargo.toml 被修改之前,项目编译过程都会以相同方式进行。 3....("a equals ten"); } } 这段代码是不能编译通过(C 语言没有这种能力)Rust 编译器会生成错误: if 接收不是一个整数,它接收是一个赋值结果。...编译器是严格,但很有帮助。 语言尺寸 Rust 有一个复杂类型系统,可以通过多种方式访问值,还有一个与强制转换对象生命期相匹配权限系统。对于这些访问方式,程序员有选择负担。...缓冲区是内存中预留用于接收输入数据空间。如果缓冲区内容两次写入之间没有被清擦除,那么数据就会从前一次读取泄漏到下一次。如果缓冲区存储是密钥等信息,将会对安全性造成严重破坏。...移动端软件 Android 和 IOS 都提供了让 "本地应用程序"系统运行能力,这是为了让用 C++编写应用程序,如游戏,能够被部署到手机上。

1.3K21

C++工程师Rust迁移之路(5)- 继承与组合 - 下

在上一篇文章 zhuanlan.zhihu.com/p/76 中,我介绍多态、静态分发和动态分发概念,以及他们各自在C++Rust实现方式。...本文中,我会重点讲RustTrait实现静态分发与C++ 20(准确说,现在还叫做C++ 2a)中concepts区别。...C++应用 template concept bool Stream = requires(T a) { { a.read(std::uint8_t*, size_t...事实Rust中,类似的Marker还有非常多,比如Copy、Sync、Send等等。在后续文章中,再跟大家逐一解释这些trait含义与妙用。...在下一节文章中,我会介绍Rust类型系统和C++类型系统最大不同之一:Rust结构体不能继承,以及为什么。敬请期待。

96040

Rust解决C语言隐患

100%安全性 列举例子之前,我们先来讨论一下Rust所使用方式究竟安全在哪里。 Rust大多代码被称为“安全”代码,确保代码100%安全性。...pointer[i] = i; // Might cause a Segmentation Fault } RustRust处理这类指针错误方式非常极端,“安全”代码中粗暴简单地禁用所有裸指针...此外在“安全”代码中,Rust还取消了空值。 不过不用担心,Rust中存在一个优雅替代方案——引用和借贷方式。...if (abort) { logError("operation aborted before commit", pointer); } Rust中 像C++一样,Rust也使用资源获取即初始化(...Resource Acquisition Is Initialization)方式,这意味着每个变量超出范围后都一定会被释放,因此“安全Rust代码中,永远不必担心释放内存事情。

2.1K50

RustC++和Go语言有哪些区别?

内存安全性Rust是一门注重安全性编程语言,与C++和Go语言相比,它通过静态检查或者borrow-checking,在编译时对于内存使用进行了限制,从而消除了内存安全问题,例如空指针和缓冲区溢出等问题...Go语言虽然也是面向底层语言,但由于其垃圾回收机制,执行效率不如RustC++,但在并发编程上表现优异。3.并行性并行编程方面,C++和Go都提供了特定线程池和并发机制。...Rust对于并发和多线程拥有独特安全性处理机制4.学习难度 语法和学习难度方面,Rust语言较为新颖和新鲜,学习起来可能难一些。...而C++和Go语言由于发展时间较长,已经许多领域中得到了广泛应用和充分发展,这使得学习难度相对较小。...对于新开发代码,如构建大型服务器或编写驱动程序和嵌入式系统,RustC++ primarilily表示最佳选择;而对于需要比较容易搭建、并且容易良好维护系统,Go是最佳选择之一。

87110

第10期 | ringbuff,通用FIFO环形缓冲区实现库

移植之前需要准备一份裸机工程,我使用STM32CubeMX生成,需要初始化以下配置: 配置一个串口,中断方式接收数据,查询方式发送数据; printf重定向; 2.3....为什么使用ringbuff 缓冲区一般用于解决设备接收数据速度和设备处理速度不匹配情况下,防止丢包,通俗来说就是:收到数据先存进缓冲区,等到CPU来处理时候一次性取出处理。...计算缓冲区大小 假定数据每200ms处理一次,而数据10ms接收一次,每次接收数据包长度为7个字节。...要想做到不丢包,就需要将200ms内接收所有数据包都存进缓冲区,所以缓冲区大小至少为:200/10*7 = 140 个字节。 保险起见,可以将缓冲区适当扩大一下,设置为150个字节。 3.3....------------------------------*/ /* USER CODE BEGIN 0 */ //用于串口接收 uint8_t recv_data = 0; //用于存储从缓冲区读取出数据

1.6K11

让我们用 Rust 重写那些伟大软件吧

现成算法和抽象库,以“自带电池”方式吸引了系统和应用程序开发人员。 具有内置功能单元测试. 变量默认情况下是不可变Rust 宏,C 语言宏智能进化,混合了 C++ 模板元编程。...微软,“可信计算”演示后 20 年,仍然认为内存安全问题占所有安全漏洞 70%。因此 Rust 是目前安全系统编程最佳机会。...微软对 Rust 兴趣如此之大,以致于它加入 Rust 基金会,促进 Rust 成为 Kubernetes 应用程序可靠替代方案。...RIIR(Rewrite It In Rust),用 Rust 重写它 你可能经常在博客 github issues 中、朋友圈等地方看到一些“讨厌”言论——用 Rust 重写它?...现在, github 有个项目称作 RIIR(Rewrite It In Rust,用 Rust 重写它),星星数 300 左右;也有其 twitter 账户。

3K30

第4章 | 所有权

在运行期,指针仅仅是内存中地址,和在 C 与 C++ 中一样。而不一样是,Rust 编译器已然证明你代码安全地使用它们。 笔记 Rust 通过限制程序使用指针方式。...图 4-1:栈 C++ std::string 值,指向其堆上分配缓冲区 在这里,实际 std::string 对象本身总是正好有 3 个机器字长,包括指向分配在堆上缓冲区指针、缓冲区总容量...图 4-2:栈 Vec,指向其堆中缓冲区 这和之前展示过 C++ std::string 非常相似,不过缓冲区元素都是 32 位整数,而不是字符。... Rust 中丢弃一个值方式就是从所有权树中移除它:或者离开变量作用域,或者从向量中删除一个元素,或者执行其他类似的操作。这样一来,Rust 就会确保正确地丢弃该值及其拥有的一切。...这是之前提过 Rust “激进赌注”一部分:实际Rust 声称,解决问题方式通常是灵活多样,因此总是会有一些完美的解决方案能同时满足它所施加限制。

7110

第10期 | ringbuff,通用FIFO环形缓冲区实现库

准备裸机工程 本文中我使用是小熊派IoT开发套件,主控芯片为STM32L431RCT6: 移植之前需要准备一份裸机工程,我使用STM32CubeMX生成,需要初始化以下配置: 配置一个串口,中断方式接收数据...,查询方式发送数据; printf重定向; 2.3....为什么使用ringbuff 缓冲区一般用于解决设备接收数据速度和设备处理速度不匹配情况下,防止丢包,通俗来说就是:收到数据先存进缓冲区,等到CPU来处理时候一次性取出处理。...计算缓冲区大小 假定数据每200ms处理一次,而数据10ms接收一次,每次接收数据包长度为7个字节。...------------------------------*/ /* USER CODE BEGIN 0 */ //用于串口接收 uint8_t recv_data = 0; //用于存储从缓冲区读取出数据

1.2K30

【投稿】刀哥:Rust学习笔记 5

实际mio是对于操作系统epoll/kqueue/IOCP封装。C/C++中我们使用libevent之类库,mio可以理解为对应Rust版本。...例如,接收网络数据,无法臆测每次轮询会收到多少字节数据,往往需要开辟一段接收缓冲区容纳数据,协议解码也需要一个状态机拼包向上层提交;发送网络数据存在相似问题,发送数据时底层未就绪,则缓冲发送数据,待下次轮询时...因为之前有Go版本ipfs/libp2p开发经验,故而学习研究了rust-libp2p以及nervos tentacle。...两个项目共有的特点是主要用poll方式写代码,逻辑都是状态机嵌套。...因此,笔者试图完全使用async/await方式重构libp2p,参考rust-libp2p实现,代码协程化,向上层提供纯粹异步接口,争取API层面的体验接近go-libp2p,这是推广Rust协程机制一个尝试

67310

Rust日报】 2019-08-12:Tokio alpha 版发布,新版本支持asyncawait

它有一个测试套件,它后端主要由MoltenVK开发和使用。 SPRIV-Cross 我们性能报告中出现了很多次(例如在Dota2)。...它编写方式也与惯用Rust相去甚远: 代码更喜欢大可变数据结构,这使得它很难模块化、测试、优化,尤其是C/C++ FII之后进行交互。...它使我们构建过程变得复杂,尤其是需要单独Emscripten构建(Rust代码不需要)来生成WASM模块网络,成为开发人员和用户一个痛点。...然而,我们再次感到Rust是着色器翻译工作最佳工具: 它是关于解析,处理字节和数据结构,具有进行单元和模糊测试能力,并且没有外部依赖性。...SIGHUP,守护程序通常会重新加载其所有配置并重新打开日志文件(这是为了与logrotate集成) 推荐使用signal-hook来侦听信号,因为信号一般很容易被错误使用,这个库屏蔽了信号使用大部分问题

1.2K30

美国CISA建议放弃CC++, 软件生态再起波澜

因此他们建议放弃 C/C++,转而使用 C#、Go、Java、Python、Rust 和 Swift 等 “内存安全语言”。...同时,对于必须使用C/C++情况,应该采取一些最佳实践来减少潜在安全风险,例如使用安全库和函数、进行代码审查、进行安全测试等。...漂亮国CISA建议是改用像Rust这样内存安全语言来消除这些漏洞。Rust是一种新兴编程语言,特别注重内存安全和并发性,它设计目标就是解决C/C++所面临这些问题。...这些函数执行操作时可以限制缓冲区大小,从而防止了缓冲区溢出。 初始化变量:确保所有变量使用之前都进行了正确初始化。未初始化变量可能会导致未定义行为,从而引入内存安全漏洞。...注意数据类型大小和溢出:理解不同数据类型大小以及它们可能发生溢出方式,可以帮助你避免缓冲区溢出和其他内存安全问题。

28210

【STM32H7教程】第30章 STM32H7USART应用之八个串口FIFO实现

电阻R130作用是避免CPU复位期间,TX为高阻时串口线上出现异常数据。   检测SP3232E好坏可以采用回环方式,即短接T1OUT和R1IN,对应到DB9插座就是短接引脚2和引脚3。...实际效果如下: 通过这种方式,可以应用程序中通过串口发送几个字符,查看是否可以正确接收来判断232 PHY芯片是否有问题。  ...每个串口都有2个FIFO缓冲区,一个是用于发送数据TX_FIFO,一个用于保存接收数据RX_FIFO。 我们来看下这个FIFO定义,bsp_uart_fifo.h文件。...发送数据最好不要超过bsp_uart_fifo.h文件中定义发送缓冲区大小,从而实现最优工作方式。因为超过后需要在发送函数等待有发送空间可用。...电后串口打印信息: 波特率 115200,数据位 8,奇偶校验位无,停止位 1 程序设计: 系统栈大小分配: RAM空间用DTCM: 硬件外设初始化 硬件外设初始化是 bsp.c 文件实现

2.8K50

Rust 易学教程】第 1 天:Rust 基础,基本语法

Rust 是个啥 Rust 是一种新编程语言, 2015 年发布了 1.0 版本,我会从以下方面让你知道 Rust 出现意义: Rust 是一种静态编译语言,其作用与 c++ 类似。...Rust 需要可变数量参数(不允许函数重载)情况下使用宏。 宏是“卫生”,意味着它们不会意外地从它们所使用范围中捕获标识符。Rust 宏实际只是部分卫生Rust 是多范式。...match(Rust中相当于switch) 不会失败,因此开发者不会不小心忘记了 break。 缓冲区切片携带它们大小,不依赖于 NULL` 终止符。...Rust 具备现代语言特性 Rust 是用过去几十年积累所有经验构建起来,汲取几大语言精华,又进行了改进。语言特性,它具备以下几点: 枚举和模式匹配。 泛型。 没有额外 FFI。...对于上面的例子,Rust 社区仍在努力寻找最佳解决方案——也许对于其中一些事情没有单一最佳解决方案”。

31220

Rust漫画 #3 | 二次元 Rust Meetup 讨论会:Rewrite it in Rust 是否有害?

漫画解析 Rust 语言 1.0 发布两三年内,Rust 社区中出现了一批狂热粉丝,他们经常跑去 GitHub 一些知名开源项目下,逢人就说,请用 Rust 重写,或者,质问为什么项目不用 Rust...因为不可能将全部 C/C++ 代码都用 Rust 重写,目前主流方式就是用 Rust 重写一部分在未来还需要持续维护和发展代码,所以与 C/Cpp 安全交互是目前无法避免。...“这里其实没有什么理想解决方案, Android 里 Rust 给 Cpp 端共用 Arc 做法就是直接通过 C-ABI 给 Cpp 透出回调函数来增减引用计数,而非这种 drop 方式。...缓冲区切片不当 :没有正确检查 bounds 就通过 from_raw_parts 创建缓冲区切片,可能会访问到不属于该缓冲区内存。...因为 Rust 语言层面和社区文化都将促使开发者去充分考虑安全问题,并给出最佳实践。即便无法百分百解决安全问题,那也是向百分百安全无限接近中。

48910

【Android FFMPEG 开发】FFMPEG ANativeWindow 原生绘制 ( 设置 ANativeWindow 缓冲区属性 | 获取绘制缓冲区 | 填充数据到缓冲区 | 启动绘制 )

) : Surface 画布可以 SurfaceView SurfaceHolder 中获取 //绘制图像 SurfaceView SurfaceView surfaceView; //...) : Native 层 C++ 代码中 , 接收 Surface 画布 , 并创建 ANativeWindow 本地绘制窗口 , 原生绘制主要在 ANativeWindow 中进行 ; //CPP..._t *dst_data = static_cast(aNativeWindow_Buffer.bits); //参数中 uint8_t *data 数据中 , 每一行有 linesize...填充图像图像数据到 ANativeWindow_Buffer 绘制缓冲区 ---- 转换好图像数据 : 博客 【Android FFMPEG 开发】FFMPEG AVFrame 图像格式转换 YUV...向 ANativeWindow_Buffer 填充 RGBA 像素格式图像数据 uint8_t *dst_data = static_cast(aNativeWindow_Buffer.bits

92510

windows下串口编程,串口操作类封装

以往都是嵌入式设备中经常操作串口,或者使用QT串口类。Win32中处理串口也是有办法,操作文件打开和读写进行串口操作。使用ReadFile、WriteFile函数。...基本步骤 使用Win32文件方式操作:打开串口(创建文件)->配置参数->发送(写文件)-->接收(读文件) 打开串口 打开串口第一步是初始化或设置串口配置,目的是创建串口代理,整篇文章我们都将用文件句柄作为串口代理...直接用c++m_portName.c_str()即可。若是UNICODE字符串,则需要转换下wchar to char。...ReadFile操作期间,时间周期从第一个字符接收到算起。如果收到两个字符之间间隔超过该值,ReadFile操作完毕并返回所有缓冲数据。...实际,一个进程可以分配虚拟内存量少于这些限制。 物理内存是芯片焊接到您主板,或安装在您内存插槽。在任何给定时间使用物理内存量都限制计算机中物理内存量。

2.3K10

C++ 中文周刊 第99期

理由是c++太差了周边编译设施等等太难用了之类 对此笔者锐评:确实 reddit社区对此锐评: Stop Comparing Rust to Old C++ 我觉得有点露怯了,实话实说,构建确实不好用...,演进也慢,你说meson conan能用我只能说还差点意思 而且c++开源社区开发人员也差点意思,没那个功夫,但rust就很不一样,很多人愿意拿rust练手。...只能说c++周边演进还需要加快一些。周边文章咨询写多一些,更通俗易懂一些,知道的人越多越好。...Build(); 当然 rust这种代码也有很多 Serializing IPs quickly in C++ 显然能想到 std::string output = std::to_string(address...294254078前来对线 新项目介绍/版本更新 boost.redis 之前说redis库进boost了 macro_rules一期聊反射库,作者封成库了。

49330
领券