ARTS 第十六周

发布于 April 16, 2020

Review

为了「略懂」Rust,开始学习 Rust 的官方教程

引用自《RUST 语言的编程范式》

Java 与 Rust 在改善C/C++上走了完全不同的两条路,他们主要改善的问题就是C/C++ Safety的问题。所谓C/C++编程安全上的问题,主要是:内存的管理、数据在共享中出现的“野指针”、“野引用”的问题。

  • 对于这些问题,Java用引用垃圾回收再加上强大的VM字节码技术可以进行各种像反射、字节码修改的黑魔法。

  • 而Rust不玩垃圾回收,也不玩VM,所以,作为静态语言的它,只能在编译器上下工夫。如果要让编译器能够在编译时检查出一些安全问题,那么就需要程序员在编程上与Rust语言有一些约定了,其中最大的一个约定规则就是变量的所有权问题,并且还要在代码上“去糖”,比如让程序员说明一些共享引用的生命周期。

  • Rust的这些所有权的约定造成了很大的编程上的麻烦,写Rust的程序时,基本上来说,你的程序再也不要想可能轻轻松松能编译通过了。而且,在面对一些场景的代码编写时,如:函数式的闭包,多线程的不变数据的共享,多态……开始变得有些复杂,并会让你有种找不到北的感觉。

  • Rust的Trait很像Java的接口,通过Trait可以实现C++的拷贝构造、重载操作符、多态等操作……

  • 学习Rust的学习曲线并不平,用Rust写程序,基本上来说,一旦编译通过,代码运行起来是安全的,bug也是很少的。

Algorithm

55. Jump Game

Given an array of non-negative integers, you are initially positioned at the first index of the array.

Each element in the array represents your maximum jump length at that position.

Determine if you are able to reach the last index.

Example 1:

Input: [2,3,1,1,4] Output: true Explanation: Jump 1 step from index 0 to 1, then 3 steps to the last index. Example 2:

Input: [3,2,1,0,4] Output: false Explanation: You will always arrive at index 3 no matter what. Its maximum jump length is 0, which makes it impossible to reach the last index.

func canJump(nums []int) bool {
    can := true
    for i := len(nums) - 1; i > 0; i-- {
        for j := i - 1; j >= 0; j-- {
            if nums[j] >= i-j {
                can = true
                break
            } else {
                can = false
            }
        }
        if !can {
            break
        }
    }
    return can
}

Tip

goquery: 一个语法上接近 jQuery 的 Go 语言实现。

Share

分享一首《蝶恋花》

云林一段松花满,默听莺啼,巧舌如调管。红瘦绿肥春正暖,倏然夏至光阴转。又值秋来容易换,黄花香,堪供玩。迅速严冬如指拈,逍遥四季无人管。

E