برنامه نویسی

چون ما عاشق برو هستیم! ❤

Go: سریعترین زبان باطن در حال رشد

Go توسط گوگل در سال 2007 برای بهبود بهره وری برنامه نویسی در عصر چند هسته ای، ماشین های شبکه ای و پایگاه های کد بزرگ. طراحان می خواستند به انتقاد از زبان های دیگر در حال استفاده در این زمینه بپردازند گوگل، اما ویژگی های مفید آن را حفظ کنید. راب پایک، کن تامپسون و رابرت گریزمر خالقان، دستور Go را شبیه به C نگه داشتند. در اواخر سال 2008 راس کاکس به تیم ملحق شد و به انتقال زبان و کتابخانه ها از نمونه اولیه به واقعیت کمک کرد.

زبان Go در سال 2009 با هدف تسهیل حل مشکلات در توسعه لایه های شبکه، مقیاس پذیری، عملکرد، بهره وری و مهمتر از همه همزمانی راه اندازی شد. خود راب پایک اظهار داشت که “Go برای رسیدگی به مجموعه ای از مشکلات مهندسی نرم افزار طراحی شده است که ما در ساختن نرم افزار سرور عالی با آنها مواجه بودیم.”

Go تحت تأثیر چندین زبان برنامه نویسی و پارادایم های مختلف قرار گرفت، از جمله: الف، APL، BCPL، سی، CSP، برزخ، مدول، اخبار، اوبرون، اوکام،پاسکال، اسمال تاک ه کریستال، واضح است که آنها بهترین داشته های خود را به کار برده اند و با حداقل های لازم برای حل مشکلات پیشنهادی، چیزی جدید و ناب خلق کرده اند، بدون اینکه سادگی خود را از دست بدهند. من فکر می کنم ما می توانیم این را صدا کنیم نوآوری. با شکستن پارادایم های زبان و پیاده سازی چیزی جدید به روشی ساده و بسیار قدرتمند، نوآوری کنید.

package mainimport "fmt"func main() {
    fmt.Println("Hello all folks!")
}

کمتر به صورت تصاعدی بیشتر است

تیم توسعه دهنده Go می گوید که ایجاد آن تلاشی برای بهره وری بیشتر برنامه نویسان است. بهبود فرآیند توسعه نرم افزار در گوگل. هدف اول ایجاد زبانی بهتر برای رویارویی با چالش ها بود همزمانی مقیاس پذیر، یعنی نرم افزاری که بسیاری از نگرانی ها را به طور همزمان مدیریت می کند، به عنوان مثال می توان به هماهنگی هزار سرور اشاره کرد. پایان ارسال ترافیک شبکه همیشه

کوچک نگه داشتن زبان Go امکان دستیابی به اهداف مهم تری را فراهم می کند. کوچک بودن، یادگیری Go را آسان‌تر، درک آسان‌تر، پیاده‌سازی آسان‌تر، پیاده‌سازی مجدد آسان‌تر، اشکال‌زدایی آسان‌تر، بهینه‌سازی آسان‌تر و تکامل را آسان‌تر می‌کند. انجام کمتر اجازه می دهد تا بیشتر. این عبارتی است که توسط تیم توسعه Go استفاده می شود:کمتر انجام دهید. بیشتر را فعال کنید” می تواند تعادل بین جهان مشکلات موجود و آنچه Go می تواند به حل این مشکلات به خوبی کمک کند. Go صراحتاً برای حل هر مشکلی طراحی نشده است، در عوض آن‌ها به اندازه کافی برای ما تلاش کرده‌اند تا راه‌حل‌های سفارشی خود را به راحتی ایجاد کنیم، در حالی که کاملاً واضح است که Go نمی‌تواند همه کارها را انجام دهد.

غوغا در جامعه برو

آنها بودند کنار گذاشته شد چندین ویژگی از زبان‌های مدرن، *تضاد و حرکت در جهت مخالف سایر زبان‌های فعلی، برخی ویژگی‌ها مانند: *استفاده از اعلان‌های تغییرناپذیری، انواع داده‌های تطبیق الگو، ژنریک، رسیدگی به استثنا، میراث، برنامه نویسی عمومی،ادعا ه اضافه بار از روش ها و چندین نکته دیگر. تمامی منابع فوق مورد نقد و بررسی قرار گرفته و به سازندگان آن اشاره شده است برو، که پاسخ داد:این حذفیات ساده‌سازی‌های بیش از حدی بود که به قدرت Go کمک کرد و به آن کمک کرد.» چیزهای زیادی در زبان و کتابخانه های Go وجود دارد که با شیوه های مدرن متفاوت است، این تصمیم تیم توسعه Go بود: “گاهی اوقات امتحان یک رویکرد متفاوت سودمند است.”

از همه دعوت می شود در صورت تمایل به کمک و مشارکت بپردازند. علاقه مندان می توانند برای ویژگی های جدید و هر چیزی که مربوط به اکوسیستم زبان است، پیشنهادات خود را باز کنند. کد منبع Go در GitHub موجود است. اسنادی در مورد اینکه چگونه می توانید به زبان کمک کنید در اینجا ارائه شده است.

همزمانی با توازی متفاوت است

یکی از عبارات معروف این است: *«رقابت یعنی برخورد همزمان با خیلی چیزها. موازی گرایی انجام بسیاری از کارها در آن واحد است. همزمانی روشی برای ساختاربندی نرم‌افزار است و قطعاً موازی‌سازی نیست اگرچه امکان موازی‌سازی را فراهم می‌کند.

اگر فقط یک پردازنده دارید، برنامه شما همچنان می تواند همزمان باشد، اما موازی نباشد. از سوی دیگر، یک برنامه همزمان به خوبی نوشته شده می تواند به طور کارآمد به موازات یک چند پردازنده اجرا شود. پیشنهاد می‌کنم این ویدیوی سخنرانی راب پایک را با عنوان «رقابت موازی‌سازی نیست» تماشا کنید.

Concurrency در Go بسیار قدرتمند است و همچنین کدنویسی آن ساده است، که هدف مهندسانی بود که Go را توسعه دادند. حل بسیاری از مسائل با استفاده از همزمانی بسیار کارآمدتر است و این قدرت Go است، بنابراین وقتی صحبت از همزمانی به میان می آید، تبدیل به یک خدا شده است. به همین دلیل، مشکلاتی که در این جهان وجود دارد، بسیار کارآمد و مهمتر از همه با منابع محاسباتی بسیار کم حل خواهند شد.

مثال زیر زمانی که به همزمانی اشاره می کنیم یک کلاسیک است، زمانی که می خواهیم CPU و I/O را متعادل کنیم، از این قسمت استفاده می کنیم. هواکش.

Fanout چیست؟

چندین تابع می توانند از یک کانال بخوانند تا زمانی که آن کانال بسته شود، به این می گویند هواکش . این روشی را برای توزیع کار بین گروهی از کارگران به منظور موازی کردن استفاده از آن فراهم می‌کند CPU ه E/S.

/*
* Example Worker
* @package     main
* @author      @jeffotoni
 */

// In this example we'll look at how to implement
// a _worker pool_ using goroutines and channels.
package main

import "fmt"
import "time"

// Here's the worker, of which we'll run several
// concurrent instances. These workers will receive
// work on the `jobs` channel and send the corresponding
// results on `results`. We'll sleep a second per job to
// simulate an expensive task.
func worker(id int, jobs <-chan int, results chan<- int) {

    for j := range jobs {

        fmt.Println("worker", id, "started  job", j)

        time.Sleep(time.Second)

        fmt.Println("worker", id, "finished job", j)
        results <- j * 2
    }
}

func main() {

    // In order to use our pool of workers we need to send
    // them work and collect their results. We make 2
    // channels for this.
    jobs := make(chan int, 100)
    results := make(chan int, 100)

    // This starts up 3 workers, initially blocked
    // because there are no jobs yet.
    for w := 1; w <= 3; w++ {
        go worker(w, jobs, results)
    }

    // Here we send 5 `jobs` and then `close` that
    // channel to indicate that's all the work we have.
    for j := 1; j <= 5; j++ {
        jobs <- j
    }

    close(jobs)

    // Finally we collect all the results of the work.
    for a := 1; a <= 5; a++ {
        <-results
    }
}

مزایای Go:

  • ژنریک ندارد.

  • اضافه بار اپراتور ندارد.

  • هیچ محاسباتی اشاره گر ندارد.

  • مدیریت موضوع صریح نیست.

  • استنتاج نوع دارد.

  • وابستگی ها واضح است.

  • نحو تمیز است.

  • معناشناسی روشن است.

  • ترکیب و نه ارث;

  • GC Nativo (زباله جمع کن)؛

  • گوروتین دارد.

  • پشتیبانی بومی برای برنامه نویسی همزمان؛

  • توابع درجه یک (ما می توانیم توابع را به عنوان پارامتر ارسال کنیم)

  • چند پلتفرمی؛

  • متن باز؛

  • منحنی یادگیری بسیار پایین یا یادگیری آسان.

  • بهره وری بالا؛

  • مشکلات مقیاس پذیری را حل می کند.

  • این می تواند هزینه های سرور شما را به شدت کاهش دهد.

  • چندین مشکل که از منظر Go تصور می شود، درمان و حل آنها بسیار آسان تر می شود.

  • فقط 25 کلمه رزرو شده دارد.

  • چند پارادایم: همزمان، کاربردی، امری، شی گرا.

  • ایمن حافظه.

ما می دانیم که چندین نقطه بالا خواهد بود انتقاد کرد، اما در عمل و به مرور زمان متوجه شدیم که تمام ساده سازی های حذف شده Go را به زبان قدرتمندتری تبدیل کرده است. برای پروژه های ساده یا پیچیده، Go همیشه یک جایگزین عالی خواهد بود، زیرا همه چیز را ساده تر و ناب تر، کدنویسی و نگهداری آسان تر می کند.

رفتن عشق است

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا