From fcf63e42aa65e226ab661edb956cd36110d95e31 Mon Sep 17 00:00:00 2001 From: Zaaf Hachem rachid <117745305+ZAAFHachemrachid@users.noreply.github.com> Date: Sat, 1 Jun 2024 13:12:31 -0700 Subject: [PATCH 01/12] Create index.ar.md --- .../edition-2/posts/01-freestanding-rust-binary/index.ar.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 blog/content/edition-2/posts/01-freestanding-rust-binary/index.ar.md diff --git a/blog/content/edition-2/posts/01-freestanding-rust-binary/index.ar.md b/blog/content/edition-2/posts/01-freestanding-rust-binary/index.ar.md new file mode 100644 index 000000000..3f2926262 --- /dev/null +++ b/blog/content/edition-2/posts/01-freestanding-rust-binary/index.ar.md @@ -0,0 +1,3 @@ +تتمثل الخطوة الأولى في إنشاء نواة نظام التشغيل الخاصة بنا في إنشاء ملف Rust قابل للتنفيذ لا يربط المكتبة القياسية. هذا يجعل من الممكن تشغيل شيفرة Rust على المعدن العاري دون نظام تشغيل أساسي. + +تم تطوير هذه المدونة بشكل مفتوح على GitHub. إذا كان لديك أي مشاكل أو أسئلة، يرجى فتح مشكلة هناك. يمكنك أيضًا ترك تعليقات في الأسفل. يمكن العثور على الشيفرة المصدرية الكاملة لهذا المنشور في فرع post-01. From 9150885e82d805b97dc5306093bed79ce6dc7c1a Mon Sep 17 00:00:00 2001 From: Zaaf Hachem rachid <117745305+ZAAFHachemrachid@users.noreply.github.com> Date: Sat, 1 Jun 2024 13:37:47 -0700 Subject: [PATCH 02/12] Update index.ar.md Add Introduction , Disabling the Standard Library --- .../01-freestanding-rust-binary/index.ar.md | 72 ++++++++++++++++++- 1 file changed, 70 insertions(+), 2 deletions(-) diff --git a/blog/content/edition-2/posts/01-freestanding-rust-binary/index.ar.md b/blog/content/edition-2/posts/01-freestanding-rust-binary/index.ar.md index 3f2926262..13b18b3f6 100644 --- a/blog/content/edition-2/posts/01-freestanding-rust-binary/index.ar.md +++ b/blog/content/edition-2/posts/01-freestanding-rust-binary/index.ar.md @@ -1,3 +1,71 @@ -تتمثل الخطوة الأولى في إنشاء نواة نظام التشغيل الخاصة بنا في إنشاء ملف Rust قابل للتنفيذ لا يربط المكتبة القياسية. هذا يجعل من الممكن تشغيل شيفرة Rust على المعدن العاري دون نظام تشغيل أساسي. ++++ +title = "A Freestanding Rust Binary" +weight = 1 +path = "freestanding-rust-binary" +date = 2018-02-10 + +[extra] +chapter = "Bare Bones" ++++ + +تتمثل الخطوة الأولى في إنشاء نواة نظام التشغيل الخاصة بنا في إنشاء ملف Rust قابل للتنفيذ لا يربط المكتبة القياسية. هذا يجعل من الممكن تشغيل شيفرة Rust على [bare metal] دون نظام تشغيل أساسي. +[bare metal]: https://en.wikipedia.org/wiki/Bare_machine + + +تم تطوير هذه المدونة بشكل مفتوح على [GitHub]. إذا كان لديك أي مشاكل أو أسئلة، يرجى فتح مشكلة هناك. يمكنك أيضًا ترك تعليقات [في الأسفل]. يمكن العثور على الشيفرة المصدرية الكاملة لهذا المنشور في فرع [post-01]. + + +[GitHub]: https://github.com/phil-opp/blog_os +[at the bottom]: #comments + +[post branch]: https://github.com/phil-opp/blog_os/tree/post-01 + + + +## مقدمة +لكتابة نواة نظام تشغيل، نحتاج إلى شيفرة لا تعتمد على أي ميزات نظام تشغيل. هذا يعني أنه لا يمكننا استخدام سلاسل الرسائل(threads) أو الملفات(File System) أو Heap ram أو الشبكة أو الأرقام العشوائية أو الإخراج القياسي(I/O) أو أي ميزات أخرى تتطلب تجريدات نظام التشغيل أو أجهزة معينة. وهذا منطقي، لأننا نحاول كتابة نظام التشغيل الخاص بنا (OS) وبرامج التشغيل الخاصة بنا (drivers). + +هذا يعني أنه لا يمكننا استخدام معظم [Rust standard library]، ولكن هناك الكثير من ميزات Rust التي _يمكننا استخدامها. على سبيل المثال، يمكننا استخدام [iterators] و [closures] و [pattern matching] و [option] و [اresult] و [string formatting] وبالطبع [ownership system]. هذه الميزات تجعل من الممكن كتابة نواة بطريقة معبرة جدًا وعالية المستوى دون القلق بشأن [undefined behavior] أو [memory safety]. + + +[option]: https://doc.rust-lang.org/core/option/ +[result]:https://doc.rust-lang.org/core/result/ +[Rust standard library]: https://doc.rust-lang.org/std/ +[iterators]: https://doc.rust-lang.org/book/ch13-02-iterators.html +[closures]: https://doc.rust-lang.org/book/ch13-01-closures.html +[pattern matching]: https://doc.rust-lang.org/book/ch06-00-enums.html +[string formatting]: https://doc.rust-lang.org/core/macro.write.html +[ownership system]: https://doc.rust-lang.org/book/ch04-00-understanding-ownership.html +[undefined behavior]: https://www.nayuki.io/page/undefined-behavior-in-c-and-cplusplus-programs +[memory safety]: https://tonyarcieri.com/it-s-time-for-a-memory-safety-intervention + + +من أجل إنشاء نواة نظام تشغيل في Rust، نحتاج إلى إنشاء ملف قابل للتنفيذ يمكن تشغيله بدون نظام تشغيل أساسي. غالبًا ما يُطلق على هذا الملف القابل للتنفيذ اسم الملف القابل للتنفيذ ”القائم بذاته“ أو ”المعدني العاري“. + +يصف هذا المنشور الخطوات اللازمة لإنشاء ثنائي Rust قائم بذاته ويشرح سبب الحاجة إلى هذه الخطوات. إذا كنت مهتمًا بمثال بسيط فقط، يمكنك **[الانتقال إلى الملخص] (#ملخص)**. + + + +## تعطيل المكتبة القياسية +بشكل افتراضي، تربط جميع صناديق Rust [standard library]، والتي تعتمد على نظام التشغيل لميزات (مثل threads, files, or networking). كما أنها تعتمد أيضًا على مكتبة C القياسية 'libc'، والتي تتفاعل بشكل وثيق مع خدمات نظام التشغيل. نظرًا لأن خطتنا هي كتابة نظام تشغيل، لا يمكننا استخدام أي مكتبات تعتمد على نظام التشغيل. لذا يجب علينا تعطيل التضمين التلقائي للمكتبة القياسية من خلال سمة [no_std]. + + +[standard library]: https://doc.rust-lang.org/std/ +[`no_std` attribute]: https://doc.rust-lang.org/1.30.0/book/first-edition/using-rust-without-the-standard-library.html + +``` +cargo new blog_os --bin --edition 2018 +``` + +لقد أطلقتُ على المشروع اسم ”Blog_os“، ولكن بالطبع يمكنك اختيار اسمك الخاص. تُحدّد علامة ”bin“ أننا نريد إنشاء نسخة binary قابلة للتنفيذ (على عكس المكتبة) وتحدّد علامة ”--- Edition 2018“ أننا نريد استخدام [2018 edition] من Rust لصندوقنا. عندما نُشغّل الأمر، تُنشئ لنا الشحنة بنية الدليل التالية: +[2018 edition]: https://doc.rust-lang.org/nightly/edition-guide/rust-2018/index.html + +``` +blog_os +├── Cargo.toml +└── src + └── main.rs +``` +يحتوي ملف 'Cargo.toml' على تكوين الصندوق، على سبيل المثال اسم الصندوق، والمؤلف، ورقم [semantic version]، والتبعيات. يحتوي الملف 'src/main.rs' على الوحدة النمطية الجذرية للصندوق والدالة 'الرئيسية'. يمكنك تجميع قفصك من خلال 'cargo build' ثم تشغيل الملف الثنائي 'blog_os' المجمّع في المجلد الفرعي 'target/debug'. +[semantic version]: https://semver.org/ -تم تطوير هذه المدونة بشكل مفتوح على GitHub. إذا كان لديك أي مشاكل أو أسئلة، يرجى فتح مشكلة هناك. يمكنك أيضًا ترك تعليقات في الأسفل. يمكن العثور على الشيفرة المصدرية الكاملة لهذا المنشور في فرع post-01. From d2ee259bfd9b0a79e6092523b41afeb2de646bfb Mon Sep 17 00:00:00 2001 From: Zaaf Hachem rachid <117745305+ZAAFHachemrachid@users.noreply.github.com> Date: Sat, 1 Jun 2024 13:38:41 -0700 Subject: [PATCH 03/12] Update index.ar.md fix some ui thing --- .../edition-2/posts/01-freestanding-rust-binary/index.ar.md | 1 + 1 file changed, 1 insertion(+) diff --git a/blog/content/edition-2/posts/01-freestanding-rust-binary/index.ar.md b/blog/content/edition-2/posts/01-freestanding-rust-binary/index.ar.md index 13b18b3f6..d86d20e03 100644 --- a/blog/content/edition-2/posts/01-freestanding-rust-binary/index.ar.md +++ b/blog/content/edition-2/posts/01-freestanding-rust-binary/index.ar.md @@ -58,6 +58,7 @@ cargo new blog_os --bin --edition 2018 ``` لقد أطلقتُ على المشروع اسم ”Blog_os“، ولكن بالطبع يمكنك اختيار اسمك الخاص. تُحدّد علامة ”bin“ أننا نريد إنشاء نسخة binary قابلة للتنفيذ (على عكس المكتبة) وتحدّد علامة ”--- Edition 2018“ أننا نريد استخدام [2018 edition] من Rust لصندوقنا. عندما نُشغّل الأمر، تُنشئ لنا الشحنة بنية الدليل التالية: + [2018 edition]: https://doc.rust-lang.org/nightly/edition-guide/rust-2018/index.html ``` From cd348bbe3ce33d6ceb532e27f4834d45cbc35359 Mon Sep 17 00:00:00 2001 From: Zaaf Hachem rachid <117745305+ZAAFHachemrachid@users.noreply.github.com> Date: Mon, 3 Jun 2024 08:12:26 -0700 Subject: [PATCH 04/12] Create _index.ar.md create new file index.ar.md --- blog/content/_index.ar.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 blog/content/_index.ar.md diff --git a/blog/content/_index.ar.md b/blog/content/_index.ar.md new file mode 100644 index 000000000..c226500ce --- /dev/null +++ b/blog/content/_index.ar.md @@ -0,0 +1,10 @@ ++++ template = "edition-2/index.html" +++ + + +

كتابة نظام تشغيل بلغة Rust

+
+ +تنشئ سلسلة المدونات هذه نظام تشغيل صغير بلغة البرمجة [Rust ](https://www.rust-lang.org/). كل منشور هو عبارة عن برنامج تعليمي صغير ويتضمن كل الشيفرة المطلوبة، لذا يمكنك المتابعة إذا أردت. الكود المصدري متاح أيضًا في مستودع [Github ](https://github.com/phil-opp/blog_os) المقابل. + +آخر منشور: +
From 7927beeffa7d36adec7632131149a77982a24d19 Mon Sep 17 00:00:00 2001 From: Zaaf Hachem rachid <117745305+ZAAFHachemrachid@users.noreply.github.com> Date: Mon, 3 Jun 2024 11:40:11 -0700 Subject: [PATCH 05/12] Update index.ar.md --- .../01-freestanding-rust-binary/index.ar.md | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/blog/content/edition-2/posts/01-freestanding-rust-binary/index.ar.md b/blog/content/edition-2/posts/01-freestanding-rust-binary/index.ar.md index d86d20e03..1894d9985 100644 --- a/blog/content/edition-2/posts/01-freestanding-rust-binary/index.ar.md +++ b/blog/content/edition-2/posts/01-freestanding-rust-binary/index.ar.md @@ -9,6 +9,7 @@ chapter = "Bare Bones" +++ تتمثل الخطوة الأولى في إنشاء نواة نظام التشغيل الخاصة بنا في إنشاء ملف Rust قابل للتنفيذ لا يربط المكتبة القياسية. هذا يجعل من الممكن تشغيل شيفرة Rust على [bare metal] دون نظام تشغيل أساسي. + [bare metal]: https://en.wikipedia.org/wiki/Bare_machine @@ -68,5 +69,58 @@ blog_os └── main.rs ``` يحتوي ملف 'Cargo.toml' على تكوين الصندوق، على سبيل المثال اسم الصندوق، والمؤلف، ورقم [semantic version]، والتبعيات. يحتوي الملف 'src/main.rs' على الوحدة النمطية الجذرية للصندوق والدالة 'الرئيسية'. يمكنك تجميع قفصك من خلال 'cargo build' ثم تشغيل الملف الثنائي 'blog_os' المجمّع في المجلد الفرعي 'target/debug'. + [semantic version]: https://semver.org/ +### السمة 'no_std' + +يربط صندوقنا الآن المكتبة القياسية ضمنيًا بالمكتبة القياسية. دعونا نحاول تعطيل ذلك بإضافة سمة [no_std]: + + +```rust +// main.rs + +#![no_std] + +fn main() { + println!("Hello, world!"); +} +``` + +عندما نحاول بناءه الآن (عن طريق تشغيل ”cargo build“)، يحدث الخطأ التالي: + +``` +error: cannot find macro `println!` in this scope + --> src/main.rs:4:5 + | +4 | println!("Hello, world!"); + | ^^^^^^^ +``` + +والسبب في هذا الخطأ هو أن [`println` macro] هو جزء من المكتبة القياسية، والتي لم نعد نضمّنها. لذا لم يعد بإمكاننا طباعة الأشياء. هذا أمر منطقي، لأن 'println' يكتب إلى [standard output]، وهو واصف ملف خاص يوفره نظام التشغيل. + + +[`println` macro]: https://doc.rust-lang.org/std/macro.println.html +[standard output]: https://en.wikipedia.org/wiki/Standard_streams#Standard_output_.28stdout.29 + +لذا دعنا نحذف الطباعة ونحاول مرة أخرى بدالة رئيسية فارغة: + +```rust +// main.rs + +#![no_std] + +fn main() {} +``` + +``` +> cargo build +error: `#[panic_handler]` function required, but not found +error: language item required, but not found: `eh_personality` +``` + + +يفتقد بناء المترجمات البرمجية الآن إلى `#[panic_handler]` دالة و _language item_. + + + From 807fc91bf811f08f51f31019063e4210a33b9f1d Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Thu, 25 Jul 2024 22:16:01 +0200 Subject: [PATCH 06/12] Add Arabic to config.toml --- blog/config.toml | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/blog/config.toml b/blog/config.toml index 680206950..870e69a65 100644 --- a/blog/config.toml +++ b/blog/config.toml @@ -34,7 +34,7 @@ skip_anchor_prefixes = [ subtitle = "Philipp Oppermann's blog" author = { name = "Philipp Oppermann" } default_language = "en" -languages = ["en", "zh-CN", "zh-TW", "fr", "ja", "fa", "ru", "ko"] +languages = ["en", "zh-CN", "zh-TW", "fr", "ja", "fa", "ru", "ko", "ar"] [translations] lang_name = "English (original)" @@ -231,3 +231,26 @@ support_me = """ comment_note = """ Do you have a problem, want to share feedback, or discuss further ideas? Feel free to leave a comment here! Please stick to English and follow Rust's code of conduct. This comment thread directly maps to a discussion on GitHub, so you can also comment there if you prefer. """ + +[languages.ar] +title = "Writing an OS in Rust" +[languages.ar.translations] +lang_name = "Arabic" +toc = "Table of Contents" +all_posts = "« All Posts" +comments = "Comments" +comments_notice = "Please leave your comments in English if possible." +readmore = "read more »" +not_translated = "(This post is not translated yet.)" +translated_content = "Translated Content:" +translated_content_notice = "This is a community translation of the _original.title_ post. It might be incomplete, outdated or contain errors. Please report any issues!" +translated_by = "Translation by" +translation_contributors = "With contributions from" +word_separator = "and" +support_me = """ +

Support Me

+

Creating and maintaining this blog and the associated libraries is a lot of work, but I really enjoy doing it. By supporting me, you allow me to invest more time in new content, new features, and continuous maintenance. The best way to support me is to sponsor me on GitHub. Thank you!

+""" +comment_note = """ +Do you have a problem, want to share feedback, or discuss further ideas? Feel free to leave a comment here! Please stick to English and follow Rust's code of conduct. This comment thread directly maps to a discussion on GitHub, so you can also comment there if you prefer. +""" From 33d73cbdbc8c92e96a6e08b032b85b7402507501 Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Thu, 25 Jul 2024 22:16:12 +0200 Subject: [PATCH 07/12] Fix front matter syntax --- blog/content/_index.ar.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/blog/content/_index.ar.md b/blog/content/_index.ar.md index c226500ce..48672a43d 100644 --- a/blog/content/_index.ar.md +++ b/blog/content/_index.ar.md @@ -1,4 +1,6 @@ -+++ template = "edition-2/index.html" +++ ++++ +template = "edition-2/index.html" ++++

كتابة نظام تشغيل بلغة Rust

From 64cc41f49c8312320b869a05fefe6fe0e1fd2c18 Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Thu, 25 Jul 2024 22:16:27 +0200 Subject: [PATCH 08/12] Fix: Fill in latest post link --- blog/content/_index.ar.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/content/_index.ar.md b/blog/content/_index.ar.md index 48672a43d..02f613c7a 100644 --- a/blog/content/_index.ar.md +++ b/blog/content/_index.ar.md @@ -8,5 +8,5 @@ template = "edition-2/index.html" تنشئ سلسلة المدونات هذه نظام تشغيل صغير بلغة البرمجة [Rust ](https://www.rust-lang.org/). كل منشور هو عبارة عن برنامج تعليمي صغير ويتضمن كل الشيفرة المطلوبة، لذا يمكنك المتابعة إذا أردت. الكود المصدري متاح أيضًا في مستودع [Github ](https://github.com/phil-opp/blog_os) المقابل. -آخر منشور: +آخر منشور: From d10dbc19a4c3a41eceeddfdbe27ef28d61daf6e2 Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Thu, 25 Jul 2024 22:16:38 +0200 Subject: [PATCH 09/12] Fix path --- .../edition-2/posts/01-freestanding-rust-binary/index.ar.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/content/edition-2/posts/01-freestanding-rust-binary/index.ar.md b/blog/content/edition-2/posts/01-freestanding-rust-binary/index.ar.md index 1894d9985..b0a6732e2 100644 --- a/blog/content/edition-2/posts/01-freestanding-rust-binary/index.ar.md +++ b/blog/content/edition-2/posts/01-freestanding-rust-binary/index.ar.md @@ -1,7 +1,7 @@ +++ title = "A Freestanding Rust Binary" weight = 1 -path = "freestanding-rust-binary" +path = "ar/freestanding-rust-binary" date = 2018-02-10 [extra] From 134e938c9dbdf6eef56d676c60654a94d260dcb5 Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Thu, 25 Jul 2024 22:16:51 +0200 Subject: [PATCH 10/12] Add translation metadata --- .../edition-2/posts/01-freestanding-rust-binary/index.ar.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/blog/content/edition-2/posts/01-freestanding-rust-binary/index.ar.md b/blog/content/edition-2/posts/01-freestanding-rust-binary/index.ar.md index b0a6732e2..9245ecada 100644 --- a/blog/content/edition-2/posts/01-freestanding-rust-binary/index.ar.md +++ b/blog/content/edition-2/posts/01-freestanding-rust-binary/index.ar.md @@ -5,7 +5,10 @@ path = "ar/freestanding-rust-binary" date = 2018-02-10 [extra] -chapter = "Bare Bones" +# Please update this when updating the translation +translation_based_on_commit = "087a464ed77361cff6c459fb42fc655cb9eacbea" +# GitHub usernames of the people that translated this post +translators = ["ZAAFHachemrachid"] +++ تتمثل الخطوة الأولى في إنشاء نواة نظام التشغيل الخاصة بنا في إنشاء ملف Rust قابل للتنفيذ لا يربط المكتبة القياسية. هذا يجعل من الممكن تشغيل شيفرة Rust على [bare metal] دون نظام تشغيل أساسي. From 6d4c5c5c4e5fb9536e49896523358896b11ed9d9 Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Thu, 25 Jul 2024 22:17:02 +0200 Subject: [PATCH 11/12] Fix markdown link --- .../edition-2/posts/01-freestanding-rust-binary/index.ar.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/content/edition-2/posts/01-freestanding-rust-binary/index.ar.md b/blog/content/edition-2/posts/01-freestanding-rust-binary/index.ar.md index 9245ecada..681859434 100644 --- a/blog/content/edition-2/posts/01-freestanding-rust-binary/index.ar.md +++ b/blog/content/edition-2/posts/01-freestanding-rust-binary/index.ar.md @@ -16,7 +16,7 @@ translators = ["ZAAFHachemrachid"] [bare metal]: https://en.wikipedia.org/wiki/Bare_machine -تم تطوير هذه المدونة بشكل مفتوح على [GitHub]. إذا كان لديك أي مشاكل أو أسئلة، يرجى فتح مشكلة هناك. يمكنك أيضًا ترك تعليقات [في الأسفل]. يمكن العثور على الشيفرة المصدرية الكاملة لهذا المنشور في فرع [post-01]. +تم تطوير هذه المدونة بشكل مفتوح على [GitHub]. إذا كان لديك أي مشاكل أو أسئلة، يرجى فتح مشكلة هناك. يمكنك أيضًا ترك تعليقات [في الأسفل]. يمكن العثور على الشيفرة المصدرية الكاملة لهذا المنشور في فرع [post-01][post branch]. [GitHub]: https://github.com/phil-opp/blog_os From 7095876dca68b2799a3cfd65851def510626d17e Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Thu, 25 Jul 2024 22:17:20 +0200 Subject: [PATCH 12/12] Add category index file for Arabic --- blog/content/edition-2/posts/_index.ar.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 blog/content/edition-2/posts/_index.ar.md diff --git a/blog/content/edition-2/posts/_index.ar.md b/blog/content/edition-2/posts/_index.ar.md new file mode 100644 index 000000000..c7079c408 --- /dev/null +++ b/blog/content/edition-2/posts/_index.ar.md @@ -0,0 +1,7 @@ ++++ +title = "Posts" +sort_by = "weight" +insert_anchor_links = "left" +render = false +page_template = "edition-2/page.html" ++++