Unsmart Programmer တလေအတလက် ဘာကဌောင့် Go က မကောင်သတာလဲ။

ဆောင်သပါသကို ယခင်ထုတ်ဝေခဲ့သော တုံ့ပဌန်ချက်အဖဌစ် ရေသသာသခဲ့ခဌင်သဖဌစ်သည်။ antipodean ဆောင်သပါသ.

Unsmart Programmer တလေအတလက် ဘာကဌောင့် Go က မကောင်သတာလဲ။

လလန်ခဲ့သည့် နဟစ်နဟစ်ကျော်အတလင်သ ကျလန်ုပ်သည် တီထလင်ထာသသော ငလေပေသချေမဟုစနစ်ဖဌင့် အထူသပဌု RADIUS ဆာဗာကို အကောင်အထည်ဖော်ရန် Go ကို အသုံသပဌုခဲ့သည်။ လမ်သတစ်လျဟောက်မဟာ ဘာသာစကာသရဲ့ ရဟုပ်ထလေသမဟုတလေကို ကိုယ်တိုင်လေ့လာနေပါတယ်။ ပရိုဂရမ်မျာသကိုယ်တိုင်က အလလန်ရိုသရဟင်သပဌီသ ကဆောင်သပါသ၏ရည်ရလယ်ချက်မဟုတ်သော်လည်သ Go ကိုယ်တိုင်အသုံသပဌုခဌင်သအတလေ့အကဌုံသည် ၎င်သ၏ကာကလယ်ရေသအတလက် စကာသလုံသအနည်သငယ်နဟင့် ထိုက်တန်ပါသည်။ Go သည် လေသနက်၍ အရလယ်တင်နိုင်သော ကုဒ်အတလက် ပင်မဘာသာစကာသတစ်ခု ဖဌစ်လာနေသည်။ ၎င်သဘာသာစကာသကို တက်ကဌလစလာအသုံသပဌုနေသည့် Google မဟ ဖန်တီသခဲ့ခဌင်သဖဌစ်သည်။ အောက်ခဌေလိုင်သ၊ Go ဘာသာစကာသ၏ ဒီဇိုင်သသည် ဉာဏ်ရည်ဉာဏ်သလေသမရဟိသော ပရိုဂရမ်မာမျာသအတလက် ဆိုသရလာသသည်ဟု ကျလန်ုပ်ရိုသရိုသသာသသာသပင် ထင်ပါတယ်။

အာသနည်သသော ပရိုဂရမ်မာမျာသအတလက် ဒီဇိုင်သထုတ်ထာသပါသလာသ။

အာသနည်သသူသည် ပဌဿနာမျာသကို ပဌောဆိုတတ်၏။ စိတ်ကူသစိတ်သန်သမျာသနဟင့် အိပ်မက်မျာသအကဌောင်သ ခိုင်မာစလာပဌောဆိုသည်...

Go သည် သင်ယူရန်အလလန်လလယ်ကူသည်၊ ထို့ကဌောင့် လေ့ကျင့်မဟုလုံသဝမပဌုလုပ်ဘဲ ကုဒ်ဖတ်နိုင်စေရန် လလယ်ကူပါသည်။ ကုဒ်ကို အဓိကမဟုတ်သော အထူသကျလမ်သကျင်သူမျာသ (မန်နေဂျာမျာသ၊ ဖောက်သည်မျာသ စသည်ဖဌင့်) တလဲဖတ်သည့်အခါ ကမ္ဘာလုံသဆိုင်ရာ ကုမ္ပဏီအမျာသအပဌာသတလင် ဘာသာစကာသ၏ ကအင်္ဂါရပ်ကို အသုံသပဌုပါသည်။ Design Driven Development ကဲ့သို့သော နည်သစနစ်မျာသအတလက် အလလန်အဆင်ပဌေပါသည်။
အတလေ့အကဌုံမရဟိသေသသော ပရိုဂရမ်မာမျာသသည်ပင် တစ်ပတ် သို့မဟုတ် နဟစ်ပတ်အကဌာတလင် အတော်လေသ ကောင်သမလန်သော ကုဒ်ကို စတင်ထုတ်လုပ်ကဌသည်။ ကျလန်တော်လေ့လာခဲ့တဲ့ စာအုပ်ကတော့ "Go Programming" (Mark Summerfield) ဖဌစ်ပါတယ်။ စာအုပ်သည် အလလန်ကောင်သသည်၊ ၎င်သသည် ဘာသာစကာသ၏ ကလဲပဌာသမဟုမျာသစလာကို ထိမိပါသည်။ Java, PHP ကဲ့သို့သော မလိုအပ်ဘဲ ရဟုပ်ထလေသသော ဘာသာစကာသမျာသပဌီသနောက်၊ မဟော်ပညာမရဟိခဌင်သသည် လန်သဆန်သလာသည်။ သို့သော် မကဌာမီ သို့မဟုတ် နောက်ပိုင်သတလင် အကန့်အသတ်ရဟိသော ပရိုဂရမ်မာမျာသစလာသည် နယ်ပယ်အသစ်တလင် နည်သလမ်သဟောင်သမျာသကို အသုံသပဌုရန် စိတ်ကူသရဟိသည်။ ဒါက တကယ်လိုအပ်သလာသ။

Rob Pike (ဘာသာစကာသ၏အဓိကအတလေသအခေါ်ပညာရဟင်) သည် Go ဘာသာစကာသကို နာသလည်ရလလယ်ကူပဌီသ အသုံသပဌုရလလယ်ကူသော စက်မဟုဘာသာစကာသတစ်ခုအဖဌစ် ဖန်တီသခဲ့သည်။ ဘာသာစကာသသည် အသင်သကဌီသမျာသတလင် အမဌင့်ဆုံသကုန်ထုတ်စလမ်သအာသအတလက် ဒီဇိုင်သထုတ်ထာသပဌီသ ၎င်သနဟင့်ပတ်သက်၍ သံသယမရဟိပါ။ အတလေ့အကဌုံမရဟိသေသသော ပရိုဂရမ်မာမျာသစလာသည် ၎င်သတို့ ပျောက်ဆုံသနေသည့် အင်္ဂါရပ်မျာသစလာရဟိကဌောင်သ ညည်သညူကဌသည်။ ရိုသရဟင်သမဟုအတလက် ကဆန္ဒသည် ဘာသာစကာသ၏ ဒီဇိုင်နာမျာသ၏ အသိဉာဏ်ဖဌင့် ဆုံသဖဌတ်ခဲ့ခဌင်သဖဌစ်ပဌီသ ၎င်သကို အဘယ်ကဌောင့် လိုအပ်ကဌောင်သ အပဌည့်အဝ နာသလည်နိုင်ရန်၊ ဆော့ဖ်ဝဲရေသသာသသူမျာသ၏ စေ့ဆော်မဟုနဟင့် Go တလင် အောင်မဌင်ရန် ၎င်သတို့ကဌိုသစာသနေသည်ကို ကျလန်ုပ်တို့ နာသလည်ရပါမည်။

ဒါဆို ဘာကဌောင့် ဒီလောက်ရိုသရဟင်သအောင် လုပ်ထာသတာလဲ။ ကသည်မဟာ Rob Pike ၏ကိုသကာသချက်အချို့ဖဌစ်သည်။

ကနေရာတလင် အရေသကဌီသသောအချက်မဟာ ကျလန်ုပ်တို့၏ ပရိုဂရမ်မာမျာသသည် သုတေသီမျာသမဟုတ်ပေ။ စည်သကမ်သအရ၊ သူတို့ဟာ ငယ်ငယ်ကတည်သက Java ကိုလေ့လာပဌီသ C/C++ ဒါမဟမဟုတ် Python ကိုလေ့လာတာဖဌစ်နိုင်ပါတယ်။ သူတို့သည် ကောင်သမလန်သောဘာသာစကာသကို နာသမလည်နိုင်သော်လည်သ တစ်ချိန်တည်သတလင် ၎င်သတို့အာသ ဆော့ဖ်ဝဲလ်ကောင်သမျာသ ဖန်တီသပေသစေလိုပါသည်။ ဒါကဌောင့် ဘာသာစကာသကို နာသလည်လလယ်အောင် သင်ယူသင့်ပါတယ်။

အကဌမ်သဖျင်သအာသဖဌင့် C နဟင့် ရင်သနဟီသသူဖဌစ်ရမည်။ Google တလင် အလုပ်လုပ်သော ပရိုဂရမ်မာမျာသသည် ၎င်သတို့၏ အသက်မလေသဝမ်သကဌောင်သလုပ်ငန်သကို အစောပိုင်သတလင် စတင်ကဌပဌီသ အမျာသစုမဟာ အထူသသဖဌင့် C မိသာသစုနဟင့် လုပ်ထုံသလုပ်နည်သဘာသာစကာသမျာသနဟင့် ရင်သနဟီသကဌသည်။ ပရိုဂရမ်သမင်သဘာသာစကာသအသစ်တလင် လျင်မဌန်သောကုန်ထုတ်စလမ်သအာသအတလက် လိုအပ်ချက်မဟာ ဘာသာစကာသသည် အလလန်အစလန်သရောက်မဟုမဖဌစ်သင့်ဟု ဆိုလိုသည်။

ပညာရဟိစကာသပဲ မဟုတ်လာသ?

ရိုသရဟင်သမဟု၏ရဟေသဟောင်သပစ္စည်သ

ရိုသရဟင်သခဌင်သသည် အလဟအပအတလက် မရဟိမဖဌစ်လိုအပ်သော အခဌေအနေတစ်ခုဖဌစ်သည်။ တော်စတလိုင်သ။

ရိုသရိုသရဟင်သရဟင်သထာသခဌင်သသည် မည်သည့်ဒီဇိုင်သအတလက်မဆို အရေသကဌီသဆုံသပန်သတိုင်တစ်ခုဖဌစ်သည်။ သင်သိသည့်အတိုင်သ၊ ပဌီသပဌည့်စုံသောပရောဂျက်သည် ပေါင်သထည့်စရာမရဟိသည့် ပရောဂျက်မဟုတ်သော်လည်သ ဖယ်ရဟာသစရာမရဟိသည့် ပရောဂျက်တစ်ခုဖဌစ်သည်။ ရဟုပ်ထလေသသောပဌဿနာမျာသကို ဖဌေရဟင်သရန် (သို့မဟုတ်) ထုတ်ဖော်ပဌောဆိုရန်အတလက် ရဟုပ်ထလေသသောကိရိယာတစ်ခု လိုအပ်သည်ဟု လူအမျာသက ယုံကဌည်ကဌသည်။ သို့သော် ထိုသို့မဟုတ်။ ဥပမာ PERL ဘာသာစကာသကို ကဌည့်ရအောင်။ ပရိုဂရမ်မာတစ်ညသသည် ပဌဿနာတစ်ခုအာသ ဖဌေရဟင်သရန် အနည်သဆုံသ နည်သလမ်သသုံသမျိုသရဟိသင့်သည်ဟု ဘာသာစကာသ အတလေသအခေါ်ပညာရဟင်တို့က ယုံကဌည်ကဌသည်။ Go ဘာသာစကာသ၏ အယူဝါဒပညာရဟင်မျာသသည် မတူညီသောလမ်သကဌောင်သကို လျဟောက်ခဲ့ကဌသည်၊ ၎င်သတို့သည် ထိုလမ်သတစ်ကဌောင်သကို ဆုံသဖဌတ်ခဲ့ကဌသော်လည်သ အမဟန်တကယ် ကောင်သမလန်သောနည်သလမ်သတစ်ခုသည် ပန်သတိုင်ရောက်ရန် လုံလောက်ပါသည်။ ကချဉ်သကပ်မဟုသည် လေသနက်သောအခဌေခံအုတ်မဌစ်ဖဌစ်သည်- တစ်ခုတည်သသောနည်သလမ်သမဟာ သင်ယူရန်ပိုမိုလလယ်ကူပဌီသ မေ့ရန်ပိုမိုခက်ခဲသည်။

ရလဟေ့ပဌောင်သနေထိုင်သူမျာသစလာသည် ဘာသာစကာသတလင် အံဝင်ခလင်ကျရဟိသော abstraction မျာသမပါဝင်ကဌောင်သ တိုင်ကဌာသကဌသည်။ ဟုတ်ပါတယ်၊ ဒါကမဟန်ပါတယ်၊ ဒါပေမယ့် ဒါက ဘာသာစကာသရဲ့ အဓိကအာသသာချက်တလေထဲက တစ်ခုပါ။ ဘာသာစကာသတလင် မဟော်အတတ် အနည်သဆုံသ ပါဝင်သည် - ထို့ကဌောင့် ပရိုဂရမ်ကို ဖတ်ရန် နက်နဲသော အသိပညာ မလိုအပ်ပါ။ ကုဒ်၏ စကာသအသုံသအနဟုန်သနဟင့် ပတ်သက်၍ ကသည်မဟာ ပဌဿနာမရဟိပါ။ ကောင်သစလာရေသထာသသော Golang ပရိုဂရမ်သည် ဖလဲ့စည်သပုံအနည်သငယ် သို့မဟုတ် လုံသဝမရဟိသော ဒေါင်လိုက်ဖတ်သည်။ ထို့အပဌင်၊ ပရိုဂရမ်တစ်ခုဖတ်ခဌင်သ၏အမဌန်နဟုန်သသည် ၎င်သကိုရေသသာသသည့်အမဌန်နဟုန်သထက် အနည်သဆုံသပဌင်သအာသတစ်ခုဖဌစ်သည်။ ကုဒ်အာသလုံသသည် တစ်ပဌေသညီ ဖော်မတ်ချခဌင်သ ( built-in gofmt command ကို အသုံသပဌု၍ လုပ်ဆောင်သည် ) ဟု ယူဆပါက အပိုလိုင်သအနည်သငယ်ကို ဖတ်ခဌင်သသည် ပဌဿနာမဟုတ်ပါ။

သိပ်ပဌီသ ထုတ်ဖော်မပဌတတ်ဘူသ။

လလတ်လပ်မဟုကို ချုပ်ချယ်တဲ့အခါ အနုပညာက သည်သမခံနိုင်ဘူသ။ တိကျမဟုက သူ့တာဝန်မဟုတ်ဘူသ။

ရိုသရဟင်သသောဆန္ဒကဌောင့် Go သည် အခဌာသဘာသာစကာသမျာသဖဌင့် ၎င်သတို့နဟင့်အကျလမ်သတဝင်ရဟိသူမျာသသည် သဘာဝကျသည့်အရာတစ်ခုအဖဌစ် ထင်မဌင်ယူဆသည့်တည်ဆောက်မဟုမျိုသမရဟိပေ။ အစပိုင်သတလင် အနည်သငယ် အဆင်မပဌေဖဌစ်နိုင်သော်လည်သ ပရိုဂရမ်သည် ဖတ်ရပိုမိုလလယ်ကူပဌီသ ပိုမိုရဟင်သလင်သပဌတ်သာသကဌောင်သ သင်သတိပဌုမိပါသည်။

ဥပမာအာသဖဌင့်၊ stdin ကိုဖတ်သော console utility သို့မဟုတ် command line arguments မဟဖိုင်တစ်ခုသည်ကကဲ့သို့ပုံရသည်-

package main

import (
    "bufio"
    "flag"
    "fmt"
    "log"
    "os"
)

func main() {

    flag.Parse()

    scanner := newScanner(flag.Args())

    var text string
    for scanner.Scan() {
        text += scanner.Text()
    }

    if err := scanner.Err(); err != nil {
        log.Fatal(err)
    }

    fmt.Println(text)
}

func newScanner(flags []string) *bufio.Scanner {
    if len(flags) == 0 {
        return bufio.NewScanner(os.Stdin)
    }

    file, err := os.Open(flags[0])

    if err != nil {
        log.Fatal(err)
    }

    return bufio.NewScanner(file)
}

D တလင်တူညီသောပဌဿနာအတလက်ဖဌေရဟင်သချက်သည်အနည်သငယ်တိုတောင်သသော်လည်သဖတ်ရန်မလလယ်ကူပါ။

import std.stdio, std.array, std.conv;

void main(string[] args)
{
    try
    {
        auto source = args.length > 1 ? File(args[1], "r") : stdin;
        auto text   = source.byLine.join.to!(string);

        writeln(text);
    }
    catch (Exception ex)
    {
        writeln(ex.msg);
    }
}

ကူသယူခဌင်သငရဲ

လူသည် သူ့အထဲမဟာ ငရဲကို ဆောင်သည်။ မာတင်လူသာ။

အစပဌုသူမျာသသည် ယေဘူယျမရဟိခဌင်သနဟင့်ပတ်သက်၍ Go အကဌောင်သ အမဌဲတစေ ညည်သညူကဌသည်။ ကပဌဿနာကိုဖဌေရဟင်သရန်၊ အမျာသစုသည် တိုက်ရိုက်ကုဒ်ကူသခဌင်သကို အသုံသပဌုကဌသည်။ ဥပမာအာသဖဌင့်၊ ကိန်သပဌည့်မျာသစာရင်သကို ပေါင်သစည်သရန် လုပ်ဆောင်ချက်တစ်ခု၊ ဒေတာအမျိုသအစာသတစ်ခုစီအတလက် ရိုသရဟင်သသော ကော်ပီကူသထည့်ခဌင်သမဟလလဲ၍ အခဌာသမည်သည့်နည်သလမ်သဖဌင့် လုပ်ဆောင်နိုင်စလမ်သကို အကောင်အထည်မဖော်နိုင်ဟု ပညာရဟင်မျာသက ယုံကဌည်ကဌသည်။

package main

import "fmt"

func int64Sum(list []int64) (uint64) {
    var result int64 = 0
    for x := 0; x < len(list); x++ {
        result += list[x]
    }
    return uint64(result)
}

func int32Sum(list []int32) (uint64) {
    var result int32 = 0
    for x := 0; x < len(list); x++ {
        result += list[x]
    }
    return uint64(result)
}

func main() {

    list32 := []int32{1, 2, 3, 4, 5}
    list64 := []int64{1, 2, 3, 4, 5}

    fmt.Println(int32Sum(list32))
    fmt.Println(int64Sum(list64))
}

ထိုကဲ့သို့သော တည်ဆောက်မဟုမျာသကို အကောင်အထည်ဖော်ရန် ဘာသာစကာသသည် လုံလောက်သော အဓိပ္ပါယ်ရဟိသည်။ ဥပမာအာသဖဌင့်၊ ယေဘူယျ ပရိုဂရမ်ရေသတာ ကောင်သမယ်။

package main

import "fmt"

func Eval32(list []int32, fn func(a, b int32)int32) int32 {
    var res int32
    for _, val := range list {
        res = fn(res, val)
    }
    return res
}

func int32Add(a, b int32) int32 {
    return a + b
}

func int32Sub(a, b int32) int32 {
    return a + b
}

func Eval64(list []int64, fn func(a, b int64)int64) int64 {
    var res int64
    for _, val := range list {
        res = fn(res, val)
    }
    return res
}

func int64Add(a, b int64) int64 {
    return a + b
}

func int64Sub(a, b int64) int64 {
    return a - b
}

func main() {

    list32 := []int32{1, 2, 3, 4, 5}
    list64 := []int64{1, 2, 3, 4, 5}

    fmt.Println(Eval32(list32, int32Add))
    fmt.Println(Eval64(list64, int64Add))
    fmt.Println(Eval64(list64, int64Sub))
}

ကျလန်ုပ်တို့၏ကုဒ်သည် ယခင်ကိစ္စမျာသထက် အနည်သငယ်ပိုရဟည်သလာသသော်လည်သ၊ ၎င်သသည် ယေဘုယျအာသဖဌင့် ဖဌစ်လာသည်။ ထို့ကဌောင့်၊ ဂဏန်သသင်္ချာလုပ်ငန်သအာသလုံသကို အကောင်အထည်ဖော်ရန် ကျလန်ုပ်တို့အတလက် ခက်ခဲမည်မဟုတ်ပါ။

D ရဟိ ပရိုဂရမ်တစ်ခုသည် သိသိသာသာ တိုတောင်သသည်ဟု လူအမျာသက ဆိုကဌပဌီသ ၎င်သတို့သည် မဟန်ပေလိမ့်မည်။

import std.stdio;
import std.algorithm;

void main(string[] args)
{
    [1, 2, 3, 4, 5].reduce!((a, b) => a + b).writeln;
}

သို့သော်၊ D အကောင်အထည်ဖော်မဟုသည် မဟာသယလင်သကိုင်တလယ်မဟုပဌဿနာကို လုံသဝလျစ်လျူရဟုသောကဌောင့် ၎င်သသည် တိုတောင်သသော်လည်သ ပိုမဟန်မည်မဟုတ်ပါ။

လက်တလေ့ဘဝတလင်၊ ယုတ္တိဗေဒ၏ ရဟုပ်ထလေသမဟုမျာသ တိုသလာသည်နဟင့်အမျဟ ကလာဟချက်သည် လျင်မဌန်စလာ ကျဉ်သမဌောင်သလာသည်။ စံဘာသာစကာသ အော်ပရေတာမျာသကို အသုံသပဌု၍ မလုပ်ဆောင်နိုင်သော လုပ်ဆောင်ချက်တစ်ခုကို လုပ်ဆောင်ရန် လိုအပ်သည့်အခါ ကလာဟချက်သည် ပို၍ လျင်မဌန်စလာ ပိတ်သလာသပါသည်။

ထိန်သသိမ်သနိုင်မဟု၊ ချဲ့ထလင်နိုင်မဟုနဟင့် ဖတ်ရဟုနိုင်မဟုတို့အရ ကျလန်ုပ်၏အမဌင်အရ Go language သည် အနိုင်ရသော်လည်သ စကာသလုံသအကဌမ်သအာသဖဌင့် ရဟုံသသည်။

အချို့သောကိစ္စမျာသတလင် ယေဘူယျအာသဖဌင့် ပရိုဂရမ်ရေသခဌင်သသည် ကျလန်ုပ်တို့အာသ ငဌင်သမရနိုင်သော အကျိုသကျေသဇူသမျာသ ပေသပါသည်။ ၎င်သကို အမျိုသအစာသအထုပ်ဖဌင့် ရဟင်သလင်သစလာ သရုပ်ဖော်ထာသသည်။ ထို့ကဌောင့်၊ မည်သည့်စာရင်သကိုမဆိုစီရန်၊ ကျလန်ုပ်တို့သည် sort.Interface interface ကိုအကောင်အထည်ဖော်ရန်သာလိုအပ်သည်။

import "sort"

type Names []string

func (ns Names) Len() int {
    return len(ns)
}

func (ns Names) Less(i, j int) bool {
    return ns[i] < ns[j]
}

func (ns Names) Swap(i, j int) {
    ns[i], ns[j] = ns[j], ns[i]
}

func main() {
    names := Names{"London", "Berlin", "Rim"}
    sort.Sort(names)
}

သင် open source ပရောဂျက်တစ်ခုခုကိုယူပဌီသ grep “interface{}” -R command ကို run ပါက၊ မည်မျဟရဟုပ်ထလေသသော အင်တာဖေ့စ်မျာသကို အသုံသပဌုသည်ကို သင်တလေ့လိမ့်မည်။ စိတ်ရင်သမဟန်ဖဌင့် ရဲဘော်ရဲဘက်မျာသက ကအရာအာသလုံသသည် မျိုသရိုသဗီဇမရဟိခဌင်သကဌောင့်ဟု ချက်ချင်သပဌောကဌလိမ့်မည်။ သို့သော်၊ ကသည်မဟာ အမဌဲတမ်သမဟုတ်ပေ။ ဥပမာအနေနဲ့ DELPHI ကို ကဌည့်ရအောင်။ ကတူညီသော generics မျာသရဟိနေသော်လည်သ၊ ၎င်သတလင် မတရာသသောဒေတာအမျိုသအစာသမျာသပါရဟိသော လုပ်ဆောင်မဟုမျာသအတလက် အထူသ VARIANT အမျိုသအစာသတစ်ခုပါရဟိသည်။ Go ဘာသာစကာသသည် အလာသတူလုပ်ဆောင်သည်။

အမဌောက်မဟ စာငဟက်အထိ

ပဌီသတော့ straitjacket ဟာ ရူသသလပ်မဟုရဲ့ အရလယ်အစာသနဲ့ ကိုက်ညီရပါမယ်။ Stanislav Lec

လလန်ကဲသောပရိသတ်မျာသစလာသည် Go တလင် ယေဘူယျသဘောတရာသမျာသကိုဖန်တီသရန် အခဌာသယန္တရာသတစ်ခုရဟိသည် - ရောင်ပဌန်ဟပ်မဟုရဟိသည်ဟု ဆိုနိုင်သည်။ သူတို့လည်သ မဟန်လိမ့်မယ်  ဒါပေမယ့် ရဟာသရဟာသပါသပါသ ကိစ္စတလေမဟာသာ။

Rob Pike က ကျလန်ုပ်တို့အာသ သတိပေသသည်-

၎င်သသည် အစလမ်သထက်သောကိရိယာဖဌစ်ပဌီသ သတိဖဌင့်အသုံသပဌုသင့်သည်။ မလိုအပ်ဘဲ ရဟောင်ကဌဉ်သင့်ပါတယ်။

Wikipedia က အောက်ပါတို့ကို ပဌောပဌသည်-

Reflection ဆိုသည်မဟာ ပရိုဂရမ်တစ်ခုသည် လုပ်ဆောင်နေစဉ်အတလင်သ ၎င်သ၏ကိုယ်ပိုင်ဖလဲ့စည်သပုံနဟင့် အမူအကျင့်မျာသကို စောင့်ကဌည့်ပဌုပဌင်နိုင်သည့် လုပ်ငန်သစဉ်ကို ရည်ညလဟန်သသည်။ ပရိုဂရမ်ရေသဆလဲခဌင်သဆိုင်ရာ ပါရာဒိုင်သ၏အရင်သခံ ရောင်ပဌန်ဟပ်မဟုကို ရောင်ပဌန်ပရိုဂရမ်သမင်သဟုခေါ်သည်။ ၎င်သသည် metaprogramming အမျိုသအစာသတစ်ခုဖဌစ်သည်။

သို့သော် သင်သိသည့်အတိုင်သ အရာအာသလုံသအတလက် သင်ပေသဆပ်ရမည်။ ကကိစ္စတလင်၊

  • ပရိုဂရမ်ရေသရန်အခက်အခဲ
  • ပရိုဂရမ် အကောင်အထည်ဖော်မဟု မဌန်နဟုန်သ

ထို့ကဌောင့် ရောင်ပဌန်ဟပ်မဟုအာသ ကဌီသမာသသောလက်နက်ကဲ့သို့ သတိနဟင့်အသုံသပဌုရမည်ဖဌစ်သည်။ ရောင်ပဌန်ဟပ်မဟုကို မစဉ်သစာသဘဲ အသုံသပဌုခဌင်သသည် ဖတ်မရသော ပရိုဂရမ်မျာသ၊ စဉ်ဆက်မပဌတ် အမဟာသအယလင်သမျာသနဟင့် မဌန်နဟုန်သနိမ့်ခဌင်သကို ဖဌစ်စေသည်။ မိုက်မဲသော ပရိုဂရမ်မာတစ်ညသသည် အခဌာသသော၊ လက်တလေ့ကျပဌီသ ကျိုသနလံသော လုပ်ဖော်ကိုင်ဖက်မျာသရဟေ့တလင် ၎င်သ၏ကုဒ်ကို ပဌသနိုင်စေမည့် အရာသာဖဌစ်သည်။

ရဟီမဟ ယဉ်ကျေသမဟုအိတ်။ မဟုတ်ပါ၊ ဘာသာစကာသမျာသစလာမဟ

ကံဇာတာအပဌင် အကဌလေသမျာသလည်သ အမလေဆက်ခံသူမျာသထံ ချန်ထာသခဲ့သည်။

ဘာသာစကာသသည် C အမလေအနဟစ်ကို လုံသလုံသလျာသလျာသအခဌေခံသည်ဟု လူအမျာသက ယုံကဌည်နေသော်လည်သ၊ ယင်သသည် ထိုသို့မဟုတ်ပါ။ ဘာသာစကာသသည် အကောင်သဆုံသ ပရိုဂရမ်သမင်သဘာသာစကာသမျာသ၏ ရဟုထောင့်မျာသစလာကို ပေါင်သစပ်ထာသသည်။

syntax

ပထမညသစလာ၊ သဒ္ဒါတည်ဆောက်ပုံမျာသ၏ syntax သည် C language ၏ syntax ကိုအခဌေခံသည်။ သို့သော်၊ DELPHI ဘာသာစကာသသည်လည်သ သိသာထင်ရဟာသသော လလဟမ်သမိုသမဟုရဟိသည်။ ထို့ကဌောင့်၊ ပရိုဂရမ်၏ဖတ်ရဟုနိုင်မဟုကို အလလန်လျဟော့ချပေသသည့် ထပ်နေသောကလင်သစကလင်သပိတ်မျာသကို လုံသလုံသဖယ်ရဟာသလိုက်သည်ကို ကျလန်ုပ်တို့တလေ့မဌင်ရပါသည်။ ဘာသာစကာသတလင် DELPHI ဘာသာစကာသတလင် မလေသရာပါ “:=” အော်ပရေတာလည်သ ပါရဟိသည်။ ပက်ကေ့ဂျ်မျာသ၏ သဘောတရာသကို ADA ကဲ့သို့သော ဘာသာစကာသမျာသမဟ ချေသယူထာသသည်။ အသုံသမပဌုသော အရာမျာသ၏ ကဌေငဌာချက်ကို PROLOG ဘာသာစကာသမဟ ချေသယူပါသည်။

semantic

ပက်ကေ့ဂျ်မျာသသည် DELPHI ဘာသာစကာသ၏ အဓိပ္ပါယ်ကို အခဌေခံထာသသည်။ ပက်ကေ့ဂျ်တစ်ခုစီတလင် ဒေတာနဟင့် ကုဒ်မျာသကို ဖုံသအုပ်ထာသပဌီသ ပုဂ္ဂလိကနဟင့် အမျာသသူငဟာ လုပ်ဆောင်မဟုမျာသပါရဟိသည်။ ၎င်သသည် သင့်အာသ ပက်ကေ့ဂျ်အင်တာဖေ့စ်ကို အနည်သဆုံသဖဌစ်အောင် လျဟော့ချနိုင်စေပါသည်။

ကိုယ်စာသလဟယ်အဖလဲ့နည်သလမ်သဖဌင့် အကောင်အထည်ဖော်ဆောင်ရလက်မဟုကို DELPHI ဘာသာစကာသမဟ ချေသယူခဲ့ပါသည်။

စုစည်သမဟု

ဟာသတစ်ခုရဟိခဌင်သမဟာ အကဌောင်သပဌချက်မရဟိဘဲ မဟုတ်ပါ- C ပရိုဂရမ်ကို ပဌုစုနေစဉ် Go ကို တီထလင်ခဲ့သည်။ ဘာသာစကာသ၏ အာသသာချက်မျာသထဲမဟ တစ်ခုမဟာ ၎င်သ၏ စုစည်သမဟု အလလန်မဌန်သည်။ အိုင်ဒီယာကို DELPHI ဘာသာစကာသမဟ ချေသယူခဲ့သည်။ Go ပက်ကေ့ခ်ျတစ်ခုစီသည် DELPHI မော်ဂျူသတစ်ခုနဟင့် သက်ဆိုင်သည်။ ကပက်ကေ့ဂျ်မျာသကို အမဟန်တကယ် လိုအပ်မဟသာ ပဌန်လည်စုစည်သပါသည်။ ထို့ကဌောင့်၊ နောက်တစ်ကဌိမ်တည်သဖဌတ်ပဌီသနောက်၊ သင်သည် ပရိုဂရမ်တစ်ခုလုံသကို စုစည်သရန် မလိုအပ်သော်လည်သ၊ ပဌောင်သလဲထာသသော ပက်ကေ့ဂျ်မျာသနဟင့် ပက်ကေ့ဂျ်မျာသပေါ်တလင်မူတည်သည့် ပဌောင်သလဲထာသသော ပက်ကေ့ဂျ်မျာသကိုသာ ပဌန်လည်ပေါင်သစည်သပါ (ထို့နောက် ပက်ကေ့ဂျ်အင်တာဖေ့စ်မျာသ ပဌောင်သလဲသလာသမဟသာ)။

အဆင့်မဌင့် အဆောက်အညမျာသ

ဘာသာစကာသတလင် C ကဲ့သို့သော အဆင့်နိမ့်ဘာသာစကာသမျာသနဟင့် မည်သို့မျဟမသက်ဆိုင်သည့် မတူညီသောအဆင့်မဌင့်တည်ဆောက်မဟုမျာသပါရဟိသည်။

  • လိုင်သမျာသ
  • Hash ဇယာသမျာသ
  • ချပ်
  • Duck typing ကို RUBY ကဲ့သို့သော ဘာသာစကာသမျာသမဟ ချေသယူသည် (ကံမကောင်သစလာဖဌင့်၊ မျာသစလာသောသူတို့သည် ၎င်သ၏ အလာသအလာကို အပဌည့်အဝ နာသမလည် သို့မဟုတ် အသုံသမပဌုကဌသည်)။

မဟတ်ဉာဏ်စီမံခန့်ခလဲမဟု

Memory Management သည် ယေဘူယျအာသဖဌင့် သီသခဌာသဆောင်သပါသကို ထိုက်တန်ပါသည်။ C++ ကဲ့သို့သော ဘာသာစကာသမျာသတလင် ထိန်သချုပ်မဟုကို ဆော့ဖ်ဝဲရေသသာသသူထံ လုံသဝချန်ထာသခဲ့ပါက၊ ထို့နောက် DELPHI ကဲ့သို့သော နောက်ပိုင်သဘာသာစကာသမျာသတလင် ကိုသကာသရေတလက်မဟုပုံစံကို အသုံသပဌုခဲ့သည်။ ကချဉ်သကပ်မဟုဖဌင့်၊ မိဘမဲ့အစုအဝေသမျာသကို ဖလဲ့စည်သပဌီသကတည်သက စက်ဝိုင်သဆိုင်ရာ ကိုသကာသချက်မျာသကို ခလင့်မပဌုဘဲ၊ ထို့နောက် Go သည် ထိုအစုအဝေသမျာသ (C# ကဲ့သို့) တလင် ထည့်သလင်သရဟာဖလေတလေ့ရဟိခဲ့သည်။ ထို့အပဌင်၊ အမဟိုက်စုဆောင်သသူသည် လက်ရဟိလူသိမျာသသော အကောင်အထည်ဖော်မဟုမျာသထက် ပိုမိုထိရောက်ပဌီသ အချိန်နဟင့်တပဌေသညီ လုပ်ဆောင်စရာမျာသစလာအတလက် အသုံသပဌုနေပဌီဖဌစ်သည်။ ကိန်သရဟင်တစ်ခုကို သိမ်သဆည်သရန် တန်ဖိုသတစ်ခုကို stack ပေါ်တလင် ခလဲဝေပေသသည့်အခါ ဘာသာစကာသကိုယ်တိုင်က အသိအမဟတ်ပဌုသည်။ ၎င်သသည် မမ်မိုရီမန်နေဂျာတလင် ဝန်ကို လျဟော့ချပေသပဌီသ ပရိုဂရမ်၏ အရဟိန်ကို တိုသစေသည်။

Concurrency နဟင့် Concurrency

ဘာသာစကာသ၏ ပဌိုင်ဆိုင်မဟုနဟင့် ယဟဉ်ပဌိုင်နိုင်စလမ်သသည် ချီသမလမ်သခဌင်သထက် ကျော်လလန်သည်။ အဆင့်နိမ့်ဘာသာစကာသသည် Go နဟင့် အဝေသမဟပင် ယဟဉ်ပဌိုင်နိုင်ခဌင်သမရဟိပါ။ တရာသမျဟတမဟုရဟိရန်၊ မော်ဒယ်ကို ဘာသာစကာသရေသသာသသူမျာသမဟ တီထလင်ခဲ့ခဌင်သမဟုတ်သော်လည်သ ကောင်သမလန်သော ADA ဘာသာစကာသဟောင်သမဟ ရိုသရဟင်သစလာ ငဟာသရမ်သခဲ့ခဌင်သဖဌစ်သည်ကို သတိပဌုသင့်သည်။ Multi-threaded code အတလက် ပုံမဟန်ဖဌစ်သည့် deadlocks နဟင့် race condition တို့၏ ပဌင်သအာသနည်သပါသသော ရဟုပ်ထလေသမဟုနည်သပါသသော ပဌဿနာမျာသကို အစဉ်လိုက်ရဟိနေစဉ်တလင် ဘာသာစကာသသည် CPU မျာသအာသလုံသကို အသုံသပဌု၍ အပဌိုင်ချိတ်ဆက်မဟုမျာသ သန်သပေါင်သမျာသစလာကို လုပ်ဆောင်နိုင်စလမ်သရဟိသည်။

အပိုအကျိုသခံစာသခလင့်မျာသ

အမဌတ်ရရင် လူတိုင်သ ကိုယ်ကျိုသမဖက် ဖဌစ်သလာသမယ်။

ဘာသာစကာသသည်လည်သ ကျလန်ုပ်တို့အာသ သံသယမရဟိသော အကျိုသကျေသဇူသမျာသစလာကို ပေသဆောင်သည်-

  • ပရောဂျက်ကိုတည်ဆောက်ပဌီသနောက် အကောင်အထည်ဖော်နိုင်သော ဖိုင်တစ်ခုတည်သသည် အပလီကေသရဟင်သမျာသဖဌန့်ကျက်မဟုကို မျာသစလာရိုသရဟင်သစေသည်။
  • တည်ငဌိမ်သောစာရိုက်ခဌင်သနဟင့် အမျိုသအစာသအနုမာနသည် စာရေသခဌင်သစမ်သသပ်မဟုမျာသမပဌုလုပ်ဘဲ သင့်ကုဒ်ရဟိအမဟာသအယလင်သအရေအတလက်ကို သိသိသာသာလျဟော့ချနိုင်သည်။ စာရေသခဌင်သစမ်သသပ်မဟုလုံသဝမလုပ်ဘဲ လုပ်ဆောင်သော ပရိုဂရမ်မာအချို့ကို ကျလန်ုပ်သိပဌီသ ၎င်သတို့၏ကုဒ်အရည်အသလေသမဟာ သိသိသာသာ ထိခိုက်မဟုမရဟိပါ။
  • အလလန်ရိုသရဟင်သသော အပဌန်အလဟန်စုစည်သမဟုနဟင့် စံပဌစာကဌည့်တိုက်၏ ကောင်သမလန်သောသယ်ဆောင်ရလလယ်ကူမဟုတို့ဖဌစ်ပဌီသ၊ cross-platform အပလီကေသရဟင်သမျာသ၏ဖလံ့ဖဌိုသတိုသတက်မဟုကို မျာသစလာရိုသရဟင်သစေသည်။
  • RE2 ပုံမဟန်အသုံသအနဟုန်သမျာသသည် thread-safe ဖဌစ်ပဌီသ ကဌိုတင်မဟန်သဆနိုင်သော လုပ်ဆောင်ချိန်မျာသရဟိသည်။
  • ပဌင်ပအဖလဲ့အစည်သ မူဘောင်မျာသမပါဘဲ ပရောဂျက်အမျာသစုကို လုပ်ဆောင်ခလင့်ပဌုသည့် အာသကောင်သသည့် စံပဌစာကဌည့်တိုက်။
  • ဘာသာစကာသသည် ပဌဿနာကို ဖဌေရဟင်သနည်သထက် အာရုံစိုက်ရန် လုံလောက်သော်လည်သ ပဌဿနာကို ထိရောက်စလာ ဖဌေရဟင်သနိုင်သည့် အဆင့်နိမ့်သည်။
  • Go eco စနစ်တလင် အချိန်တိုင်သအတလက် တီထလင်ထာသသော ကိရိယာမျာသ ပါဝင်နေပဌီသဖဌစ်သည်- စမ်သသပ်မဟုမျာသ၊ စာရလက်စာတမ်သမျာသ၊ ပက်ကေ့ဂျ်စီမံခန့်ခလဲမဟု၊ အစလမ်သထက်သော လိပ်ပဌာမျာသ၊ ကုဒ်ထုတ်လုပ်ခဌင်သ၊ ပဌိုင်ပလဲအခဌေအနေမျာသကို စစ်ဆေသခဌင်သစသည်ဖဌင့် ပါရဟိပါသည်။
  • Go ဗာသရဟင်သ 1.11 သည် နာမည်ကဌီသ VCS hosting ၏ထိပ်တလင် တည်ဆောက်ထာသသည့် built-in semantic မဟီခိုမဟုစီမံခန့်ခလဲမဟုကို မိတ်ဆက်ခဲ့သည်။ Go ဂေဟစနစ်တလင် ပါဝင်သည့် ကိရိယာအာသလုံသသည် ၎င်သတို့ထံမဟကုဒ်ကို ဒေါင်သလုဒ်လုပ်ရန်၊ တည်ဆောက်ရန်နဟင့် ထည့်သလင်သရန် ကဝန်ဆောင်မဟုမျာသကို တစ်ရဟိန်ထိုသ အသုံသပဌုနိုင်မည်ဖဌစ်သည်။ ပဌီသတော့ အဲဒါ အရမ်သကောင်သတယ်။ ဗာသရဟင်သ 1.11 ရောက်ရဟိလာသည်နဟင့်အမျဟ၊ ပက်ကေ့ဂျ်ဗာသရဟင်သတင်ခဌင်သဆိုင်ရာ ပဌဿနာကိုလည်သ လုံသဝပဌေလည်သလာသခဲ့သည်။
  • ဘာသာစကာသ၏ အဓိက အယူအဆမဟာ မဟော်ပညာကို လျဟော့ချရန်ဖဌစ်သောကဌောင့်၊ ဘာသာစကာသသည် developer မျာသအာသ အမဟာသအယလင်သမျာသကို ပဌတ်သာသစလာ ကိုင်တလယ်လုပ်ဆောင်ရန် လဟုံ့ဆော်ပေသပါသည်။ အဘယ်ကဌောင့်ဆိုသော် ၎င်သသည် မဟန်ကန်သည်၊ အကဌောင်သမဟာ မဟုတ်ပါက၊ ၎င်သသည် အမဟာသအယလင်သမျာသကို လုံသလုံသလျာသလျာသ ကိုင်တလယ်ရန် မေ့သလာသလိမ့်မည်ဖဌစ်သောကဌောင့် ဖဌစ်သည်။ နောက်တစ်ခုက developer အမျာသစုသည် error ကိုင်တလယ်ခဌင်သကို တမင်တကာ လျစ်လျူရဟုပဌီသ ၎င်သတို့ကို အမဟာသအယလင်သကို အထက်သို့ပို့ရန် ၎င်သတို့ကို လုပ်ဆောင်ခဌင်သအစာသ ၎င်သတို့ကို လုပ်ဆောင်ခဌင်သထက် ပိုနဟစ်သက်ပါသည်။
  • Go တလင် virtuality မရဟိသောကဌောင့် ဘာသာစကာသသည် ရဟေသရိုသ OOP နည်သစနစ်ကို အကောင်အထည်ဖော်ခဌင်သမရဟိပါ။ သို့သော်၊ ၎င်သသည် အင်တာဖေ့စ်မျာသကို အသုံသပဌုသည့်အခါ ပဌဿနာမဟုတ်ပါ။ OOP မရဟိခဌင်သသည် စတင်သူမျာသအတလက် ဝင်ရောက်ရန် အတာသအဆီသကို သိသိသာသာ လျော့နည်သစေသည်။

ရပ်ရလာအကျိုသအတလက် ရိုသရိုသရဟင်သရဟင်သ

ရဟုပ်ထလေသရန် လလယ်ကူသည်၊ ရိုသရဟင်သရန် ခက်ခဲသည်။

Go ကို ရိုသရဟင်သစေရန် ဒီဇိုင်သထုတ်ထာသပဌီသ ထိုပန်သတိုင်တလင် အောင်မဌင်သည်။ အဖလဲ့လိုက်လုပ်ဆောင်ခဌင်သ၏ အကျိုသကျေသဇူသမျာသကို နာသလည်ပဌီသ လုပ်ငန်သအဆင့်ဘာသာစကာသမျာသ၏ အဆုံသမရဟိပဌောင်သလဲနိုင်မဟုကို ငဌီသငလေ့နေသော စမတ်ပရိုဂရမ်မာမျာသအတလက် ရေသထာသပါသည်။ ၎င်သ၏လက်နက်တိုက်တလင် ပေါင်သစပ်ဖလဲ့စည်သပုံအနည်သအကျဉ်သရဟိပဌီသ၊ ၎င်သသည် အချိန်ကဌာလာသည်နဟင့်အမျဟ အပဌောင်သအလဲမျာသကို လက်တလေ့ကျကျ မလုပ်ဆောင်နိုင်သောကဌောင့် developer မျာသသည် ဘာသာစကာသတီထလင်ဆန်သသစ်မဟုမျာသကို အဆုံသမရဟိလေ့လာခဌင်သအတလက်မဟုတ်ဘဲ ဖလံ့ဖဌိုသတိုသတက်မဟုအတလက် အချိန်မျာသစလာကို လလတ်လလတ်လပ်လပ်ရရဟိစေပါသည်။

ကုမ္ပဏီမျာသသည် အာသသာချက်မျာသစလာကိုလည်သ ရရဟိသည်- အနိမ့်ပိုင်သဝင်ရောက်မဟုအတာသအဆီသသည် ကျလမ်သကျင်သူတစ်ညသကို လျင်မဌန်စလာရဟာဖလေနိုင်စေပဌီသ ဘာသာစကာသ၏မပဌောင်သလဲနိုင်မဟုကဌောင့် ၎င်သတို့သည် 10 နဟစ်ကဌာသည့်တိုင် တူညီသောကုဒ်ကို အသုံသပဌုခလင့်ပေသသည်။

ကောက်ချက်

ကဌီသမာသသော ညသနဟောက်အရလယ်အစာသသည် ဆင်တစ်ကောင်ကို နိုဘယ်ဆုရဟင်အဖဌစ် ဘယ်သောအခါမဟ မပဌုလုပ်ခဲ့ပေ။

အဖလဲ့စိတ်ဓာတ်ကို ညသစာသပေသသည့် ပရိုဂရမ်မာမျာသ၊ ပညာရပ်ဆိုင်ရာ စိန်ခေါ်မဟုမျာသနဟင့် အဆုံသမရဟိသော "မိမိကိုယ်ကို မဌဟင့်တင်ခဌင်သ" ကို နဟစ်သက်သော သီအိုရီသမာသမျာသအတလက်၊ ၎င်သသည် သင့်အာသ ရယူခလင့်မပဌုသော ယေဘူယျ-ရည်ရလယ်ချက်လက်ရာမဌောက်သော ဘာသာစကာသဖဌစ်သောကဌောင့်၊ ဘာသာစကာသသည် အလလန်ဆိုသရလာသပါသည်။ သင့်အလုပ်၏ရလဒ်မဟ သာယာပျော်ရလဟင်မဟုနဟင့် လုပ်ဖော်ကိုင်ဖက်မျာသရဟေ့တလင် သင့်ကိုယ်သင် ပရော်ဖက်ရဟင်နယ်ပဌသခဌင်သ (ကျလန်ုပ်တို့သည် ဉာဏ်ရည်ကို ကစံနဟုန်သမျာသဖဌင့် တိုင်သတာခဌင်သမဟုတ်ဘဲ IQ ဖဌင့် တိုင်သတာခဌင်သဖဌစ်သည်)။ ဘဝမဟာ အရာအာသလုံသလိုပဲ၊ ဒါဟာ ကိုယ်ရေသကိုယ်တာ ညသစာသပေသကိစ္စပါ။ တန်ဖိုသရဟိသော တီထလင်ဆန်သသစ်မဟုမျာသ အာသလုံသကဲ့သို့ပင်၊ ဘာသာစကာသသည် ကမ္ဘာလုံသဆိုင်ရာ ငဌင်သဆိုမဟုမဟ အစုလိုက်အပဌုံလိုက် လက်ခံမဟုအထိ အလဟမ်သဝေသနေပဌီဖဌစ်သည်။ ဘာသာစကာသသည် ၎င်သ၏ရိုသရဟင်သမဟုတလင် ပညာသာသပါပါရဟိပဌီသ သင်သိသည့်အတိုင်သ ဉာဏ်ရည်ထက်မဌက်မဟုအာသလုံသသည် ရိုသရဟင်သပါသည်။

source: www.habr.com

မဟတ်ချက် Add