Tab hoặc không gian cho xẹp? Số liệu thống kê trên 3.8 triệu tập tin Perl tạo ra trong 24 năm

Một trong những câu hỏi vĩnh cửu trong chương trình — mà nhân vật để sử dụng trong chương trình mã cho xẹp — tab hoặc không gian.

Đôi khi không có sự lựa chọn. Ví dụ, tại Makefile chắc chắn để sử dụng tab. Trong ngôn ngữ lập trình go , có một chính thức ích gofmt mã đó dạng và tiện ích này sử dụng thẻ cho thụt. B bí truyền ngôn ngữ Whitespace tab và không gian, không thể thay thế mỗi khác. Nhưng nhiều ngôn ngữ không áp đặt một sự lựa chọn, và cho phép lập trình viên để quyết định mà các nhân vật để sử dụng.

Có khá nổi tiếng ý kiến của những nhân vật nào để sử dụng cho thụt. Ý kiến là những điều sau đây: nó không quan trọng cho dù để sử dụng trọng nhất quán. Nếu bạn sử dụng tab, bạn luôn cần phải sử dụng chúng. Nếu sử dụng khoảng không, chỉ sử dụng không gian và không bao giờ sử dụng tab.

Thậm chí có những truyện comic truyện tranh về chủ đề này:

(hai người hoàn toàn đồng ý với nhau, cho dù sử dụng thẻ hoặc không gian, nhưng hoàn toàn đồng ý rằng nó là cần thiết để chỉ sử dụng một):

Làm thế nào là những thứ trong thế giới thực? Những gì đang thực sự sử dụng?

Nó thật dễ dàng để tìm ra. Cần phải có mã nguồn của chương trình, tính toán những gì nhân vật được sử dụng và nhìn vào kết quả.

Điều này là kết quả của một chút nghiên cứu về việc sử dụng các không gian trong thế giới của Perl ngôn ngữ. Đó là một kho mà các cửa hàng Perl thư viện CPAN. Tôi tải về tất cả những phiên bản của tất cả các thư viện đó đang ở trên CPAN (đã có khoảng 135 ngàn) và quyết định mà các nhân vật được sử dụng cho xẹp.

Trước khi bạn đọc thêm nữa, tôi đề nghị cậu một phút để suy nghĩ và cố gắng để giả định rằng phổ biến cho xẹp:

  • Hạt nhân
  • khoảng cách
  • hoặc một hỗn hợp của tab và không gian

?

Viết mã

Vì vậy, thách thức là rõ ràng. Bạn cần phải có tất cả các thư viện từ CPAN và kiểm tra những gì được sử dụng để thụt vào.

Đầu tiên, bạn cần phải tải về toàn bộ CPAN. Điều này được thực hiện với một lệnh:

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

3 giờ và về CPAN. Nó tung lên về 27 GB.

CPAN là một bộ sưu tập của các tập tin trong tổ chức một cấu trúc. Đây là một đoạn:

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

Trong ví dụ này, AADLER là tên của tác giả, và Games-LogicPuzzle-0.10.tar.gzGames-LogicPuzzle-0.12.tar.gz là phát hành.

Bây giờ CPAN có hơn 7 hàng ngàn của tác giả những người đã tải về các thư viện trên CPAN. Để không để lưu trữ tất cả 7 người hàng ngàn thư mục trong cùng một mục thêm một vài chi tiết cấp độ (phiên bản kiểm soát hệ thống git cửa hàng dữ liệu của mình theo một cách tương tự).

Trên CPAN, bạn có thể tải thư viện đó được đóng Gói với nhau nén.

Tôi bắt đầu với những gì tính số lượng các tập tin khác nhau mở rộng trong thư mục CPAN/authors/id/. Đây là kịch bản và kết quả của công việc của mình . Đầu mở rộng của lưu trữ:

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

.tar.gz thắng như vậy với một lợi nhuận mà tôi đã quyết định rằng nó sẽ có đủ để đếm những gì nhân vật được sử dụng để thụt chỉ là thư viện đã đóng Gói trong .tar.gz

Sau đó, tôi đã viết một vài kịch bản. Ban đầu, tôi đã không kết thúc được rõ ràng những gì tôi muốn nhận được dữ liệu về tab và không gian, vì vậy tôi quyết định làm một hệ thống bao gồm một số thành phần. Đầu tiên, trước khi quá trình tất cả 135 ngàn tin với bản và đưa thông tin về thẻ và không gian vào một cơ sở dữ liệu. Hy vọng nó sẽ được lâu dài. Và sau đó, sử dụng các dữ liệu từ các cơ sở dữ liệu để nhanh chóng có được dữ liệu khác nhau dạng.

Cuối cùng, các kịch bản fill_db . Kịch bản này đầy trong cơ sở dữ liệu một ít hơn năm giờ. Nhưng những năm giờ là khi tất cả mọi thứ đã được sửa lỗi. Không phải lần đầu tiên kịch bản làm việc. Vấn đề chính là với Mỹ. Đầu tiên đã có những vấn đề với việc phát hành μ-0.01.tar.gz giả APEIRON, sau đó đã có những vấn đề với các tập tin t/words_with_ß.dat từ việc phát hành Lingua-DE-ASCII-0.06 giả BIGJ. Nhưng cuối cùng tất cả vấn đề đã được giải quyết, và các kịch bản thực hiện thành công, nó qua tất cả .tar.gz phát hành.

Kịch bản là, tất cả .tar.gz các tập tin trong CPAN. Đem đồ đạc vô .tar.gz các thư mục tạm thời. Tìm thấy trong này tạm thời, thư mục tất cả các tập tin có ích .pm, .pl, .t hay .pod, đọc tất cả các thụt vào và kiểm tra nếu các vết lõm và không gian hoặc tab. Trong những phiên bản có khác các tập tin, nhưng tôi quyết định để được giới hạn chỉ để tin rằng rõ ràng liên quan đến Perl.

Các kết quả của kịch bản này được 2 bảng trong cơ sở dữ liệu. Đây là một ví dụ của các dữ liệu:

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)

Chỉ là không gian, chỉ tab, tab và không gian, và...

Tổng cộng trong cơ sở dữ liệu về từng thấy trong có 2 cờ:

  • bạn sử dụng gian để thụt
  • bạn sử dụng các vết lõm

Tương ứng của hai lá cờ có thể là 4 kết hợp:

  • 11 — sử dụng không gian và tab
  • 10 — chỉ sử dụng gian
  • 01 — chỉ sử dụng thẻ
  • 00 — không được sử dụng không gian hoặc tab

Đầu tiên ba lựa chọn hoàn toàn là một dự kiến tình hình, mà tôi muốn tìm để tìm ra cái gì là phổ biến. Nhưng sự lựa chọn 00 — "đừng sử dụng không tab cũng không gian" — đó là những gì tôi đã suy nghĩ nhưng hóa ra rằng điều này đang xảy ra. "Làm thế nào?" — anh sẽ hỏi. Đây là một ví dụ.

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)

Các tác giả KOHA đã phát hành một Bundle-KohaSupport-0.31. Trong này có 3 tập tin đó đã mở rộng từ danh sách .pm, .pl, .t hoặc .pod. Về tất cả những tập tin trong cơ sở dữ liệu viết trong của họ thụt không có không gian, không, tab. Làm thế nào có thể này được?

Nó chỉ ra rằng tất cả tiểu học. Nếu bạn nhìn vào những tập tin, họ chỉ đơn giản là không có vết lõm. Ví dụ, các nội dung của các tập tin 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.

Vì vậy, ngoài ba tình huống bất ngờ:

  • chỉ sử dụng gian
  • chỉ sử dụng thẻ
  • được sử dụng và không gian và tab

cũng là tình hình:

  • không sử dụng bất kỳ không gian và không sử dụng thẻ

Dữ liệu tác giả

Sau khi tôi đã xử lý dữ liệu trong cơ sở dữ liệu, tôi quyết định xem từ mỗi giả ông sử dụng cho đệm.

Tôi hy vọng rằng sự phổ biến nhất sẽ được sử dụng chỉ không gian, các vị trí thứ hai của sự nổi tiếng sẽ được sử dụng chỉ tab, và các vị trí thứ ba ở phổ biến được sử dụng đồng thời của các không gian.

Nhưng hóa ra tôi đã hoàn toàn sai.

Tôi đã viết kịch bản . Này kịch bản kiểm tra những ký tự được sử dụng bởi những tác giả cho tất cả các tập tin .pm, .pl, .t, .pod, đó là tất cả họ phát hành mà bây giờ là trên CPAN.

Đây là những gì đã xảy ra:

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

Dữ liệu là hoàn toàn không như tôi mong đợi!

  • Hơn 75% trong các tác giả sử dụng một hỗn hợp của không gian và thẻ cho thụt.
  • Chỉ là không gian ở vị trí thứ hai, nhẹ hơn 20%,
  • và các tác giả những người chỉ sử dụng thẻ ít hơn phần trăm.
  • Số các tác giả những người không sử dụng đệm là gần giống như số của tác giả những người chỉ sử dụng tab.

Danh sách đầy đủ tất cả các tác giả trong các sự cố của các đội Chuyên nghiệp có trong các tập tin trên điện thoại .

Nhưng jupyter cho biết máy tính xách tay  bởi được xây dựng các biểu đồ.

Nhưng dữ liệu này được tạo ra trong tất cả bản mà bây giờ là trên CPAN. Những phát hành đã được tạo ra trong 24 năm qua. Có thể là với thời gian tỷ lệ bằng cách nào đó thay đổi?

Thời gian

Tất cả các tập tin phát hành trên CPAN, các sửa đổi thời gian là thời gian khi điều hành đã được tải lên CPAN. Những dữ liệu đang được tải trong cơ sở dữ liệu. Bây giờ già CPAN là Ioctl-0.5 — nó đã được tải lên 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)

Và ngày này đã được lấp đầy từ 8 chí:

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)

Tôi quyết định để xem như thế nào giấy phép trong việc sử dụng các nhân vật khác nhau cho vết lõm vào thời điểm đó. Này, tôi đã viết kịch bản .

Đây là một đoạn của dữ liệu, tập tin người đã tạo ra kịch bản:

$ 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

Tức là cho mỗi ngày, bắt đầu với 1995-08-20 cung cấp thông tin về bao nhiêu đã được phát hành bởi những thực tế những gì nhân vật được sử dụng cho thụt.

  • 00 — ở lề, không có không gian, không thẻ
  • 01 — trong thụt chỉ được sử dụng thẻ
  • 10 — để thụt chỉ sử dụng gian
  • 11 — trong Atsuta sử dụng thẻ và không gian

Sau đó, tôi đã viết jupyter cho biết máy tính xách tay  mà đã vẽ biểu đồ. Trên biểu đồ tôi hiển thị các tuyệt đối số phát hành của loại hình của vết lõm, và phần trăm trên tổng số phát hành vào ngày này:

Biểu đồ cho thấy gần 9 ngàn ngày. Nó là bằng chứng rằng có một xu hướng, nhưng biểu đồ là ồn ào và nó là xấu bạn có thể thấy mọi thứ. Bởi vì thay vì những ngày tôi là nhóm phát hành vào năm.:

Nhưng đó là một ngạc nhiên xu hướng. Số phát hành mà chỉ sử dụng thẻ hay không thụt hầu như không thay đổi, nhưng tỷ lệ bản mà chỉ sử dụng gian liên tục phát triển và tăng trưởng này là do số phát hành mà sử dụng một hỗn hợp của các không gian.

Tại sao là "chỉ không gian". Giả thuyết số 1

Tôi nhìn vào những dữ liệu và tôi đã có một giả thuyết về lý do tại sao giảm số phát hành đó sử dụng và vấn đề tab. Tôi nghĩ về Perl thư viện Module::Cài Đặt . Nếu khi viết của bạn thư viện sử dụng Module::Cài đặt, những CPAN hành bao gồm các tập tin từ thư viện này. Và trong những tập tin, sử dụng một hỗn hợp của không gian và tab. Đây là một ví dụ tập tin từ một mô-Đun::Cài đặt phát hành 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)

Giả thuyết của tôi là nhà phát triển sử dụng không gian cho xẹp, nhưng do thực tế là, trong việc phát hành là mô-Đun::Cài đặt được ghi lại trong một thống kê, và không gian và tab. Module::Cài đặt ít thép để sử dụng (như đã có tất cả các Quận::Khủng Quận::Monica, Minilla), và do đó, mô-Đun::Cài đặt cho dừng lại biến dạng.

Giả thuyết này cần phải được kiểm tra. Đầu tiên, tôi đã quyết định để xem nếu Module::Cài đặt được sử dụng và ít ít. Tôi xây dựng một lịch trình. Mỗi điểm là số phát hành của tháng mà sử dụng Module::Cài đặt. Bạn có thể thấy đó là một phần của giả thuyết là chính xác — thật vậy, mô-Đun::Cài đặt thép sử dụng ít.

Nhưng cho dù việc sử dụng Module::Cài đặt ảnh hưởng đến việc sử dụng không gian hoặc tab và không gian cho thụt vào. Để tìm ra, tôi đã thu hút hai đồ họa. Là số loại khác nhau của đệm phát hành tháng. Đầu tiên, biểu đồ chỉ phát hành mà sử dụng Module::Cài đặt, trên biểu đồ thứ hai chỉ phát hành mà không được sử dụng.

Ở đây, bạn có thể thấy điều đó thật vậy, nếu bạn sử dụng một thư viện Module::Cài đặt, thường thư viện được sử dụng nó là một hỗn hợp của các không gian.

Và đây là một biểu đồ mà hiển thị chỉ có những phát hành mà không sử dụng Module::Cài đặt. Nếu bạn so sánh này lịch trình với các lịch trình đó áp dụng cho tất cả chí, sau đó, có một khác biệt, nhưng không có gì thay đổi.

Nó chỉ ra rằng, các giả thuyết là sai. Nếu các hành sử dụng Module::Cài đặt, sau đó phát hành thường rơi vào nhóm "tab và không gian", nhưng nếu bạn không tài khoản cho tất cả phát hành mà sử dụng Module::Cài đặt, bạn vẫn còn có một xu hướng tỷ lệ bản mà chỉ sử dụng thẻ như vết lõm tăng tại các chi phí của số phát hành mà đang sử dụng một hỗn hợp của các không gian.

Tại sao là "chỉ không gian". Giả thuyết thứ 2

Tại sao tất cả đều giống nhau, một ngày càng tăng số phát hành mà chỉ sử dụng tab? Có thể có một số dư thừa một tác giả hoạt động sản xuất nhiều chí và các tác giả có cái hiệu ứng đó với tất cả số liệu thống kê?

Tôi đã cố gắng để kiểm tra xem nó. Đã vẽ một bản đồ trong đó cho thấy sự chia sẻ số phát hành mà chỉ sử dụng các không gian, nhưng lá thư đầu tiên của tên tác giả. Nếu thật vậy, một số các tác giả thực hiện qua một đóng góp lớn để tổng thống kê, đó là loại dòng rất mạnh lên. Trên biểu đồ tôi nhìn thấy, tất cả đường dây đều là cộng trừ thậm chí. Vì vậy, xác nhận giả thuyết này, tôi không làm đã có thể có được.

Tại sao là "chỉ không gian". Giả thuyết số 3

Đồ thị cho qua thời gian trở nên nhiều hơn và nhiều hơn nữa phát hành mà chỉ có không gian cho xẹp. Và chia sẻ này được phát triển ở các chi phí của các hành trong đó là một hỗn hợp không gian và tab.

Đầu tiên của tôi, giả định được rằng việc này sẽ xảy ra do thực tế rằng trong chí trước khi tích cực bao gồm thư viện mã Module::Cài đặt mà sử dụng một hỗn hợp của không gian và tab, thư viện này sử dụng nhỏ hơn, và vì vậy, tỷ lệ bản mà sử dụng một hỗn hợp của tab và khoảng trống giảm. Đó là một phần của sự thật ở đây, nhưng thậm chí nếu chúng ta hủy bỏ từ xem lại tất cả phát hành mà sử dụng Module::Cài đặt, những xu hướng chung không thay đổi — vẫn còn, chia sẻ của các hành trong đó chỉ khoảng cách đang lớn ở các chi phí của các cổ phần của việc phát hành mà sử dụng một hỗn hợp của không gian và tab.

Thứ hai của tôi đoán là điều đó ảnh hưởng đến những số liệu thống kê của một rất nhỏ bộ rất hoạt động tác giả. Tôi không thể tìm thấy xác nhận giả thuyết này.

Thứ ba của tôi, giả thuyết là những tác giả xuất hiện thuận tiện hơn biên tập văn bản và ĐỂ đó là dễ dàng hơn để sử dụng mỡ chỉ không gian, không phải là một hỗn hợp của không gian và tab. Nhưng, thật không may, những ý tưởng làm thế nào để kiểm tra giả thuyết này tôi có. Dữ liệu mà nằm trên CPAN không có thông tin về những gì biên tập viên đã được sử dụng để tạo ra điều hành. Tôi nhìn vào những ngày phát hành cho biên tập viên nổi tiếng/TỪ

  • Emacs — năm 1985
  • vim — năm 1991
  • IntelliJ IDEA — januaray năm 2001
  • Eclipse tháng mười năm 2001
  • Sublime Text — tháng năm 2008
  • Atom — tháng năm 2014
  • VS Code tháng tư năm 2015

Dữ liệu cho 2019

Trên đó, đồ cho thấy rằng thời gian trở nên nhiều hơn và nhiều hơn nữa phát hành mà không gian và không trộn tab với không gian. Vì vậy, tôi quyết định phải nhìn vào sự phân bố của những loại lề được sử dụng bởi các nhà văn chỉ vào tài khoản của họ phát hành vào năm 2019.

Dữ liệu từ những kết quả của chạy kịch bản :

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

Nếu chúng tôi so sánh các dữ liệu cho 2019 và cung cấp dữ liệu cho tất cả năm, chúng tôi thấy rằng tỷ lệ của tác giả, mà chỉ sử dụng thẻ không thay đổi, nhưng tỷ lệ tác giả những người chỉ sử dụng không gian đã tăng đáng kể.

Các nguồn tin cho chiếc bánh này biểu đồ:

Yếu tố ảnh hưởng đến giá trị của dữ liệu

Cho sự hình thành số và đồ thị đã sử dụng tất cả .tar.gz phát hành đó là CPAN tại thời điểm này, ngoài ra Perl ngôn ngữ.

CPAN cho phép anh để loại bỏ những cáo trong dữ liệu cho thấy trong bài này từ xa chí đã không tham gia. Nó vẫn chưa rõ bao nhiêu sẽ thay đổi nếu các dữ liệu xem xét các nhân vật đệm đã loại bỏ những cáo. Nó có thể rằng các dữ liệu sẽ thay đổi nhiều. Đó là một kho lưu trữ backpan  mà tất cả các cửa hàng phát hành ai đã từng được trên CPAN. Vì vậy, theo lý thuyết đó là một khả năng để chuyển đổi tất cả dựa trên số lượng các phiên bản đó không phải là CPAN.

Điểm thứ hai, đó ảnh hưởng đến dữ liệu chính xác là cái gì đó đã được đưa vào tài khoản biểu tượng thụt chỉ có phiên bản đó đã được đóng Gói trong .tar.gz kho lưu trữ. Loại khác khu lưu trữ đã không được sử dụng. Đại đa số phát hành .tar.gz vì vậy nó được thực hiện như một giả định. Nếu các dữ liệu số cho tất cả các dữ liệu lưu trữ chắc chắn sẽ thay đổi. Giả định rằng sự thay đổi sẽ được nhiều hơn, một vài phần trăm.

Mã nguồn

Toàn bộ các kịch bản rằng được sử dụng để thu dữ liệu, các dữ liệu chính nó và jupyter cho biết máy tính là tất cả đều có trong kho lưu trữ trên điện thoại.

Mã được viết — nó chỉ là rất xa hoàn hảo. Tất cả những gì được viết viết với ý tưởng càng nhanh càng tốt để có được kết quả, chứ không phải để tạo hoàn hảo mã.

Tóm tắt

Tại thời điểm này viết kho lưu trữ của Perl CPAN thư viện, đã có khoảng 135 nghìn phát hành. Lần phát hành đầu tiên đã được thực hiện 24 năm trước (1995-08-20). Trong những phiên bản là gần 4 triệu tập mở rộng .pm, .pl, .t hoặc .pod.

Nếu chúng ta xem xét dữ liệu cho tất cả thời gian, nó chỉ ra rằng 76.7%% số tác giả ở lề sử dụng một hỗn hợp của không gian và tab, 21.9% được sử dụng trong những vết lõm, chỉ có không gian, và 0.7% — chỉ tab.

Nhưng nếu chúng tôi xem dữ liệu chỉ cho 2019, nó sẽ trở thành nhiều hơn và nhiều hơn nữa tác giả những người chỉ sử dụng không gian cho vết, nhưng vẫn còn phần lớn sử dụng một sự pha trộn của tab và không gian (56.4% — sử dụng tab,không gian và không gian 41.2% — chỉ khoảng trống, 1.0% — chỉ tab).

Và nếu các bạn nhìn vào biểu đồ của trăm thay đổi sử dụng loại khác nhau của thụt bạn có thể thấy rằng tỷ chỉ sử dụng không gian được phát triển và chia sẻ này được phát triển ở các chi phí của các cổ phần của những người sử dụng một hỗn hợp của tab và không gian cho xẹp.

Nó không biết tại sao tỷ lệ này đang tăng lên. Nó có thể rằng điều này là do thực tế là các tác giả sử dụng một thuận tiện hơn biên tập văn bản đó làm cho nó dễ dàng hơn, và an toàn hơn để cài đặt mà nhân vật để sử dụng cho thụt.

Bài báo khác