对象安全性带来的一个大坑
在最近的编码中遇到了一个提示the trait cannot be made into an object
的问题。这个问题其实是从其他语言中直接迁移来的习惯造成的,这里记录一下问题所在。
在最近的编码中遇到了一个提示the trait cannot be made into an object
的问题。这个问题其实是从其他语言中直接迁移来的习惯造成的,这里记录一下问题所在。
Java 21是继Java 17之后的一个长期支持版本(LTS),也是一个里程碑版本,其中稳定提供了很多功能。Java 21引入了15个新特性,但是这些新特性大多都是在之前的版本中进行了孵化和预览的,这里拣选这些特性中比较重要且可能比较常用的功能来记录。
Java 20与Java 19一样也是一个小功能进化版本,其在Java 19的基础之上并没有引入太多的新功能,而是继续孵化之前版本中引入的功能。
Java 19同样是一个小的进化版本,相比Java 18并没有引入更多稳定发布的功能,而是继续对即将要加入的功能进行孵化和预览。
#[diagnostic]
属性
随着Rust 1.78版本的发布,有很多还没有升级Rust编译器的小伙伴在升级依赖库的时候,可能就会遇到#[diagnostic]
属性不支持的错误了。那么这个新增的#[diagnostic]
到底有什么用途呢?
派生宏是Rust中过程宏的一种,也是平时最为常见和常用的宏。善用派生宏可以快速的为已有的数据结构批量增加功能相似的内容。Rust中的过程宏之所以在学起来十分的艰难,主要还是因为宏是一门专门用于生成代码结构的语言,要想熟练的掌握宏的编写,还必须首先熟练掌握Rust基本语言本身。
其实类型转换在各种强类型的语言中的使用都非常的广泛,而在实现某个具体业务的时候,所绘制的数据流图也是由一种数据转换成另一种数据来体现业务流程的流转和变化的。所以其实设计程序的工作更多的就是处理和转换不同的数据类型。但是对与Rust这种对于数据类型要求更高的语言中,数据类型之间的转换就看起来变得更加复杂了。
宏是元编程的一种手段,在Rust中,宏无处不在。宏在C/C++中就是一个特别广泛的存在,但是C/C++中的宏来的远远比Rust中的宏危险。C/C++中的宏主要采用的是文本替换的形式混入代码中,而Rust中的宏则是会采用展开成为源代码的方式混入代码,然后再与代码的其余部分一起进行编译。
Rust中的特征(trait)可以被看作是其他语言中的接口,它其实是一种约束。通过特征可以直接调用实现了这个特征的数据结构中的方法,根据实现形式不同,这种分发存在静态分发和动态分发两种形式。
在入门Rust以后,会发现生命期(Lifetime)是一个比所有权机制更难以理解和掌握的机制。当我们磕磕绊绊的解决了程序里的所有权转移以后,就会发现Rust编译开始报出生命期的编译错误了。所以生命期机制是Rust中第二个劝退点,顺利攻克生命期的概念是使用和进入Rust编程大门的一个必经之路。