Dalam artikel: Mengapa POCO , ada kalimat ini:
Maciej Sobczak mengatakannya dengan baik: "Saya hanya tidak suka ketika seseorang memberi saya setengah dari bahasa dan mengatakan kepada saya bahwa itu untuk perlindungan saya sendiri".
Saya tidak mengerti apa maksudnya, meskipun C # dimiliki oleh Microsoft & Java dimiliki oleh Oracle , itu tidak berarti mereka menguasai setengah bahasa, bukan? Saya tidak menemukan bukti untuk membuktikan kalimat itu, dan saya benar-benar ingin tahu tentang ini. Dan bahkan lebih ingin tahu tentang bagian 'untuk perlindungan saya sendiri'.
Jawaban:
Sobczak tidak berbicara tentang kepemilikan perusahaan. Bahasa "setengah" yang dia lewatkan adalah semua hal yang tidak dapat Anda lakukan dalam banyak bahasa modern, meskipun sebagai ahli komputer yang berpendidikan baik, ia tahu itu bisa dimungkinkan: mewarisi dari sebanyak mungkin kelas yang Anda inginkan. Tetapkan objek apa pun untuk objek lain tanpa batasan tipe. Mengontrol alokasi dan membebaskan sumber daya secara manual alih-alih mempercayai kompiler dan waktu berjalan untuk melakukannya untuknya.
Masalahnya, semua pembatasan itu dimasukkan ke dalam bahasa pemrograman karena suatu alasan. Kami memang memiliki bahasa yang memungkinkan semua ini. Seiring waktu kami menemukan bahwa programmer rata-rata lebih baik dengan sejumlah batasan dan pegangan tangan, karena potensi membuat kesalahan yang benar-benar buruk terlalu besar untuk sebanding dengan daya tambahan dan ekspresivitas.
(Jelas, ini kadang-kadang mengganggu programmer yang tidak benar-benar membutuhkan banyak pegangan tangan. Keluhan mereka kadang-kadang sah. Tetapi orang-orang terkenal buruk dalam menilai keterampilan mereka sendiri, dan banyak yang berpikir mereka tidak memerlukan perlindungan, sebenarnya, sangat membutuhkannya. Tidak selalu mudah untuk membedakan intelek superior yang sebenarnya yang merasa tertahan oleh pembatasan dalam bahasa tingkat tinggi dari coders rata-rata yang hanya berpikir bahwa mengeluh akan membuat mereka terlihat superior, atau yang tidak tahu ada yang lebih baik.)
sumber
dynamic
,?Ini dijelaskan dengan sangat baik dalam sumber asli kutipan :
Jadi, dengan kata lain, penulis kutipan itu suka C ++, dan dia tidak suka Java, dan dia merasa bahwa Java kehilangan setengah dari C ++. Dan hanya itu yang ada pada kutipan itu.
sumber
Artikel yang ditautkan di blog yang Anda poskan telah dihapus, jadi sulit untuk memastikannya, tetapi seperti yang dikatakan Kilian, kemungkinan ketika ia mengatakan "setengah bahasa" yang ia maksudkan adalah C # dan Java terasa seperti C ++ tetapi dengan banyak fitur dan konstruksi dihapus untuk membuatnya lebih mudah digunakan atau lebih aman.
Kembali pada tahun 2006, ketika ini ditulis, ketika C # masih relatif muda dan Jawa dalam banyak hal belum matang, dan ketika kekuatan vs keamanan tampak seperti pertukaran di mana Anda hanya bisa memilih satu, ini bukan posisi yang sepenuhnya tidak masuk akal untuk mengambil .
Saat ini posisi itu sama sekali tidak masuk akal. Hanya berpikir tentang bahasa umum, C # dan Java telah matang dengan sangat baik, meminjam fitur dari bahasa lain (terutama fungsional) untuk mempromosikan penulisan kode aman. Kami juga memiliki bahasa seperti Rust dan Swift yang dibangun dari bawah ke atas untuk melakukan ini.
Jika seseorang meremehkan suatu bahasa karena itu memegang tangan Anda, atau mengatakan bahwa bahasa yang sulit digunakan entah bagaimana adalah hal yang baik, saya akan mengambil apa pun yang mereka katakan dengan sebutir garam. Anda hanya perlu melihat jumlah bug memalukan yang ditemukan dalam kode yang kita andalkan setiap hari, yang ditulis oleh orang-orang terpintar di industri, yang sepele akan dihindarkan dengan menggunakan bahasa 'aman', untuk mengetahui alasannya.
sumber
Melihat kembali ke arsip , tampaknya kutipan ini berasal dari tahun 2003 (terlepas dari artikel yang mengutipnya dari tahun 2006). Pada waktu itu, C # ada di Versi 1. x , dan itu kurang banyak fitur modern :
Mungkin lebih dimengerti bahwa C # tampak seperti setengah bahasa dalam konteks itu, karena kurang banyak dari apa C # hari ini. Sangat aneh untuk berpikir bahwa itu bahkan tidak ada
static
kelas!Banyak hal yang hilang juga, karena C # diikat ke .NET. Misalnya, WPF tidak ada saat itu; itu semua WinForms.
sumber
static
kelas tampak seperti fitur primitif; Saya agak membayangkan bahwa mereka kelas pra-tanggal yang di-instal.static
kelas dalam banyak kasus. Jujur saya memilihnya sebagai fitur untuk memanggil karena tampaknya sangat sederhana, bagian primitif dari C #; Saya tidak menganggap bahwa mereka tidak di Jawa.Dia mengeluhkan kurangnya fitur bahasa yang memungkinkan kontrol yang baik. Ini termasuk alat untuk
const
kata kunci )Ini mengingatkan saya pada salah satu kritik saya tentang Jawa:
Dalam objek C ++, pointer dan referensi adalah tiga konsep berbeda dengan semantik yang jelas. Di Jawa Anda hanya memiliki pseudo-objek-pointer. Dengan menggabungkan ini dan menghindari semantik pointer benar model objek kurang jelas.
Dalam program C ++ yang didefinisikan dengan baik, pemrogram dapat mengharapkan referensi menjadi valid dan tidak nol. Karena modelnya yang disederhanakan, Java tidak dapat membuat jaminan yang sama.
Gejala dari model yang kurang jelas ini meliputi pola objek nol dan kondisi yoda seperti
5.equals(potentiallyNullIntegerReference)
.sumber
Map.merge
ketika Anda hanya ingin memperbarui nilai di peta).const
. Ini tidak menyebutkan "pemrograman fungsional", bagaimanapun, bahasa dia gunakan sebagai contoh adalah Scheme, yang tidak bahasa fungsional murni (pada kenyataannya, para perancang Skema berhati-hati untuk menghindari penggunaan kata "fungsi" dan berbicara tentang " prosedur "), jadi sepertinya dia menggunakan interpretasi" subrutin kelas "dari FP dan bukan" transparansi referensial ".Saya setuju dengan jawaban @Kilian tapi saya akan menambahkan beberapa elemen.
1- Berjalan melawan Mesin Virtual, bukan OS
Karena Java dan C # berjalan melalui Mesin Virtual, secara logis diharapkan bahwa Anda tidak dapat melakukan apa yang Anda inginkan ketika langsung menggunakan OS, karena Anda cenderung merusak sesuatu di VM. Lebih jauh lagi dengan Java yang berorientasi sebagai platform agnostik, itu bahkan lebih logis.
2- Banyak aplikasi tidak mengharuskan Anda membutuhkan hal-hal semacam itu.
Ada banyak aplikasi yang benar-benar tidak perlu Anda gali melalui banyak detail, namun jika Anda melakukannya dengan bahasa yang mengharuskan Anda melakukannya Anda dapatkan:
3 - Bahasa dibuat pada beberapa biaya pembobotan pilihan / penggunaan / risiko, seperti ... semuanya.
Dengan C ++ Anda dapat melakukan hampir semua yang Anda inginkan, itu adalah pilihan orang C ++. Namun semakin banyak, semakin banyak yang perlu Anda tangani.
Jadi hal-hal seperti multiple inheritance tidak menyerah hanya pada kenyataan bahwa mereka berbahaya, mereka menyerah karena menerapkannya memiliki biaya (pengembangan, pemeliharaan), semua untuk itu untuk fitur yang jarang digunakan dengan benar dan dapat umumnya ditulis ulang secara berbeda.
sumber
B
ditimpa di kelas menengahM
, makaB
versi anggota itu hanya akan dapat diakses melaluiM
' menimpa; (2) diberi referensi tipe apa punT
, mengonversinya menjadi tipe super apa pun dan kembali keT
akan menghasilkan referensi yang setara dengan aslinya. Kedua jaminan itu bermanfaat, dan mendukung banyak warisan akan mengharuskan menyerah setidaknya satu.Sederhananya semua batasan dalam bahasa tingkat tinggi seperti C # dan Java ada untuk melindungi programmer. Mereka ada bukan untuk melindungi programmer dari dirinya sendiri, tetapi untuk melindungi programmer dari programmer lain!
Berapa kali kita sebagai programmer menemukan perpustakaan yang benar-benar mengagumkan dalam praktik dan desain pengkodean mereka tetapi kami terpaksa menggunakannya karena satu dan lain alasan?
Program-program ini biasanya memiliki keunggulan dari metode prosedural lama pemrograman, dengan kurangnya enkapsulasi, banyak memori langsung menulis dengan sedikit atau tanpa kesalahan menangkap atau menangani. Segfault mengejar en-mass ketika mencoba menggunakannya dalam proyek skala besar.
Di situlah bahasa seperti Java dan C # sangat membantu; bukan karena mereka kita menikmati kenyataan bahwa mereka tidak membiarkan kita melakukan semua hal-hal rapi yang dilakukan oleh bahasa lain, itu adalah bahwa kita menikmati kurangnya sakit kepala yang harus kita tanggung karena programmer lain akan menyalahgunakan hal-hal rapi yang bahasa lain dapat melakukan.
Antarmuka layak dikompromikan dalam hal memori atau kecepatan eksekusi dalam pikiran saya. Saya harap Anda dapat melihat bahwa dalam segala jenis aplikasi misi kritis yang terbatas waktu, semua perlindungan itu, penanganan kesalahan yang tepat dan umumnya yakin bahwa memori tidak dipencet dengan hal-hal yang baik!
sumber
They exist not so much to protect the programmer from him/herself, but rather to protect the programmer from other programmers!
atau itu untuk melindungi programmer lain dari programmer?