Bài viết Câu hỏi About RongvangIT
profile Pic
0
0

Đăng ngày:

 

Sửa ngày:

56 Lượt xem

Trải nghiệm về Mojo - Ngôn ngữ mới nhanh gấp 35000 lần Pytho​n【Phần cơ bản】

Mojo

Cùng trải nghiệm về Mojo - Ngôn ngữ mới nhanh gấp 35000 lần Python. Hãy cùng học các kiến thức cơ bản về Mojo trong bài viết này.

Mojo là gì

Mojo là một ngôn ngữ lập trình mới, kết hợp sự đơn giản của Python và tốc độ cùng tính bảo mật về bộ nhớ của Rust.

https://www.modular.com/mojo

Mojo được cho là nhanh hơn Python đến 35000 lần và hy vọng sẽ khắc phục “sự chậm trễ,” một điểm yếu của Python. Hơn nữa, cách viết của Mojo cũng tương tự Python, giúp việc chuyển đổi dễ dàng hơn.

Ngôn ngữ này đã hỗ trợ các máy tính Mac trang bị Apple Silicon kể từ ngày 19 tháng 10 năm 2023, vì vậy Kiyoshi đã nhanh chóng thử nghiệm.

https://docs.modular.com/mojo/

Tài liệu chính thức có thể tìm thấy tại đây.

Cài đặt Mojo

Để sử dụng Mojo trong Terminal hoặc VSCode, bạn cần phải cài đặt nó.

Kiyoshi đã viết bài viết hướng dẫn trước đây, vui lòng xem nó tại đây

https://rongvangit.com/kiyoshi/posts/b2d1a2h0c1a1c

Cơ bản về Mojo

Kiyoshi sẽ viết chủ yếu so sánh với Python.

Giả thiết

    • Mojo là ngôn ngữ biên dịch, và giống như các ngôn ngữ biên dịch khác, nó cần một điểm bắt đầu là main().
    • Mojo hỗ trợ tất cả cú pháp và ngữ nghĩa của Python (có thể thực hiện cả với cách viết của Python).

Biến var, let

var x: Int = 1
let y: Int = 2

Biến var cho phép thay đổi giá trị, biến let thì không cho phép. Bạn có thể bỏ qua kiểu dữ liệu như Int nếu bạn muốn.

Hàm : def → fn

Python:

def main():
    x = 1
    x += 1
    print(x)

Mojo

fn main():
    var x: Int = 1
    x += 1
    print(x)

Tuy nhiên, bạn vẫn có thể sử dụng “def” để định nghĩa hàm. Nếu sử dụng “fn,” bạn có thể bắt buộc kiểu dữ liệu.

Nếu bạn muốn thiết lập tham số và giá trị trả về cho hàm, bạn cần phải chỉ định kiểu dữ liệu. Nếu không, sẽ có lỗi.

  • Ví dụ đúng
    fn add(x: Int, y: Int = 1) -> Int:
      return x + y
  • Ví dụ sai
    fn add(x, y):
      return x + y
    Cách đặt giá trị mặc định của tham số tương tự Python.

borrowed, inout và owned

Tham số của hàm được đọc như biến không thể thay đổi (immutable). Do đó, ví dụ sau sẽ gây ra lỗi:

fn add(x: Int, y: Int) -> Int:
    x += 1
    return x + y

Từ khóa “borrowed” được sử dụng để bảo đảm rằng hàm không sở hữu (được hiểu là không thay đổi) đối tượng đó. Mặc định, borrowed được bỏ qua.

fn add(borrowed x: Int, borrowed y: Int) -> Int:
    return x + y

Hơn nữa, có từ khóa “inout” cho phép biến tham số trở thành biến có thể thay đổi, và những thay đổi bên trong hàm ảnh hưởng đến bên ngoài.

fn main():
    var a = 1
    var b = 2
    let c = add_inout(a, b)
    print(a)
    print(b)
    print(c)

fn add_inout(inout x: Int, inout y: Int) -> Int:
    x += 1
    y += 1
    return x + y

Kết quả khi chạy đoạn mã này là:

2
3
5

Biến a ban đầu có giá trị 1, và biến b có giá trị 2, nhưng sau khi gọi hàm fn add_inout(), giá trị của chúng lần lượt là 2 và 3.

Từ khóa “owned” cho phép biến tham số trở thành biến có thể thay đổi, nhưng những thay đổi này không ảnh hưởng đến bên ngoài. Khi sử dụng owned, kết quả sẽ là:

fn main():
    var a = 1
    var b = 2
    let c = add_inout(a, b)
    print(a)
    print(b)
    print(c)

fn add_inout(owned x: Int, owned y: Int) -> Int:
    x += 1
    y += 1
    return x + y

Kết quả:

1
2
5

Biến a và b không bị thay đổi.

Lớp class → cấu trúc struct

Cấu trúc Mojo

hoàn toàn tĩnh giống như một lớp, cho phép bạn định nghĩa phương thức, trường, nạp chồng, decorator và nhiều hơn nữa.

struct MyPair:
    var first: Int
    var second: Int

    fn __init__(inout self, first: Int, second: Int):
        self.first = first
        self.second = second

    fn dump(self):
        print(self.first, self.second)

fn main():
    let mine = MyPair(2, 4)
    mine.dump()

Khi bạn truyền tham số self là tham số đầu tiên và định nghĩa __init__(), điều này giống với cách Python định nghĩa một lớp.

Kết quả của đoạn mã trên sẽ là:

2 4

Khác với lớp Python, bạn cần phải định nghĩa các trường như self.firstself.second trước, nếu không sẽ gây ra lỗi.

error: 'MyPair' value has no attribute 'first'
        self.first = first + 1

Đối số của hàm __init() phải là “inout.” Điều này xảy ra vì hàm khởi tạo chịu trách nhiệm khởi tạo đối tượng, và nó thay đổi đối tượng “self,” nên tham số phải là biến có thể thay đổi. Do đó, từ khóa “borrowed” không phù hợp và “owned” cũng không phù hợp, bạn cần “inout.”

Sử dụng thư viện Python

Khi chạy mã theo tài liệu, bạn sẽ gặp lỗi…

Có vẻ như không thể nạp được numpy. Kiyoshi đã tìm hiểu nhiều thứ nhưng vẫn chưa khắc phục được. Vì thông tin còn hạn chế nên khi gặp vấn đề như vậy, xử lý sẽ rất khó khăn…

Cuối cùng

Mojo vẫn là một ngôn ngữ đang phát triển và điều này đã được lặp đi lặp lại trong tài liệu. Với sự tương tự với Python và tính dễ viết mã của nó, Kiyoshi rất mong chờ sự phát triển trong tương lai.

Kiyoshi dự định viết một bài viết so sánh tốc độ giữa Mojo và Python trong tương lai, nên Kiyoshi rất vui nếu bạn đọc nó.

Kiyoshi hy vọng có thể chia sẻ điều gì đó hữu ích ít nhiều, nên nếu bạn quan tâm, hãy kiểm tra và follow mình nhé.

Thân ái và chào tạm biệt.

Bài viết cùng chuyên đề [ Nhập môn Mojo ]

kiyoshi
Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.

Bình luận

Bài viết chưa có bình luận. Hãy trở thành người bình luận đầu tiên!
Sign up for free and join this conversation.
Sign Up
If you already have a RongvangIT account Login
Danh sách thư mục
Tại sao không đăng ký và nhận được nhiều hơn từ RồngVàngIT ?

Bạn cần đăng nhập để sử dụng chức năng này, cùng hàng loạt các chức năng tuyệt vời khác của RồngVàngIT !

  1. 1. Bạn sẽ nhận được các bài viết phù hợp bằng chức năng theo dõi tag và người dùng.
  2. 2. Bạn có thể đọc lại các thông tin hữu ích bằng chức năng lưu trữ nội dung.
  3. 3. Chia sẻ kiến thức, đặt câu hỏi và ghi lại quá trình trưởng thành của mình cùng RồngVàngIT !
Tạo tài khoản Đăng nhập
profile Pic