برنامه نویسی موجو: زبانی جدید برای عصر جدیدی از هوش مصنوعی
برنامه نویسی Mojo یک زبان برنامه نویسی جدید است که قابلیت استفاده از Python را با عملکرد C ترکیب می کند. این زبان توسط کریس لاتنر، خالق زبان برنامه نویسی Swift و زیرساخت کامپایلر LLVM ایجاد شده است. Mojo بهگونهای طراحی شده است که یک زبان با کارایی بالا برای توسعه هوش مصنوعی باشد و میتوان از آن برای نوشتن کدهایی استفاده کرد که روی انواع سختافزار هوش مصنوعی از جمله CPU، GPU و TPU اجرا میشود.
برنامهنویسی سیستمهای پایه در موجو
Mojo یک زبان برنامه نویسی سطح بالا است که استفاده و درک آن ساده است. با این حال، تعدادی پسوند دارد که امکان استفاده از آن را برای توسعه سیستم فراهم می کند. این برنامههای افزودنی کنترل بیشتری بر مدیریت حافظه، ایمنی نوع و عملکرد فراهم میکنند.
اعلام fn
یکی از ضروری ترین پیشرفت های برنامه نویسی سیستم Mojo است. یک تابع با یک اعلان fn
تعریف می شود، که بلوکی از کد است که ممکن است توسط کد دیگری فراخوانی شود. توابع به سازماندهی کد و قابل استفاده مجدد بیشتر آن کمک می کنند.
اعلام ساختار یکی دیگر از برنامههای افزودنی اصلی برنامهنویسی سیستم در Mojo است. یک اعلان ساختار یک ساختار داده را مشخص می کند که مجموعه ای از اجزای داده گروه بندی شده است. ممکن است از ساختارهای داده برای ذخیره و سازماندهی اطلاعات استفاده شود.
همچنین زبان برنامه نویسی Mojo: آینده برنامه نویسی هوش مصنوعی..
Mojo همچنین تعدادی پسوند برنامه نویسی سیستم دیگر را نیز ارائه می دهد، مانند:
-
اعلانهای
let
وvar
برای اعلان متغیرهای محلی.const
برای اعلان ثابتها.اظهار
بیانات برای بررسی خطاها.if
برای اجرای مشروطدر حالی که
حلقهای برای حلقه زدن روی یک دنباله از مقادیر استfor
برای تکرار روی مجموعهای از مقادیر/
گرفتن
را برای رسیدگی به خطاها امتحان کنید.
اعلانهای
عبارتهای
حلقههای
بلوکهای
این برنامههای افزودنی مجموعهای از ابزارهای قدرتمند را برای برنامهنویسی سیستمها در Mojo ارائه میکنند. از وبسایت ماژولار برای دریافت اطلاعات بیشتر در مورد زبان برنامهنویسی mojo.
اجازه
و var
اعلامیه
از هر دو اعلان let و var می توان برای تعریف متغیرها در برنامه نویسی Mojo استفاده کرد. تفاوت اصلی بین این دو این است که اجازه دهید اعلان ها متغیرهای تغییرناپذیر ایجاد کنند، در حالی که اعلان های var متغیرهای قابل تغییر را ارائه می دهند.
اعلانهای
let برای تعیین متغیرهایی استفاده میشوند که پس از ایجاد نمیتوان آنها را تغییر داد. برای مثال، کد زیر یک متغیر let به نام my_variable
را اعلام می کند و مقدار 10 را به آن اختصاص می دهد:
اجازه دهید my_variable = 10;
مقدار
my_variable
را نمیتوان پس از ایجاد تغییر داد. اگر سعی کنید مقدار my_variable
را تغییر دهید، یک خطا دریافت خواهید کرد.
اعلانهای
Var برای تعیین متغیرهایی استفاده میشوند که میتوان آنها را پس از ایجاد تغییر داد. برای مثال، کد زیر یک متغیر var به نام my_variable
را اعلام میکند و مقدار 10 را به آن اختصاص میدهد:
var my_variable = 10;
مقدار
my_variable
را می توان پس از ایجاد تغییر داد. برای مثال، کد زیر مقدار my_variable
را 20 تنظیم می کند:
my_variable = 20;
متغیرهای هر نوع را میتوان با استفاده از اعلانهای let و var تعریف کرد. برای مثال کد زیر یک متغیر let از نوع int
و یک var متغیر از نوع str
را اعلام میکند:
اجازه دهید my_int = 10;
var my_str = "سلام، دنیا!"؛
struct
انواع
در برنامه نویسی Mojo، انواع ساختار نوعی ساختار داده است که ممکن است برای گروه بندی عناصر داده مشابه استفاده شود. به عنوان مثال، برای نشان دادن یک شخص، میتوانید نوع ساختاری را تعریف کنید که شامل نام، سن و آدرس فرد است.
کلمه کلیدی struct
برای تعریف انواع ساختار استفاده می شود. برای مثال، کد زیر یک نوع ساختار به نام Person
را تعریف می کند:
struct Person {
نام: خ.
سن: int;
آدرس: str;
}
وقتی یک نوع ساختار ایجاد شد، میتوانید از کلمه کلیدی جدید برای ایجاد نمونههایی از آن نوع ساختار استفاده کنید. به عنوان مثال، کد زیر یک نمونه ساختار Person
را تولید می کند:
let person = new Person("John Doe", 30, "123 Main Street");
از نماد نقطه می توان برای دسترسی به فیلدهای یک نمونه ساختار استفاده کرد. کد زیر، برای مثال، نام نمونه شخص را به دست میآورد:
let name = person.name;
همچنین میتوانید مقادیر فیلدهای یک نمونه ساختار را تغییر دهید. برای مثال، کد زیر سن نمونه شخص را تغییر می دهد:
person.age = 31;
در برنامه نویسی Mojo، انواع ساختار یک ابزار قوی برای سازماندهی داده ها هستند. آنها ممکن است برای ساختن ساختارهای داده پیچیده برای نمایش اشیا و مفاهیم دنیای واقعی استفاده شوند.
بررسی نوع قوی
برنامه نویسی Mojo دارای بررسی قوی نوع است، که تضمین می کند که انواع متغیرها و عبارات در زمان کامپایل اعتبار سنجی می شوند. این باعث کاهش اشتباهات و افزایش قابلیت اطمینان کد می شود.
به عنوان مثال، کد زیر کامپایل نمی شود زیرا انواع متغیرها ناسازگار هستند:
بگذارید x: int = 10;
اجازه دهید y: str = "سلام، دنیا!";
x + y;
کامپایلر یک پیام خطایی ایجاد می کند که می گوید:
خطا: انواع ناسازگار: int + str
هنگام کامپایل کردن کد Mojo، می توان از پرچم -T برای غیرفعال کردن بررسی نوع قوی استفاده کرد. از سوی دیگر، بررسی نوع قوی معمولاً پیشنهاد میشود زیرا میتواند به بهبود کیفیت کد شما کمک کند.
توابع و روش های بیش از حد بارگذاری شده
توابع بیش از حد بارگذاری شده از یک نام استفاده می کنند اما انواع آرگومان های مختلفی دارند. به عنوان مثال، کد زیر دو تابع add
بیش از حد بارگذاری شده را تعریف می کند:
function add(x: int, y: int): int {
بازگشت x + y;
}
تابع add(x: float, y: float): float {
بازگشت x + y;
}
کامپایلر تابع صحیح را برای فراخوانی بر اساس انواع آرگومان هایی که ارسال می شود انتخاب می کند. برای مثال، کد زیر اولین تابع add
را فراخوانی می کند:
بگذارید sum = add(1, 2);
و کد زیر دومین تابع add
را فراخوانی می کند:
بگذارید sum = add(1.0, 2.0);
روش های بیش از حد از نام یکسانی استفاده می کنند اما انواع آرگومان های مختلفی دارند. به عنوان مثال، کد زیر دو روش اضافه بار اضافی را در نوع ساختار Person
ارائه میکند:
struct Person {
نام: خ.
سن: int;
آدرس: str;
تابع add(x: int): int {
این.age + x;
}
تابع add(x: float): float {
این.age + x;
}
}
کامپایلر روش صحیحی را برای فراخوانی بر اساس انواع آرگومان هایی که ارسال می شود انتخاب می کند. برای مثال، کد زیر اولین روش add
را فراخوانی می کند:
let person = new Person("John Doe", 30, "123 Main Street");
let new_age = person.add(1);
و کد زیر روش دوم add
را فراخوانی می کند:
let person = new Person("John Doe", 30, "123 Main Street");
let new_age = person.add(1.0);
بارگذاری بیش از حد یک ویژگی قوی است که ممکن است برای بهبود خوانایی و نگهداری کد شما مورد استفاده قرار گیرد. میتواند با اطمینان از احضار یک تابع یا روش صحیح برای پارامترهای ارائه شده، به پیشگیری از خطا کمک کند.
fn
تعاریف
در برنامه نویسی Mojo، از اعلانات Fn برای تعریف توابع استفاده می شود. آنها شبیه به تعاریف تابع در سایر زبان های برنامه نویسی هستند، اما با چند تفاوت کلیدی.
اولین تفاوت این است که تعاریف fn ممکن است برای تعریف توابع عادی و همچنین متدها استفاده شود. توابع منظم آنهایی هستند که به کلاس خاصی تعلق ندارند، در حالی که متدها آنهایی هستند که متعلق به کلاس خاصی هستند. برای مثال، کد زیر یک تابع عادی به نام add
را تعریف می کند:
fn add(x: int, y: int): int {
بازگشت x + y;
}
و کد زیر روشی به نام add
در نوع ساختار Person
تعریف میکند:
struct Person {
نام: خ.
سن: int;
آدرس: str;
fn add(x: int): int {
این.age + x;
}
}
تفاوت دوم این است که توابع با پارامترهای پیش فرض را می توان با استفاده از اعلانات fn تعریف کرد. آرگومان های پیش فرض دارای یک مقدار پیش فرض هستند که در صورت عدم ارائه آرگومان استفاده می شود. برای مثال، کد زیر تابعی به نام print_name
را با آرگومان پیشفرض برای پارامتر name
ارائه میکند:
fn print_name(name: str = "John Doe") {
چاپ (نام)؛
}
با یا بدون پارامتر name
، می توان این تابع را فراخوانی کرد. اگر آرگومان name
وارد نشود، از مقدار پیشفرض “John Doe” استفاده میشود.
تفاوت نهایی این است که توابع با پارامترهای متغیر را میتوان با استفاده از اعلانهای fn تعریف کرد. برای مثال، کد زیر تابعی به نام print_numbers
را با آرگومان متغیر برای پارامتر numbers
تعریف می کند:
fn print_numbers(numbers: ...int) {
برای عدد در اعداد {
چاپ (تعداد)؛
}
}
این تابع هر تعداد
از اعداد صحیح را به عنوان پارامتر می پذیرد. برای مثال، کد زیر متد print_numbers
را با دو آرگومان number
فراخوانی می کند:
print_numbers(1, 2);
تعاریف Fn ابزار قوی برای تعریف توابع در برنامه نویسی Mojo هستند. آنها ممکن است برای تعریف توابع، روش ها، توابع معمولی با پارامترهای پیش فرض و متغیرها استفاده شوند.
روش های ویژه __copyinit__
و __moveinit__
هنگامی که اشیا کپی یا جابجا می شوند، از رویه های ویژه copyinit و moveinit برای مقداردهی اولیه آنها استفاده می شود.
هنگامی که یک شی کپی می شود، روش copyinit فراخوانی می شود. هنگامی که یک شی جابجا می شود، متد moveinit فراخوانی می شود.
بعد از فراخوانی متد init، متدهای copyinit و moveinit فراخوانی می شوند.
روشهای copyinit و moveinit را میتوان برای مقداردهی اولیه فیلدهای شی یا انجام فعالیتهای اضافی هنگام کپی کردن یا جابجایی شی مورد استفاده قرار داد.
به عنوان مثال، کد زیر یک کلاس Person
را با name
تعریف می کند:
فرد کلاس {
نام: خ.
سازنده (نام: خیابان) {
this.name = نام;
}
__copyinit__(سایر: شخص) {
this.name = other.name;
}
__moveinit__(سایر: شخص) {
this.name = other.name;
other.name = "";
}
}
فیلد نام از شی دیگر از طریق روش copyinit به شی فعلی کپی می شود. متد moveinit قبل از تنظیم فیلد name
شیء other
، فیلد name
را از other
به شی فعلی کپی می کند. به یک رشته خالی.
کد زیر دو شی Person
ایجاد می کند و یکی را روی دیگری کپی می کند:
let person1 = new Person("John Doe");
let person2 = new Person(person1);
فیلد نام شی person2
مانند قسمت name
شی person1
خواهد بود.
کد زیر دو شی Person
ایجاد می کند و یکی را به دیگری منتقل می کند:
let person1 = new Person("John Doe");
let person2 = new Person(move(person1));
فیلد نام شی person2
مانند فیلد name
شی person1
و name خواهد بود.
فیلد person1
خالی خواهد بود.
روش های ویژه copyinit و moveinit برای مقداردهی اولیه اشیاء در هنگام کپی یا جابجایی آنها مفید است. می توان از آنها برای تضمین مقداردهی اولیه اشیاء و انجام اقدامات اضافی استفاده کرد که باید هنگام کپی یا انتقال اشیا انجام شوند.
این مقاله برای کمک به یادگیری برنامه نویسی Mojo است. ما اطمینان داریم که برای شما مفید بوده است. لطفاً نظرات و انتقادات خود را در بخش نظرات زیر به اشتراک بگذارید.