我是Python新手,对C++有一定的经验。(不幸的是,只有两个样本点,任何一对特性都不是不相关的,就是完全相关的。)在Python中,相同列表中的元素可以有任何类型。在C++中,STL容器包含同构类型。(我认为可以使用空指针向量来模拟Python列表中的灵活性。)Python为通用编程提供了便利,但是C++列表具有更多的通用性。是什么造成了这种对比?设计一种具有静态类型系统并具有类似Python列表的语言是否困难?
更广泛地说,我常常不得不抵制这样的冲动:"Python有特性A,而C++有特性B,因此Python有X,C++有Y。“是否有好的语言选择可以提供与这两种语言的良好比较和对比,以便我能够理解编程语言的哪些特性是相关的,哪些特性是正交的?计算机科学的正规教育是否将语言学比喻为编程语言?(如果是这样的话,我怎么知道呢?)
发布于 2022-08-31 09:48:23
在Python中,相同列表中的元素可以有任何类型。在C++中,STL容器包含同构类型。..。Python为通用编程提供了便利,但是C++列表具有更多的通用性。是什么造成了这种对比?设计一种具有静态类型系统并具有类似Python列表的语言是否困难?
与之形成对比的是Python使用鸭型,所以它并不关心您在列表中添加了什么。另一方面,C++模板将确定正在传递哪些类型,用这些类型实例化“骨架”代码,然后键入检查实例化的代码。
在C++中有一个异构向量/列表是可能的。std::vector<void*>是你提到的一种可能性。对于C++17和更高版本,一个更类型安全的选择是std::vector<std::any> (更多类型安全,因为std::any存储类型信息)。
然而,通常有更多类型安全和较少出错的方法.如果您只关心数据,在单个容器下收集不同类型的数据,那么您可以考虑使用sum类型或带标记的联合 (例如std::vector<std::variant<x, y, z>>)的函数式编程方法。如果您关心元素的数据成员和成员函数,那么可以考虑使用基于类/基于继承的多态性的OOP方法。
是否有好的语言选择可以提供与这两种语言的良好比较和对比,以便我能够理解编程语言的哪些特性是相关的,哪些特性是正交的?
我会尽量给出一个客观的答案。
很少会看到PL本身与每一个单一的功能。在工业中维护和应用是不可行的。PL维护人员和委员会将做出决定,一些特性建议将被驱逐出去。不同的PLs构建方式不同(例如,有些使用演员模型以获得更好的并发性,有些使用垃圾收集器。所以,只需学习和暴露自己的不同的请。从不同的范式(面向对象、功能、并发)中进行选择。
C++和Python是很好的第一步。通过学习C++,您可以了解指针、OOP和类型。学习Python,您就能感觉到编程是多么的方便和快捷。这两种语言都不是没有弱点的。在用Python编写代码时,您可能已经意识到:“哦,我不需要担心指针和内存泄漏,因为这一切都是在幕后完成的!”但是过了一会儿:“啊,我在这个分支中返回了错误的类型,为什么Python不早点警告我呢?”
https://stackoverflow.com/questions/73452911
复制相似问题