Ngôn ngữ lập trình V mã nguồn mở

Đã dịch vào danh mục trình biên dịch mở cho ngôn ngữ V. V là một ngôn ngữ được biên dịch bằng máy được gõ tĩnh, tập trung vào việc làm cho việc phát triển dễ bảo trì hơn và biên dịch rất nhanh. Mã biên dịch, thư viện và các công cụ liên quan đang mở theo giấy phép MIT.

Cú pháp của V rất giống với Go, mượn một số cấu trúc từ Oberon, Rust và Swift. Ngôn ngữ được đơn giản hóa hết mức có thể và theo nhà phát triển, 30 phút học là đủ để tìm hiểu những điều cơ bản tài liệu. Đồng thời, ngôn ngữ này vẫn khá mạnh mẽ và có thể được sử dụng để thực hiện các tác vụ tương tự như khi sử dụng các ngôn ngữ lập trình khác (ví dụ: các thư viện có sẵn cho đồ họa 2D/3D, tạo GUI và ứng dụng web).

Việc tạo ra một ngôn ngữ mới được thúc đẩy bởi mong muốn đạt được sự kết hợp giữa cú pháp đơn giản, tốc độ biên dịch, dễ dàng song song hóa các hoạt động, tính di động và khả năng bảo trì của mã với hiệu suất của C/C++, tính bảo mật của Rust và việc tạo mã máy ở giai đoạn biên dịch Zig. Tôi cũng muốn có một trình biên dịch nhỏ gọn và nhanh chóng, có thể hoạt động mà không cần phụ thuộc bên ngoài, loại bỏ phạm vi toàn cục (các biến toàn cục) và cung cấp khả năng tải lại mã “nóng”.

So với C++, ngôn ngữ mới đơn giản hơn đáng kể, cung cấp tốc độ biên dịch nhanh hơn (lên tới 400 lần), thực hành các kỹ thuật lập trình an toàn, không gặp vấn đề với hành vi không xác định và cung cấp các công cụ tích hợp để thực hiện song song các hoạt động. So với Python, V nhanh hơn, đơn giản hơn, an toàn hơn và dễ bảo trì hơn. So với Go, V không có biến toàn cục, không có giá trị rỗng, tất cả các giá trị biến phải luôn được xác định, tất cả các đối tượng theo mặc định là bất biến, chỉ hỗ trợ một kiểu gán (“a := 0”), nhỏ gọn hơn đáng kể thời gian chạy và kích thước của các tệp thực thi thu được, sự hiện diện của khả năng di chuyển trực tiếp từ C, không có trình thu gom rác, tuần tự hóa nhanh hơn, khả năng nội suy chuỗi (“println('$foo: $bar.baz')”).

fn chính() {
lĩnh vực := ['trò chơi', 'web', 'công cụ', 'khoa học', 'hệ thống', 'GUI', 'di động'] a := 10
nếu đúng {
đến := 20
}
cho diện tích trong khu vực {
println('Xin chào, các nhà phát triển khu vực $!')
}
}

Tính năng dự án:

  • Trình biên dịch nhỏ gọn và nhanh chóng, cùng với thư viện tiêu chuẩn chiếm khoảng 400 KB. Tốc độ biên dịch cao đạt được thông qua việc tạo trực tiếp mã máy và tính mô đun. Tốc độ biên dịch xấp xỉ 1.2 triệu dòng mã/giây trên một lõi CPU (lưu ý trong quá trình hoạt động V có thể sử dụng C, sau đó tốc độ giảm xuống còn 100 nghìn dòng/giây). Quá trình tự lắp ráp trình biên dịch, cũng được viết bằng ngôn ngữ V (cũng có phiên bản tham chiếu trong Go), mất khoảng 0.4 giây. Đến cuối năm nay, công việc tối ưu hóa bổ sung dự kiến ​​sẽ được hoàn thành, điều này sẽ giảm thời gian xây dựng trình biên dịch xuống còn 0.15 giây. Đánh giá qua các thử nghiệm do nhà phát triển thực hiện, việc tự lắp ráp Go cần 512 MB dung lượng ổ đĩa và chạy trong một phút rưỡi, Rust yêu cầu 30 GB và 45 phút, GCC - 8 GB và 50 phút, Clang - 90 GB và 25 phút,
    Swift - 70 GB và 90 phút;

  • Các chương trình được biên dịch thành các tệp thực thi mà không cần phụ thuộc vào bên ngoài. Kích thước tệp thực thi của máy chủ http đơn giản sau khi lắp ráp chỉ là 65 KB;
  • Hiệu suất của các ứng dụng được biên dịch ở mức độ tập hợp của các chương trình C;
  • Khả năng tương tác liền mạch với mã C mà không cần thêm chi phí. Các hàm trong ngôn ngữ C có thể được gọi từ mã trong ngôn ngữ V và ngược lại, mã trong ngôn ngữ V có thể được gọi bằng bất kỳ ngôn ngữ nào tương thích với C;
  • Hỗ trợ dịch các dự án C/C++ sang dạng biểu diễn bằng ngôn ngữ V. Trình phân tích cú pháp từ Clang được sử dụng để dịch. Không phải tất cả các tính năng của tiêu chuẩn C đều được hỗ trợ, nhưng khả năng hiện tại của trình dịch đã đủ cho bản dịch bằng ngôn ngữ của trò chơi V DOOM. Trình dịch C++ vẫn đang ở giai đoạn phát triển ban đầu;
  • Hỗ trợ tuần tự hóa tích hợp mà không bị ràng buộc với thời gian chạy;
  • Giảm thiểu các hoạt động cấp phát bộ nhớ;
  • Đảm bảo an toàn: không có NULL, biến toàn cục, giá trị không xác định và xác định lại biến. Kiểm tra tràn bộ đệm tích hợp. Hỗ trợ các chức năng chung (Generic). Các đối tượng và cấu trúc không thể thay đổi theo mặc định;
  • Khả năng tải lại mã “nóng” (phản ánh những thay đổi trong mã một cách nhanh chóng mà không cần biên dịch lại);
  • Công cụ đảm bảo đa luồng. Giống như trong ngôn ngữ Go, cấu trúc như “run foo()” được sử dụng để bắt đầu một luồng thực thi mới (tương tự như “go foo()”). Trong tương lai, chúng tôi có kế hoạch hỗ trợ goroutines và bộ lập lịch luồng;
  • Hỗ trợ cho các hệ điều hành Windows, macOS, Linux, *BSD. Dự kiến ​​​​sẽ bổ sung hỗ trợ cho Android và iOS vào cuối năm nay;
  • Quản lý bộ nhớ tại thời điểm biên dịch (như trong Rust) mà không cần sử dụng trình thu gom rác;
  • Tính sẵn có của bộ công cụ đa nền tảng cho đầu ra đồ họa, sử dụng GDI+/Cocoa và OpenGL để kết xuất (hỗ trợ cho DirectX, Vulkan và Metal API đã được lên kế hoạch). Có các công cụ để làm việc với các vật thể 3D, hoạt hình bộ xương và điều khiển máy ảnh;
  • Có sẵn thư viện để tạo giao diện đồ họa với các yếu tố thiết kế dành riêng cho từng hệ điều hành. Windows sử dụng WinAPI/GDI+, macOS sử dụng Cocoa và Linux sử dụng bộ tiện ích riêng. Thư viện đã được sử dụng trong quá trình phát triển Volt — ứng dụng khách cho Slack, Skype, Gmail, Twitter và Facebook;

    Kế hoạch là tạo ra một ứng dụng thiết kế giao diện giống Delphi, cung cấp API khai báo tương tự như SwiftUI và React Native, đồng thời cung cấp hỗ trợ tạo ứng dụng di động cho iOS và Android;

    Ngôn ngữ lập trình V mã nguồn mở

  • Có sẵn khung web tích hợp, được sử dụng để tạo trang web, diễn đàn và blog cho các nhà phát triển dự án. Hỗ trợ biên dịch trước các mẫu HTML mà không cần xử lý chúng theo từng yêu cầu;
  • Hỗ trợ biên dịch chéo. Để xây dựng tệp thực thi cho Windows, chỉ cần chạy “v -os windows” và đối với Linux - “v -os linux” (sẽ có hỗ trợ biên dịch chéo cho macOS sau này). Biên dịch chéo cũng hoạt động cho các ứng dụng đồ họa;
  • Trình quản lý phụ thuộc tích hợp, trình quản lý gói và công cụ xây dựng. Để xây dựng chương trình, chỉ cần chạy “v.” mà không cần sử dụng các tiện ích make hoặc bên ngoài. Để cài đặt các thư viện bổ sung, chỉ cần chạy, ví dụ: “v get sqlite”;
  • Tính sẵn có của các plugin để phát triển bằng ngôn ngữ V trong trình soạn thảo Mã VS и Khí lực.

Phát triển lĩnh hội cộng đồng với chủ nghĩa hoài nghi, vì mã được xuất bản cho thấy rằng không phải tất cả các khả năng được khai báo vẫn chưa được triển khai và cần một lượng công việc rất lớn để thực hiện tất cả các kế hoạch.
Ngoài ra, ban đầu kho lưu trữ có đã đăng mã bị hỏng có vấn đề với việc lắp ráp và thực thi. Người ta cho rằng tác giả vẫn chưa đạt đến giai đoạn mà họ bắt đầu nhận thấy định luật ParetoTheo đó, 20% nỗ lực tạo ra 80% kết quả, 80% nỗ lực còn lại chỉ tạo ra 20% kết quả.

Trong khi đó, trình theo dõi lỗi của Project V đã xóa khoảng 10 bài đăng khỏi cuộc biểu tình Ví dụ: mã chất lượng thấp cho biết việc sử dụng C-insert và việc sử dụng trong thư viện các hàm để xóa thư mục của lệnh rm thông qua lệnh gọi os.system("rm -rf $path"). Tác giả của dự án nóirằng anh ấy chỉ xóa tin nhắn, được phát hành chơi khăm (với những thay đổi xác nhận giá trị của lời chỉ trích, ở lại в chỉnh sửa lịch sử).

Nguồn: opennet.ru

Thêm một lời nhận xét