mohammad90
5 سال پیش توسط mohammad90 مطرح شد
8 پاسخ

فرق بین زبان های برنامه نویسی goوrust

سلام

دوستان چه تفاوت هایی این دوزبان دارند برای کسی که بیشتر سمت بک اند وب واپ موبایل کار کنه کدومش بیشترمفید خواهدبود؟


ثبت پرسش جدید
مهدی طهرانی
تخصص : cloud architect
@mtehrani 5 سال پیش آپدیت شد
4

@remex
سلام دوست عزیز
زبان rust یک زبان سیستمیه ولی go اینطور نیست
برای کار شما go خیلی ساده‌تر و کار راه‌اندازتره
ولی از نظر سرعت صرفا بخواید مقایسه کنید rust سریعتره
پیشنهاد من اینه که برید سمت go هم آینده داره هم جامعه بزرگ و رو به رشدی داره هم در خیلی از موارد دیگه به کارتون میاد


Bardia
تخصص : Back end
@kazemibardia132 5 سال پیش مطرح شد
0

@eng.tehrani
اتفاقا برعکس golang سریعتر هست
حتی از پایتون و نود


mohammad90
تخصص : درحال یادگیری
@remex 5 سال پیش آپدیت شد
2

زبان سیستم یعنی چه؟ چه فرقی با زبان غیر سیستم داره؟
همچنین Strong Types
Statically Typed
Runtime
Realtime
اینا یعنی چی?
پس گو برای بک اند وب بهتراز راست هست؟


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
3

@kazemibardia132
گو ممکنه از پایتون و نود سریعتر باشه اما در بنچ مارکها هم مشخه Rust سرعت بالاتری داره

در واقع رقیب Rust در سنجش سرعت C++ هست و نه Go


bardia
تخصص : Golang/Laravel
@mrbardia72 5 سال پیش مطرح شد
علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش آپدیت شد
2

در کمتر از یک دهه ، دو زبان برنامه نویسی جدید معرفی شدند. زبان Go که توسط گوگل ارائه شد و Rust توسط تیم Mozilla
هر دو زبان ویژگی های ضروری برای توسعه نرم افزار مدرن را ارائه می دهند:

  • ابزارهای پیشرفته و یکپارچه
  • ایمنی حافظه
  • دارای مدل توسعه متن باز
  • جامعه خوبی از توسعه دهندگان

جدا از این شباهت‌ها ، Rust و Go تفاوت‌هایی زیادی با یکدیگر دارند; حال به بررسی چند تفاوت بین این 2 زبان‌ می‌پردازیم:

  • Golang برای نوشتن وب‌سرویس ها و سلسله مراتب DevOps بسیار عالیست اما این یک زبان برنامه نویسی سیستم نیست.
  • Rust از طرفی برای کارهای همزمان، ایمنی و performance خیلی بالاش شناخته میشه. و زبان برنامه نویسی سیستم هست و ارتباط بسیار خوبی با سخت‌افزار میتونید درش داشته باشید.
  • بزرگترین ویژگی Go در قیاس با Rust سادگی آن است. هر چند گو یه زبان برنامه نویسی سیستم نیست اما برای زیر ساختارهای Backend بسیار گزینه خوبیه.
  • برای نوشتن یه کرنل یا memory allocator ، همیشه گزینه اول زبان Rust است.
  • منحنی یادگیری Rust کمی تند تر از Golang است. تفاوتش رو در کدهای زیر ببینید:
    فرض کنیم می‌خواهیم یه وب سرور ساده بنویسیم که وقتی یه درخواست HTTP رو دریافت میکنه "Hello World" رو برگردونه:
    کد ما در Rust:
use std::net::{TcpStream, TcpListener};
use std::io::{Read, Write};
use std::thread;

fn handle_read(mut stream: &TcpStream) {
    let mut buf = [0u8; 4096];
    match stream.read(&mut buf) {
        Ok(_) => {
            let req_str = String::from_utf8_lossy(&buf);
            println!("{}", req_str);
            },
        Err(e) => println!("Unable to read stream: {}", e),
    }
}

fn handle_write(mut stream: TcpStream) {
    let response = b"HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=UTF-8\r\n\r\n<html><body>Hello world</body></html>\r\n";
    match stream.write(response) {
        Ok(n) => println!("Response sent: {} bytes", n),
        Err(e) => println!("Failed sending response: {}", e),
    }
}

fn handle_client(stream: TcpStream) {
    handle_read(&stream);
    handle_write(stream);
}

fn main() {
    let port = "8080";
    let listener = TcpListener::bind(format!("127.0.0.1:{}", port)).unwrap();
    println!("Listening for connections on port {}", port);

    for stream in listener.incoming() {
        match stream {
            Ok(stream) => {
                thread::spawn(|| {
                    handle_client(stream)
                });
            }
            Err(e) => {
                println!("Unable to connect: {}", e);
            }
        }
    }
}

کد تقریبا مشابه در Go:

package main

import (
    "fmt"
    "io"
    "log"
    "net/http"
)

type handler struct{}

func (theHandler *handler) ServeHTTP(writer http.ResponseWriter, request *http.Request) {
    log.Printf("Received request: %s\n", request.URL)
    log.Printf("%v\n", request)
    io.WriteString(writer, "Hello world!")
}

const port = "8080"

func main() {
    server := http.Server{
        Addr:    fmt.Sprintf(":%s", port),
        Handler: &handler{},
    }

    server.ListenAndServe()
}

ممکنه کار کردن با Go ساده تر به نظر برسه اما Rust از سمت دیگه گزینه های بیشتری (و در نتیجه قدرت بیشتری) رو در اختیار شما میذاره ..

بعد از تمام این صحبت ها به این نتیجه میرسیم که Rust و Go رقیب نیستند.. به دلایل زیر:

  • Rust روی انتزاعات "رایگان" متمرکز است. این همون کاریه که C ++ برای دهه ها داره انجام میده. Go به عنوان زبانی که بسیاری از اقدامات سطح پایین را در حین زمان اجرا متوقف می کند ، بخش بزرگی از performance رو فدای سادگی میکند.
  • Rust برای قابلیت همکاری با C طراحی شده است. انتظار می رود کد Rust در برنامه های بزرگ دیگری که از کنوانسیون فراخوانی C پخش می شوند ، درج شود.
  • Go بر روی بهره وری برنامه نویس و در کل چرخه توسعه نرم افزار متمرکز شده اما Rust از سمت دیگه به قدرتی که به برنامه‌نویس میده اتکا کرده

پیروز باشید


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
2

@Arshavir
بله صحبت های بنده هم مطلبی رو که شما لینکشو گذاشتید، رو تائید میکنه


bardia
تخصص : Golang/Laravel
@mrbardia72 5 سال پیش مطرح شد
0

@ali.bayat
با این اوصاف در زمینه وب گولنگ و در زمینه برنامه های سیستمی راست


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام