Tabs oder Leerzeichen zum Einrücken? Statistiken über 3.8 Millionen von Perl erstellten Dateien seit 24 Jahren

Eine der ewigen Fragen in der Programmierung — welche Zeichen im Code verwenden für die Einrückung — Tabs oder Leerzeichen.

Manchmal gibt es keine Wahl. Zum Beispiel, in Makefile unbedingt verwenden müssen, Taba. In der Sprache Programmierung go gibt es ein offizielles Tool gofmt die Code formatiert und dieses Tool nutzt Tabs für Einrückungen. B esoterischen Programmiersprache Whitespace Tabs und Leerzeichen dürfen nicht durch einander Freund. Aber viele Programmiersprachen nicht legen Wahl und ermöglichen dem Programmierer selbst entscheiden, welche Zeichen zu verwenden.

Es gibt genug Volksmeinung welche Zeichen zum Einrücken verwenden. Meinung folgende: egal was Sie verwenden, Hauptsache Konsistenz. Wenn die Tabs verwendest, dann müssen Sie immer verwenden. Wenn verwendest Leerzeichen, dann müssen Sie verwenden, nur Leerzeichen und keine Tabs verwenden.

Es gibt sogar Comic Comic Comic zu diesem Thema:

(zwei Personen absolut nicht einverstanden mit einander, ob die Taba oder Leerzeichen, aber absolut einig, dass Sie nur eine Sache):

Und wie die Dinge in der realen Welt? Was eigentlich verwendet?

Es ist ganz einfach herauszufinden. Muss man den Quellcode der Programme aufzuzählen welche Symbole werden verwendet und die Ergebnisse sehen.

Dieser Artikel ist das Ergebnis einer kleinen Studie über die Verwendung von Tabs und Leerzeichen in der Welt der Programmiersprache Perl. Es gibt ein riesiges Repository ist eine Sammlung von Perl Bibliothek — CPAN. Ich habe alle Versionen aller Bibliotheken, die jetzt auf CPAN (Sie war etwa 135 tausend) und fand welche Symbole verwendet, um Einrückungen.

Bevor Sie weiterlesen, empfehle ich Ihnen für eine Minute zum nachdenken und ausprobieren davon ausgehen dass zum Einrücken beliebter:

  • Taba
  • Leerzeichen
  • oder eine Mischung aus Tabs und Leerzeichen

?

Schreiben von Code

Also, die Aufgabe ist klar. Müssen alle Bibliotheken mit CPAN und wird verwendet, um zu überprüfen, dass Einrückungen.

Zuerst müssen Sie das ganze CPAN. Dies geschieht mit einem einzigen Befehl:

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

3 Stunden und CPAN heruntergeladen. Es dauert etwa 27 GB.

CPAN ist eine Zusammenstellung von Dateien, die in einer bestimmten Struktur organisiert. Hier ist ein Ausschnitt:

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

In diesem Beispiel AADLER — ist der Benutzername des Autors und Games-LogicPuzzle-0.10.tar.gz und Games-LogicPuzzle-0.12.tar.gz — Releases ist.

Jetzt auf CPAN gibt es mehr als 7 tausend Autoren luden die Bibliothek auf CPAN. Um nicht zu speichern alle 7 tausend Ordner in einem einzigen Ordner, noch ein paar mehr Ebenen (Versionskontrollsystem git speichert seine Daten in ähnlicher Weise).

Auf CPAN herunterladen der Bibliothek, sind die verschiedenen Entpacker.

Ich begann mit der Tatsache, dass zählte die Anzahl der verschiedenen Dateiendungen im Ordner CPAN/authors/id/. Hier ist ein Skript und das Ergebnis seiner Arbeit . Top-Erweiterungen Archive:

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

.tar.gz gewinnt mit einem solchen Vorsprung, dass ich beschloss, dass es genug zu berechnen welche Symbole verwendet Einrückungen enthalten nur in den Bibliotheken, sind die in .tar.gz

Weiter schrieb ich ein paar Skripte. Ursprünglich ich war nicht bis zum Ende klar welcher Form erhalte ich die Daten über Tabah und Lücken, so dass ich beschloss zu tun System bestehend aus mehreren Komponenten. Zunächst vorab zu behandeln alle 135 tausend Dateien mit Releases und setzen Daten über Tabah und Lücken in der Datenbank. Erwarte es würde zu lange dauern. Und dann verwenden Sie die Daten aus der Datenbank, um schnell an Daten in verschiedenen Formaten.

Das Ergebnis war ein Script fill_db . Dieses Skript schwemmt die Daten in die Datenbank etwas mehr als fünf Stunden. Aber diese fünf Stunden ist, wenn bereits alles ausgetestet. Nicht das erste mal das Skript gearbeitet. Die Hauptprobleme waren mit Unicode. Zuerst gab es ein Problem mit der Veröffentlichung μ-0.01.tar.gz Autor APEIRON, dann gab es Probleme mit Dateien der Art t/words_with_ß.dat aus der Veröffentlichung Lingua-DE-ASCII-0.06 Autor BIGJ. Aber am Ende sind alle Probleme gelöst wurden und das Skript erfolgreich ging auf alle .tar.gz Veröffentlichungen.

Das Skript geht auf alle .tar.gz Dateien im CPAN. Dekomprimiert .tar.gz in einen temporären Ordner. Findet in diesem temporären Ordner alle Dateien die Erweiterung .pm, .pl, .t oder .pod, liest alle Einzüge und überprüft, ob in diesen Leerzeichen und Einrückungen enthalten oder Taba. In Veröffentlichungen gibt es auch andere Dateien, aber ich entschied mich darauf beschränken, nur die Dateien explizit beziehen sich auf Perl.

Das Ergebnis dieses Skripts ist die 2 Tabelle in der Datenbank. Hier ist ein Beispiel der Daten:

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)

Nur Leerzeichen, nur Tabs, Tabs und Leerzeichen, und...

Gesamt in der Datenbank über jede Datei in einer Pressemitteilung gibt es die 2 Fahnen:

  • ob die Lücken in der Einrückungen enthalten
  • ob in Taba Einrückungen enthalten

Entsprechend der beiden Flags kann 4 Kombinationen:

  • 11 — Verwendung von Leerzeichen und Tabs
  • 10 — nur Leerzeichen verwendet werden
  • 01 — nur die Tabs
  • 00 — nicht verwendet werden, keine Leerzeichen, keine Tabs

Die ersten drei Varianten ist eine ganz erwarteten Situation, genau Sie wollte ich finden und wissen was beliebter. Aber die Option 00 — "sind weder Tabs noch Leerzeichen" — das ist es, worüber ich überhaupt nicht gedacht, aber es stellte sich heraus, dass auch das kommt vor. "Wie?" — Fragen Sie Sie. Hier ist ein Beispiel.

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)

Der Autor KOHA gibt es ein Release Bundle-KohaSupport-0.31. In dieser Version gibt es 3 Dateien die Erweiterung aus der Liste .pm, .pl, .t oder .pod. Über all diese Dateien in der Datenbank geschrieben, dass in Ihrer Einrückungen enthalten keine Leerzeichen, keine Tabs. Wie kann das sein?

Es stellt sich heraus, alle elementar. Wenn wenn man auf diese Dateien, dann sind Sie einfach nur keine Einrückungen. Hier zum Beispiel der Inhalt der Datei 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.

So dass zusätzlich zu den drei ganz erwarteten Situationen:

  • verwendet werden nur Leerzeichen
  • verwendet werden nur Tabs
  • werden Leerzeichen und Tabs

noch ist die Situation:

  • nicht verwendet werden, keine Leerzeichen und keine Tabs verwendet werden

Daten nach Autoren

Nachdem bei mir gab es die verarbeiteten Daten in der Datenbank habe ich beschlossen, zu sehen für jeden Autor, dass er zum Einrücken verwendet.

Ich hatte erwartet, dass die beliebteste wird nur die Verwendung von Leerzeichen, auf dem zweiten Platz nach der popularitt wird nur die Verwendung von Registerkarten und auf dem Dritten Platz nach der Popularität wird die gleichzeitige Verwendung von Tabs und Leerzeichen.

Aber es stellte sich heraus, dass ich war völlig falsch.

Ich schrieb das Skript . Dieses Skript überprüft, welche Symbole werden von den Autoren in allen Dateien .pm, .pl, .t, .pod, die gibt es in allen Versionen die jetzt auf CPAN.

Hier ist, was passiert:

$ 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%)

Die Daten absolut nicht wie ich erwartet hatte!

  • Mehr als 75% der Autoren verwenden eine Mischung aus Leerzeichen und Tabs zum Einrücken.
  • Nur Leerzeichen auf dem zweiten Platz, etwas mehr als 20%,
  • und Autoren verwenden nur die Tabs weniger Prozent.
  • Die Anzahl der Autoren, die überhaupt keine Einzüge verwenden praktisch die gleiche wie die Anzahl der Autoren verwenden nur die Tabs.

Vollständige Liste aller Autoren in aufgeteilten Gruppen über eine in einer Datei auf GitHub .

Aber jupyter notebook  mit dessen Hilfe wurde diese Kreisdiagramm.

Aber diese Daten gebildet auf alle Veröffentlichungen, die jetzt gibt es auf CPAN. Diese Versionen entstanden im Laufe der letzten 24 Jahre. Vielleicht werden im Laufe der Zeit das Verhältnis irgendwie ändert sich?

Daten über Zeit

Jede Datei mit der Veröffentlichung auf CPAN Zeit der Modifikation ist die Zeit, Wann dieses Release geladen wurde auf CPAN. Diese Daten werden in die Datenbank geladen. Jetzt auf CPAN das älteste Release ist Ioctl-0.5 — er wurde geladen auf 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)

Und in diesem Tag eingegossen wurde ein 8 Releases:

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)

Ich entschied mich zu sehen wie sich die Verteilung der Verwendung verschiedener Symbole für die Einzüge über die Zeit. Dazu schrieb ich ein Skript .

Hier ist die snippet-Dateien mit Daten, die ein Skript erstellt:

$ 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

D.h. über jedes Datum ab 1995-08-20 gibt es Daten darüber wie viele Versionen aufgeschlüsselt nach dem welche Symbole wurden verwendet, um Einrückungen.

  • 00 — in Einrückungen enthalten keine Leerzeichen, keine Tabs
  • 01 — in Einrückungen enthalten werden nur Tabs
  • 10 — in Einrückungen enthalten nur Leerzeichen verwendet werden
  • 11 — in отсутпах verwendet und Tabs und Leerzeichen

Weiter schrieb ich jupyter notebook  in dem Malte Zeitplan. Auf der Grafik habe ich отображаю nicht die absolute Zahl der Veröffentlichungen, aufgeschlüsselt nach Art der Einrückung, und der Prozentsatz der Gesamtzahl der Veröffentlichungen an diesem Tag:

In der Tabelle sehen Sie fast 9 tausend Tage. Zeigt, dass ein Trend vorhanden ist, aber der Zeitplan laut und schlecht drauf ist alles sichtbar. Denn anstelle von Tagen wurde ich группировал Releases für Monat.:

Überraschend aber nachvollziehbar Trend. Die Anzahl der Releases bei denen nur Tabs oder gar nicht verwendet Einrückungen nahezu unverändert, aber der Anteil der Veröffentlichungen in denen nur Leerzeichen verwendet werden ständig wächst und dieses Wachstum geschieht auf Kosten des Anteils der Veröffentlichungen in denen die Mischung von Tabs und Leerzeichen.

Warum wächst "nur Leerzeichen". Hypothese Nummer 1

Ich schaute auf die Daten und ich habe eine andere Hypothese, warum verringert sich die Anzahl der Releases die und die Probleme und Taba. Meine Gedanken über die Perl-Bibliothek Module::Install . Wenn bei der Abfassung seiner Bibliothek verwendet Module::Install, wird in der Pressemitteilung auf CPAN enthalten Dateien aus dieser Bibliothek. Und in diesen Dateien verwendet eine Mischung aus Leerzeichen und Tabs. Hier ist ein Beispiel-Dateien von Module::Install in einer Pressemitteilung 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)

Meine Hypothese ist, dass die Entwickler verwenden Sie Leerzeichen zum Einrücken, aber aufgrund der Tatsache, dass in der Pressemitteilung ist Module::Install dann in der Statistik berücksichtigt und Leerzeichen und Tabs. Module::Install Stahl weniger verwenden (da gab es alle Arten von Dist::Zilla, Dist::Milla, Minilla) und deshalb Module::Install aufgehört, die Verzerrung.

Diese Hypothese zu überprüfen. Zuerst habe ich beschlossen, zu sehen, ob Module::Install werden immer weniger und weniger. Ich baute Zeitplan. Jeder Punkt ist die Anzahl der Releases pro Monat in die verwendete Module::Install. Ist ersichtlich, dass ein Teil der Hypothesen Verne — wirklich, Module::Install Stahl verwenden weniger.

Aber ob die Verwendung von Module::Install so wirkt sich auf den Anteil der Verwendung von Leerzeichen oder Tabs und Leerzeichen für Einrückungen. Um dies herauszufinden, ich habe noch zwei Grafiken. Dies ist die Anzahl der verschiedenen Arten von Einrückungen in Releases nach Monaten. Die erste Grafik nur Versionen in denen Module::Install, auf der zweiten Grafik nur Veröffentlichungen in denen es nicht verwendet wird.

Da sieht man was wirklich, wenn Sie die Bibliothek Module::Install, dann meistens in der Bibliothek verwendet wird es ist ein Gemisch aus Tabs und Leerzeichen.

Und hier ist der Zeitplan auf denen werden nur jene Veröffentlichungen, in denen nicht verwendet Module::Install. Wenn wir diese der Zeitplan mit dem Zeitplan auf dem richten alle Releases, das ist ein Unterschied, aber nichts grundlegend verändert.

Stellt sich heraus, dass die Vermutung falsch ist. Wenn in der Pressemitteilung verwendet Module::Install, dann ist die Veröffentlichung meistens fällt in die Gruppe "Tabs und Leerzeichen", aber wenn Sie berücksichtigen nicht alle Releases in denen Module::Install, ist es immer noch ein Trend — der Anteil der Veröffentlichungen in denen nur Tabs als Einrückung steigt auf Kosten des Anteils der Veröffentlichungen in denen Sie verwendet werden die Mischung aus Tabs und Leerzeichen.

Warum wächst "nur Leerzeichen". Hypothese Nummer 2

Warum immer noch wachsende Zahl von Releases bei denen nur Tabs? Vielleicht gibt es einige so rüber aktiver Autor, die produzieren sehr viele Veröffentlichungen und Autor diese so wirken sich auf die gesamte Statistik?

Ich habe versucht, es zu überprüfen. Malte Chart der Ihnen zeigt, dass der Anteil von Veröffentlichungen in denen wurden nur Leerzeichen, sondern aufgeschlüsselt nach dem ersten Buchstaben des namens des Autors. Wenn du wirklich etwas der Autor leistet einen großen Beitrag über in Allgemeine Statistiken, welche Linie sehr stark war oben. Auf dieser Grafik, die ich sah, alle Linien Plus-minus glatte. So dass die Bestätigung dieser Hypothese habe ich nicht erhalten könnte.

Warum wächst "nur Leerzeichen". Hypothese Nummer 3

Aus den Grafiken ist ersichtlich, dass im Laufe der Zeit immer mehr Releases werden nur Leerzeichen für die Einrückung. Und dieser Anteil wächst aufgrund der Veröffentlichungen in denen das Gemisch verwendet wird Leerzeichen und Tabs.

Meine erste Vermutung war, dass dies aufgrund der Tatsache, dass die Releases früher aktiv enthalten Code library Module::Install verwendet, in denen die Mischung von Leerzeichen und Tabs, diese Bibliothek verwenden Sie immer kleiner, und daher der Anteil der Veröffentlichungen in denen das Gemisch verwendet wird, Registerkarten und Leerzeichen verringert. Es stellte sich heraus, dass ein Teil der Wahrheit drin, aber selbst wenn man von Prüfung alle Releases die Module::Install, der Allgemeine Trend ist nicht zu ändern — trotzdem der Anteil der Veröffentlichungen in denen nur Leerzeichen steigt auf Kosten des Anteils der Veröffentlichungen in denen mit einer Mischung aus Leerzeichen und Tabs.

Meine zweite Hypothese ist, so dass Auswirkungen auf die Statistik sehr kleine Gruppe von sehr aktiven Autoren. Ich konnte eine Bestätigung dieser Hypothese.

Meine Dritte Hypothese besteht darin, dass die Autoren erscheinen mehr als komfortable Text-Editoren und IDE, mit denen einfacher zu verwenden консистентно nur Leerzeichen und keine Mischung von Leerzeichen und Tabs. Aber leider Ideen wie diese Hypothese zu überprüfen habe ich nicht. In die Daten liegen auf dem CPAN gibt keine Informationen darüber, welche der Editor wurde verwendet bei der Erstellung dieser Veröffentlichung. Ich schaute auf die Erscheinungsdaten der beliebtesten Editoren/IDE:

  • Emacs — 1985
  • vim — 1991
  • IntelliJ IDEA — январяь 2001
  • Eclipse — November 2001
  • Sublime Text — Januar 2008
  • Atom — Februar 2014
  • VS Code — April 2015

Daten nach Autoren für das Jahr 2019

Auf dem vorherigen Chart ist ersichtlich, dass im Laufe der Zeit immer mehr Releases werden Leerzeichen und keine Mischung von Tabs mit Leerzeichen. Deshalb habe ich beschlossen, zu sehen, welche die Verteilung der Arten von Einrückungen wird von den Autoren nur auf Grund Ihrer Releases pro Jahr 2019.

Daten aus den Ergebnissen der Arbeit des Skripts :

$ 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%)

Vergleicht man die Daten der Autoren für 2019 und Daten für alle Jahre, so zeigt sich, dass der Prozentsatz der Autoren nur die die Taba nahezu unverändert, aber der Anteil der Autoren verwenden nur die Lücken hat stark zugenommen.

Die Quellen für diese Kreisdiagramm:

Einflussfaktoren auf die Korrektheit der Daten

Für die Bildung von zahlen und Grafiken wurden verwendet alle .tar.gz Releases die auf dem CPAN zu Beginn des Schreibens dieses Artikels, mit Ausnahme des Releases Programmiersprache Perl.

CPAN ermöglicht das löschen von Mitteilungen, Daten, die in diesem Artikel gezeigt gelöschte Versionen werden nicht beteiligt. Es ist unklar, wie stark tauschen Daten wenn berücksichtigen Zeichen Einrücken in bereits gelöschte Versionen. Es ist durchaus möglich, dass die Daten stark verändert. Es gibt ein Archiv backpan  speichert alle Versionen, wenn die dann aber auf CPAN. Also in der Theorie gibt es die Möglichkeit alles neu zu berechnen Anzahl der Releases unter Berücksichtigung der auf CPAN.

Der zweite Punkt, der Einfluss auf die Genauigkeit der Daten ist berücksichtigt, dass die Zeichen Einrückungen nur in Versionen, die waren sind in .tar.gz Archiv. Andere Arten von Archive wurden nicht verwendet. Die überwiegende Mehrheit der Veröffentlichungen ist .tar.gz deshalb wurde eine solche Annahme. Wenn eine Neuberechnung der Daten in allen Archiven werden die Daten sicherlich ändern sich. Ich vermute, dass die änderung wird nicht mehr als ein paar Prozent.

Quellcode

Eine ganze Reihe von Skripten, die verwendet wurden für die Datenerfassung, die Daten selbst und jupyter Notebooks werden alle in einem Repository auf GitHub.

Der Code geschrieben wird — er ist gerade sehr weit von der Vollkommenheit entfernt. Alles, was geschrieben wurde geschrieben mit Ideen so schnell wie möglich ein Ergebnis zu bekommen, anstatt das perfekte Code.

Zusammenfassung

Zum Zeitpunkt des Schreibens dieses Textes im Repository CPAN Perl-Bibliotheken befand sich etwa 135 tausend Releases. Das erste Release wurde vor 24 Jahren (1995-08-20). In diesen Releases befindet sich fast 4 Millionen Dateien mit den Erweiterungen .pm, .pl, .t oder .pod.

Wenn man die Daten für die ganze Zeit, es wird sich herausstellen, dass 76.7%% Autoren im Einrückungen enthalten eine Mischung von Leerzeichen und Tabs, 21.9% verwendet Einrückungen enthalten nur Leerzeichen und 0.7% — nur Tabs.

Aber wenn man die Daten nur für 2019, dann wird immer mehr Autoren, die ausschließlich Leerzeichen verwendet für Einrücken, aber immer noch die Mehrheit verwendet eine Mischung aus Tabs und Leerzeichen (56.4% — nutzen und Tabs und Leerzeichen,Leerzeichen 41.2% — nur Leerzeichen, 1.0% — nur Tabs).

Und wenn man sich den Zeitplan der vernderung der Anteil der Nutzung der verschiedenen Arten von Einrückungen, dann ist ersichtlich, dass der Anteil der Verwendung nur Leerzeichen steigt dieser Anteil steigt auf Kosten des Anteils derer, die Mischung aus Tabs und Leerzeichen zum Einrücken.

Weiß nicht genau, warum dieser Anteil wächst. Es ist möglich, dass dies geschieht aufgrund der Tatsache, dass die Autoren verwenden bequemer Text-Editoren, die es ermöglichen, einfacher und sicherer zu installieren welche Zeichen zum Einrücken verwenden.

Andere Artikel