Pergi melalui mata programmer Rust: kesan pertama

Untuk mengantisipasi dimulainya kursus, "Pengembang Golang" menyiapkan terjemahan materi yang menarik. Apa kesan pertama Anda tentang Go?




Selama beberapa minggu terakhir, saya dapat menggunakan Go dalam pekerjaan saya. Saya pertama kali menggunakan Go pada proyek yang kurang lebih besar dan serius. Sebelum itu, saya banyak membaca tentang Go dan berlatih pada contoh dan program kecil sambil mempelajari kemampuan Rust , tetapi pemrograman nyata adalah masalah yang sama sekali berbeda.

Saya pikir Anda mungkin tertarik mendengar tentang kesan saya. Saya akan mencoba untuk tidak terjebak dalam perbandingan dengan Rust, tetapi karena ini adalah bahasa utama saya, mereka tidak dapat dihindari. Saya harus memperingatkan Anda sebelum adanya bias yang kuat terhadap Rust, tetapi saya akan melakukan yang terbaik untuk bersikap objektif.

Kesan umum


Go pemrograman itu bagus. Perpustakaan memiliki semua yang saya butuhkan tanpa terlalu banyak kekurangan. Belajar juga merupakan pengalaman yang menyenangkan - itu adalah bahasa yang dipikirkan dengan baik dan praktis. Sebagai contoh, jika Anda mempelajari sintaks, Anda akan melihat bahwa banyak idiom dari bahasa lain dimigrasi ke Go. Setelah Anda menguasai bagian Go, Anda dapat dengan mudah memprediksi kemampuannya. Dengan beberapa pengalaman dalam bahasa lain, saya bisa membaca dan memahami kode Go tanpa bantuan Google khusus.

Saya mencatat frustrasi jauh lebih sedikit dan produktivitas lebih banyak daripada menggunakan C / C ++, Java, Python, dll. Namun, Go masih terasa sebagai bagian dari generasi bahasa ini. Dia telah belajar dari mereka, dan saya pikir ini mungkin bahasa terbaik dari generasi ini; tapi dia jelas bagian dari generasi ini. Ini lebih merupakan peningkatan bertahap daripada sesuatu yang secara fundamental baru (harus dicatat bahwa ini bukan penilaian nilai - kenaikan sering bermanfaat dalam dunia pengembangan perangkat lunak). Contoh yang baik untuk ini adalah nihil: bahasa seperti Rust dan Swift menyingkirkan paradigma nol, sehingga menghilangkan seluruh kelas kesalahan. Go membuatnya kurang berbahaya: tidak ada nilai null; batas nol dan 0. Tapi ide dasarnya masih ada, serta kesalahan runtime luas dari dereferencing pointer nol.

Kemudahan pengembangan


Go sangat mudah dipelajari. Saya tahu bahwa ini adalah slogan iklan yang diperbanyak, tetapi saya sangat terkejut betapa cepatnya saya dapat mencapai tingkat produktivitas. Berkat dokumentasi, alat, dan bahasa itu sendiri, hanya dalam dua hari, saya mulai menulis kode informatif dan ramah.

Beberapa faktor yang mendukung pembelajaran:

  • Menjadi kecil. Banyak bahasa mencoba menjadi kecil, sedangkan Go sebenarnya satu. (Ini sebagian besar baik, dan saya terkesan dengan disiplin yang diperlukan untuk ini).
  • Perpustakaan standar baik (dan juga kecil). Menemukan dan menggunakan perpustakaan dalam suatu ekosistem sangat mudah.
  • Bahasa ini memiliki sangat sedikit yang tidak ada dalam bahasa lain. Go mewarisi banyak bit dari bahasa mapan lainnya, memolesnya dan menghubungkannya dengan rapi. Dia dengan hati-hati menghindari hal-hal baru.


Kode rutin


Go code berulang-ulang sangat cepat. Itu tidak memiliki mekanisme seperti makro atau generik untuk mengurangi pengulangan, (antarmuka baik untuk abstraksi, tetapi tidak begitu baik untuk mengurangi duplikasi kode). Saya sering mengumpulkan banyak fungsi yang identik kecuali untuk tipe.

Penanganan kesalahan juga berkontribusi terhadap pengulangan. Banyak fitur yang memiliki lebih banyak templat if err != nil { return err }daripada kode aslinya.

Penggunaan generik atau makro untuk mengurangi rutinitas kode terkadang dikritik karena tradeoff dengan keterbacaannya. Tetapi dalam kasus Go, saya tidak akan setuju dengan mereka. Menyalin dan menempelkan kode cepat dan mudah, tetapi membaca kode Go bisa membuat frustasi karena Anda harus mengabaikan sebagian besar atau mencari perbedaan yang halus.

Apa yang saya suka


  • . ; Rust. , ( , C/C ++ , - ).
  • . Go β€” . , , , .
  • . , , .
  • if ...; ... { }sintaksis. Kemampuan untuk membatasi ruang lingkup variabel ke tubuh jika pernyataan baik. Ini mirip jika membiarkan Swift dan Rust, tetapi lebih untuk tujuan umum (Go tidak memiliki pola yang cocok seperti Swift dan Rust, sehingga tidak dapat digunakan jika dibiarkan).
  • Komentar tes dan dok mudah digunakan.
  • Alat Go bagus - sekaligus di satu tempat tanpa harus menghubungkan banyak alat melalui baris perintah
  • Tersedia pengumpul sampah (GC)! Tidak perlu peduli dengan manajemen memori benar-benar membuat pemrograman lebih mudah
  • Varargs.


Apa yang tidak saya sukai


Perintahnya tidak masalah.

  • irisan nil - irisan nil, irisan nil dan kosong adalah semua hal yang berbeda. Saya lebih dari yakin bahwa Anda hanya membutuhkan dua, bukan ketiganya.
  • Tidak ada kelas primer. Penggunaan konstanta tidak biasa.
  • . , ( , , , , ).
  • switch
  • for ... range /. ( ), . -, , .
  • :
    • .
    • ( , , ); , , .
    • , return.
    • (type struct).
    • public private. , .
  • . , , , , , , , .
  • Anda tidak dapat menulis fungsi dengan penerima di paket lain, oleh karena itu, bahkan jika antarmuka diketik secara implisit, mereka tidak dapat diimplementasikan untuk tipe yang lebih tinggi, yang membuatnya jauh kurang berguna.

Saya sudah menyebutkan kurangnya obat generik dan makro di atas.

Koherensi


Sebagai pengembang dan pemrogram bahasa, saya mungkin paling terkejut dengan fakta bahwa Go sering menemukan ketidakcocokan antara apa yang ada di dalam dan apa yang tersedia bagi pengguna. Tugas banyak bahasa adalah untuk menghilangkan sihir sebanyak mungkin dan membuat fungsi bawaan tersedia bagi pengguna. Overloading operator adalah contoh sederhana namun kontroversial. Go memiliki banyak keajaiban! Dan Anda dengan mudah menabrak dinding ketidakmampuan untuk melakukan apa yang bisa dilakukan hal-hal bawaan.

Beberapa poin yang menonjol terutama:

  • , , .
  • for ... range , , .
  • , len append, , . . , Go !
  • . ==, , map, . .



Go adalah bahasa yang sederhana, kompak, dan menyenangkan. Ini memiliki beberapa sudut tajam, tetapi sebagian besar dirancang dengan baik. Dia sangat cepat belajar dan menghindari fitur apa pun yang tidak dikenal dalam bahasa lain.

Dibandingkan dengan Rust, Go adalah bahasa yang sama sekali berbeda. Meskipun keduanya dapat secara kasar digambarkan sebagai bahasa sistem atau "pengganti" untuk C, mereka memiliki tujuan dan aplikasi yang berbeda, gaya desain bahasa, dan prioritas. Pengumpulan sampah benar-benar perbedaan besar. Memiliki GC in Go membuat bahasa lebih sederhana dan lebih kecil, dan lebih mudah dipahami. Kurangnya GC di Rust membuatnya sangat cepat (terutama jika Anda membutuhkan penundaan yang jelas, dan bukan hanya bandwidth tinggi) dan menyediakan fitur dan pola pemrograman yang tidak mungkin di Go (setidaknya tanpa mengorbankan kinerja).

Go adalah bahasa yang dikompilasi dengan runtime yang diimplementasikan dengan baik. Dia cepat. Karat juga dikompilasi, tetapi memiliki runtime yang jauh lebih kecil. Dia sangat cepat. Dengan asumsi tidak ada batasan lain, saya pikir bahwa memilih antara menggunakan Go dan Rust adalah kompromi antara kurva belajar yang jauh lebih pendek dan program yang lebih sederhana (yang berarti pengembangan lebih cepat) dan, pada bagian Rust, sistem yang lebih cepat dan lebih ekspresif jenis (yang membuat program Anda lebih aman dan mempercepat debugging dan pemecahan masalah).



Terjemahan telah berakhir, dan kami mengundang Anda ke pelajaran online praktis gratis di mana Anda akan belajar cara membuat layanan http yang sepenuhnya teruji dari awal dalam 60 menit tanpa ketergantungan pihak ketiga.



All Articles