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:
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
.
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
.
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!