Asal usul historis dari Scala tersirat

14

Scala telah disebut kompleks dengan fitur yang kaya yang ditetapkan oleh banyak rekan saya dan beberapa bahkan menyalahkan semua fitur baru itu. Sementara sebagian besar programmer mengetahui fitur-fitur OO, dan setidaknya yang layak juga tahu tentang pemrograman fungsional, ada satu fitur khususnya di Scala yang saya tidak mengetahui asal-usul historisnya.

Mengingat bahwa mantra utama profesi kita adalah untuk tidak menemukan kembali roda, saya agak percaya diri, bahwa Scala tidak memiliki apa yang sebenarnya pernah terdengar-dari-sebelumnya fitur, tapi aku berdiri dikoreksi yang satu ini jika perlu.

Untuk sampai ke pertanyaan yang sebenarnya, sementara saya menyadari asal-usul sebagian besar fitur Scala, saya belum pernah melihat sesuatu seperti implicitdeklarasi sebelumnya. Apakah ada bahasa lain (lama!) Di luar sana yang juga menyediakan fitur ini?

Apakah masuk akal untuk membedakan berbagai kasus implisit (karena mereka mungkin berasal dari sumber yang berbeda), yaitu konversi implisit dan parameter implisit?

jujur
sumber
Mungkin duplikat ?: stackoverflow.com/questions/3069432/…
gerferra
@gerferra Bukan duplikat persis, dan tidak ada gagasan duplikat lintas situs. Jika Anda mau, Anda dapat menyusun jawaban yang merujuk pada pertanyaan SO dan jawabannya serta referensi mereka, itu bisa diterima.
yannis

Jawaban:

9

Saya tidak setuju dengan jawaban Brian pada pertanyaan lain itu.

Sejauh yang saya tahu, tidak ada konsep tersirat pada bahasa lain. Sejarah perubahan untuk Scala menyiratkan bahwa yang tersirat adalah generalisasi batas tampilan, dan batas tampilan, itu sendiri, generalisasi konversi tipe otomatis, yang memang sangat umum terjadi.

Implikit kemudian mengaktifkan kelas tipe, tetapi saya akan sangat terkejut jika itu adalah maksud aslinya.

Edit

Catatan rilis untuk Scala 2.0 (2006) mengatakan:

Tampilan di Scala 1.0 telah digantikan oleh konsep parameter implisit yang lebih umum

Tentu saja itu tidak berarti bahwa parameter implisit diperkenalkan dengan tujuan mengganti pandangan.

Namun, Odersky jelas menyukainya ketika sekali konsep dapat menggantikan beberapa konsep. Dalam hal itu, mungkin memang demikian halnya jika Odersky menginginkan kelas tipe, tetapi tidak ingin memperkenalkan mekanisme untuk menangani itu secara eksklusif, dan, oleh karena itu, muncul dengan sesuatu yang lain yang memungkinkan dia menghapus satu konsep (Tampilan) dan menggantinya dengan konsep yang lebih umum yang menangani pandangan dan tipe kelas.

Jika ada yang tertarik, Poor Man's Type Classes, yang dirujuk oleh Brian kembali di Stack Overflow, juga bertanggal 2006. Jelas, Odersky menyadari hubungan antara kelas implisit dan tipe ketika dia memperkenalkan mereka.

Namun, saya mendukung klaim saya. :-)

Daniel C. Sobral
sumber
Bagaimana dengan tanggapan Norman Ramsey? stackoverflow.com/a/3071461/63489 . Ini merujuk pada implementasi konversi implisit sebelumnya di Haskell
gerferra
@gerferra Kedengarannya masuk akal - perhatikan bahwa Odersky disebut dalam makalah itu. Mekanismenya berbeda, tetapi mungkin saja bola bergulir. Makalah yang dirujuk Odersky membahas kelas tipe, dan implisit diperkenalkan pada tahun 2006, tanggal presentasi "Kelas Tipe Orang Miskin" yang dikutip oleh Brian - jelas, ada tautan. Namun, catatan rilis untuk Scala 2.0 (2006) mengatakan "Tampilan di Scala 1.0 telah digantikan oleh konsep yang lebih umum dari parameter implisit" . Dari apa yang saya ketahui tentang Odersky, satu mekanisme yang memecahkan banyak masalah akan sangat menarik baginya.
Daniel C. Sobral
cukup adil :-)
gerferra
4

Implicit dalam scala berarti dua hal yang berbeda

  1. Parameter Tersirat. Ini muncul di Haskell, dan mungkin bahasa lain terlebih dahulu. Bukti yang mendukung: Tulisan ini dari tahun 2000 dan GHC 5.04.1 dokumentasi (September-2002, sebelum ada adalah sebuah Scala)
  2. Konversi tersirat. Saya tidak tahu bahasa pertama untuk memiliki ini, tetapi mereka berada di C # 1.0 (menggunakan implictkata kunci) yang pra-tanggal versi pertama Scala sekitar satu tahun.
Philip JF
sumber
+1, saya tidak tahu konversi tersirat tersedia dalam C #. Terima kasih untuk penunjuknya.
Frank