Tab atau spasi untuk indentasi? Statistik 3,8 juta Perl file yang dibuat dalam 24 tahun

Salah satu dari pertanyaan-pertanyaan abadi dalam pemrograman — karakter yang digunakan dalam kode program untuk lekukan — tab atau spasi.

Kadang-kadang tidak ada pilihan. Misalnya, di Makefile pastikan untuk menggunakan tab. Dalam bahasa pemrograman go ada seorang pejabat utilitas gofmt kode yang format dan utilitas ini menggunakan tab untuk indentasi. B esoteris bahasa pemrograman Whitespace tab dan spasi tidak dapat menggantikan setiap lain. Tapi banyak bahasa pemrograman tidak memaksakan pilihan, dan memungkinkan programmer untuk menentukan karakter yang digunakan.

Ada cukup populer pendapat dari karakter yang digunakan untuk indentasi. Pendapat ini adalah sebagai berikut: tidak peduli apakah untuk menggunakan yang paling penting konsistensi. Jika anda menggunakan tab, anda selalu perlu untuk menggunakannya. Jika menggunakan spasi, hanya menggunakan spasi dan tidak pernah menggunakan tab.

Bahkan ada komik komik komik tentang hal ini:

(dua orang yang benar-benar tidak setuju dengan satu sama lain apakah akan menggunakan tab atau spasi, tapi benar-benar setuju bahwa perlu untuk menggunakan hanya salah satu):

Bagaimana hal-hal di dunia nyata? Apa yang benar-benar digunakan?

Itu cukup mudah untuk menemukan. Perlu mengambil kode sumber dari program untuk menghitung apa karakter yang digunakan dan melihat hasil.

Artikel ini adalah hasil dari riset kecil tentang penggunaan tab dan spasi dalam dunia Perl bahasa pemrograman. Ada besar gudang yang menyimpan Perl perpustakaan CPAN. Saya download semua versi dari semua perpustakaan yang ada sekarang di CPAN (ada sekitar 135 ribu) dan memutuskan mana karakter yang digunakan untuk indentasi.

Sebelum anda membaca lebih lanjut, saya sarankan anda satu menit untuk berpikir dan mencoba untuk berasumsi bahwa populer untuk indentasi:

  • Taba
  • kesenjangan
  • atau campuran tab dan spasi

?

Menulis kode

Jadi, tantangannya jelas. Anda perlu untuk mengambil semua perpustakaan dari CPAN dan memeriksa apa yang digunakan untuk indentasi.

Pertama, anda perlu men-download seluruh CPAN. Hal ini dilakukan dengan satu perintah:

time /usr/bin/rsync -av --delete cpan-rsync.perl.org::CPAN /project/CPAN/

3 jam dan download CPAN. Dibutuhkan sekitar 27 GB.

CPAN adalah kumpulan file-file yang terorganisir dalam struktur tertentu. Berikut adalah cuplikan:

CPAN/authors/id
├── A
│   ├── AA
│   │   ├── AADLER
│   │   │   ├── CHECKSUMS
│   │   │   ├── Games-LogicPuzzle-0.10.readme
│   │   │   ├── Games-LogicPuzzle-0.10.tar.gz
│   │   │   ├── Games-LogicPuzzle-0.12.readme
│   │   │   ├── Games-LogicPuzzle-0.12.tar.gz

Dalam contoh ini, AADLER adalah login dari penulis, dan Games-LogicPuzzle-0.10.tar.gz dan Games-LogicPuzzle-0.12.tar.gz adalah rilis.

Sekarang di CPAN ada lebih dari 7 ribuan penulis yang telah men-download perpustakaan di CPAN. Dalam rangka untuk tidak menyimpan semua 7 ribuan folder dalam folder yang sama, menambahkan beberapa lebih tingkat (sistem kontrol versi git menyimpan data dalam cara yang mirip).

Di CPAN, anda dapat men-download perpustakaan yang Dikemas dengan berbeda archivers.

Saya mulai dengan apa yang dihitung jumlah ekstensi file yang berbeda dalam folder CPAN/authors/id/. Berikut adalah script dan hasil karyanya . Atas perpanjangan arsip:

  • .tar.gz 135571
  • .tgz 903
  • .zip 652
  • .gz 612
  • .bz2 243

.tar.gz menang dengan margin yang saya memutuskan bahwa hal itu akan cukup untuk menghitung apa karakter yang digunakan untuk indent hanya pustaka yang Dikemas di .tar.gz

Kemudian saya menulis beberapa script. Awalnya, saya tidak berakhir sudah jelas di apa yang saya ingin mendapatkan data tentang tab dan spasi, jadi saya memutuskan untuk membuat suatu sistem yang terdiri dari beberapa komponen. Pertama, pra-proses semua 135 ribu file dengan rilis dan menaruh informasi tentang tab dan spasi ke dalam database. Berharap itu akan lama. Dan kemudian menggunakan data dari database dalam rangka untuk cepat memperoleh data dalam berbagai format.

Pada akhirnya, script fill_db . Script ini diisi dengan data base sedikit lebih dari lima jam. Tapi ini pukul lima adalah ketika semuanya telah di-debug. Bukan pertama kalinya script bekerja. Masalah utama adalah dengan Unicode. Pertama ada masalah dengan rilis μ-0.01.tar.gz penulis APEIRON, kemudian ada masalah dengan file t/words_with_ß.dat dari rilis Lingua-DE-ASCII-0.06 penulis BIGJ. Tapi pada akhirnya semua masalah diselesaikan dan script berhasil membuatnya melalui semua .tar.gz rilis.

Script ini semua .tar.gz file di CPAN. Membongkar .tar.gz folder sementara. Menemukan di folder ini sementara semua file dan ekstensi .pm, .pl, .t atau .pod, membaca semua indentasi dan cek jika lekukan ruang atau tab. Dalam rilis ada yang lain file, tapi saya memutuskan untuk menjadi terbatas hanya untuk file yang jelas-jelas berhubungan dengan Perl.

Hasil dari script ini adalah 2 tabel dalam database. Berikut adalah contoh data:

mysql> select * from releases limit 1;
+------------+--------+---------------------------------------------------------------+------------+
| release_id | author | file_name                                                     | timestamp  |
+------------+--------+---------------------------------------------------------------+------------+
|          1 | RUFF   | /cpan/authors/id/R/RU/RUFF/DJabberd-Authen-Dovecot-0.1.tar.gz | 1359325895 |
+------------+--------+---------------------------------------------------------------+------------+
1 row in set (0.00 sec)

mysql> select * from files where release_id = 1;
+---------+------------+--------------------------------------------------------+------+---------------------+-------------------+
| file_id | release_id | file_name                                              | size | has_space_beginning | has_tab_beginning |
+---------+------------+--------------------------------------------------------+------+---------------------+-------------------+
|       1 |          1 | DJabberd-Authen-Dovecot/lib/DJabberd/Authen/Dovecot.pm | 2047 |                   1 |                 1 |
|       2 |          1 | DJabberd-Authen-Dovecot/t/compiles.t                   |   64 |                   0 |                 0 |
+---------+------------+--------------------------------------------------------+------+---------------------+-------------------+
2 rows in set (0.02 sec)

mysql> mysql> selec(*) from releases;
+----------+
| count(*) |
+----------+
|   135343 |
+----------+
1 row in set (0.04 sec)

mysql> select count(*) from files;
+----------+
| count(*) |
+----------+
|  3828079 |
+----------+
1 row in set (5.71 sec)

Hanya spasi, hanya tab, tab dan spasi, dan...

Total dalam database tentang masing-masing file yang di rilis ada 2 bendera:

  • apakah anda menggunakan spasi untuk indent
  • apakah anda menggunakan tab di lekukan

Masing-masing dari dua bendera dapat 4 kombinasi:

  • 11 — digunakan spasi dan tab
  • 10 — hanya menggunakan ruang
  • 01 — digunakan hanya tab
  • 00 — tidak menggunakan spasi atau tab

Tiga opsi pertama adalah benar-benar diharapkan situasi, yang ingin saya cari dan untuk mengetahui apa yang sedang populer. Tapi pilihan 00 — "jangan gunakan tidak tab atau spasi" — itulah apa yang aku pikirkan tetapi ternyata bahwa hal ini terjadi. "Bagaimana?" — anda akan bertanya. Berikut ini adalah contoh.

mysql> select releases.release_id, files.file_name, files.size, has_space_beginning, has_tab_beginning from releases join files on releases.release_id = files.release_id and author = 'KOHA';
+------------+---------------------------------------------------+------+---------------------+-------------------+
| release_id | file_name                                         | size | has_space_beginning | has_tab_beginning |
+------------+---------------------------------------------------+------+---------------------+-------------------+
|     118147 | Bundle-KohaSupport-0.31/lib/Bundle/KohaSupport.pm | 2169 |                   0 |                 0 |
|     118147 | Bundle-KohaSupport-0.31/t/Bundle-KohaSupport.t    |  487 |                   0 |                 0 |
|     118147 | Bundle-KohaSupport-0.31/t/pod.t                   |  130 |                   0 |                 0 |
+------------+---------------------------------------------------+------+---------------------+-------------------+
3 rows in set (0.05 sec)

Penulis KOHA telah rilis Bundle-KohaSupport-0.31. Dalam rilis ini ada 3 file yang memiliki ekstensi dari daftar .pm, .pl, .t atau .pod. Tentang semua file-file ini di database ditulis dalam indentasi, tidak ada spasi, tab. Bagaimana ini bisa terjadi?

Ternyata bahwa semua sd. Jika anda melihat file-file ini, mereka hanya tidak ada lekukan. Sebagai contoh, isi dari file t/Bundle-KohaSupport.t:

# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl Bundle-KohaSupport.t'

#########################

# change 'tests => 1' to 'tests => last_test_to_print';

use Test::More tests => 1;
BEGIN { use_ok('Bundle::KohaSupport') };

#########################

# Insert your test code below, the Test::More module is use()ed here so read
# its man page ( perldoc Test::More ) for help writing this test script.

Jadi selain tiga situasi yang tidak terduga:

  • hanya menggunakan ruang
  • digunakan hanya tab
  • yang digunakan, dan spasi dan tab

juga adalah situasi:

  • tidak menggunakan spasi dan tidak menggunakan tab

Data penulis

Setelah saya telah diolah data di database, saya memutuskan untuk menonton dari masing-masing penulis dia menggunakan padding.

Saya berharap bahwa yang paling populer akan penggunaan ruang, tempat kedua dengan popularitas akan hanya menggunakan tab, dan tempat ketiga dalam popularitas adalah penggunaan simultan dari tab dan spasi.

Tetapi ternyata bahwa aku benar-benar salah.

Saya menulis script . Script ini telah memeriksa apa karakter yang digunakan oleh penulis untuk semua file .pm, .pl, .t, .pod, yang mereka rilis yang sekarang di CPAN.

Inilah yang terjadi:

$ cat app/data/users.log | perl -nalE 'say if /^##/'
## 00 (nothing) - 50 (0.7%)
## 01 (only tabs) - 51 (0.7%)
## 10 (only spaces) - 1543 (21.9%)
## 11 (both) - 5410 (76.7%)

Data adalah benar-benar tidak seperti yang saya harapkan!

  • Lebih dari 75% penulis menggunakan campuran spasi dan tab untuk indentasi.
  • Hanya ruang di tempat kedua, sedikit lebih dari 20%,
  • dan penulis yang hanya menggunakan tab kurang dari persen.
  • Jumlah penulis yang tidak menggunakan padding adalah hampir sama dengan jumlah penulis yang hanya menggunakan tab.

Daftar lengkap semua penulis dalam pemecahan Pro-tim yang ada di file di GitHub .

Tapi jupyter notebook  oleh yang dibangun dalam diagram lingkaran.

Tapi ini data yang dihasilkan dalam semua rilis, yang sekarang di CPAN. Rilis ini diciptakan lebih dari 24 tahun terakhir. Mungkin dengan waktu rasio entah bagaimana berubah?

Waktu

Setiap file yang rilis pada CPAN, modifikasi time adalah waktu ketika rilis ini di upload untuk CPAN. Data-data yang dimuat dalam database. Sekarang tua CPAN rilis Ioctl-0.5 — ini di upload untuk CPAN 1995-08-20:

mysql> select author, file_name, from_unixtime(timestamp) from releases where timestamp = (select min(timestamp) from releases);
+--------+----------------------------------------------+--------------------------+
| author | file_name                                    | from_unixtime(timestamp) |
+--------+----------------------------------------------+--------------------------+
| KJALB  | /cpan/authors/id/K/KJ/KJALB/Ioctl-0.5.tar.gz | 1995-08-20 07:26:09      |
+--------+----------------------------------------------+--------------------------+
1 row in set (0.08 sec)

Dan hari ini dipenuhi dari 8 rilis:

mysql> select * from releases where from_unixtime(timestamp) < '1995-08-21' order by timestamp;
+------------+--------+--------------------------------------------------------------+-----------+
| release_id | author | file_name                                                    | timestamp |
+------------+--------+--------------------------------------------------------------+-----------+
|     112505 | KJALB  | /cpan/authors/id/K/KJ/KJALB/Ioctl-0.5.tar.gz                 | 808903569 |
|      23026 | TYEMQ  | /cpan/authors/id/T/TY/TYEMQ/FileKGlob.tar.gz                 | 808903636 |
|     134031 | WPS    | /cpan/authors/id/W/WP/WPS/Curses-a8.tar.gz                   | 808903647 |
|     112546 | KJALB  | /cpan/authors/id/K/KJ/KJALB/Term-Info-1.0.tar.gz             | 808903748 |
|      70278 | MICB   | /cpan/authors/id/M/MI/MICB/TclTk-b1.tar.gz                   | 808910379 |
|      70274 | MICB   | /cpan/authors/id/M/MI/MICB/Tcl-b1.tar.gz                     | 808910514 |
|      19408 | GBOSS  | /cpan/authors/id/G/GB/GBOSS/perl_archie.1.5.tar.gz           | 808930091 |
|      81551 | JKAST  | /cpan/authors/id/J/JK/JKAST/StatisticsDescriptive-1.1.tar.gz | 808950837 |
+------------+--------+--------------------------------------------------------------+-----------+
8 rows in set (0.06 sec)

Aku memutuskan untuk melihat bagaimana distribusi penggunaan karakter yang berbeda untuk indentasi pada saat itu. Selama ini saya menulis naskah .

Berikut adalah cuplikan dari file data yang dibuat script:

$ cat app/data/releases_date.csv | head
date,00,01,10,11
1995-08-20,0,1,0,7
1995-08-21,0,0,0,0
1995-08-22,0,0,0,0
1995-08-23,0,0,0,0
1995-08-24,0,0,0,1
1995-08-25,0,0,0,0
1995-08-26,0,0,0,0
1995-08-27,0,0,0,0
1995-08-28,0,0,0,0

Yaitu untuk setiap tanggal, dimulai dengan 1995-08-20 memberikan informasi tentang berapa banyak yang telah rilis oleh fakta apa karakter yang digunakan untuk indentasi.

  • 00 — di lekukan, tidak ada spasi, tab
  • 01 — di lekukan hanya digunakan tab
  • 10 — indent hanya menggunakan ruang
  • 11 — di Atsuta digunakan tab dan spasi

Kemudian saya menulis jupyter notebook  yang menarik grafik. Pada grafik saya menampilkan jumlah absolut dari rilis oleh jenis indentasi, dan persentase dari total jumlah rilis pada hari ini:

Grafik menunjukkan hampir 9 ribu hari. Hal ini jelas bahwa ada kecenderungan, tapi grafik berisik dan itu buruk anda dapat melihat segala sesuatu. Karena bukan hari saya dikelompokkan rilis di bulan.:

Tapi ada yang mengejutkan tren. Jumlah siaran yang hanya menggunakan tab atau tidak indentasi hampir tidak berubah, tetapi proporsi rilis yang hanya menggunakan ruang terus berkembang dan pertumbuhan ini disebabkan proporsi dari rilis yang menggunakan campuran tab dan spasi.

Mengapa "hanya ruang". Hipotesis nomor 1

Saya melihat data dan aku punya satu hipotesis mengapa penurunan jumlah rilis yang digunakan dan masalah-masalah tab. Saya berpikir tentang Perl perpustakaan Modul::Menginstal . Jika saat menulis anda perpustakaan menggunakan Modul::Menginstal, CPAN rilis termasuk file dari perpustakaan ini. Dan di file-file ini menggunakan campuran spasi dan tab. Berikut adalah contoh file dari Modul::Menginstal rilis Devel-PeekPoke-0.04:

mysql> select * from files where release_id = 284 and file_name like '%inc/Module/Install%';
+---------+------------+----------------------------------------------------+-------+---------------------+-------------------+
| file_id | release_id | file_name                                          | size  | has_space_beginning | has_tab_beginning |
+---------+------------+----------------------------------------------------+-------+---------------------+-------------------+
|   10328 |        284 | Devel-PeekPoke-0.04/inc/Module/Install.pm          | 12381 |                   1 |                 1 |
|   10329 |        284 | Devel-PeekPoke-0.04/inc/Module/Install/Metadata.pm | 18111 |                   1 |                 1 |
|   10330 |        284 | Devel-PeekPoke-0.04/inc/Module/Install/Fetch.pm    |  2455 |                   1 |                 1 |
|   10331 |        284 | Devel-PeekPoke-0.04/inc/Module/Install/Makefile.pm | 12063 |                   1 |                 1 |
|   10332 |        284 | Devel-PeekPoke-0.04/inc/Module/Install/Base.pm     |  1127 |                   0 |                 1 |
|   10333 |        284 | Devel-PeekPoke-0.04/inc/Module/Install/WriteAll.pm |  1278 |                   0 |                 1 |
|   10334 |        284 | Devel-PeekPoke-0.04/inc/Module/Install/Win32.pm    |  1795 |                   1 |                 1 |
|   10335 |        284 | Devel-PeekPoke-0.04/inc/Module/Install/Can.pm      |  3183 |                   1 |                 1 |
+---------+------------+----------------------------------------------------+-------+---------------------+-------------------+
8 rows in set (0.03 sec)

Hipotesis saya adalah bahwa pengembang menggunakan spasi untuk indentasi, tetapi karena fakta bahwa di rilis adalah Modul::Install yang tercatat dalam statistik, dan spasi dan tab. Modul::Pasang baja kurang untuk menggunakan (karena ada segala macam Dist::Zilla, Dist::Milla, Minilla), dan oleh karena itu Modul::Menginstal berhenti memberikan distorsi.

Hipotesis ini perlu diperiksa. Pertama kali saya memutuskan untuk melihat apakah Modul::Install yang digunakan kurang dan kurang. Saya membangun sebuah jadwal. Masing-masing titik adalah jumlah dari rilis untuk bulan yang Modul yang digunakan::Menginstal. Anda dapat melihat bahwa bagian dari hipotesis adalah benar — memang, Module::Pasang baja menggunakan kurang.

Tapi apakah penggunaan Modul::Menginstal mempengaruhi pemanfaatan spasi atau tab dan spasi untuk indentasi. Dalam rangka untuk mencari tahu, aku menarik dua grafis. Adalah jumlah dari berbagai jenis bantalan rilis bulan. Pertama grafik hanya rilis yang menggunakan Modul::Menginstal, pada kedua grafik hanya rilis yang tidak di gunakan.

Di sini anda dapat melihat bahwa memang benar, jika anda menggunakan Modul library::Pasang, yang paling sering library yang digunakan ini adalah campuran dari tab dan spasi.

Dan berikut adalah grafik yang hanya menampilkan rilis tersebut yang tidak menggunakan Modul::Menginstal. Jika anda membandingkan ini jadwal dengan jadwal yang berlaku untuk semua rilis, maka ada perbedaan, tapi tidak ada perubahan.

Ternyata bahwa hipotesis tersebut salah. Jika rilis menggunakan Modul::Install, kemudian rilis sering jatuh ke dalam kelompok "tab dan spasi", tetapi jika anda tidak memperhitungkan semua rilis yang menggunakan Modul::Menginstal, anda masih memiliki tren proporsi dari rilis yang hanya menggunakan tab sebagai lekukan meningkat dengan mengorbankan proporsi dari rilis yang digunakan campuran tab dan spasi.

Mengapa "hanya ruang". Hipotesis nomor 2

Mengapa semua sama, semakin banyak rilis yang hanya menggunakan tab? Mungkin ada beberapa kelebihan aktif sebagai penulis, banyak memproduksi rilis dan penulis memiliki efek pada semua statistik?

Saya mencoba untuk check it out. Menggambar sebuah grafik yang menunjukkan bagian dari rilis yang hanya menggunakan ruang, namun berdasarkan huruf pertama dari nama penulis. Jika memang beberapa penulis dibuat lebih besar kontribusi untuk statistik keseluruhan, jenis garis yang sangat tajam naik. Pada grafik saya melihat, semua baris adalah plus atau minus bahkan. Jadi mengkonfirmasi hipotesis ini, saya tidak bisa mendapatkan.

Mengapa "hanya ruang". Hipotesis nomor 3

Grafik menunjukkan bahwa dari waktu ke waktu menjadi lebih dan lebih banyak rilis yang hanya ruang untuk indentasi. Dan ini berbagi berkembang dengan mengorbankan rilis yang merupakan campuran dari spasi dan tab.

Saya asumsi pertama adalah bahwa hal ini terjadi karena fakta bahwa di rilis sebelum aktif termasuk pustaka kode Modul::Install yang digunakan campuran spasi dan tab, perpustakaan ini menggunakan lebih kecil, dan oleh karena itu, proporsi dari rilis yang menggunakan campuran tab dan kesenjangan berkurang. Itu bagian dari kebenaran dalam hal ini, tetapi bahkan jika kita menghapus dari review semua rilis yang menggunakan Modul::Menginstal, tren secara keseluruhan tidak berubah — namun, pangsa rilis di mana hanya kesenjangan yang tumbuh dengan mengorbankan pangsa rilis di mana menggunakan campuran dari spasi dan tab.

Saya asumsi yang kedua adalah bahwa pengaruh pada statistik yang sangat kecil sangat aktif penulis. Saya tidak bisa menemukan email konfirmasi dari hipotesis ini.

Ketiga hipotesis yang penulis muncul lebih nyaman teks editor dan IDE, yang lebih mudah untuk menggunakan grease hanya spasi, bukan campuran dari spasi dan tab. Tapi, sayangnya, ide-ide bagaimana untuk menguji hipotesis ini yang saya miliki. Data yang berbaring di CPAN tidak ada informasi tentang apa yang editor digunakan untuk membuat rilis ini. Saya melihat tanggal rilis untuk populer editor/IDE:

  • Emacs — 1985
  • vim — 1991
  • IntelliJ IDEA — januaray 2001
  • Eclipse — November 2001
  • Sublime Text — januari 2008
  • Atom — februari-2014
  • VS Code — April 2015

Data untuk tahun 2019

Pada sebelumnya grafik menunjukkan bahwa dari waktu ke waktu menjadi lebih dan lebih banyak rilis yang ruang dan tidak mencampur tab dengan spasi. Jadi saya memutuskan untuk melihat distribusi dari apa jenis margin digunakan oleh penulis hanya pada rekening mereka rilis di tahun 2019.

Data dari hasil running script :

$ cat app/data/users_2019.log | perl -nalE 'say if /^##/'
## 00 (nothing) - 12 (1.4%)
## 01 (only tabs) - 9 (1.0%)
## 10 (only spaces) - 355 (41.2%)
## 11 (both) - 486 (56.4%)

Jika kita membandingkan data untuk tahun 2019 dan menyediakan data untuk semua tahun, kita melihat bahwa persentase dari penulis yang hanya menggunakan tab tidak berubah, tetapi proporsi penulis yang hanya menggunakan ruang yang telah meningkat secara dramatis.

Sumber ini pie chart:

Faktor-faktor yang mempengaruhi validitas data

Untuk pembentukan angka-angka dan grafik yang digunakan .tar.gz rilis yang berada di CPAN pada saat penulisan ini, selain untuk melepaskan bahasa pemrograman Perl.

CPAN memungkinkan anda untuk menghapus rilis data yang ditampilkan dalam artikel ini remote rilis tidak berpartisipasi. Tidak jelas berapa banyak yang akan berubah jika data mempertimbangkan karakter padding sudah dihapus rilis. Hal ini memungkinkan data yang akan banyak berubah. Ada sebuah arsip backpan  yang menyimpan semua rilis, siapa yang pernah CPAN. Jadi secara teori ada kemungkinan untuk mengkonversi semua angka-angka berdasarkan rilis yang tidak di CPAN.

Titik kedua, yang mempengaruhi akurasi data adalah sesuatu yang diperhitungkan simbol lekukan hanya rilis yang Dikemas dalam .tar.gz arsip. Jenis lain arsip yang tidak digunakan. Sebagian besar dari rilis .tar.gz jadi hal itu membuat asumsi seperti itu. Jika jumlah data untuk semua data arsip pasti akan berubah. Asumsikan bahwa perubahan akan lebih dari beberapa persen.

Kode sumber

Seluruh rangkaian script yang digunakan untuk mengumpulkan data, data itu sendiri dan jupyter notebook tersedia dalam repositori di GitHub.

Kode yang tertulis itu hanya sangat jauh dari sempurna. Semua yang tertulis menulis dengan ide-ide secepat mungkin untuk mendapatkan hasil, tidak untuk membuat kode yang sempurna.

Ringkasan

Pada saat tulisan ini repositori Perl CPAN perpustakaan, ada sekitar 135 ribu rilis. Rilis pertama dibuat 24 tahun yang lalu (1995-08-20). Dalam rilis ini hampir 4 juta file ekstensi .pm, .pl, .t atau .pod.

Jika kita mempertimbangkan data untuk semua waktu, ternyata 76.7%% penulis dalam margin menggunakan campuran spasi dan tab, 21.9% digunakan dalam lekukan, hanya ruang, dan 0,7% — hanya tab.

Tetapi jika kita mempertimbangkan data hanya untuk 2019, itu menjadi lebih dan lebih banyak penulis yang hanya menggunakan ruang untuk lekukan, tapi masih mayoritas menggunakan campuran tab dan spasi (56.4% — menggunakan tab dan spasi,spasi 41.2% — hanya kesenjangan, 1.0% — hanya tab).

Dan jika anda lihat pada grafik persentase perubahan dari menggunakan berbagai jenis indentasi, anda dapat melihat bahwa pangsa hanya menggunakan ruang tumbuh dan berbagi ini tumbuh dengan mengorbankan bagian dari mereka yang menggunakan campuran tab dan spasi untuk indentasi.

Hal ini tidak diketahui mengapa persentase ini meningkat. Adalah mungkin bahwa ini adalah karena fakta bahwa penulis penggunaan yang lebih nyaman teks editor yang membuatnya lebih mudah dan lebih aman untuk menginstal karakter yang digunakan untuk indentasi.

Artikel lainnya