-
Notifications
You must be signed in to change notification settings - Fork 68
Description
问题
fast_io 在和传统流式 I/O 的比较上可能存在不完整或不公正的部分。
在速度上:
- 未将 Intel C++ 加入比较(C++ 11 比 C++ 20 可能不妥,但是性能第一位)。
- 未将其余同属 Windows GCC 实现的编译器加入对比列表,而却挑中表现最一般的 MinGW-w64。
- 未能提供(尽量)统一的编译参数。
- 在提及 Rust 编程语言的速度时,未提及使用 Debug 还是使用 Release 编译。
在兼容性上:
- 未实际测试此库和旧程序(使用流式 I/O 的程序)在复杂使用情况下的互相兼容性。
还请补充缺失的信息。
对于原作者偏见的一些反驳/解释
iostream 包含后暴增 800 K
以 gcc 为例,请在编译参数加入 -s
(或更为激进的-Os -s
),然后再试一次。支持 Release 版的,请用 Release 版。您要是禁用了优化或者只开了 -O1
、带了符号表和调试信息,我无话可说。
面向对象 C with Classes 过时,使用 C with Concepts
您的行为等同于 Typescript + class 已经过时,建议使用 JavaScript function + Type description / interface。
此外,您几乎抛弃了兼容性,而这正是企业代码需要的。想必,您不会轻易在公司的老旧环境上使用 C++ 20 吧。
不用 fast_io 的人都是卢瑟
当个人和企业都不(愿意)广泛使用 fast_io 时,您是卢瑟。
链表淘汰了
您要是可以把数组(一定确保是连续内存)的插入时间复杂度变成 O(1),可能学 OI 的人都要跪下来叫您爷爷。
模板元不如 constexpr
是的,论数值计算模板元被 constexpr 可读性完爆,但是请您用 constexpr 函数,不用 template 关键字来遍历元组。
展开语法不计算在内,对数据的处理往往会更复杂。
--disable-hosted-libstdcxx 无法编译
请确认 GNU 对此的解释:
--disable-hosted-libstdcxx
By default, a complete hosted C++ library is built. The > C++ Standard also describes a freestanding environment, in which only a minimal set of headers are provided. This option builds such an environment.
您搞错了此选项的意思。请确认自己包含的头文件/用到的特性是否含在这些已提供的头文件中。
我还提到了特性,也就是说您可能需要添加额外的禁用参数来避免这些特性被默认打开,这样才能正常编译。
更多的偏见由于时间问题不再叙述。
总结
您的思想“对于当代程序员来说太过超前”,以至于大家对您的风评并不好。
您的 fast_io 固然比流式 I/O 快,但无可否认地后者文档和实例多得数不胜数,并且提供了很棒的前向兼容性。在这一点上,您的 fast_io 毫无疑问地完败给了您看不起的流式 I/O。
一个更为实用的方向是尝试给以前版本的 C++ 提供高性能的 C++ 20 库的 polyfill,比如更优雅易用的 <coroutine>
,这是大家都期盼的。
而现在提出的 I/O 提速虽然性能高但却不能贸然使用。因为换用 fast_io 的成本过高,且不是每个人都使用 C++ 20。
这个库的未来还未知,毕竟也没有实际使用提速的案例。
不过总体来说可以当成一个新奇的尝试就是了。
我年龄较小,本 issue 也未经过高人指点,若有任何事实错误或表意不清的位置,请不吝赐教。