إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

هكذا نكتب كود Rust

تقليص
X
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • [نقاش] هكذا نكتب كود Rust

    السلام عليكم ورحمة الله وربكاته

    في هذا الموضوع سنتحدث عن لغة Rust ونكتب بعض الأمثلة ، المشاركة متاحة للجميع سواً كنت في بداية تعلمك للغة أو متمرس بها، كل ما عليك هو كتابة كود بلغة Rust مع وصف ما يقوم به الكود ، ومن يرغب بالاستفسار عن الكود يمكنه المشاركة كذلك.

    الهدف من الموضوع نشر هذه اللغة والتعريف بمزايا اللغة هذا المجتمع.

    ---

    نبدأ بمثال عمل خادم باستعمال إطار العمل Actix يستقبل طلبات الـ HTTP على معرف(URI) ال "/users/<name>" ويرد برسالة ترحيب بالاسم الموجود في المعرف
    كود PHP:
    extern crate actix_web;
    use 
    actix_web::{httpserverAppHttpRequestPathResult};

    fn index(namePath<String>) -> Result<String> {
        
    Ok(format!("Dear {}, Welcome from Rust!"name))
    }

    fn main() {
        
    server::new(|| {
            
    App::new().resource("/users/{name}", |rr.method(http::Method::GET).with(index))
        })
        .
    bind("127.0.0.1:8088")
        .
    unwrap()
        .
    run();

    ط·آ§ط·آ¶ط·ط›ط·آ· ط·آ¹ط¸â€‍ط¸â€° ط·آ§ط¸â€‍ط·آµط¸ث†ط·آ±ط·آ© ط¸â€‍ط·آ¹ط·آ±ط·آ¶ ط·آ£ط¸ئ’ط·آ¨ط·آ±.ط¢*  ط·آ§ط¸â€‍ط·آ¥ط·آ³ط¸â€¦:	ط¸â€‍ط¸â€ڑط·آ·ط·آ© ط·آ´ط·آ§ط·آ´ط·آ© ط¸â€¦ط¸â€* 2018-11-09 15-53-19.pngط¢* ط¸â€¦ط·آ´ط·آ§ط¸â€،ط·آ¯ط·آ§ط·ع¾:	1ط¢* ط·آ§ط¸â€‍ط·*ط·آ¬ط¸â€¦:	104.0 ط¸ئ’ط¸ظ¹ط¸â€‍ط¸ث†ط·آ¨ط·آ§ط¸ظ¹ط·ع¾ط¢* ط·آ§ط¸â€‍ط¸â€،ط¸ث†ط¸ظ¹ط·آ©:	983050
    مستخدم GNU Linux, GNOME
    GTK+ :: C, C++, Pascal, Vala, Rust
    GIMP, Inkscape
    GitHub : 0x3UH4224D
    IRC : muhannad :: Tiwtter : @MuhannadRusayni

  • #2
    مثال آخر لعملية الـ Serialization و الـ Deserializtion في لغة Rust باستعمال المكتبة المشهورة serde.
    في المثال قمت بتحويل مصفوفة من النوع Book إلى تنسيق JSON وكذلك Yaml
    كود PHP:
    #[macro_use]
    extern crate serde_derive;
    extern crate serde;
    extern crate serde_json;
    extern crate serde_yaml;

    #[derive(Serialize, Deserialize)]
    struct Book {
        
    titleString,
        
    pricef32,
        
    authorVec<String>,
        
    pagesi32,
        
    #[serde(skip_serializing_if = "Option::is_none")]
        
    descriptionOption<String>,
    }

    fn main() {
        
    let rust_book Book {
            
    title"Programming Rust".into(),
            
    price48.05,
            
    authorvec!["Jim Blandy".into(), "Jason Orenddorff".into()],
            
    pages606,
            
    descriptionSome(
                
    "Rust is a new systems programming language that combines the performance and \
                 low-level control of C and C++ with memory safety and thread safety. Rust's modern, \
                 flexible types ensure your program is free of null pointer dereferences, double \
                 frees, dangling pointers, and similar bugs, all at compile time, without runtime \
                 overhead. In multi-threaded code, Rust catches data races at compile time, making \
                 concurrency much easier to use."
                    
    .into(),
            ),
        };

        
    let ddd_book Book {
            
    title"Domain-Driven Design : Tackling Complexity in the Heart of Software".into(),
            
    price64.88,
            
    authorvec!["Eric Evans".into()],
            
    pages560,
            
    descriptionNone,
        };

        
    let books vec![rust_bookddd_book];

        
    println!(
            
    "Here is the JSON format for these books: \n{}",
            
    serde_json::to_string_pretty(&books).unwrap()
        );

        
    println!(
            
    "Here is the Yaml format for these books: \n{}",
            
    serde_yaml::to_string(&books).unwrap()
        );  } 

    وهنا المخرجات بعد تشغيل البرنامج:
    كود PHP:
    ~/&#1571;عمالي/البرمجة/Rust/learrning_rust $ cargo run
        
    Finished dev [unoptimized debuginfotarget(sin 0.02s
         Running 
    `target/debug/learrning_rust`
    Here is the JSON format for these books:
    [
      {
        
    "title""Programming Rust",
        
    "price"48.05,
        
    "author": [
          
    "Jim Blandy",
          
    "Jason Orenddorff"
        
    ],
        
    "pages"606,
        
    "description""Rust is a new systems programming language that combines the performance and low-level control of C and C++ with memory safety and thread safety. Rust's modern, flexible types ensure your program is free of null pointer dereferences, double frees, dangling pointers, and similar bugs, all at compile time, without runtime overhead. In multi-threaded code, Rust catches data races at compile time, making concurrency much easier to use."
      
    },
      {
        
    "title""Domain-Driven Design : Tackling Complexity in the Heart of Software",
        
    "price"64.88,
        
    "author": [
          
    "Eric Evans"
        
    ],
        
    "pages"560
      
    }
    ]
    Here is the Yaml format for these books:
    ---
    titleProgramming Rust
      price
    48.04999923706055
      author
    :
        - 
    Jim Blandy
        
    Jason Orenddorff
      pages
    606
      description
    "Rust is a new systems programming language that combines the performance and low-level control of C and C++ with memory safety and thread safety. Rust's modern, flexible types ensure your program is free of null pointer dereferences, double frees, dangling pointers, and similar bugs, all at compile time, without runtime overhead. In multi-threaded code, Rust catches data races at compile time, making concurrency much easier to use."
    title"Domain-Driven Design : Tackling Complexity in the Heart of Software"
      
    price64.87999725341797
      author
    :
        - 
    Eric Evans
      pages
    560 
    مستخدم GNU Linux, GNOME
    GTK+ :: C, C++, Pascal, Vala, Rust
    GIMP, Inkscape
    GitHub : 0x3UH4224D
    IRC : muhannad :: Tiwtter : @MuhannadRusayni

    تعليق


    • #3
      مثال لعمل برنامج ذو واجهة رسومية بسيطة باستعمال مكتبة GTK+ .

      الواجهة تحتوي على زر يقوم بإظهار نافذة "حول البرنامج" وتلك النافذة تحتوي على بعض المعلومات عن البرنامج

      كود:
      extern crate gio;
      extern crate gtk;
      
      use gio::prelude::*;
      use gio::{ApplicationExt, ApplicationFlags};
      
      use gtk::prelude::*;
      use gtk::{AboutDialog, AboutDialogExt, Application, ApplicationWindow, Button};
      
      fn main() {
          // create GTK application instance
          let application = Application::new("org.MyApp", ApplicationFlags::FLAGS_NONE)
              .expect("Failed to start GTK Application");
          // closure to build the UI when the app starts
          application.connect_startup(move |app| {
              build_ui(app);
          });
          // run the app
          application.run(&[]);
      }
      
      // function to build the UI for our app
      fn build_ui(app: &Application) {
          // we create window with title
          let window = ApplicationWindow::new(app);
          window.set_title("GTK+ in Rust");
          window.set_border_width(10);
          // we create button with label
          let button = Button::new_with_label("حول البرنامج");
          // we call closure when the button get clicked
          button.connect_clicked(|_button| {
              // we create and show up About dialog
              let about_dlg = AboutDialog::new();
              about_dlg.set_authors(&["مهند الرسيني"]);
              about_dlg.set_comments("مثال على استعمال مكتبة GTK+ لبناء واجهة رسومية ولغة Rust");
              about_dlg.set_license("CC0 - المشاع الإبداعي");
              about_dlg.set_copyright("٢٠١٨ / ١٤٤٠");
              about_dlg.set_version("0.1.0");
              about_dlg.set_website("https://gitlab.com/0x3uh4224d/");
              about_dlg.set_website_label("GitLab - Muhannad Alrusayni");
              about_dlg.set_logo_icon_name("document-page-setup");
              about_dlg.show();
          });
          // adding button to the window
          window.add(&button);
          // showing the window and its content
          window.show_all();
      }
      هنا عرض سريع للبرنامج
      مستخدم GNU Linux, GNOME
      GTK+ :: C, C++, Pascal, Vala, Rust
      GIMP, Inkscape
      GitHub : 0x3UH4224D
      IRC : muhannad :: Tiwtter : @MuhannadRusayni

      تعليق

      يعمل...
      X