Lihat di sini: perang suci khas pada tab vs spasi .
Sekarang lihat di sini: tapstop elastis . Semua masalah terpecahkan, dan banyak perilaku baru yang sangat berguna ditambahkan.
Apakah tabstop elastis bahkan disebutkan dalam diskusi tab vs ruang? Kenapa tidak? Apakah ada kelemahan pada ide tabstop elastis yang begitu serius sehingga tidak ada yang pernah mengimplementasikannya dalam editor populer?
EDIT : Saya minta maaf karena terlalu banyak menekankan "mengapa mereka tidak disebutkan". Bukan itu yang saya maksudkan; yang dimaksud adalah mungkin bahkan off topic. Apa yang sebenarnya saya maksudkan adalah, apa kelemahan terbesar dari hal ini yang mencegah adopsi yang lebih luas dari ide yang jelas bermanfaat? (di dunia ideal di mana semuanya mendukungnya)
(Ternyata sudah ada permintaan di Microsoft Connect untuk implementasi Visual Studio dari elastis tabstop , dan permintaan di Eclipse juga. Ditambah ada pertanyaan tentang editor lain yang menerapkan elastis tabstop )
sumber
Jawaban:
Perang Suci itu Subyektif
Tabstop elastis Nick adalah konsep luar biasa yang dapat membantu banyak orang menyetujui solusi yang bisa diterapkan, meskipun saya sangat ragu itu akan mengakhiri Perang Suci ini: lagipula, ini juga masalah selera dan banyak programmer tidak akan memindahkan inci dari posisi mereka tentang masalah ini, bahkan dengan mengorbankan kompromi. Jadi itu akan menjadi alasan pertama.
Misalnya, banyak orang di sisi "spasi" masih akan membencinya karena memerlukan bagian logika tambahan dalam perangkat lunak Anda untuk rendering yang layak (misalnya hanya melihat perubahan di tampilan web SCM Anda).
Masalah Implementasi
Tetapi alasan yang paling jelas hanyalah hambatan teknis untuk masuk : itu adalah konsep yang pada dasarnya berbeda dari apa yang telah diterapkan selama beberapa tahun (jika bukan beberapa dekade) dalam IDE dan editor teks. Diperlukan untuk menulis ulang beberapa dari mereka untuk memproses garis dalam fasion yang cukup berbeda, yang menyulitkan sistem yang lebih tua dan lebih besar yang memiliki peluang lebih tinggi untuk menderita kopling dalam dan ketat dalam kode pemrosesan baris mereka. Hal ini, bagaimanapun, jauh lebih mudah untuk dilakukan ketika Anda mulai dari awal (memikirkan demo Nick atau Go 's tabwriter paket).
Untuk sebuah anekdot pribadi, saya ingat mendekati penulis beberapa waktu lalu untuk menanyakan apakah ada dukungan emacs yang terlihat, dan dalam kasus khusus ini ia menyebut ini sebagai alasan untuk tidak sepele. Dia juga meminta bantuan dari komunitas untuk membantu mengimplementasikan fitur ini dan membawanya ke massa.
Apakah Kita Cukup Peduli?
Alasan ketiga, adalah bahwa beberapa pengembang tidak terlalu memahami masalah ini dan tidak terlalu peduli sehingga mereka akan berusaha keras untuk mendukung upaya tersebut. Dalam kebanyakan kasus, konflik spasi-vs-tab bukanlah pemblokir bisnis, jadi tidak ada banyak dorongan di balik masalah ini.
Jika Anda menginginkannya, Anda harus berjuang untuk itu. Yang bisa dilakukan dalam perangkat lunak sumber terbuka. Dan jika Anda cukup mengubah ini, sumber tertutup harus mengikuti dengan risiko kehilangan sebagian pengguna mereka, jika sebagian kecil darinya.
Jadi, jika Anda menginginkannya, bantu Nick.
sumber
Sering kali saya harus berkelahi dengan pengolah kata untuk mendapatkan dokumen agar terlihat seperti yang saya inginkan tanpa aturan otomatis tersembunyi yang mengendalikan penempatan kata-kata saya. Saya tidak ingin menghabiskan waktu satu detik untuk mencari tahu mengapa editor bersikeras untuk menempatkan kata-kata itu di sana.
sumber
Ini adalah pertama kalinya saya mendengar itu. Tidak yakin apakah itu ide yang bagus tetapi tampaknya tidak banyak digunakan karena kami memiliki alat (seperti indentasi) yang sudah memformat kode secara otomatis.
Apa yang terjadi ketika saya membuka tabstop elastis pintar Anda di vim dan mengeditnya? Apakah tab secara otomatis dibersihkan atau Anda dibiarkan berantakan?
Kelemahan utama, seperti yang saya lihat mereka mungkin melanggar diff, kontrol versi, dan tidak kompatibel dengan editor yang tidak mendukungnya. Ini mungkin banyak modifikasi kode untuk mendukung mereka dan ada hal-hal yang lebih penting daripada fitur "hal lain untuk memformat kode". Lagi pula, kita semua dapat menggunakan
indent
yang melakukan semua hal di atas jika memori berfungsi.sumber
Sejujurnya, saya tidak menemukan mereka yang berguna setelah Anda mengatasi kegembiraan awal. Misalnya, saya tidak suka komentar di akhir baris - saya selalu meletakkan komentar saya di baris terpisah. Dengan itu, tab elastis kehilangan penggunaan utama mereka.
Setelah itu, Anda tentu saja masih dapat menggunakannya untuk menyelaraskan argumen fungsi (dan parameter) dan daftar tugas yang panjang.
Tetapi untuk yang pertama saya cenderung hanya membuat indentasi semua argumen dengan satu tingkat tambahan dan itu berfungsi baik-baik saja dengan saya:
Dan saya tidak melihat ada kebutuhan untuk mengubahnya.
Dan untuk menyelaraskan tugas, saya tidak melakukan itu. Saya menempatkan satu spasi di sekitar tugas, itu saja. Saya juga cenderung tidak mengelompokkan banyak tugas bersama sehingga jarang ada masalah keterbacaan.
Singkatnya, tab elastis sama sekali nol kegunaan bagi saya. Ini tentu saja merupakan preferensi yang sangat pribadi yang dapat bervariasi tetapi saya menemukan bahwa itu bekerja dengan baik dan saya kira kurangnya dukungan untuk tab elastis adalah karena orang lain berpikiran sama.
Jika seorang editor akan mengimplementasikannya, saya masih tidak akan menggunakannya.
sumber
Salah satu kelemahannya adalah ia tidak berfungsi jika Anda ingin menyelaraskan pada satu kelompok garis dan kemudian lekukan pada yang berikutnya, karena mengelompokkan tab berhenti dari garis yang berdekatan.
Apa yang saya inginkan:
Untuk bahasa penjepit keriting, ini mungkin tidak terlalu menjadi masalah, karena Anda biasanya dapat menyelesaikannya dengan meletakkan penjepit pembuka pada garisnya sendiri (seperti dalam animasi), tetapi untuk bahasa yang peka spasi ruang angkasa, ini dengan cepat menjadi masalah, dan Anda akhirnya harus kembali menggunakan spasi.
sumber
wibble()
hanya akan memiliki lekukan tunggal dan karena itu tidak akan selaras dengan argumen fungsi?Mengapa kita tidak membuat karakter tab vertikal saja (VT, ASCII 11) berfungsi untuk menunjukkan penggunaan tabstop elastis? Ini tidak ada gunanya dalam bahasa pemrograman utama apa pun, namun diuraikan sebagai spasi kosong yang valid di semuanya, AFAIK.
Ini berarti bahwa penggunaan tabstop elastis tidak lagi menjadi konvensi eksternal (mis. "File ini diformat dengan tabstop elastis, silakan nyalakan") tetapi sesuatu yang Anda pilih berdasarkan kasus per kasus.
Editor teks yang ada biasanya menampilkan mesin terbang atau ruang tunggal di tempat tab vertikal. Ini tidak ideal, tetapi harga yang harus dibayar, IMO.
sumber
Mereka tidak disebutkan karena mereka tidak diterapkan di sebagian besar IDE editor teks; mereka adalah hal baru yang jarang digunakan dalam suatu proyek.
Spasi telah digunakan untuk membuat program sejak zaman kartu punch. Tab datang dan seseorang jelas berpikir itu ide yang bagus (mereka keliru: p).
Pada hari-hari ketika sebagian besar editor modern dapat mengonversi tab menjadi spasi secara otomatis ... mereka tidak ada gunanya.
Harus menginstal alat lain untuk menangani sesuatu yang sepele seperti tab vs spasi tentu tidak menarik bagi saya, dan saya tidak berpikir itu akan terjadi pada sebagian besar rekan saya.
sumber
Saya pikir mereka akan menemukan banyak kegunaan jika IDE mendukungnya (Microsoft!). Begitu orang menemukan mereka bisa menampar flowerbox mereka di samping dan membuatnya mudah dibaca, mereka akan melakukannya. Anda mungkin mendapat lebih banyak komentar yang ditambahkan ke kode sumber secara tiba-tiba (yang hanya bisa menjadi hal yang baik).
Saya kira kita juga bisa menambahkan komentar "tooltips" ke daftar 'apakah itu baik jika ...', jadi blok komentar besar Anda dapat disembunyikan dan dilihat dengan mudah saat dibutuhkan. Mungkin kita juga bisa memiliki blok komentar yang membentuk bagian dari dokumentasi (bukan barang jenis sandcastle, cuplikan dokumentasi yang dapat dibaca pengguna yang tertanam dalam kode, bukan hanya header metode)
Kekurangan: ini mungkin membuat sumber Anda berbeda terlihat buruk jika banyak baris tampak seperti mereka berubah ketika hanya 1 yang dimodifikasi (jika editor menyimpan file dengan tab yang dikonversi ke spasi). Atau, jika tab elastis diterapkan dengan satu karakter (atau lebih mungkin, 2 tabstop) maka melihat sumber Anda di luar editor bisa terlihat buruk.
Saya pikir saya suka gagasannya, 'tab tab' di akhir baris melemahkan blok komentar dan mengurutkan semua komentar pada baris berikutnya (yang memiliki spasi tab ganda).
sumber
Begini cara saya melihatnya: jika sebagian besar alat populer sudah mendukung tabstop elastis, banyak orang akan menggunakannya. Hal yang sama terjadi dengan mode navigasi / edit vi, dengan penyorotan sintaks, dan kemudian dengan Intellisense. Dalam setiap kasus, kebijaksanaan yang sudah mapan adalah bahwa itu tidak berguna atau tidak diperlukan, tetapi diterapkan dan lepas landas.
Tabstop yang elastis tentu saja memiliki dampak yang relatif rendah. Kebanyakan orang cukup senang dengan status quo dan karenanya tidak peduli. Alasan yang sama diterapkan pada banyak situasi di mana beberapa orang hanya senang dengan apa yang mereka dapatkan dan tidak melihat alasan untuk beralih ke sesuatu yang lebih maju. Dengan kata lain, masalah terbesar dengan tabstop elastis adalah sama dengan hampir setiap ide bagus lainnya: perlu mendapatkan daya tarik.
Tetapi itu tidak berarti fitur tersebut tidak dapat diadopsi secara bertahap. Setiap bahasa pemrograman tunggal diadopsi secara bertahap, meskipun seluruh tim membutuhkan kompiler baru dan IDE baru untuk mulai menggunakannya. Hal yang sama berlaku untuk setiap arsitektur perangkat keras tunggal dan banyak contoh lainnya. Ini juga bukan kasus bahwa kurangnya integrasi dengan alat-alat yang ada adalah show-stopper: hal yang sama berlaku, misalnya, "format unified-diff", yang secara bertahap menggantikan format yang sebelumnya kurang dapat dibaca yang tetap dipahami oleh alat otomatis (seperti tambalan). Alat-alat itu telah ditingkatkan dari waktu ke waktu.
Saya menghargai masalah interop yang telah disebutkan orang lain, tetapi meskipun ada, pasti akan ada tim (seperti milik saya) yang akan mengadopsi ini tanpa ragu-ragu, secara keseluruhan. Alat eksternal seperti pembedaan, penggabungan dll. Pada awalnya tidak akan mendukungnya, tetapi kami akan melakukan bagian kami untuk mendorong vendor untuk memasukkan fitur tersebut. Inilah bagaimana kemajuan selalu dibuat. Ini membutuhkan beberapa rasa sakit untuk periode transisi sementara, tetapi pada akhirnya, itu sangat berharga.
sumber
Masalah terbesar yang saya miliki dengan itu adalah jarak yang tidak konsisten di seluruh dokumentasi. Saya tahu sebagai seorang programmer saya akan kesal melihat loop atau jika pernyataan pada lekukan 'standar' dan kemudian melihat di lekukan yang berbeda. Saya tahu secara pribadi saya suka melihat semua kurung kurawal saya di sepanjang dokumentasi, tidak hanya di blok kode yang saya lihat.
Secara keseluruhan saya pikir itu ide yang bagus, tetapi secara pribadi, saya tidak akan menyukainya.
sumber
Saya baru saja mencoba implementasi elastis tabstop jEdit, yang bekerja sangat baik dengan bahasa pemrograman yang saya kenal (terutama bahasa HTML / XML dan bahasa mirip-C). Namun, dengan kode Python, inilah yang ditampilkan (spasi digunakan sebagai pengganti tab untuk mengilustrasikan bagaimana berbagai hal menyelaraskan):
Untuk bahasa seperti Python yang bergantung pada spasi, ini adalah pemecah kesepakatan kecuali Anda menonaktifkan fungsi yang disediakan oleh tabstop elastis. Editor seperti Vim dan Emacs membuat penonaktifan sebagian besar fungsi menjadi sederhana jika Anda tahu nama opsi dan cara menonaktifkannya, tetapi fungsi ini harus dinonaktifkan untuk kode seperti di atas.
Yang sedang berkata, itu bagus untuk x86 ASM, C, C ++, Go, XML, HTML, dan lainnya yang tidak terlalu bergantung pada spasi putih:
Saya akan mengatakan bahwa dialek Lisp seperti Skema memiliki konvensi mereka sendiri yang juga akan membuat tabstop elastis membuat kode "jelek". Jika saya mengubah pengaturan tabstop untuk mencocokkan konvensi 2 kolom dan menyisipkan tabstop di tempat yang tidak biasa (antara fungsi dan argumennya):
vs. yang lebih mudah dibaca:
Memang, yang ini tidak seburuk contoh Python, tetapi jelas mengurangi keterbacaan kode. Sementara saya sangat menikmati fungsionalitas ketika coding dalam sesuatu seperti C # atau C ++, saya benci fungsionalitas ketika coding dalam bahasa seperti Python atau Skema di mana spasi putih berfungsi dan / atau bermanfaat secara visual. Tabstop elastis dibuat secara khusus untuk membantu tanpa memerlukan utilitas indentasi yang terpisah, tetapi jelas itu tidak dimaksudkan untuk semua bahasa pemrograman.
sumber
Emacs sudah menangani lekukan di hadapan tanda kurung tertutup, dan secara otomatis akan menyelaraskan wilma dengan fred . Saya tidak tahu mengapa Eclipse tidak melakukan hal yang sama. Oke, saya punya ide, tapi tidak gratis.
Anda bisa membuat Emacs menyelaraskan komentar juga, tanpa banyak kesulitan, tetapi AFAIK tidak seorang pun kecuali Anda pernah menginginkannya.
sumber
wilma
saat Anda mengedit, seperti mengubah panjang nama fungsi? Jika ya, itu cukup dekat dengan apa yang dilakukan oleh tabstop elastis.