
编程语言
文章平均质量分 85
编码时空的诗意行者
十年互联网大厂老司机
展开
-
C++的STL_swap trick和现代C++的方法
我们都知道,std::vector的内存增长是随着元素的增加自动增加的,但是std::vector却没有相应的随着元素的减少自动释放内存的逻辑。因此,假设我们有下面的这样的类://…//这样写,m_data的内存是不会释放的,// 假设data占用了大量的内存,那么我们就达不到释放内存的目的在C99时代,如果要正确释放内存,我们需要这样写://…// 把一个临时的空的vector和m_data的内存交换,原创 2024-12-23 09:51:15 · 777 阅读 · 0 评论 -
C++源文件扩展名的历史和发展
C++ 源文件的扩展名反映了技术发展的历程和不同项目及组织的编码规范。从 C 语言的 .c 和 .h 到 C++ 早期的 .cc,再到最通用的 .cpp 和 .hpp,这些扩展名不仅帮助开发者区分不同的文件类型,还体现了 C++ 语言的演变和社区的多样化需求。无论选择哪种扩展名,都是C++代码承载容器的标识,见证了C++悠久的历史。原创 2024-12-23 09:47:03 · 1242 阅读 · 0 评论 -
编程语言历史:聊聊Java最失败的设计:“==”
通过观察JVM上的其他语言对“”操作符的改进,我们可以看到,许多现代语言倾向于让“”默认比较对象的内容,而不是引用。这样的设计更加符合开发者的直觉,减少了因误解“==”操作符而引入的bug。同时,这些语言也提供了额外的方法来比较对象的引用,使得开发者可以在需要的时候进行精确控制。总结来说,“==”操作符的设计在Java中确实存在不合理之处。因此,在学习和使用Java时,深刻理解其设计的缘由和缺陷,可以有效地帮助我们在实践中规避许多问题,解答许多疑惑,进而更好地掌握Java并写出更加健壮和易于维护的代码。原创 2024-09-29 11:13:29 · 1129 阅读 · 0 评论 -
二十个编程语言发展的“拦路虎”
Node.js生态系统中的npm工具就是一个典型例子,它不仅帮助开发者轻松安装和更新依赖库,还通过锁定具体版本来避免版本冲突问题,从而促进了社区内的资源共享和协作。Rust语言通过其独特的所有权体系(Ownership System),包括借用检查器(borrow checker),确保了在编译阶段就发现潜在的内存安全问题,如数据竞争和野指针。Lisp中的宏扩展器允许开发者定义自己的语法结构,而Rust中的宏规则则提供了一种安全的元编程方式,既保持了语言的简洁性又增强了表达力。Common Lisp中的。原创 2024-09-25 17:45:06 · 707 阅读 · 0 评论 -
什么是反应式编程模式?
在反应式编程中,我们通常不需要关心事件发生的具体时机,也不需要编写具体的循环或条件语句来处理这些事件。相反,我们只需要声明性地定义信号之间的依赖关系即可。这意味着我们可以简单地声明“当某个事件发生时,执行特定的操作”,而具体的实现细节则由反应式编程框架来处理。反应式编程的关键在于将数据流视为事件或信号,并使用声明式的方式来定义这些信号之间的依赖关系。这种方法使得程序更加简洁、易于维护,并且能够更好地处理异步和并发的情况。原创 2024-09-23 17:45:59 · 546 阅读 · 0 评论 -
了解函数式编程:从表象到本质,从技法到心法
一旦你尝试不用赋值语句编程,函数式编程的所有其他特性就水到渠成了。你要处理函数,就必须用递归,所有这些东西在你决定不用赋值的那一刻,就自然而然地形成了。所以说,函数式编程就是这么回事。原创 2024-09-23 17:43:27 · 982 阅读 · 0 评论 -
编程语言发展历史:赋值与相等运算符的变迁历程
首先让“:=”具有声明变量的语义,Python 3.8引入赋值表达式运算符(又被形象地称为海象运算符)“:=”,支持将表达式的值赋值给尚不存在的变量,并返回变量值(Python的“=”运算符不返回表达式的值),Go语言也将声明并赋值运算符定为“:=”。这些设计让“=”和“:=”在同一个语言中同时具有赋值的语义,而“:=”更进一步还具有声明变量的额外语义,简化了支持类型推导语言声明变量的代码形式,提高了语言的表现力。PL/I 语言的比较和赋值都是“=”,其具体的含义也取决于运算符的上下文。原创 2024-07-30 16:13:54 · 412 阅读 · 0 评论 -
从历史上最昂贵的空指针崩溃,论指针判空的重要性
2024年7月18日,美国信息安全巨头CrowdStrike推送的软件更新存在严重错误,导致全球范围内大量使用其软件的Windows电脑集体陷入“蓝屏”状态,无法正常使用。这场波及多个行业的“蓝屏”事件,不仅使多国航空、铁路、银行等基础设施服务中断,例如,特斯拉工厂生产因此暂停,马斯克称其为“史上最大IT失败”(Biggest IT fail ever),以此为导火索,特斯拉市值下跌了319.87亿美元。这次蓝屏的罪魁祸首,就是指针未判空导致的。原创 2024-07-22 15:06:34 · 750 阅读 · 0 评论 -
初步探究Rust生态与图形界面编程
今天,我们一起探讨Rust图形界面编程的现状、生态系统的发展,以及面临的挑战。与C++的Qt、C#的WPF或者JavaScript的Electron等成熟的图形界面框架相比,Rust的图形界面生态显得相对年轻。布局是在安全的 Rust 中自定义实现的,并支持双向文本。Rust的快速增长也带动了其社区的发展,从各种在线论坛、聊天室到官方和非官方文档,都可以找到关于Rust图形界面编程的讨论和帮助。Rust在图形界面编程领域虽然起步较晚,但其安全性、性能和现代化的语言特性,为其未来的发展提供了坚实的基础。原创 2024-07-12 14:20:04 · 1707 阅读 · 5 评论 -
闲聊C++与面向对象思想
艾伦·凯曾说,“I made up the term object-oriented, and I can tell you I did not have C++ in mind.”(“我发明了术语‘面向对象’,可以告诉您我没有C++”)。今天看到这句话,激发了笔者写一篇文章聊聊C++与面向对象思想的关系。原创 2024-07-09 14:54:03 · 1338 阅读 · 0 评论 -
深入浅出Rust所有权:手把手从零设计Rust所有权体系,掌握Rust内存管理思想的精髓
Rust的所有权机制,看似复杂且与现有编程语言不同,使用起来思路也许难以适应。是学习Rust的难点。但如果我们换个思路,假设我们是Rust的设计者,逐步深入Rust的内心世界,也许更容易掌握Rust所有权的思想和用法。原创 2024-06-04 14:42:08 · 2853 阅读 · 2 评论 -
编程语言的设计要点
编程语言是现代计算机科学中不可或缺的一部分,人们使用编程语言来实现各种各样的软件和应用程序。但是,编程语言仅仅具备语言的基本元素还远远无法满足开发者的实际需求,好的编程语言需要在很多方面具有出色的设计水平,这包括安全性、性能、灵活性、低心智负担、正交性、易用性等方面,这些方面有的相辅相成,有的则是各有取舍,下面让我们更深入了解一下这些不同方面的含义及其重要性。原创 2024-06-03 16:41:39 · 1290 阅读 · 0 评论 -
面向对象编程思想杂谈
面向对象编程(Object-Oriented Programming, OOP)自上世纪80年代兴起以来,便以其独特的理念和强大的抽象能力,成为软件工程领域的主流编程范式。面向对象编程通过引入类和对象的概念,提供了一种强大的抽象机制,使得软件设计能够更加贴近现实世界的逻辑结构,从而降低了软件的复杂性。然而,随着技术的发展和应用范围的扩大,OOP的一些核心原则在实践中逐渐遭遇挑战,引发了人们对这一编程范式的反思。原创 2024-05-24 15:27:23 · 1085 阅读 · 0 评论 -
C++中的异类:“#” 符号背后的故事
在C++语言中,#符号是一个独特的符号。它似乎不在语言核心中,但是在源码里却又无处不在。在语法上,#的语法规则在C++体系里独具一格,和C++语法相比像是两个语言似的。这些差别让我们感受到#背后的故事不简单。今天,我们一起探讨 #在C++语言中的所有作用和功能,并思考其设计的优缺点,以及背后的历史渊源。原创 2024-05-28 10:57:42 · 1404 阅读 · 0 评论