W tabie lub spacje do wcięcia? Statystyki 3.8 milionom Perl plików utworzonych za 24 lata

Jeden z извечных pytań w programowaniu — jakie znaki są używane w kodzie programu dla wcięć — tabie lub spacje.

Czasami nie ma wyboru. Na przykład, w Makefile należy użyć w tabie. W języku programowania go istnieje oficjalna narzędzie gofmt który formatuje kod i narzędzie używając karty do wcięć. B ezoterycznych języku programowania Whitespace w tabie i luki nie da się zastąpić przyjaciel innym. Ale wiele języków programowania nie narzucają wybór, a pozwalają programiście samodzielnie zdecydować, jakie znaki są używane.

Istnieje dość powszechne przekonanie jakie znaki są używane do wcięć. Zdanie następujące: nie ważne co używać, najważniejsze консистентность. Jeśli używasz karty, to zawsze trzeba z nich korzystać. Jeśli wykorzystujesz spacje, należy używać tylko spacje i nie używać w tabie.

Jest nawet komiks komiks komiks na ten temat:

(dwie osoby zupełnie несогласны ze sobą, czy chcesz korzystać z karty lub spacje, ale absolutnie zgadzam się, że trzeba użyć tylko jedno):

A jak się mają sprawy w realnym świecie? Co tak naprawdę służy?

Jest to dość proste, aby dowiedzieć się. Trzeba wziąć kody źródłowe programów, policzyć jakie symbole są używane i zobacz na wyniki.

Ten artykuł to wynik małego badania o korzystanie z kart i spacji w świecie języka programowania Perl. Istnieje ogromne repozytorium w którym przechowywane są Perl biblioteki CPAN. Wgrałem wszystkie wersje wszystkich bibliotek, które teraz są na CPAN (było ich około 135 tysięcy) i uznał jakie znaki używane do wcięć.

Zanim zaczniesz czytać dalej, proponuję na chwilę zastanowić się i spróbować założenie, że bardziej do wcięcia:

  • w tabie
  • spacje
  • lub mieszanka kart i spacji

?

Pisanie kodu

Tak więc, cel. Trzeba wziąć wszystkie biblioteki CPAN i sprawdzić co jest wykorzystywane do wcięcia.

Na początek trzeba pobrać pełna CPAN. Odbywa się to za pomocą jednego polecenia:

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

3 godziny i CPAN ściągnięcia. Zajmuje około 27 GB.

CPAN to zestaw plików, które są zorganizowane w pewną strukturę. Oto fragment:

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

W tym przykładzie AADLER — to login autora, a Games-LogicPuzzle-0.10.tar.gz i Games-LogicPuzzle-0.12.tar.gz — uwalnia.

Teraz na CPAN jest ponad 7 tysięcy autorów, którzy pobrali biblioteki CPAN. Aby nie przechowywać wszystkie 7 tysięcy folderów w jednym folderze, dodano jeszcze kilka poziomów (system kontroli wersji git przechowuje swoje dane w podobny sposób).

Na CPAN można załadować biblioteki, które są pakowane różne archiwizujące.

Zacząłem od tego, że uznał ilość różnych rozszerzeń plików w folderze CPAN/authors/id/. Oto skrypt i wynik jego pracy . Top rozszerzeń archiwów:

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

.tar.gz wygrywa z taką przewagą, że pomyślałem, że wystarczy policzyć jakie symbole są używane w отступах tylko w bibliotekach, które pakowane w .tar.gz

Dalej napisałem kilka skryptów. Początkowo mi się nie do końca było jasne, w jakiej formie chcę uzyskać dane o табах i пробелах, więc postanowiłem zrobić system składający się z wielu komponentów. Najpierw wstępnie przetworzyć wszystkie 135 tysięcy plików z wydaniami i umieścić dane o табах i пробелах do bazy danych. Spodziewam się że to będzie długo. A dalej korzystać z danych z bazy danych, aby szybko uzyskać dane w różnych formatach.

W końcu okazało się skrypt fill_db . Ten skrypt zalewał dane w bazie nieco ponad pięć godzin. Ale te pięć godzin to gdy już wszystko było debugger. Nie pierwszy raz skrypt do tego przyczynił. Podstawowe problemy były z Unicode. Najpierw był problem z wydaniem μ-0.01.tar.gz autora APEIRON, potem były problemy z plikami typu t/words_with_ß.dat z premiery Lingua-DE-ASCII-0.06 autora BIGJ. Ale w końcu wszystkie problemy zostały rozwiązane i skrypt pomyślnie przeszedł na zawsze .tar.gz prasowe.

Skrypt idzie dla wszystkich .tar.gz plików w CPAN. Rozpakowuje .tar.gz do folderu tymczasowego. Znajdzie w tym folderze temp wszystkie pliki, których rozszerzenia .pm, .pl, .t lub .pod, czyta wszystkie wcięcia i sprawdzić jeśli w tych отступах spacji i / lub w tabie. W wydaniach są i inne pliki, ale postanowiłem ograniczyć się tylko pliki, które wyraźnie odnoszą się do języka Perl.

Wynik działania tego skryptu jest 2 w tabeli w bazie danych. Oto przykład danych:

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)

Tylko spacje, tylko taba, taba i spacje, i...

Ogółem w bazie danych o każdy plik w wersji 2 flagi:

  • czy używane są luki w отступах
  • czy w tabie w отступах

Odpowiednio z dwóch flag może być 4 kombinacje:

  • 11 — używane i spacje i tabie
  • 10 — używane tylko spacje
  • 01 — są używane tylko w tabie
  • 00 — nie są używane ani spacji, ani w tabie

Pierwsze trzy opcje — to zupełnie oczekiwane sytuacji, to właśnie je chciałem znaleźć i dowiedzieć się, co popularne. A oto wariant 00 — "nie są używane ani karty, ani luki" — to jest to o czym ja zupełnie nie myślałem, ale okazało się, że tak też się zdarza. "Jak?" — pytasz. Oto przykład.

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)

U autora KOHA jest wydanie Bundle-KohaSupport-0.31. W tej wersji są 3 pliki, których rozszerzenia z listy .pm, .pl, .t lub .pod. O wszystkie te pliki w bazie danych jest napisane że w ich отступах nie ma spacji, ani kart. Jak tak może być?

Okazuje się, że wszystkie elementarne. Jeśli spojrzeć na te pliki, to w nich po prostu nie ma wcięcia. Oto, na przykład, zawartość pliku 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.

Tak że oprócz trzech zupełnie oczekiwanych sytuacjach:

  • są używane tylko spacje
  • są używane tylko w tabie
  • używane i spacje i tabie

jeszcze zdarza się sytuacja:

  • nie są używane ani spacji i nie są używane w tabie

Dane autorów

Po tym, jak pojawiły się u mnie przetworzone dane w bazie postanowiłem zobaczyć dla każdego autora, że on używa wcięć.

Spodziewałem się, że najbardziej popularne jest stosowanie tylko spacji, na drugim miejscu pod względem popularności będzie używać tylko kart, a na trzecim miejscu pod względem popularności jest jednoczesne korzystanie z kart i spacji.

Ale okazało się, że całkowicie się pomyliłem.

Napisałem skrypt . Ten skrypt sprawdził jakie symbole są używane przez autorów we wszystkich plikach .pm, .pl, .t, .pod, które jest we wszystkich wydaniach, które teraz są na CPAN.

Oto co się stało:

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

Dane zupełnie nie takie jak się spodziewałem!

  • Więcej 75% autorów używają mieszanka spacji i kart do wcięć.
  • Tylko spacje na drugim miejscu, nieco ponad 20%,
  • a autorów którzy korzystają tylko karty mniej procent.
  • Ilość autorów, którzy w ogóle nie korzystają z wcięcia jest prawie taka sama jak liczba autorów którzy korzystają tylko karty.

Pełna lista wszystkich autorów o podziale grup jest w pliku na GitHub .

A oto jupyter notebook  za pomocą którego został zbudowany ten wykres kołowy.

Ale to dane wygenerowane dla wszystkich prasowe, które teraz są na CPAN. Te wersje powstawały na przestrzeni ostatnich 24 lat. Może być z biegiem czasu stosunek jak to się zmienia?

Dane dla czasu

U każdego pliku z wydaniem na CPAN czas modyfikacji — to czas, kiedy z tego wydania został załadowany na CPAN. Te dane przesłane do bazy danych. Teraz na CPAN najstarszy wydanie — to Ioctl-0.5 — on został pobrany w 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)

Przy czym w tym dniu był wlany raz 8 wydań:

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)

Postanowiłem zobaczyć, jak zmienia się rozkład korzystanie z różnych znaków odstępu czasu. Dla tego napisałem skrypt .

Oto fragment pliki z danymi, który stworzył skrypt:

$ 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

Czyli o każdy dzień począwszy od 1995-08-20 są dane o tym ile było wydań z podziałem na tym jakie znaki używane do wcięć.

  • 00 — w отступах nie ma spacji, ani kart
  • 01 — w отступах są używane tylko w tabie
  • 10 — w отступах są używane tylko spacje
  • 11 — w отсутпах są używane i w tabie i spacje

Dalej napisałem jupyter notebook  w którym rysował wykres. Na wykresie ja отображаю nie bezwzględna liczba wydań w podziale według rodzaju wcięcia, a procent od ogólnej liczby wydań w ten dzień:

Na wykresie prawie 9 tysięcy dni. Widać, że jest trend, ale wykres jest głośny i na nim źle, wszystko widać. Dlatego zamiast dni stałem się группировал wersje na miesiąc.:

Niesamowite, ale uwidacznia się trend. Ilość wydań w których używane są tylko karty lub w ogóle nie są wcięcia praktycznie się nie zmienia, ale udział wydawnictw w których są używane tylko spacje stale rośnie, a wzrost ten odbywa się kosztem udziału wydań, w których stosuje się mieszankę kart i spacji.

Dlaczego rośnie "tylko spacje". Hipoteza nr 1

Spojrzałem na dane i u mnie powstała jedna hipoteza czemu zmniejsza się ilość wydań w których jest używany i problemy i tabie. Moja myśl o Perl biblioteki Module::Install . Jeśli podczas pisania swojej biblioteki służy Module::Install, to w wersji na CPAN wymagają pliki z tej biblioteki. A w tych plikach mieszanina jest używana, spacji i kart. Oto przykład pliku od Module::Install w komunikacie 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)

Moja hipoteza jest taka, że deweloperzy wykorzystują luki do wcięć, ale ze względu na fakt, że w komunikacie znajduje Module::Install to w statystykach uwzględniane są i spacje i tabie. Module::Install stały się mniej użyć (tak jak pojawiły się różnego rodzaju Dist::Zilla, Dist::Milla, Minilla) i dlatego Module::Install przestał dawać zniekształcenia.

Tę hipotezę trzeba sprawdzić. Najpierw postanowiłem sprawdzić, czy rzeczywiście Module::Install są używane coraz mniej i mniej. Zbudowałem wykres. Każdy punkt — jest to liczba wydań w miesiącu których używany w Module::Install. Widać, że część hipotezy verne ' a — naprawdę, Module::Install zaczęli używać mniej.

Ale czy rzeczywiście korzystanie z Module::Install tak wpływa na udział spacji lub kart i spacji, aby wcięcia. Aby się tego dowiedzieć, narysowałem jeszcze dwa wykresy. Jest to liczba różnych typów wcięcia w wydaniach przez miesiąc. Na pierwszym wykresie tylko wersje w których jest używany Module::Install, na drugim wykresie tylko wersje w których nie jest on używany.

Tu widać, że naprawdę, jeśli używana jest biblioteka Module::Install, to najczęściej w bibliotece służy to właśnie mieszanka kart i spacji.

A oto harmonogram na których wyświetlane są tylko te produkty, w których nie jest używany Module::Install. Jeśli porównać ten wykres z wykresem, na którym zwracają się wszystkie wersje, to różnica jest, ale nic się zasadniczo nie zmienia.

Okazuje się, że hipoteza jest błędna. Jeśli w komunikacie używany Module::Install, to wydanie najczęściej trafia do grupy "w tabie i luki", ale jeśli nie brać pod uwagę wszystkie wersje w których jest używany Module::Install, to nadal jest trend — udział wydawnictw w których używane są tylko karty jako wcięć rośnie kosztem udziału wydań w której są używane mieszanka kart i spacji.

Dlaczego rośnie "tylko spacje". Hipoteza nr 2

Dlaczego wciąż rośnie liczba wydań w których są używane tylko w tabie? Może jest jakiś super aktywny autor, które produkują bardzo wiele wydań i te autor tak wpływają na całe statystyki?

Próbowałem to sprawdzić. Narysował wykres, na którym wyświetlany jest udział wydawnictw w których były używane tylko spacje, ale z podziałem na pierwszej litery nazwiska autora. Gdyby rzeczywiście jakiś autor dokonał ponad duży wkład w ogólne statystyki, to jakaś linia bardzo ostro szła by w górę. Na tym wykresie, który zobaczyłem, wszystkie linie plus-minus gładkie. Tak, że potwierdzenie tej hipotezy nie mógł dostać.

Dlaczego rośnie "tylko spacje". Hipoteza nr 3

Na wykresach widać, że z biegiem czasu coraz więcej wydawnictw, w których są używane tylko spacje do wcięć. I udział ten rośnie kosztem wydań, w których mieszanina jest używana spacji i kart.

Moje pierwsze przypuszczenie było, że dzieje się tak z powodu tego, że w wersje wcześniej aktywnie włączały kod biblioteki Module::Install, w których stosowano mieszaninę spacji i kart, tę bibliotekę używają coraz mniej, a więc udział wydawnictw w których mieszanina jest używana kart i spacji zmniejsza się. Okazało się, że część prawdy w tym jest, ale nawet jeśli usunie się z rozpatrzenia wszystkie produkty w których jest używany Module::Install, ogólny trend to nie zmienia — nadal udział wydawnictw w których tylko spacje rośnie kosztem udziału wydań, w których mieszanina jest używana, spacji i kart.

Moje drugie przypuszczenie, że tak wpływają na statystyki bardzo mały zestaw bardzo aktywnych autorów. Nie mogłem znaleźć potwierdzenia tej hipotezy.

Moja trzecia hipoteza polega na tym, że u autorów pojawiają się bardziej wygodne edytory tekstu i IDE, dzięki którym staje się łatwiejsze w użyciu консистентно tylko spacje, a nie mieszanka spacji i kart. Ale, niestety, pomysłów jak sprawdzić tę hipotezę nie mam. W danych, które leżą na CPAN nie ma informacji o tym jaki edytor został wykorzystany przy tworzeniu tego wydania. Spojrzałem na daty wydania popularnych edytorów/IDE:

  • Emacs — 1985
  • vim — 1991
  • IntelliJ IDEA — январяь 2001
  • Eclipse — listopad 2001
  • Sublime Text — styczeń 2008
  • Atom — luty 2014
  • VS Code — kwiecień 2015

Dane autorów za rok 2019

Na poprzednich wykresach widać, że z biegiem czasu coraz więcej wydawnictw, w których są używane spacje, a nie mieszankę kart ze spacjami. Więc postanowiłem sprawdzić rozkład jakie rodzaje wcięć używany przez autorów na podstawie ich wydawnictw za rok 2019.

Dane z wyników pracy skryptu :

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

Jeśli porównamy dane dla autorów za rok 2019 i dane za cały rok, to widać, że procent autorów, którzy używają tylko karty praktycznie nie zmienia się, ale udział autorów, którzy korzystają tylko spacje mocno wzrosła.

Źródła dla tego wykresu kołowego:

Czynniki wpływające na poprawność danych

Do generowania liczb i wykresów zostały wykorzystane wszystkie .tar.gz prasowe, które były na CPAN w momencie rozpoczęcia pisania tego artykułu, oprócz wydań samego języka programowania Perl.

CPAN pozwala usuwać produkty, w danych, które są pokazane w tym artykule usunięte wersje nie uczestniczyli. Nie jest jasne, jak bardzo zmieni dane, jeśli wziąć pod uwagę znaki wcięcia w już usuniętych wydaniach. Możliwe jest, że dane zamienią się mocno. Istnieje archiwum backpan  który przechowuje wszystkie wersje, które kiedykolwiek były na CPAN. Więc w teorii jest możliwość policzyć wszystkie liczby z uwzględnieniem wydań, których już nie na CPAN.

Drugi moment, który wpływa na dokładność danych jest to, że uwzględnia znaki wcięcia tylko w wydaniach, które były pakowane w .tar.gz archiwum. Inne typy archiwa nie były używane. Zdecydowana większość wydań — to .tar.gz dlatego zrobił to założenie. Jeśli przeliczyć dane dla wszystkich archiwów dane na pewno ulegną zmianie. Przypuszczam, że zmiana będzie nie więcej niż kilka procent.

Kod źródłowy

Cały zestaw skryptów, które zostały wykorzystane do zbierania danych, same dane i jupyter laptopy dostępne są w repozytorium na GitHub.

Kod który jest napisany — jest bardzo daleki od doskonałości. Wszystko, co napisane było napisane z pomysłów jak najszybciej uzyskać wyniki, a nie stworzyć doskonały kod.

Cv

W chwili pisania tego tekstu w repozytorium Perl biblioteki CPAN znajdowało się około 135 tysięcy wydań. Pierwsze wydanie powstał 24 lata temu (1995-08-20). W tych wydaniach znajduje się prawie 4 miliony plików z rozszerzeniem .pm, .pl, .t lub .pod.

Jeśli wziąć pod uwagę dane za cały czas, to wyjdzie na to że 76.7%% autorów w отступах używają mieszanka spacji i kart, 21.9% używa отступах tylko spacje, a 0.7% — tylko w tabie.

Ale jeśli wziąć pod uwagę tylko dane z 2019 roku, to coraz więcej autorów kto używa tylko spacje wcięć, ale i tak większość wykorzystuje mieszankę kart i spacji (56.4% — używają i w tabie i spacje,spacje 41.2% — tylko spacje, 1.0% — tylko w tabie).

I jeśli spojrzeć na wykres zmiany udziałów korzystania z różnych typów wcięć, to widać, że udział stosowania spacji rośnie i udział ten rośnie kosztem udziału tych, którzy wykorzystuje mieszankę kart i spacji do wcięć.

Dokładnie nie wiadomo, dlaczego ten udział rośnie. Możliwe że jest to spowodowane tym, że autorzy używają bardziej wygodne edytory tekstu, które pozwalają na łatwiejsze i bezpieczniejsze zainstalować jakie znaki są używane do wcięć.

Inne artykuły