@
GeruzoniAnsasu serialization 序列化
deserialization 反序列化
marshalling 列集
unmarshalling 散集
翻译不是问题,只是因为没多少人用所以才用原文。问题是原文意思就被普遍用错,而这个错误来自权威来源。
具体来说,I/O 是指系统内部和外部的交互。在一个系统内部交互的作用强行称为 I/O 会引发混乱。
这种误用的典型例子是,以抽象机语义指定行为的 ISO C++规定 I/O 操作(“库的 I/O 函数”)引发副作用——不管其实现是否改变了抽象机这个系统的状态。
这不科学。因为至少像 std::stringstream 这种( ISO C++所谓 Input/output library 里的)东西本来就不应该和系统外部交互,在这个定义下因为钦定副作用可能影响可观察行为而没法被优化成 no-op,即便实际可能什么都不用做。
再如,像格式转换之类的功能本来就该是 serialization/deserializaton,是应该能够证明不必要就该消除的东西。
真正的 I/O,是和设备交互的操作,操作的设备这种抽象机以外的接口。
这个意义下,C++的标准库 I/O 原则上设计就是错的,因为它违反了核心语言要求的抽象边界。让所谓标准 I/O 库函数比用户实现的 I/O 函数具有更加一等的地位也不可能是目的,何况在这里根本还没法直接优化。
这个问题从 C 就有,不过大概 stdio 隐藏了缓冲所以才没那么明显,以讹传讹惯了……