V (زبان برنامه نویسی)

V که به عنوان vlang نیز شناخته میشود یک زبان برنامه نویسی اایستا و کامپایل شونده است که توسط Alexander Medvednikov در اوایل ۲۰۱۹ ایجاد شد . این زبان از زبان Goالهام گرفته شده و زبان های Oberon,Swift و Rust بر آن تاثیر داشتند[۴] [۵] [۶].این زبان آزاد و منبع باز است که تحت مجوز  MIT منتشر شده و در حال حاضر در نسخه ی بتاست . [۷]

V
A capitalized letter V colored blue
لوگو رسمی V
پارادایم ها چند نمونه: عملکردی ضروری ساختار یافته همزمان
طراحی شده توسط  الکساندر مدویدنیکوف [۱]
اولين بار ظاهر شد  20 ژوئن 2019؛ 4 سال پیش  (2019-06-20 [۲] 
نسخه پایدار
0.4.5[۳] / 20 مارس 2024؛ 2 ماه پیش (20 مارس 2024)  Edit this on Wikidata (۲۰ مارس ۲۰۲۴)  
قوانین تایپ سیستم ثابت قوی نتیجه گیری
مدیریت حافظه اختیاری (خودکار یا دستی)
زبان اجرای V
پلتفرم x86-64
OS لینوکس مکوس، ویندوز، FreeBSD OpenBSD NetBSD، DragonflyBSD Solarisسولریس
مجوز MIT
افزونه های نام فایل .v .vsh
وب سایت vlang.io
تحت تاثیر
Go, Kotlin, Oberon, Python, Rust, Swift

اهداف V شامل سهولت استفاده ، خوانایی بهتر کد و قابلیت نگه داشت است [۸][۹]

تاریخچه

ویرایش

به گفته یکی از توسعه دهندگان ، این زبان جدید در نتیجه ی ناامیدی از زبان های موجود در جهت استفاده در پروژه های شخصی ایجاد شده است . [۱۰] این زبان در اصل برای استفاده شخصی در نظر گرفته شده بود ، اما پس از اینکه در انظار از ان نام برده شد و شهرت کسب کرد ، تصمیم به انتشار عمومی ان گرفته شد . V در ابتدا به منظور توسعه یک کلاینت پیام رسانی دسکتاپ به نام Voltایجاد شد[۱۱]. پس از انتشار عمومی ، کامپایلری به زبان Vنوشته شد و زبان میتوانست خود را کامپایل کند . اهداف کلیدی طراحی پشتیبان ایجاد زبان V عبارت اند از : یادگیری آسان و سریع ، خوانایی بالاتر ، کامپایل سریع ، افزایش امینت ، توسعه کارآمد ، قابلیت استفاده بین پلتفرم های مختلف ، تعامل پذیری بهتر با زبان C، مدیریت بهتر خطاها ،‌ویژگی های مدرن و نرم افزاری با قابلیت نگه داری بیشتر. [۱۲][۱۳][۱۴]

زبان Vاز طریق گیت هاب[۱۵] [۱۶]منتشر و توسعه میابد و توسط توسعه دهندگان و مشارکت کنندگان جامعه گیت نگه داری و بروزرسانی میشود[۱۷].

 
گورکن نشان(نماد شگونه)‌رسمی زبان برنامه نویسی V است . [۱۸]

ویژگی ها

ویرایش

امنیت

ویرایش

V سیایت هایی برای بهبود امنیت حافظه ، سرعت و کد امن در نظر گرفته . [۱۹][۲۰] . از جمله ی این ویژگی های امنیتی پیش فرض عبارت اند از :‌[۲۱][۲۲][۲۳][۲۴] ۱) استفاده از ویژگی بررسی نقص ها. ۲) استفاده از گزینه/نتیجه. ۳) بررسی الزامی خطاها . ۴) متغیر ها به طور پیش فرض غیرقابل تغییرند . ۵) ساختار ها به طور پیش فرض تغییرناپذیرند. ۶) تابع ()args به طور پیش فرض غیر قابل تغییر است . ۷) عدم استفاده از مقادیری که تعیرف نشده اند . ۸)‌ عدم ابهام متغیر ها . ۹) عدم استفاده از مقدار null (مگر اینکه در کد به عنوان ناامن مشخص شده باشد.) ۱۰) عدم استفاده از متغیر های سراسری (مگر اینکه از طریق پرچم (flag) فعال شده باشد) .

کارایی

ویرایش

V از نوع های مقداری و بافر های رشته ای برای کاهش تخصیص حافظه استفاده می کند.[۲۵] [۲۶][۲۷]

مدیریت حافظه

ویرایش

۴ مورد پشتیبانی شده توسط این زبان برای مدیریت حافظه به شرح زیر است : [۲۸][۲۹][۳۰]


۱. استفاده از یک بازیافت حافظه اختیاری (که میتواند غیرفعال شود) برای مدیریت تخصیص ها که به صورت پیش فرض است .

۲. مدیریت دستی حافظه از طریق غیر فعال کردن بازیافت حافظ (gc none).

۳. Autofree که اکثر اشیا را از طریق free call insertionمدیریت میکند و سپس درصد باقی مانده توسط بازیافت حافظه ازاد میشود (-autofree).

۴. خزینه حافظه (-prealloc).

مترجم کد مبدا

ویرایش

زبان V از کامپایل مبدا به مبدا (transpilar) پشتیبانی میکند و میتواند کد C را به کد V ترجمه کند . [۳۱][۳۲][۳۳]

مترجم هایی نیز برای ترجمه زبان ها Go ، JavaScript و WebAssembly در دست توسعه هستند .[۳۴] [۳۵]

قواعد نحوی

ویرایش

سلام دنیا

ویرایش

برنامه ی "سلام دنیا" در زبان V : [۳۶]

fn main(){
    println('Hello World!')
    }
fn main() {
	println('Hello, World!')
}

متغیر ها

ویرایش

متغیر ها به طور پیش فرض تغییر ناپذیرند و با استفاده از" =: "و یک مقدار تعریف میشوند . از کلمه ی کلیدی mut برای تغییرپذیر کردن انها استفاده میشود . متغیر های تغییرپذیر را میتوان با "=" مقدار دهی کرد: [۳۷]

a := 1
mut b := 2
b = 3

تعریف مجدد یک متغیر چه در یک بازه ی داخلی و چه در همان بازه مجاز نیست : [۳۷]

a := 1
{
    a := 3 // error: redefinition of a
}
a := 2 // error: redefinition of a

ساختار ها

ویرایش

مثالی از ساختار: [۱۲]

struct Point {
	x int
	y int
}

mut p := Point {
	x: 10
	y: 20
}
println(p.x) // Struct fields are accessed using a dot
// Alternative literal syntax for structs with 3 fields or fewer
p = Point{10, 20}
assert p.x == 10

ساختار های درخت هیپ

ویرایش

ساختار ها به طور پیش فرض بر روی پشته قرار میگیرند . برای قرار دادن یک ساختار روی درخت هیپ و دریافت نشانگر ارجاع به ان ، میتوان از پیشوند "&" استفاده کرد:[۱۲]

struct Point {
	x int
	y int
}

p := &Point{10, 10}
// References have the same syntax for accessing fields
println(p.x)

متد ها

ویرایش

متد ها در زبان V توابعی هستند که با آرگومان های ورودی تعریف میشوند. ورودی ها بین لیست آرگومان های خود و با کلمه ی کلیدی "fn" و نام متد ظاهر میشوند. متد ها باید در همان ماژول هایی باشند که نوع ورودی قرار دارد .

متد is_registerd یک ورودی از نوع User به نام u دارد . قرداد این است که از نام هایی مانند self و this برای ورودی استفاده نشود و ترجیح بر یک نام کوتاه است . برای مثال: [۳۸][۱۲]

struct User {
	age int
}

fn (u User) is_registered() bool {
	return u.age > 16
}

user := User{
	age: 10
}
println(user.is_registered()) // "false"
user2 := User{
	age: 20
}
println(user2.is_registered()) // "true"

مدیریت خطا ها

ویرایش

نوع اختیاری(Optional type) برای نوع هایی به کار می رورد که ممکن است نوع داده انها none باشد . نوع نتیجه (Result type)می تواند نمایانگر یک خطا که از یک تابع بازگردانده شده است باشد .

نوع اختیاری با قرار دادن "?" در ابتدای نوع متغیر مشخص میشود (Type?). نوع نتیجه از "!" در ابتدای نوع متغیر استفاده میکند (Type!) [۳۹][۴۰][۲۸]



fn do_something(s string) !string {
	if s == 'foo' {
		return 'foo'
	}
	return error('invalid string')
}

a := do_something('foo') or { 'default' } // a will be 'foo'
b := do_something('bar') or { 'default' } // b will be 'default'
c := do_something('bar') or { panic("{err}") } // exits with error 'invalid string' and a traceback

println(a)
println(b)

همچنین ببینید

ویرایش

منابع

ویرایش
  1. "Creator of V". GitHub.
  2. "First public release".
  3. "Release 0.4.5".
  4. Umoren, Samuel. "Building a Web Server using Vlang". Section. Retrieved 5 April 2021.
  5. James, Ben (23 July 2019). "The V Programming Language: Vain Or Virtuous?". Hackaday. Retrieved 23 July 2019.
  6. Lewkowicz, Jakub (25 June 2019). "SD Times news digest: V language now open sourced". SD Times. Retrieved 25 June 2019.
  7. "The V Programming Language". vlang.io. Retrieved 2023-11-04.
  8. Knott, Simon (27 June 2019). "An introduction to V". Retrieved 27 June 2019.
  9. Nasufi, Erdet. "An introduction to V - the vlang". DebConf. Retrieved 24 July 2022.
  10. "How To Maintain And Iterate With V - SYNCS 2023 (Sydney Computing Society at the University of Sydney)". YouTube. Retrieved 18 October 2023.
  11. James, Ben (23 July 2019). "The V Programming Language: Vain Or Virtuous?". Hackaday. Retrieved 23 July 2019.
  12. ۱۲٫۰ ۱۲٫۱ ۱۲٫۲ ۱۲٫۳ Independent Laboratory 2020.
  13. Nasufi, Erdet. "An introduction to V - the vlang". DebConf. Retrieved 24 July 2022.
  14. "V language: simple like Go, small binary like Rust". TechRacho. Retrieved 3 March 2021.
  15. "GitHub Programming Languages (repository rankings)" – via OSS.
  16. James, Ben (23 July 2019). "The V Programming Language: Vain Or Virtuous?". Hackaday. Retrieved 23 July 2019.
  17. Rao 2021.
  18. "V's official mascot". GitHub. Retrieved 8 November 2023.
  19. Umoren, Samuel. "Building a Web Server using Vlang". Section. Retrieved 5 April 2021.
  20. Galuh, Rosa (8 August 2022). "A Brief Introduction to the V Language". MUO. Retrieved 8 August 2022.
  21. Umoren, Samuel. "Building a Web Server using Vlang". Section. Retrieved 5 April 2021.
  22. Galuh, Rosa (8 August 2022). "A Brief Introduction to the V Language". MUO. Retrieved 8 August 2022.
  23. James, Ben (23 July 2019). "The V Programming Language: Vain Or Virtuous?". Hackaday. Retrieved 23 July 2019.
  24. Knott, Simon (27 June 2019). "An introduction to V". Retrieved 27 June 2019.
  25. Rao 2021, p. 7.
  26. "The V programming language is now open source". Packt Hub. 24 June 2019. Retrieved 24 June 2019.
  27. Galuh, Rosa (8 August 2022). "A Brief Introduction to the V Language". MUO. Retrieved 8 August 2022.
  28. ۲۸٫۰ ۲۸٫۱ Tsoukalos 2022.
  29. James, Ben (23 July 2019). "The V Programming Language: Vain Or Virtuous?". Hackaday. Retrieved 23 July 2019.
  30. Emy, Jade (29 August 2023). "The programming language V 0.4 Beta is available". developpez. Retrieved 29 August 2023.
  31. "Introducing the V Tutorial!". Replit. Retrieved 4 January 2021.
  32. Schlothauer, Sarah. "The trendy five: Blazing hot GitHub repos in June 2019". JAXenter. Archived from the original on 17 February 2020. Retrieved 1 July 2019.
  33. Nasufi, Erdet. "An introduction to V - the vlang". DebConf. Retrieved 24 July 2022.
  34. "The V WebAssembly Compiler Backend". l-m. 26 February 2023. Retrieved 26 February 2023.
  35. "Convert Go to V with go2v". Zenn. 26 January 2023. Retrieved 26 January 2023.
  36. Galuh, Rosa (8 August 2022). "A Brief Introduction to the V Language". MUO. Retrieved 8 August 2022.
  37. ۳۷٫۰ ۳۷٫۱ Rao 2021, pp. 28-40.
  38. Knott, Simon (27 June 2019). "An introduction to V". Retrieved 27 June 2019.
  39. Knott, Simon (27 June 2019). "An introduction to V". Retrieved 27 June 2019.
  40. Umoren, Samuel. "Building a Web Server using Vlang". Section. Retrieved 5 April 2021.

مطالعه بیشتر

ویرایش

پیوند ها

ویرایش