Tin tức và phân tích của tất cả các thiết bị di động

Mojo có phải là ngôn ngữ tốt nhất để phát triển AI?

Đối với machine learning và AI, Python dường như luôn là ngôn ngữ lập trình thống trị, với các thư viện mạnh mẽ như NumPy, TensorFlow và PyTorch. Nhưng kiểm tra nhanh trên trang GitHub của các thư viện này sẽ tiết lộ rằng hầu hết mã nguồn của chúng được viết bằng C và C++.

Điều này là do Python quá chậm đối với AI. Mojo là ngôn ngữ lập trình mới cố gắng kết hợp tốc độ của C/C++ với sự tinh tế của Python.

Mojo: Tổng quan

Mojo là ngôn ngữ lập trình mới có cú pháp tương tự Python nhưng có tốc độ bằng C. Nó chủ yếu dành cho trí tuệ nhân tạo và phát triển hệ thống, cả hai đều là lĩnh vực yêu cầu phần mềm hiệu suất cao.

Nó sử dụng mô hình SIMD – một lệnh, nhiều dữ liệu để tận dụng tính song song. Nó cũng biên dịch đúng thời gian và tiết kiệm bộ nhớ.

Tuy nhiên, Mojo không phải là một ngôn ngữ hoàn toàn mới; là một siêu bộ của Python. Đó là Python cộng với các tính năng bổ sung. Giống như TypeScript, nó mở rộng JavaScript. Điều đó tốt vì nếu bạn đã biết Python thì sẽ không quá khó để chọn Mojo.

Mojo được phát triển bởi Module, một công ty được thành lập bởi Chris Lattner, người tạo ra LLVM và ngôn ngữ lập trình Swift.

Tóm lại, Mojo là một ngôn ngữ lập trình mới được thiết kế có cú pháp tương tự Python, nhưng nhanh như C/C++. Nó dự định sẽ được sử dụng trong việc phát triển trí tuệ nhân tạo và lập trình hệ thống. Mặc dù dự án chưa kết thúc nhưng nó cực kỳ hứa hẹn và trong phần tiếp theo chúng ta sẽ thảo luận lý do tại sao.

Đặc điểm của Mojo so với các ngôn ngữ lập trình khác

Mojo đã trở nên cực kỳ phổ biến mặc dù nó chưa được công bố rộng rãi. Điều này là do nó có một số lợi thế đáng kể so với các ngôn ngữ lập trình khác khi thực hiện học máy và xây dựng phần mềm cấp hệ thống. Trong phần này, chúng ta sẽ thảo luận về những lợi thế này.

# 1. Hỗ trợ riêng cho các tác vụ AI và machine learning

Mojo được thiết kế để tạo ra các ứng dụng trí tuệ nhân tạo. Kết quả là, nó bao gồm các chức năng và mô-đun trong thư viện tiêu chuẩn để xây dựng mạng lưới thần kinh, thực hiện thị giác máy tính và chuẩn bị dữ liệu.

Hầu hết các ngôn ngữ có mục đích chung như Python sẽ yêu cầu các thư viện bổ sung để thực hiện việc này, nhưng Mojo hỗ trợ điều này ngay lập tức.

#2. Cú pháp đơn giản hóa và trừu tượng hóa cấp cao

Để viết phần mềm nhanh và hiệu quả, thông thường chúng ta sẽ phải sử dụng các ngôn ngữ như C, C++ và Rust. Mặc dù những ngôn ngữ này có tốc độ nhanh nhưng việc học và làm việc với chúng lại khó khăn hơn. Điều này là do họ buộc bạn phải làm việc ở mức độ thấp nên bạn có nhiều quyền kiểm soát hơn.

Tuy nhiên, Mojo vẫn cung cấp các tính năng trừu tượng ở cấp độ cao hơn như Python và cú pháp đơn giản. Điều này giúp làm việc với các ngôn ngữ khác dễ dàng hơn với hiệu suất tương đương.

#3. Tích hợp với các khung và thư viện AI phổ biến

Như đã đề cập trước đó, Mojo không phải là một ngôn ngữ hoàn toàn mới – nó là một siêu ngôn ngữ của Python. Kết quả là nó tích hợp tốt với các thư viện hiện có như NumPy và PyTorch. Điều này có nghĩa là theo mặc định Mojo có hệ sinh thái lớn như Python.

#4. Khả năng xử lý và thao tác dữ liệu hiệu quả

Mojo được thiết kế để thao tác song song nhiều giá trị một cách hiệu quả. Điều này hữu ích nhất khi thực hiện đại số tuyến tính, lĩnh vực mà máy học phụ thuộc rất nhiều vào. Mojo cũng được biên dịch đúng thời gian nên mã byte được tối ưu hóa về tốc độ. Điều này giúp làm việc với dữ liệu và máy học trong Mojo trở nên hiệu quả.

#5. Khả năng mở rộng và hỗ trợ tính toán song song

Như đã đề cập trước đó, Mojo được xây dựng để hỗ trợ mô hình xử lý song song một lệnh-đa dữ liệu. Điều này được tích hợp vào Mojo và làm cho nó nhanh hơn. Nó cũng hoạt động tốt hơn các thư viện Python như NumPy.

Các yếu tố chính của Mojo

Trong phần này, chúng ta sẽ thảo luận về cách viết chương trình trong Mojo. Vì Mojo được dự định là siêu bộ của Python giống như TypeScript là siêu bộ của JavaScript, nên tất cả mã Python hợp lệ đều là mã Mojo hợp lệ, nhưng không phải tất cả mã Mojo đều là mã Python hợp lệ.

Mojo vẫn đang được phát triển và một số tính năng Python chưa được hỗ trợ, chẳng hạn như các lớp. Ngoài ra, trình biên dịch vẫn chưa có sẵn nhưng bạn có thể sử dụng Mojo trong sổ ghi chép của sân chơi. Tuy nhiên, trước tiên bạn sẽ cần một tài khoản mà bạn có thể tạo trên trang web của họ.

Rất khó để cung cấp hướng dẫn ngôn ngữ toàn diện vào thời điểm này vì một số tính năng vẫn chưa được thêm vào và hiện không phải tất cả đều được hỗ trợ. Thay vào đó, chúng tôi sẽ đề cập đến một số bổ sung quan trọng mà Mojo bổ sung vào những gì Python đã có.

Cú pháp và ngữ pháp

Vì Mojo là siêu bộ của Python nên cú pháp của chúng giống hệt nhau. Giống như Python, một chương trình bao gồm các câu lệnh. Những câu lệnh này có thể được nhóm thành các khối trong các hàm, vòng lặp hoặc điều kiện. Các câu lệnh bên trong một khối được thụt lề. Đây là một chương trình ví dụ được viết bằng Mojo:

def odd_or_even():
     for i in range(1, 101):
        if i % 2 == 0:
            print("Even")
        else:
            print("Odd")

odd_or_even()

Điều này hoàn toàn giống với chương trình Python. Tuy nhiên, Mojo cung cấp các tính năng bổ sung mà bạn sẽ thấy trong các phần sau.

Khai báo biến

Với Mojo, bạn có thêm hai cách để khai báo biến. Bạn có thể sử dụng từ khóa let hoặc var. Từ khóa let khai báo một biến bất biến. Sau khi được khởi tạo, giá trị của nó không thể được gán lại cho thứ khác. Mặt khác, các biến được khai báo bằng var có thể được gán lại vì chúng có thể thay đổi được.

Ưu điểm chính của các biến được khai báo bằng let hoặc var là chúng hỗ trợ các công cụ xác định kiểu. Ví dụ sau minh họa cách khai báo biến trong Mojo.

let pi: Float64 = 3.141
var greeting = "Hello, World"

# This would be impossible
# pi = 6.283

# But this is possible
greeting = "Ola"

print(pi, greeting)

cấu trúc

Ngoài một cách khai báo biến khác, Mojo còn hỗ trợ các cấu trúc. Một cách đơn giản để nhìn nhận cấu trúc là chúng giống như các lớp ngoại trừ chúng cứng nhắc hơn. Không giống như các lớp, bạn không thể thêm/xóa hoặc sửa đổi các phương thức trong khi chúng đang chạy và tất cả các thành viên phải được khai báo bằng từ khóa var hoặc let. Cấu trúc cứng hơn này cho phép Mojo quản lý bộ nhớ và hiệu suất hiệu quả hơn. Đây là một cấu trúc ví dụ:

struct Person:
    var name: StringLiteral
    var age: Int32
    
    fn __init__(inout self, name: StringLiteral, age: Int32):
        self.name = name
        self.age = age


john = Person("John Doe", 32)
print(john.name, john.age)

Chức năng

Từ cấu trúc trên, bạn có thể nhận thấy rằng chúng ta đã khai báo phương thức __init__ bằng từ khóa fn thay vì def. Điều này là do trong Mojo bạn có thể khai báo hàm bằng fn và def. Hàm được khai báo bằng fn có nhiều hạn chế hơn so với hàm def.

Cụ thể, một hàm được khai báo bằng fn có các đối số không thể thay đổi theo mặc định. Ngoài ra, cần phải xác định rõ kiểu dữ liệu của các đối số và giá trị mà hàm trả về. Tất cả các biến cục bộ phải được khai báo trước khi sử dụng.

fn say_hello(name: StringLiteral):
    print("Hello,", name)
    
# This would be invalid
# fn say_hello(name):
#     print("Hello,", name)

say_hello("John")

Nếu một hàm ném ra một ngoại lệ, điều này phải được nêu rõ ràng khi hàm được khai báo bằng từ khóa raise. Ngoài ra, Mojo không sử dụng lớp Exception như Python mà thay vào đó nó sử dụng lớp Error.

fn will_raise_error() raises:
    raise Error('Some error')
    
will_raise_error()

Quá tải

Mojo cũng hỗ trợ nạp chồng toán tử dựa trên các loại dữ liệu khác nhau. Điều này khẳng định nguyên tắc đa hình hướng đối tượng.

fn add_numbers(a: Int32, b: Int32) -> Int32:
    return a + b

fn add_numbers(a: Int32, b: Int32, c: Int32) -> Int32:
    return a + b + c

let first_total = add_numbers(2, 3)
let second_total = add_numbers(1, 2, 3)

print(first_total, second_total)

Mojo được sử dụng như thế nào trong việc phát triển trí tuệ nhân tạo

Mojo bao gồm các thư viện để xây dựng mô hình học máy. Chúng bao gồm các thư viện để xây dựng mạng lưới thần kinh. Ngoài ra, bạn cũng có thể thực hiện các tác vụ như xử lý ngôn ngữ tự nhiên và thị giác máy tính.

Mặc dù bản thân ngôn ngữ vẫn chưa hoàn thiện và hệ sinh thái của nó hầu như chưa tồn tại nhưng chúng ta vẫn có thể mong đợi Mojo mang đến nhiều tính năng để thực hiện các tác vụ như xử lý dữ liệu, xây dựng mô hình, tối ưu hóa, quản lý và giám sát mô hình.

Mojo có phải là tương lai của sự phát triển trí tuệ nhân tạo?

Thật khó để dự đoán công nghệ sẽ phát triển và được áp dụng như thế nào. Hầu hết các dự đoán đều sai nhưng không có nghĩa là chúng ta không thể thử. Để dự đoán liệu Mojo có khả năng thay thế Python hay không, hãy xem xét ưu và nhược điểm/hạn chế của Mojo:

Những lợi ích

  • Nó rất nhanh và được xây dựng để tận dụng tính song song mà không cần làm gì nhiều, điều này rất cần thiết cho máy học vì các mô hình đào tạo có thể mất nhiều thời gian.
  • Nó là một superset của Python, do đó nó dễ học hơn và có quá trình học tập suôn sẻ hơn. Điều này làm giảm sự xung đột trong việc áp dụng.
  • Điều này làm giảm nguy cơ xảy ra lỗi trong quá trình sản xuất do các lỗi như tên biến không hợp lệ hoặc kiểu không khớp được phát hiện trong quá trình biên dịch. Điều này làm cho nó được ưa thích.

Khiếm khuyết

  • Hiện tại nó chưa đầy đủ. Nhưng tất nhiên nhóm Mô-đun đang nỗ lực phát hành ngôn ngữ và trình dịch của nó.
  • Mặc dù điều này giúp đơn giản hóa công việc của các nhà sản xuất khung, nhưng nó có thể không mang lại nhiều lợi ích cho người tiêu dùng khung vì họ đã sử dụng các khung máy học Python.
  • Vẫn chưa có một hệ sinh thái lớn về các công cụ và tài nguyên học tập. Mặc dù bạn có thể sử dụng thư viện python trong Mojo, nhưng bạn vẫn có thể sử dụng thư viện python trong python. Để Mojo có lợi thế hơn Python, nó cần có thư viện tốc độ của Mojo.

những từ cuối

Nếu sự cường điệu hiện tại không còn nữa, Mojo có khả năng trở thành ngôn ngữ AI phổ biến. Tôi nghĩ chỉ riêng tốc độ của anh ấy cũng đủ để khuyến khích mọi người thay đổi. Ưu điểm là sự đơn giản của nó. Nhưng cũng giống như TypeScript không thay thế hoàn toàn JavaScript, có khả năng Mojo sẽ không thay thế hoàn toàn Python.

Mojo chắc chắn là một ngôn ngữ cần ghi nhớ khi nó trưởng thành.

Sau đó kiểm tra loại và giao diện trong TypeScript.