如果有协程,很多并发访问就能被避免。
实际 golang 和 c# 的协程我觉得也不够优秀。原因是 golang, c# 和 java 都选择了让协程在线程自由调度,因为他们有庞大的兼容性包袱需要继承。
下一门语言我希望是单线程多协程 + 进程隔离式的架构。那么既然是单线程,所谓的并发性安全问题就几乎不再存在了。搭配 cow 技术即可解决掉现在各种编程语言的困境。
现在编程语言把操作系统的线程 API 以及 CPU 核并行计算这种概念直接暴露给程序员,我觉得相当不妥的。而且可扩展性也不够强。应该换个思考方式:
1. 程序员获得一个单一的 CPU 核心、一块独立的无限的内存空间。
2. 程序员编写模块跑在上面那个最简环境内。
3. 可使用协程做到并发。编程语言使用 FP 范式的 COW 数据结构、immutable 以及纯函数等概念附加到协程里面实现模型内编程的可靠性。
4. 模块之间使用消息通信。通信机制由操作系统+编程语言提供。
5. 通信机制跨 CPU 核、NUMA 内存、CPU/GPU 甚至是由不同架构的网络机器,这些复杂的事情不应该由程序员来考虑。
【 在 milksea 的大作中提到: 】
: gc语言没什么可比性。go和c#当然不用考虑对象生存期的问题,但并发访问的安全问题不会被gc解决,所有权分析仍然是有力的工具。实际上,所有权分析的学术讨论远早于rust,很多论文都是基于java这种面向对象语言的。(例如,ownership type的重要综述是2013年的Ownership Types
: c++自由,rust限制多,其他方面差不了那么多。rust的卖点是安全又不是方便。大型企业大型项目就是需要更多语言约束,这个需求是很自然的。
--
修改:hgoldfish FROM 110.84.123.*
FROM 110.84.123.*