واژهنامهی فارسی و انگلیسی
هر برنامهی سلام را میشود به فارسی یا انگلیسی نوشت. هر دو نگارش از یک مترجم میگذرند و قاعدههای یکسانی دارند، پس با همین واژهنامه میتوانید برنامهای را به زبان دیگر بخوانید یا آن را از یکی به دیگری ببرید.
یک برنامه، دو زبان
این دو برنامه یکیاند و خروجی یکسانی دارند:
تابع فیبوناچی(ن: صحیح): صحیح:
اگر ن < ۲:
برگشت ن
پایان
برگشت فیبوناچی(ن - ۱) + فیبوناچی(ن - ۲)
پایان
تابع ریشه:
تکرار ۱۰ در ک:
چاپ فیبوناچی(ک), ""
پایان
سرچاپ ""
پایانfunc fibonacci(n: int): int:
if n < 2:
ret n
end
ret fibonacci(n - 1) + fibonacci(n - 2)
end
func main:
repeat 10 in i:
print fibonacci(i), ""
end
println ""
endفرمان salam translate en برنامه.salam کد فارسی را به انگلیسی برمیگرداند و salam translate fa برعکس. این فرمان واژههای کلیدی، گونهها، تابع ورودی و روشهای درونساخت را بازنویسی میکند. مترجم زبان هر پرونده را از واژههای کلیدیاش میفهمد و هر پرونده سراسر به یک زبان است: در پروندهی فارسی نگارش انگلیسی نامهای درونساخت خطاست و پیام خطا نام فارسیاش را میگوید.
واژههای کلیدی
| فارسی | انگلیسی | فارسی | انگلیسی |
|---|---|---|---|
تابع | func | برگشت | ret |
ریشه | main | پایان | end |
اگر | if | وگرنه | else |
تکرار | repeat | تا | until / to |
هر | each / by | در | in |
بشکن | break | گذر | continue |
همخوان | match | ترابرد | switch |
ناپایا | mut | پایا | const |
ساختار | struct | جداشمار | enum |
گونه | type | میانجی | interface |
کاربست | impl | بر | on |
همگانی | pub | این | this |
برگردان | as | دیرکن | defer |
درست | true | نادرست | false |
پوچ | null | ورودی | input |
چاپ | print | سرچاپ | println |
نادرستچاپ | printerr | نادرستسرچاپ | printerrln |
و | and | یا | or |
وارونه | not | برابر / نابرابر | eq / neq |
کوچکتر / بزرگتر | lt / gt | کوچکتربرابر / بزرگتربرابر | lte / gte |
بسته | package | واردسازی | import |
فراخوانی | include | درونداد | extern |
برونداد | export | صفحه | page |
بخش | component | ناب | pure |
درخط | inline | نادرخط | noinline |
نابرگشت | noret | بیکاره | deprecated |
واژههای مقایسهای برابر، نابرابر، کوچکتر، بزرگتر، کوچکتربرابر و بزرگتربرابر به جای ==، !=، <، >، <= و >= مینشینند و هر دو شکل در هر دو زبان کار میکنند. تا در آغاز دستور همان until است و درون سرآیند تکرار همان to؛ هر هم در آغاز دستور each است و درون سرآیند تکرار گام by. ریشه واژهی کلیدی نیست، نام تابعی است که برنامه از آن شروع میشود و در انگلیسی main نام دارد. صفحه فقط در آغاز سطری که به دونقطه ختم میشود واژهی کلیدی است، مثل صفحه:، و جای دیگر یک نام معمولی است. واژههایی که نیمفاصله دارند، مثل درونداد، را با فاصله هم میشود نوشت، اما چسبیده نه.
واژههای جایگاهی
این واژهها فقط در جایگاه خاصی کلیدیاند و جای دیگر میشود آنها را نام گذاشت:
| فارسی | انگلیسی | فارسی | انگلیسی |
|---|---|---|---|
ایستا | static | پیوند | link |
پویا | dynamic | چارچوب | framework |
شامل | use | پویا | dyn |
ناپایا تابع | mut func | تعریفشده | defined |
ایستا هم در ایستا تابع میآید و هم در پیوند ایستا. پویا دو کار دارد: پس از پیوند یعنی dynamic و پیش از گونهی یک میانجی یعنی dyn. تعریفشده(نام) مال ترجمهی شرطی است.
گونهها
| فارسی | انگلیسی | فارسی | انگلیسی |
|---|---|---|---|
تهی | void | منطقی | bool |
نویسه | char | یونیکد | uchar |
رشته | str | صحیح / صحیح۳۲ | int / i32 |
صحیح۸ / صحیح۱۶ | i8 / i16 | صحیح۶۴ | i64 |
طبیعی / طبیعی۳۲ | uint / u32 | طبیعی۸ / طبیعی۱۶ | u8 / u16 |
طبیعی۶۴ | u64 | اندازه مثبت | usize |
صحیح۱۲۸ | i128 | طبیعی۱۲۸ | u128 |
اندازه | size | اعشار / اعشار۳۲ | float / f32 |
اعشار۶۴ | f64 | وکتور | Vector |
نگاشت | HashMap | پیمایشگرنگاشت | MapIter |
پرونده | File | گوناگون | Variant |
تابع | func (در جایگاه گونه) | پویا | dyn |
در گونههای اعشاری دقت کنید: اعشار بهتنهایی همان float سیودو بیتی است و عددی مثل ۲.۵ از گونهی اعشار۶۴. رقمهای نام گونه میتوانند فارسی یا لاتین باشند، پس صحیح۶۴ و صحیح64 یک گونهاند.
تابعهای درونساخت
چند تابع بدون واردسازی در دسترساند. برنامهی فارسی باید نام فارسی آنها را به کار ببرد:
| فارسی | انگلیسی | فارسی | انگلیسی |
|---|---|---|---|
طول | len | اندازهگونه | sizeof |
آرگومانها | args | متغیرمحیطی | env |
زبان | lang | درهم | hash |
کدنویسه | char_code | نویسهازکد | char_from_code |
نخساز | spawn | نخپیوند | join |
فراخواندستگیره | callhandler | اتمیبخوان | atomic_load |
اتمیبنویس | atomic_store | اتمیبیفزا | atomic_add |
اتمیجابجا | atomic_swap | اتمیمقایسه | atomic_cas |
کار با پرونده و محیط در کتابخانهی استاندارد است: open همان fs.Open است (import fs)، env همان os.Env، args همان os.Args، listdir همان os.ListDir و strcmp همان str.Equals یا مقایسهی مستقیم رشتههاست. listdir و strcmp دیگر تابع آزاد نیستند.
بیشترشان را در درسهای پیش دیدهاید: طول روی آرایه و رشته، نخساز و نخپیوند در درس کار همزمان. اندازهگونه یک گونه میگیرد، کدنویسه کد نخستین نویسهی یک رشته را میدهد و زبان() به برنامه میگوید کد خودش به چه زبانی نوشته شده است. این نمونه چند تا از آنها را همراه چند روش درونساخت نشان میدهد:
تابع ریشه:
واژه := "salam"
سرچاپ زبان()، طول(واژه)، اندازهگونه(صحیح۶۴)
سرچاپ کدنویسه("A")، نویسهازکد(۶۶)، "ab" < "ac"
ناپایا نامها := وکتور {} برگردان وکتور<رشته>
دیرکن نامها.آزادکن()
نامها.بیفزا("sara")
نامها.بیفزا("reza")
سرچاپ نامها.طول()، نامها.بگیر(۱)، نامها.دربیاور()
ناپایا سنها := نگاشت {} برگردان نگاشت<رشته، صحیح>
دیرکن سنها.آزادکن()
سنها.درج("sara"، ۳۱)
سرچاپ سنها.دارد("sara")، سنها.بگیر("sara")، سنها.اندازه()
متن := " hello world ".پیراست()
سرچاپ متن.شروع با("hello")، متن.بیاب("world")، متن.زیررشته(۰، ۵)
سرچاپ "سلام".طول()، "سلام".شمارنویسه()
پایانروشهای درونساخت
رشته، وکتور، نگاشت، پرونده و پیمایشگر نگاشت روشهایی دارند که در خود زبان ساخته شدهاند و نگارش فارسی هم دارند:
| فارسی | انگلیسی | فارسی | انگلیسی |
|---|---|---|---|
بیفزا | push | دربیاور | pop |
بگیر | get | ارجاع | ref |
بنشان | set | طول | len |
ظرفیت | cap | آزادکن | free |
درج | put | دارد | has |
حذف | remove | اندازه | size |
پیمایش | iter | داردبعدی | has_next |
کلید | key | مقدار | value |
بعدی | next | خواندن | read |
خواندن خط | readline | نوشتن | write |
جابجایی | seek | ببند | close |
پیوست | concat | زیررشته | substr |
بیاب | find | بشکاف | split |
پیراست | trim | به صحیح | to_int |
به اعشار | to_float | شمارنویسه | char_count |
نویسه شماره | char_at | زیررشته نویسه | char_substr |
بیاب نویسه | char_find | شروع با | starts_with |
ختم با | ends_with | دربردارد | includes |
رونوشت | copy | رونوشت عمیق | deep_copy |
دو تا از اینها بایت میشمارند نه حرف: طول و بیاب روی بایتهای رشته کار میکنند، پس "سلام".طول() برابر 8 است. برای کار حرف به حرف از شمارنویسه، نویسه شماره و بیاب نویسه استفاده کنید، همانطور که خط آخر نمونهی بالا نشان میدهد.
ثابتهای زمان ترجمه
ثابتهای ترجمهی شرطی هم نام فارسی دارند و برنامهی فارسی باید همانها را بنویسد:
| فارسی | انگلیسی | فارسی | انگلیسی |
|---|---|---|---|
سلام سیستم ویندوز | SALAM_OS_WINDOWS | سلام سیستم ویندوز۶۴ | SALAM_OS_WIN64 |
سلام سیستم ویندوز۳۲ | SALAM_OS_WIN32 | سلام سیستم وباسمبلی | SALAM_OS_WASM |
سلام سیستم اندروید | SALAM_OS_ANDROID | سلام سیستم لینوکس | SALAM_OS_LINUX |
سلام سیستم مک | SALAM_OS_MAC | سلام سیستم بیاسدی | SALAM_OS_BSD |
سلام سیستم فریبیاسدی | SALAM_OS_FREEBSD | سلام سیستم اوپنبیاسدی | SALAM_OS_OPENBSD |
سلام سیستم نتبیاسدی | SALAM_OS_NETBSD | سلام سیستم یونیکس | SALAM_OS_UNIX |
سلام سیستم یوئیافآی | SALAM_OS_UEFI | سلام سیستم سلام | SALAM_OS_SALAMOS |
سلام معماری ایکس۶۴ | SALAM_ARCH_X64 | سلام معماری ایکس۸۶ | SALAM_ARCH_X86 |
سلام معماری آرم۶۴ | SALAM_ARCH_ARM64 | سلام معماری آرم | SALAM_ARCH_ARM |
سلام معماری ریسکوی۶۴ | SALAM_ARCH_RISCV64 | ||
سلام معماری وباسمبلی | SALAM_ARCH_WASM | سلام اشکالزدایی حافظه | SALAM_MEM_DEBUG |
سلام پاکساز نشانی | SALAM_ASAN | سلام ایمن | SALAM_SAFE |
سلام خودایستا | SALAM_FREESTANDING | سلام هسته | SALAM_KERNEL |
سلام جاوااسکریپت | SALAM_JS | سلام سیستم | SALAM_OS |
سلام معماری | SALAM_ARCH | سلام نگارش | SALAM_VERSION |
سلام کد نگارش | SALAM_VERSION_CODE | سلام کامیت گیت | SALAM_GIT_COMMIT |
سلام تاریخ گیت | SALAM_GIT_DATE | سلام گیت ناپاک | SALAM_GIT_DIRTY |
سلام تاریخ ساخت | SALAM_BUILD_DATE |
سلام جاوااسکریپت فقط وقتی وجود دارد که برنامه به جاوااسکریپت ترجمه شود، پس به جای آزمودن مستقیمش بپرسید تعریفشده(سلام جاوااسکریپت). سلام گیت ناپاک متن است و برای مترجمی که از کد ثبتنشده ساخته شده "-dirty" است.
بستههای کتابخانهی استاندارد و تابعهایشان هم نام فارسی دارند، مثل رشته برای str و ریاضی.جذر برای math.Sqrt. صفحهی هر بسته در مرجع کتابخانه هر دو نام را دارد.