V یک زبان جدید با زمان کامپایل سریع، منحنی یادگیری آسان، و ویژگی هایی برای تضمین امنیت کد است. دریابید که این همه هیاهو برای چیست.
V یک زبان برنامه نویسی جدید، منبع باز و با تایپ استاتیک است که توسط Alexander Medvednikov ایجاد شده است. V وعده می دهد که ساده، سریع و ایمن برای ساختن نرم افزار قابل نگهداری با آن است. چندین زبان بر طراحی V تأثیر گذاشته اند از جمله Oberon، Swift، Kotlin و Python.
در مورد V، ویژگی های آن و نحوه مقایسه آن با زبان های دیگر بیاموزید.
کارهایی که می توانید با V انجام دهید
V قدرت زیادی دارد و تقریباً در هر صنعتی از جمله برنامه نویسی سیستم، توسعه وب و توسعه بازی می توانید از آن استفاده کنید. زبان ساده، سریع و ایمن است.
V طیف گسترده ای از کتابخانه های گرافیکی قدرتمند را برای توسعه بازی ارائه می دهد. اینها در بالای GDI+/Cacoa Drawing و OpenGL برای کاربردهای پیچیدهتر 2D/3D ساخته شدهاند.
V یک ماژول رابط کاربری دارد که از جعبهابزارهای بومی رابط کاربری گرافیکی برای برنامههای موبایل، WinAPI/GDI+ برای ویندوز، کاکائو برای macOS و طراحی سفارشی برای لینوکس استفاده میکند.
دلایلی برای امتحان V
اگرچه V یک زبان جدید است، اما این مزایا آن را به یک گزینه قانونی تبدیل می کند.
سادگی
برای ساخت پروژه خود، فقط باید اجرا کنید:
v .
شما نیازی به راه اندازی یک محیط ساخت، ایجاد یک فایل ساخت، وارد کردن هدر یا راه اندازی یک محیط مجازی ندارید. اگر می خواهید کتابخانه های جدیدی را از طریق vpm (V package manager) نصب کنید، کافی است اجرا کنید
v install <package_name>
ایمنی
به طور پیش فرض، V دارای:
- متغیرهای تغییرناپذیر
- ساختارهای تغییرناپذیر
- گزینه/نتیجه و بررسی خطای اجباری
- انواع مجموع
- ژنریک ها
- تابع تغییرناپذیر args
و نه:
- خالی
- سایه متغیر
- رفتار تعریف نشده
- متغیرهای سراسری (برای برنامه های سطح پایین مانند کرنل ها می توان از طریق پرچم فعال کرد)
سرعت تالیف
برخی از زبان های برنامه نویسی از نظر اجرا یا کامپایل سریعتر از بقیه هستند. عملکرد V به اندازه C است. زمان کامپایل آن در حدود 110k loc/s با باطن C و تقریباً 1 میلیون loc/s با backendهای بومی و tcc است. V همچنین از تخصیصهای غیرضروری دوری میکند تا یک رویکرد کدگذاری ساده و بدون انتزاع ارائه کند.
مدیریت حافظه
V از جمعآوری زباله استفاده نمیکند، که آن را از زبانهایی مانند Go و Java متفاوت میکند. در عوض، V حافظه را در زمان کامپایل مدیریت می کند، اما فقط برای موقعیت های اولیه کار می کند. برای موارد پیچیده تر باید آن را به صورت دستی مدیریت کنید.
قالب بندی برای سازگاری سبک کد
میتوانید از فرمتکننده vfmt برای فرمت کردن کد V و بهبود خوانایی آن با اجرای:
v fmt -w <your_filename>.v
پیام های خطای دوستانه
پیام های خطای V مفصل، آموزنده و مفید هستند. به این مثال توجه کنید:
user.v:8:14: error: `update_user` parameter `user` is mutable, you need to provide `mut`: `update_user(mut user)`
7 | mut user := User{}
8 | update_user(user)
| ~~~~
9 | }
با کمک پیغام خطا می توانید این کد را برطرف کنید:
mut user := User{}
update_user(mut user)
C++ در مقابل Go در مقابل V: مقایسه سه زبان
در این مثالها، میتوانید تفاوت کدهای C++، Go و V را در موارد خاص برنامهنویسی ببینید.
سلام دنیا
در C++:
#include <iostream>
int main() {
std::cout << "Hello World!" << std::endl;
}
In Go:
package main
import "fmt"
func main() {
fmt.Println("Hello World!")
}
در V:
println('Hello World!')
در این برنامه بسیار ابتدایی – چاپ متن “Hello World!” – می توانید ببینید که V بسیار ساده تر از C++ یا Go است. برای چنین برنامه ساده ای نیازی به وارد کردن یا گنجاندن کتابخانه ای ندارید.
مقداردهی اولیه برداری بردار
در C++:
std::vector<int> numbers = {1, 2, 3, 4};
In Go:
numbers := []int{1, 2, 3, 4}
در V:
numbers := [1, 2, 3, 4]
در این مورد، می توانید ببینید که V همچنان کد تمیزتر از دو کد دیگر تولید می کند. برخلاف بردارهای Go و C++، V به بردارهای خود نیازی ندارد که مقادیری از نوع ثابت را نگه دارند.
چاپ وکتور
در C++:
std::copy(numbers.begin(), numbers.end(),
std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
In Go:
fmt.Println(numbers)
در V:
println(numbers)
تابع println V می تواند متغیر برداری را به صورت بومی چاپ کند، درست مانند Go’s، اگرچه دومی از بسته fmt استفاده می کند. فایل های هدر iostream C++ عملکرد مشابهی را ارائه می دهند. با این حال، هنوز باید مراقب چاپ تک تک عناصر وکتور باشید.
خواندن یک فایل
در C++:
#include <iostream>
#include <fstream>
int main() {
std::string path = "/etc/hosts";
std::ifstream f(path);
std::string text;
text.assign(std::istreambuf_iterator<char>(f), {});
if (!f)
std::cerr << "error reading from file" << std::endl;
}
In Go:
package main
import (
"io/ioutil"
"log"
)
func main() {
path := "/etc/hosts"
b, err := ioutil.ReadFile(path)
if err != nil {
log.Println(err)
return
}
text := string(b)
}
در V:
import os
path := "/etc/hosts"
text := os.read_file(path) or {
eprintln(err)
return
}
برای خواندن فایل، V از ماژول os برای ارائه عملکردهای مستقل سیستم عامل/پلتفرم مشترک استفاده می کند. اینها وظایفی مانند دسترسی به آرگومان های خط فرمان، خواندن فایل ها و پردازش فرآیندها را انجام می دهند. در این حالت، ما می خواهیم یک فایل در مسیر را بخوانیم و محتویات را برگردانیم، بنابراین از تابع read_file(path) استفاده می کنیم. اگر محتوای موجود در مسیر داده شده وجود نداشته باشد read_file یک خطا برمی گرداند. اگر می خواهید در مورد سایر ماژول های V بیشتر بدانید، ممکن است بخواهید مستندات آنها را بررسی کنید.
برای امتحان V آماده اید؟
V یک زبان برنامه نویسی جدید است که هنوز در مراحل اولیه توسعه است. با این حال، قدرت زیادی دارد و سریع، ایمن، آسان و قابل نگهداری است.
V کد تمیزتری نسبت به C++ and Go دارد. این نشان می دهد که V می تواند به برنامه نویسان در پایبندی به یکی از اصول اولیه برنامه نویسی کمک کند. بنابراین، آیا آماده هستید V را امتحان کنید؟