Status

Saat ini kita mendekati rilis Go 1.14, yang direncanakan bulan Februari bila semua berjalan dengan lancar, rilis kandidat yang pertama hampir siap. Berdasarkan proses yang dijelaskan dalam blog Go 2, inilah saat dalam siklus pengembangan dan rilis untuk menimbang perubahan-perubahan apa saja yang ingin ditambahkan pada pustaka atau bahasa untuk rilis selanjutnya, Go 1.15, yang dijadwalkan pada bulan Agustus tahun ini.

Tujuan utama dari Go tetap pada manajemen paket dan versi, dukungan penanganan error yang lebih baik, dan generik. Dukungan untuk modul sekarang ini sudah cukup bagus dan semakin baik setiap hari, dan kita juga punya progres dengan implementasi generik (lebih lanjut lagi nanti tahun ini). Usaha kita selama tujuh bulan lalu dalam menyediakan mekanisme penanganan error yang lebih baik, proposal try, menemui dukungan yang baik namun juga penolakan yang kuat dan kami memutuskan untuk meninggalkannya. Setelah kejadian itu ada banyak proposal yang memperbaikinya, namun tidak ada dari mereka yang cukup meyakinkan, lebih bagus dari proposal try, atau tidak menimbulkan kontroversi yang sama. Oleh karena itu, kami tidak melanjutkan perubahan dari penanganan error untuk saat sekarang. Mungkin nanti ada gagasan yang membantu kita memperbaiki status quo ini.

Proposal

Sementara modul dan generik sedang aktif dikerjakan, dan dengan perubahan penanganan error yang ditunda untuk sementara, perubahan apa lagi yang harus kami kejar, jika ada? Ada beberapa fitur favorit seperti permintaan untuk adanya tipe enum dan immutable, namun tidak ada dari ide tersebut yang sedang dikembangkan, dan tidak juga terlalu penting yang menarik banyak perhatian bagi tim Go, terutama bila mempertimbangkan biaya membuat perubahan pada bahasa.

Setelah mengulas semua proposal yang berpotensi, dan yang paling penting, karena kita tidak ingin menambah fitur baru tanpa rencana jangka panjang, kami memutuskan untuk menahan perubahan besar saat ini. Kami konsentrasi pada beberapa pemeriksaan vet yang baru dan sedikit perbaikan pada bahasa Go. Kami telah memilih tiga proposal berikut:

. Diagnosis konversi string(int) dalam go vet.

Kami berencana menyelesaikan hal ini untuk rilis Go 1.14 namun ternyata tidak selesai. Konversi string(int) telah diperkenalkan dalam Go sejak awal, namun membingungkan bagi pendatang baru (string(10) adalah "n" bukan "10") dan tidak dibolehkan lagi sekarang sejak konversi tersebut telah tersedia dalam paket unicode/utf8. Secara dihapusnya konversi ini bukanlah perubahan yang menjaga kompatibilitas, kami mengajukan untuk memulainya sebagai sebuah error dalam vet.

. Diagnosis asersi tipe interface-ke-interface yang tidak memungkinkan dalam go vet.

Saat ini, Go membolehkan asersi tipe apa pun x.(T) (dan korespondensi tipe lewat switch case) yang mana tipe dari x dan T adalah interface. Namun, jika x dan T memiliki sebuah method dengan nama yang sama tetapi penanda yang berbeda maka tidak mungkin nilai apa pun yang disimpan ke x juga mengimplementasikan T; asersi tipe seperti itu akan selalu gagal pada runtime (panic atau dievaluasi ke false). Secara kita dapat mengetahui pada saat kompilasi, compiler bisa melaporkan sebagai error. Melaporkan error dari sisi compiler pada kasus ini tidak menjaga kompatibilitas, maka dari itu kami memulai dengan sebuah error dalam vet.

. Evaluasi konstanta indeks dan ekspresi slice dengan indeks dan string konstanta.

Saat ini, pengindeksan atau pemotongan sebuah konstanta string dengan sebuah konstanta indeks menghasilkan nilai byte atau string yang bukan konstanta. Namun jika semua operan adalah konstanta, compiler dapat mengevaluasi ekspresi tersebut dan menghasilkan sebuah konstanta (bisa jadi tanpa tipe). Perubahan ini menjaga kompatibilitas dan kami mengajukan membuat perubahan yang diperlukan pada spesifikasi dan compiler.

Rentang waktu

Kami percaya bahwa tidak ada dari tiga proposal tersebut yang kontroversial namun akan selalu ada kesempatan bahwa kami melupakan sesuatu yang penting. Oleh karena itu kami berencana mengimplementasikan semua proposal tersebut pada awal siklus rilis Go 1.15 (setelah rilis Go 1.14) supaya banyak waktu untuk mendapatkan pengalaman dan umpan balik dari yang lain. Menurut proses evaluasi proposal, keputusan terakhir akan diambil pada akhir siklus pengembangan, awal Mei, 2020.

Satu hal lagi…​

Kami menerima banyak proposal perubahan bahasa (isu-isu berlabel LanguageChange) yang dapat kita tinjau secara mendalam. Misalnya, untuk penanganan error saja ada 57 isu, 5 darinya masih terbuka. Secara biaya membuat perubahan pada bahasa, walau sedikit, sangat tinggi dan keuntungannya kadang kurang jelas, kami harus hati-hati. Akibatnya, kebanyakan proposal yang merubah bahasa akan ditolak cepat atau lambat, terkadang dengan alasan yang sedikit. Hal ini tidak memuaskan bagi pihak yang terkait. Jika Anda telah menghabiskan banyak waktu dan usaha menjelaskan ide Anda dengan rinci, akan lebih baik bila ia tidak begitu saja ditolak. Di sisi lain, karena proses proposal secara umum sangat simpel, maka sangat mudah untuk membuat proposal perubahan bahasa yang setengah matang, yang menyebabkan banyak pekerjaan di sisi komite review. Untuk meningkatkan pengalaman ini bagi semua orang kami menambahkan sebuah kuesioner baru untuk perubahan bahasa: mengisi templat tersebut akan membantu para peninjau mengevaluasi proposal lebih efisien karena mereka tidak perlu mencoba menjawab pertanyaan-pertanyaan tersebut bagi diri mereka sendiri. Semoga hal ini menyediakan pedoman yang lebih baik penulis proposal dengan menyiapkan ekspektasi dari awal. Hal ini adalah eksperimen yang akan kita perbaiki terus menerus bila diperlukan.

Terima kasih membantu kami meningkatkan pengalaman Go!