Processando 40 TB de código de 10 milhões de projetos em um servidor dedicado com Go por US $ 100

A ferramenta de linha de comando Sloc Cloc e Code (scc) que eu escrevi , que agora é finalizada e suportada por muitas pessoas excelentes, conta linhas de código, comentários e avalia a complexidade dos arquivos dentro de um diretório. Uma boa seleção é necessária aqui. A ferramenta conta operadores de ramificação no código. Mas o que é complexidade? Por exemplo, a declaração "Este arquivo tem dificuldade 10" não é muito útil sem contexto. Para resolver esse problema, executei o scc em todas as fontes da Internet. Isso também permitirá que você encontre alguns casos extremos que não considerei na própria ferramenta. Poderoso teste de força bruta.

Mas se eu for executar o teste em todas as fontes do mundo, isso exigirá muitos recursos de computação, o que também é uma experiência interessante. Por isso, decidi escrever tudo - e este artigo apareceu.

Em resumo, baixei e processei muitas fontes.

Figuras nuas:

  • 9.985.051 total de repositórios
  • 9.100.083 repositórios com pelo menos um arquivo
  • 884 968 repositórios vazios (sem arquivos)
  • 3.500.000.000 de arquivos em todos os repositórios
  • Processado 40 736 530 379 778 bytes (40 TB)
  • 1.086.723.618.560 linhas identificadas
  • 816.822.273.469 linhas com código reconhecido
  • 124 382 152 510 linhas em branco
  • 145 519 192 581 linhas de comentários
  • Complexidade total de acordo com as regras scc: 71 884 867 919
  • 2 novos bugs encontrados no scc

Vamos apenas mencionar um detalhe. Não há 10 milhões de projetos, conforme indicado no título de alto perfil. Eu perdi 15.000, então completei. Peço desculpas por isso.

Demorou cerca de cinco semanas para baixar tudo, passar pelo scc e salvar todos os dados. Depois, pouco mais de 49 horas para processar 1 TB JSON e obter os resultados abaixo.

Observe também que eu poderia estar enganado em alguns cálculos. Informarei imediatamente se algum erro for detectado e fornecerei um conjunto de dados.

Sumário



Metodologia


Desde o lançamento do searchcode.com, eu já acumulei uma coleção de mais de 7.000.000 de projetos no git, mercurial, subversion e assim por diante. Então, por que não processá-los? Trabalhar com o git geralmente é a solução mais fácil, então desta vez eu ignorei o mercurial e o subversion e exportei uma lista completa de projetos do git. Acontece que eu realmente acompanhei 12 milhões de repositórios git e provavelmente preciso atualizar a página principal para refletir isso.

Então agora eu tenho 12 milhões de repositórios git para baixar e processar.

Ao executar o scc, você pode selecionar a saída no JSON salvando o arquivo no disco: scc --format json --output myfile.json main.go Os resultados são os seguintes (para um único arquivo):

 [ { "Blank": 115, "Bytes": 0, "Code": 423, "Comment": 30, "Complexity": 40, "Count": 1, "Files": [ { "Binary": false, "Blank": 115, "Bytes": 20396, "Callback": null, "Code": 423, "Comment": 30, "Complexity": 40, "Content": null, "Extension": "go", "Filename": "main.go", "Hash": null, "Language": "Go", "Lines": 568, "Location": "main.go", "PossibleLanguages": [ "Go" ], "WeightedComplexity": 0 } ], "Lines": 568, "Name": "Go", "WeightedComplexity": 0 } ] 

Para um exemplo maior, consulte os resultados para o projeto redis: redis.json . Todos os resultados abaixo são obtidos com esse resultado sem dados adicionais.

Deve-se ter em mente que o scc geralmente classifica os idiomas com base na extensão (a menos que a extensão seja comum, como Verilog e Coq). Portanto, se você salvar um arquivo HTML com a extensão java, ele será considerado um arquivo java. Isso geralmente não é um problema, porque por que fazer isso? Mas, é claro, em larga escala, o problema se torna perceptível. Descobri isso mais tarde, quando alguns arquivos foram disfarçados como uma extensão diferente.

Algum tempo atrás, escrevi um código para gerar tags github baseadas em scc . Como o processo precisava armazenar em cache os resultados, eu o alterei um pouco para armazená-los no formato JSON no AWS S3.

Com o código para rótulos na AWS no lambda, peguei uma lista exportada de projetos, escrevi cerca de 15 linhas de python para limpar o formato correspondente ao meu lambda e fiz uma solicitação. Usando o multiprocessamento python, paralelizei solicitações a 32 processos para que o terminal respondesse com rapidez suficiente.

Tudo funcionou de maneira brilhante. No entanto, o problema estava, primeiramente, no custo e, em segundo lugar, o lambda tem um tempo limite de 30 segundos para o API Gateway / ALB, portanto, não pode processar repositórios grandes com rapidez suficiente. Eu sabia que essa não era a solução mais econômica, mas pensei que o preço seria de cerca de US $ 100, o que eu suportaria. Depois de processar um milhão de repositórios, verifiquei - e o custo foi de cerca de US $ 60. Como não estava satisfeito com a perspectiva de uma conta final da AWS de US $ 700, decidi reconsiderar minha decisão. Lembre-se de que este era basicamente o armazenamento e a CPU que eram usados ​​para coletar todas essas informações. Qualquer processamento e exportação de dados aumentou significativamente o preço.

Como eu já estava na AWS, uma solução rápida seria despejar os URLs como mensagens no SQS e retirá-los usando instâncias EC2 ou Fargate para processamento. Então escala como um louco. Mas, apesar da experiência cotidiana da AWS, sempre acreditei nos princípios da programação da Taco Bell . Além disso, havia apenas 12 milhões de repositórios, então decidi implementar uma solução mais simples (mais barata).

Não foi possível iniciar o cálculo localmente devido à terrível internet na Austrália. No entanto, meu searchcode.com funciona usando os servidores dedicados da Hetzner com cuidado. Estas são máquinas bastante potentes de RAM i7 Quad Core de 32 GB, geralmente com 2 TB de espaço de armazenamento (geralmente não usado). Eles geralmente têm um bom suprimento de energia de computação. Por exemplo, o servidor front-end na maioria das vezes calcula a raiz quadrada de zero. Então, por que não começar a processar lá?

Essa não é realmente a programação do Taco Bell, pois usei as ferramentas bash e gnu. Eu escrevi um programa simples no Go para executar 32 rotinas go que lêem dados de um canal, geram subprocessos git e scc antes de gravar a saída no JSON no S3. Na verdade, eu escrevi a solução primeiro em Python, mas a necessidade de instalar dependências de pip no meu servidor limpo parecia uma má idéia, e o sistema travou de maneiras estranhas que eu não queria depurar.

A execução de tudo isso no servidor produziu as seguintes métricas no htop, e vários processos em execução git / scc (scc não aparece nesta captura de tela) assumiram que tudo estava funcionando conforme o esperado, o que foi confirmado pelos resultados no S3.



Apresentação e cálculo de resultados


Li recentemente esses artigos , por isso tive a ideia de emprestar o formato desses posts em relação à apresentação de informações. No entanto, eu também queria adicionar o jQuery DataTables a tabelas grandes para classificar e pesquisar / filtrar os resultados. Assim, no artigo original, você pode clicar nos títulos para classificar e usar o campo de pesquisa para filtrar.

O tamanho dos dados que precisavam ser processados ​​levantou outra questão. Como processar 10 milhões de arquivos JSON, ocupando pouco mais de 1 TB de espaço em disco no bucket S3?

O primeiro pensamento foi o AWS Athena. Mas como custaria algo como US $ 2,50 por consulta para esse conjunto de dados, rapidamente comecei a procurar uma alternativa. No entanto, se você salvar os dados lá e raramente processá-los, talvez seja a solução mais barata.

Postei uma pergunta no bate-papo corporativo (por que resolver problemas sozinho).

Uma idéia era despejar dados em um grande banco de dados SQL. No entanto, isso significa processar os dados no banco de dados e, em seguida, executar consultas nele várias vezes. Além disso, a estrutura de dados significa várias tabelas, o que significa chaves e índices estrangeiros para fornecer um certo nível de desempenho. Isso parece um desperdício, porque poderíamos apenas processar os dados enquanto os lemos do disco - de uma só vez. Eu também estava preocupado em criar um banco de dados tão grande. Somente com dados, ele terá mais de 1 TB de tamanho antes de adicionar índices.

Vendo como eu criei o JSON de uma maneira simples, pensei: por que não processar os resultados da mesma maneira? Claro, há um problema. Obter 1 TB de dados do S3 custará muito. Se o programa travar, será irritante. Para reduzir custos, eu queria retirar todos os arquivos localmente e salvá-los para processamento adicional. Um bom conselho: é melhor não armazenar muitos arquivos pequenos em um diretório . Isso é péssimo para o desempenho em tempo de execução, e os sistemas de arquivos não gostam disso.

Minha resposta para isso foi outro programa Go simples para extrair arquivos do S3 e salvá-los em um arquivo tar. Então eu poderia processar esse arquivo repetidamente. O processo em si executa um programa Go muito feio para processar o arquivo tar, para que eu possa executar novamente as consultas sem precisar extrair dados do S3 repetidamente. Não me preocupei com as rotinas aqui por dois motivos. Primeiramente, eu não queria carregar o servidor o máximo possível, então me limitei a um núcleo para a CPU trabalhar duro (o outro estava bloqueado no processador para ler o arquivo tar). Em segundo lugar, eu queria garantir a segurança do thread.

Quando isso foi feito, era necessário um conjunto de perguntas para responder. Novamente usei a mente coletiva e conectei meus colegas enquanto tive minhas próprias idéias. O resultado dessa fusão de mentes é apresentado abaixo.

Você pode encontrar todo o código que eu usei para processar JSON, incluindo o código para processamento local, e o script Python feio que eu usei para preparar algo útil para este artigo: por favor, não comente, eu sei que o código é feio , e está escrito para uma tarefa única, pois é improvável que eu o veja novamente.

Se você quiser ver o código que escrevi para uso geral, consulte as fontes scc .

Custo


Gastei cerca de US $ 60 em computação enquanto tentava trabalhar com o lambda. Ainda não analisei o custo de armazenamento do S3, mas ele deve estar perto de US $ 25, dependendo do tamanho dos dados. No entanto, isso não inclui os custos de transmissão, os quais eu também não assisti. Observe que limpei o balde quando o terminei, portanto, este não é um custo fixo.

Mas depois de um tempo ainda abandonei a AWS. Então, qual é o custo real se eu quiser fazê-lo novamente?

Todo o software que temos é gratuito e gratuito. Portanto, não há nada com que se preocupar.

No meu caso, o custo seria zero, pois usei o poder de computação "gratuito" deixado no searchcode.com. No entanto, nem todo mundo tem esses recursos gratuitos. Portanto, vamos supor que a outra pessoa queira repetir isso e precise aumentar o servidor.

Isso pode ser feito por 73 € usando o novo servidor dedicado mais barato da Hetzner , incluindo o custo de instalação de um novo servidor. Se você esperar e se aprofundar na seção com leilões , poderá encontrar servidores muito mais baratos sem taxas de instalação. No momento em que escrevi, encontrei um carro perfeito para este projeto, por 25,21 euros por mês sem taxas de instalação.



O que é ainda melhor: fora da União Europeia, o IVA será removido desse preço. Portanto, fique à vontade para aproveitar outros 10%.

Portanto, se você levantar esse serviço do zero no meu software, ele custará até US $ 100, mas até US $ 50, se você for um pouco paciente ou bem-sucedido. Isso pressupõe que você esteja usando o servidor há menos de dois meses, o que é suficiente para baixar e processar. Também há tempo suficiente para obter uma lista de 10 milhões de repositórios.

Se eu usasse o tar compactado (o que na verdade não é tão difícil), poderia processar 10 vezes mais repositórios na mesma máquina, e o arquivo resultante ainda será pequeno o suficiente para caber no mesmo HDD. Embora o processo possa demorar vários meses, porque o download levará mais tempo.

Para ir muito além dos 100 milhões de repositórios, no entanto, é necessário algum tipo de sharding. No entanto, é seguro dizer que você repetirá o processo em minha escala ou muito maior, no mesmo equipamento sem muito esforço ou alterações de código.

Fontes de dados


Veja quantos projetos vieram de cada uma das três fontes: github, bitbucket e gitlab. Observe que isso é antes de excluir repositórios vazios; portanto, a quantidade excede o número de repositórios que são realmente processados ​​e levados em consideração nas tabelas a seguir.

FonteQuantidade
github9 680 111
bitbucket248 217
gitlab56 722

Peço desculpas à equipe do GitHub / Bitbucket / GitLab, se você ler isso. Se meu script causou algum problema (embora eu duvide), tomo uma bebida de sua escolha quando me encontrar.

Quantos arquivos existem no repositório?


Vamos passar para os problemas reais. Vamos começar com um simples. Quantos arquivos existem no repositório médio? A maioria dos projetos tem apenas alguns arquivos ou mais? Após percorrer os repositórios, obtemos o seguinte cronograma:



Aqui, o eixo x mostra os intervalos com o número de arquivos e o eixo y mostra o número de projetos com tantos arquivos. Limite o eixo horizontal a mil arquivos, pois o gráfico está muito próximo do eixo.

Parece que a maioria dos repositórios tem menos de 200 arquivos.

Mas e a visualização até o percentil 95, que mostrará a imagem real? Acontece que na grande maioria (95%) dos projetos - menos de 1000 arquivos. Enquanto 90% dos projetos têm menos de 300 arquivos e 85% têm menos de 200.



Se você deseja criar um gráfico e fazê-lo melhor do que eu, aqui está um link para os dados brutos no JSON .

Qual é a quebra de idioma?


Por exemplo, se um arquivo Java for identificado, aumentamos o número de Java nos projetos em um e não fazemos nada para o segundo arquivo. Isso dá uma idéia rápida de quais idiomas são mais usados. Não é novidade que os idiomas mais comuns incluem markdown, .gitignore e plaintext.

Markdown é o idioma mais usado; é visto em mais de 6 milhões de projetos, o que representa cerca de 2⁄3 do total. Isso faz sentido, já que quase todos os projetos incluem o README.md, que é exibido em HTML para as páginas do repositório.

Lista completa
LinguagemNúmero de projetos
Markdown6 041 849
gitignore5.471.254
Texto simples3.553.325
Javascript3 408 921
HTML3 397 596
CSS3 037 754
Licença2 597 330
XML2 218 846
Json1 903 569
Yaml1 860 523
Python1 424 505
Shell1 395 199
Ruby1.386.599
Java1 319 091
Cabeçalho C1.259.519
Makefile1 215 586
Rakefile1 006 022
Php992 617
Arquivo de propriedades909 631
Svg804 946
C791 773
C ++715 269
Lote645.442
Sass535 341
Autoconf505 347
Objetivo c503 932
CoffeeScript435 133
SQL413.739
Perl390.775
C #380 841
ReStructuredText356 922
Msbuild354.212
MENOS281 286
CSV275.143
Cabeçalho C ++199.245
CMake173.482
Patch169.078
Assembléia165.587
Esquema XML148 511
m4147 204
Páginas JavaServer142.605
Script Vim134 156
Scala132 454
Objetivo C ++127 797
Gradle126.899
Definição do módulo120 181
Bazel114 842
R113 770
ASP.NET111 431
Ir modelo111 263
Definição do tipo de documento109.710
Especificação Gherkin107 187
Smarty template106 668
Jade105 903
Feliz105 631
Emacs lisp105 620
Prolog102 792
Go99 093
Lua98 232
Bash95 931
D94.400
ActionScript93.066
Tex84 841
Powershell80 347
Awk79 870
Groovy75 796
Lex75 335
nuspec72.478
sed70 454
Fantoche67 732
Org67 703
Clojure67 145
Xaml65 135
TypeScript62 556
Systemd58 197
Haskell58 162
Xcode Config57 173
Boo55 318
LaTeX55 093
Zsh55 044
Stylus54 412
Navalha54 102
Guiador51 893
Erlang49.475
Hex46.442
Buffers de protocolo45 254
Bigode44.633
ASP43 114
Transformações de linguagem de folha de estilo extensíveis42.664
Modelo de galho42.273
Processamento41.277
Dockerfile39.664
Swig37 539
Script LD36 307
FORTRAN Legacy35.889
Scons35.373
Esquema34 982
Alex34 221
TCL33.766
Linguagem de definição de interface do Android33.000
Ruby HTML32 645
Árvore de dispositivos31 918
Esperar30.249
Cabal30 109
Script irreal29 113
Pascal28.439
GLSL28.417
Intel hex27 504
Liga27 142
Modelo de marcador livre26.456
IDL26.079
Visual basic para aplicativos26.061
Linguagem de marcação Macromedia eXtensible24.949
F #24.373
Cython23.858
Jupyter23.577
Adiante22 108
Visual basic21 909
Lisp21.242
OCaml20.216
Ferrugem19.286
Peixe18.079
Macaco c17 753
Ada17 253
SAS17 031
Dardo16.447
Tipificações TypeScript16.263
Systemverilog15 541
Thrift15 390
C shell14.904
Arquivo de sombreador de fragmento14.572
Arquivo Verder Shader14 312
QML13.709
Coldfusion13.441
Elixir12 716
Haxe12 404
Jinja12.274
Jsx12 194
Specman e12 071
FORTRAN Modern11.460
PKGBUILD11 398
ignorar11.287
Mako10 846
Tol10 444
HABILIDADE10 048
Asciidoc9 868
Swift9 679
Buildstream9 198
ColdFusion CFScript8 614
Stata8 296
Crioulo8 030
Basic7 751
V7 560
Vhdl7.368
Julia7 070
ClojureScript7 018
Modelo de fechamento6.269
AutoHotKey5 938
Wolfram5.764
Docker ignorar5 555
Korn shell5 541
Arvo5.364
Coq5.068
Modelo SRecode5 019
Linguagem do criador de jogos4 557
Nix4.216
Vala4 110
COBOL3 946
Configuração de verniz3.882
Kotlin3.683
Bitbake3 645
Gdscript3 189
ML padrão (SML)3.143
Jenkins buildfile2 822
Xtend2 791
Abap2 381
Modula32.376
Nim2.273
Verilog2013
Olmo1 849
Brainfuck1 794
Ur / web1.741
Opalang1.367
GN1.342
Taskpaper1.330
Ceilão1.265
Cristal1 259
Agda1.182
Vue1.139
LOLCODE1 101
Hamlet1.071
Estrutura do robô1.062
MUMPS940
Emacs dev env937
Bloqueio de carga905
Flow9839
Idris804
Julius765
Oz764
Q #695
Lucius627
Meson617
F *614
ATS492
Asserção PSL483
Pipeline de Bitbucket418
Purescript370
Idioma da definição de relatório313
Isabelle296
Jai286
MQL4271
Projeto Ur / Web261
Alquimista250
Cassius213
Softbridge basic207
Cabeçalho MQL167
Jsonl146
Magra104
Spice netlist100
Madlang97
Luna91
Pônei86
MQL546.
Wren33
Apenas30
QCL27
Zig21
SPDX20
Futhark16
Dhall15
Fidl14
Bosque14
Janet13
Projeto criador de jogos6
Polly6
Verilog Args File2

Quantos arquivos existem no repositório por idioma?


Adição à tabela anterior, mas média do número de arquivos para cada idioma no repositório. Ou seja, quantos arquivos Java existem em média para todos os projetos em que existe Java?

Lista completa
LinguagemNúmero médio de arquivos
Abap1.0008927583699165
ASP1.6565139917314107
ASP.NET346.88867258489296
ATS7.888545610390882
Awk5,098807478952136
ActionScript15.682562363539644
Ada7.265376817272021
Agda1,2669381110755398
Alquimista7.437307493090622
Alex20.152479318023637
Liga1,0000000894069672
Linguagem de definição de interface do Android3.1133707938643074
Arvo9.872687772928423
Asciidoc14,645389421879814
Assembléia1049.6270518312476
AutoHotKey1,5361384288472488
Autoconf33,99728695464163
Bash3.7384110335355545
Basic5,103623499110781
Lote3.943513588378872
Bazel1.0013122734382187
Bitbake1,0878349272366024
Pipeline de Bitbucket1
Boo5,321822367969364
Bosque1.28173828125
Brainfuck1,3141119785974242
Buildstream1,4704635441667189
C15610,17972307699
Cabeçalho C14103,33936083782
C shell3.1231084093649315
C #45.804460355773394
C ++30,416980313492328
Cabeçalho C ++8.313450764990089
CMake37.2566873554469
COBOL3,129408853490878
CSS5.332398714337156
CSV8.370432089241898
Cabal1.0078125149013983
Bloqueio de carga1.0026407549221519
Cassius4.657169356495984
Ceilão7,397692655679642
Clojure8,702303821528872
ClojureScript5.384518778099244
Modelo de fechamento1.0210028022356945
CoffeeScript45.40906609668401
Coldfusion13.611857060674573
ColdFusion CFScript40,42554202020521
Coq10,903652047164622
Crioulo1.000122070313864
Cristal3.8729367926098117
Cython1.9811811237515262
D529,2562750397005
Dardo1.5259554297822313
Árvore de dispositivos586,4119588123021
Dhall5,072265625
Docker ignore1,0058596283197403
Dockerfile1,7570825852789156
Document Type Definition2,2977520758534693
Elixir8,916658446524252
Elm1,6702759813968946
Emacs Dev Env15,720268315288969
Emacs Lisp11,378847912292201
Erlang3,4764894379621607
Expect2,8863991651091614
Extensible Stylesheet Language Transformations1,2042068607534995
F#1,2856606249320954
F*32,784058919015
FIDL1,8441162109375
FORTRAN Legacy11,37801716560221
FORTRAN Modern27,408192558594685
Fish1,1282354207617833
Flow95,218046229973186
Forth10,64736177807574
Fragment Shader File3,648087980622546
Freemarker Template8,397226930409037
Futhark4,671875
GDScript3,6984173692608313
GLSL1,6749061330076334
GN1,0193083210608163
Game Maker Language3,6370866431049604
Game Maker Project1,625
Gherkin Specification60,430588516231666
Go115,23482489228113
Go Template28,011342078505013
Gradle5,628880473160033
Groovy6,697367294187844
HEX22,477003537989486
HTML4,822243456786672
Hamlet50,297887645777536
Handlebars36,60120978679127
Happy5,820573911044464
Haskell8,730027121836951
Haxe20,00590981880653
IDL79,38510300176867
Idris1,524684997890027
Intel HEX113,25178379632708
Isabelle1,8903018088753136
JAI1,4865150753259275
JSON6,507823973898348
JSONL1,003931049286678
JSX4,6359645801363465
Jade5,353279289700571
Janet1,0390625
Java118,86142228014006
JavaScript140,56079100796154
JavaServer Pages2,390251418283771
Jenkins Buildfile1,0000000000582077
Jinja4,574843152310338
Julia6,672268339671913
Julius2,2510109380818903
Jupyter13,480476117239338
Just1,736882857978344
Korn Shell1,5100887455636172
Kotlin3,9004723322169363
LD Script16,59996086864524
LESS39,6484785300563
LEX5,892075421476933
LOLCODE1,0381496530137617
LaTeX5,336103768010524
Lean1,6653789470747329
License5,593879701111845
Lisp33,15947937896521
Lua24,796117625764612
Lucius6,5742989471450155
Luna4,437807061133055
MQL Header13,515527575704464
MQL46,400151428436254
MQL546,489316522221515
MSBuild4,8321384193507875
MUMPS8,187699062741014
Macromedia eXtensible Markup Language2,1945287114300807
Madlang3,7857666909751373
Makefile1518,1769808494607
Mako3,410234685769436
Markdown45,687500000234245
Meson32,45071679724949
Modula31,1610784588847318
Module-Definition4,9327688042002595
Monkey C3,035163164383345
Mustache19,052714578803542
Nim1,202213335585401
Nix2,7291879559930488
OCaml3,7135029841909697
Objective C4,9795510788040005
Objective C++2,2285232767506264
Opalang1,9975597794742732
Org5,258117805392903
Oz22,250069644336204
Php199,17870638869982
PKGBUILD7,50632295051949
PSL Assertion3,0736406530442473
Pascal90,55238627885495
Patch25,331829692384225
Perl27,46770444081142
Plain Text1119,2375825397799
Polly1
Pony3,173291031071342
Powershell6,629884642978543
Processing9,139907354078636
Prolog1,816763080890156
Properties File2,1801967863634255
Protocol Buffers2,0456253005879304
Puppet43,424491631161054
PureScript4,063801504037935
Python22,473917606983292
Q#5,712939431518483
QCL7,590678825974464
QML1,255201818986247
R2,3781868952970115
Rakefile14,856192677576413
Razor62,79058974450959
ReStructuredText11,63852408056825
Report Definition Language23,065085061465403
Robot Framework2,6260137148703535
Ruby554,0134362337432
Ruby HTML24,091116656979562
Rust2,3002003813895207
SAS1,0032075758254648
SKILL1,9229039972029645
SPDX2,457843780517578
SQL2,293643752864969
SRecode Template20,688193360975845
SVG4,616972531365432
Sass42,92418345584642
Scala1,5957851387966393
Scheme10,480490204644848
Scons2,1977062552968114
Shell41,88552208947577
Smarty Template6,90615223295527
Softbridge Basic22,218602385698304
Specman e2,719783829645327
Spice Netlist2,454830619852739
Standard ML (SML)3,7598713626650295
Stata2,832579915520368
Stylus7,903926412469745
Swift54,175594149331914
Swig2,3953681161240747
SystemVerilog7,120705494624247
Systemd80,83254275520476
TCL46,9378307136513
TOML1,0316491217260413
TaskPaper1,0005036006351133
TeX8,690789447558961
Thrift1,620168483240211
Twig Template18,33051814392764
TypeScript1,2610517452930048
TypeScript Typings2,3638072576034137
Unreal Script2,9971615019965148
Ur/Web3,420488425604595
Ur/Web Project1,8752869585517504
V1,8780624768245784
VHDL5,764059992075602
Vala42,22072166146626
Varnish Configuration1,9899734258599446
Verilog1,443359777332832
Verilog Args File25,5
Vertex Shader File2,4700152399875077
Vim Script3,2196359799822662
Visual Basic119,8397831247842
Visual Basic for Applications2,5806381264096503
Vue249,0557418123258
Wolfram1,462178856761796
Wren227,4526259500999
XAML2,6149608174399264
XCode Config6,979387911493798
XML146,10128153519918
XML Schema6,832042266604565
Xtend2,87054940757827
YAML6,170148717655746
Zig1,071681022644043
Zsh2,6295064863912088
gitignore6,878908416722053
ignore1,0210649380633772
m457,5969985568356
nuspec3,245791111381787
sed1,3985770380241234

Quantas linhas de código em um arquivo de idioma típico?


Suponho que ainda seja interessante ver quais idiomas têm os maiores arquivos em média? O uso da média aritmética gera números anormalmente altos devido a projetos como o sqlite.c, que está incluído em muitos repositórios, combinando muitos arquivos em um, mas ninguém trabalha nesse único arquivo grande (espero!).

Portanto, calculei a média da mediana. No entanto, idiomas com valores absurdamente altos, como Bosque e JavaScript, ainda permaneciam.

Então pensei: por que não fazer um movimento de cavaleiro? Por sugestão de Darrell (um residente de Kablamo e um excelente cientista de dados), fiz uma pequena alteração e mudei a média aritmética, largando arquivos em mais de 5.000 linhas para remover anomalias.

Lista completa
Linguagem< 5000
ABAP13936
ASP513170
ASP.NET315148
ATS9451 411
AWK431774
ActionScript9502 676
Ada1 17913
Agda46689
Alchemist1 0401 463
Alex479204
Alloy7266.
Android Interface Definition Language119190
Arvo2571 508
AsciiDoc5191 724
Assembly993225
AutoHotKey36023
Autoconf495144
BASH42526
Basic476847
Batch178208
Bazel22620
Bitbake43610
Bitbucket Pipeline1913
Boo898924
Bosque58.199 238
Brainfuck141177
BuildStream1 9552 384
C1 0525 774
C Header869126 460
C Shell12877
C#1 2151 138
C++1 166232
C++ Header838125
CMake75015
COBOL42224
CSS729103
CSV41112
Cabal11613
Cargo Lock814686
Cassius124634
Ceylon20715
Clojure52119
ClojureScript504195
Closure Template34375
CoffeeScript342168
ColdFusion6865
ColdFusion CFScript1 2311 829
Coq56029 250
Creole8520
Crystal973119
Cython8531 738
D39710
Dart583500
Device Tree73944 002
Dhall12499
Docker ignore102
Dockerfile7617
Document Type Definition5221 202
Elixir402192
Elm438121
Emacs Dev Env646755
Emacs Lisp65315
Erlang930203
Expect419195
Extensible Stylesheet Language Transformations442600
F#38464
F*33565
FIDL6551 502
FORTRAN Legacy2771 925
FORTRAN Modern636244
Fish16874
Flow936832.
Forth25662
Fragment Shader File30911
Freemarker Template52220
Futhark175257
GDScript4011
GLSL38029
GN9508 866
Game Maker Language710516
Game Maker Project1 290374
Gherkin Specification5162 386
Go780558
Go Template41125 342
Gradle22822
Groovy73413
HEX1 00217 208
HTML5561 814
Hamlet22070
Handlebars5063 162
Happy1 6170 0
Haskell65617
Haxe8659 607
IDL386210
Idris28542.
Intel HEX1 256106 650
Isabelle7921 736
JAI26841.
JSON28939.
JSONL432
JSX39324
Jade299192
Janet50832.
Java1 165697
JavaScript89473 979
JavaServer Pages644924
Jenkins Buildfile796
Jinja4653 914
Julia5391 031
Julius11312
Jupyter1 361688
Just6272
Korn Shell427776
Kotlin554169
LD Script521439
LESS1 08617
LEX1 014214
LOLCODE1294
LaTeX8957 482
Lean1819
License26620
Lisp7461 201
Lua820559
Lucius284445
Luna8548.
MQL Header79310 337
MQL47993 168
MQL5384631
MSBuild558160
MUMPS92498 191
Macromedia eXtensible Markup Language50020
Madlang368340
Makefile30920
Mako269243
Markdown20610
Meson546205
Modula316217
Module-Definition4897
Monkey C14028
Mustache2988 083
Nim3523
Nix24078
OCaml71868
Objective C1 11117 103
Objective C++903244
Opalang15129
Org52324
Oz3607 132
Php96414 660
PKGBUILD13119
PSL Assertion149108
Pascal1 044497
Patch67612
Perl76211
Plain Text352841
Polly1226
Pony33842 488
Powershell652199
Processing800903
Prolog2826
Properties File18418
Protocol Buffers5768 080
Puppet499660
PureScript598363
Python879258
Q#4755 417
QCL5483
QML8156 067
R56620
Rakefile1227
Razor7131 842
ReStructuredText7355 049
Report Definition Language1 38934 337
Robot Framework292115
Ruby7394 942
Ruby HTML326192
Rust1 0074
SAS23365
SKILL526123
SPDX1 242379
SQL466143
SRecode Template796534
SVG7961 538
Sass68214 653
Scala612661
Scheme5666
Scons5456 042
Shell3044
Smarty Template39215
Softbridge Basic2 0673
Specman e1270 0
Spice Netlist9061 465
Standard ML (SML)47875
Stata20012
Stylus505214
Swift683663
Swig1 0314 540
SystemVerilog563830
Systemd12726
TCL77442 396
TOML10017
TaskPaper37.7
TeX804905
Thrift545329
Twig Template7139 907
TypeScript46110
TypeScript Typings1 465236 866
Unreal Script795927
Ur/Web429848
Ur/Web Project3326
V7045 711
VHDL9521 452
Vala6032
Varnish Configuration20377
Verilog1982
Verilog Args File456481
Vertex Shader File16874
Vim Script55525
Visual Basic7381 050
Visual Basic for Applications979936
Vue732242
Wolfram940973
Wren358279 258
XAML70324
XCode Config20011
XML6051 033
XML Schema1 008248
Xtend710120
YAML16547 327
Zig188724
Zsh3009
gitignore333
ignore62
m4959807
nuspec187193
sed8233

Média de complexidade do arquivo em cada idioma?


Qual é a complexidade média do arquivo para cada idioma?

De fato, as classificações de complexidade não podem ser diretamente correlacionadas entre os idiomas. Trecho do próprio leia-me scc:

A pontuação de complexidade é apenas um número que só pode ser correspondido entre arquivos no mesmo idioma. Não deve ser usado para comparar idiomas diretamente. O motivo é que ele é calculado procurando operadores de ramificação e loop para cada arquivo.

Assim, as linguagens não podem ser comparadas aqui, embora isso possa ser feito entre linguagens semelhantes, como Java e C, por exemplo.

Essa é uma métrica mais valiosa para arquivos individuais no mesmo idioma. Assim, você pode responder à pergunta "Este arquivo com o qual estou trabalhando é mais fácil ou mais difícil que a média?"

Devo mencionar que ficarei feliz com as sugestões para melhorar essa métrica no scc . Para uma confirmação, geralmente é suficiente adicionar apenas algumas palavras-chave ao arquivo languages.json, para que qualquer programador possa ajudar.

Lista completa
Linguagem
ABAP11,180740488380376
ASP11,536947250366211
ASP.NET2,149275320643484
ATS0,7621728432717677
AWK0 0
ActionScript22,088579905848178
Ada13,69141626294931
Agda0,19536590785719454
Alchemist0,3423442907696928
Alex0 0
Alloy6,9999997997656465
Android Interface Definition Language0 0
Arvo0 0
AsciiDoc0 0
Assembly1,5605608227976997
AutoHotKey423,87785756399626
Autoconf1,5524294972419739
BASH7,500000094871363
Basic1,0001350622574257
Batch1,4136352496767306
Bazel6,523681727119303
Bitbake0,00391388021490391
Bitbucket Pipeline0 0
Boo65,67764583729533
Bosque236,79837036132812
Brainfuck27,5516445041791
BuildStream0 0
C220,17236548200242
C Header0,027589923237434522
C Shell1,4911166269191476
C#1,0994400597744005
C++215,23628287682845
C++ Header2,2893104921677154
CMake0,887660006199008
COBOL0,018726348891789816
CSS6,317460331175305E-176
CSV0 0
Cabal3,6547924155738194
Cargo Lock0 0
Cassius0 0
Ceylon21,664400369259404
Clojure0,00009155273437716484
ClojureScript0,5347588658332859
Closure Template0,503426091716392
CoffeeScript0,02021490140137264
ColdFusion6,851776515250336
ColdFusion CFScript22,287403080299764
Coq3,3282556015266307
Creole0 0
Crystal1,6065794006138856
Cython42,87412906489837
D0 0
Dart2,1264450684815657
Device Tree0 0
Dhall0 0
Docker ignore0 0
Dockerfile6,158891172385556
Document Type Definition0 0
Elixir0,5000612735793482
Elm5,237952479502043
Emacs Dev Env1,2701271416728307E-61
Emacs Lisp0,19531250990197657
Erlang0,08028322620528387
Expect0,329944610851471
Extensible Stylesheet Language Transformations0 0
F#0,32300702900710193
F*9,403954876643223E-38
FIDL0,12695312593132269
FORTRAN Legacy0,8337643985574195
FORTRAN Modern7,5833590276411185
Fish1,3386242155247368
Flow934,5
Forth2,4664166555765066
Fragment Shader File0,0003388836600090293
Freemarker Template10,511094652522283
Futhark0,8057891242233386
GDScript10,750000000022537
GLSL0,6383056697891334
GN22,400601854287807
Game Maker Language4,709514207365569
Game Maker Project0 0
Gherkin Specification0,4085178437480328
Go50,06279203974034
Go Template2,3866690339840662E-153
Gradle0 0
Groovy3,2506868488244898
HEX0 0
HTML0 0
Hamlet0,25053861103978114
Handlebars1,6943764911351036E-21
Happy0 0
Haskell28,470107150053625
Haxe66,52873523714804
IDL7,450580598712868E-9
Idris17,77642903881352
Intel HEX0 0
Isabelle0,0014658546850726184
JAI7,749968137734008
JSON0 0
JSONL0 0
JSX0,3910405338329044
Jade0,6881713929215119
Janet0 0
Java297,22908150612085
JavaScript1,861130583340945
JavaServer Pages7,24235416213196
Jenkins Buildfile0 0
Jinja0,6118526458846931
Julia5,779676990326951
Julius3,7432448068125277
Jupyter0 0
Just1,625490248219907
Korn Shell11,085027896435056
Kotlin5,467347841779503
LD Script6,538079182471746E-26
LESS0 0
LEX0 0
LOLCODE5,980839657708373
LaTeX0 0
Lean0,0019872561135834133
License0 0
Lisp4,033602018074421
Lua44,70686769972825
Lucius0 0
Luna0 0
MQL Header82,8036524637758
MQL42,9989408299408566
MQL532,84198718928553
MSBuild2,9802322387695312E-8
MUMPS5,767955578948634E-17
Macromedia eXtensible Markup Language0 0
Madlang8,25
Makefile3,9272747722381812E-90
Mako0,007624773579836673
Markdown0 0
Meson0,3975182396400463
Modula30,7517121883916386
Module-Definition0,25000000023283153
Monkey C9,838715311259486
Mustache0,00004191328599945435
Nim0,04812580073302998
Nix25,500204694250044
OCaml16,92218069843716
Objective C65,08967337175548
Objective C++10,886891531550603
Opalang1,3724696160763994E-8
Org28,947825231747235
Oz6,260657086070324
Php2,8314653639690874
PKGBUILD0 0
PSL Assertion0,5009768009185791
Pascal4
Patch0 0
Perl48,16959255514553
Plain Text0 0
Polly0 0
Pony4,91082763671875
Powershell0,43151378893449877
Processing9,691001653621564
Prolog0,5029296875147224
Properties File0 0
Protocol Buffers0,07128906529847256
Puppet0,16606500436341776
PureScript1,3008141816356456
Python11,510142201304832
Q#5,222080192729404
QCL13,195626304795667
QML0,3208023407643109
R0,40128818821921775
Rakefile2,75786388297917
Razor0,5298294073055322
ReStructuredText0 0
Report Definition Language0 0
Robot Framework0 0
Ruby7,8611656283491795
Ruby HTML1,3175727506823756
Rust8,62646485221385
SAS0,5223999023437882
SKILL0,4404907226562501
SPDX0 0
SQL0,00001537799835205078
SRecode Template0,18119949102401853
SVG1,7686873200833423E-74
Sass7,002974651049148E-113
Scala17,522343645163424
Scheme0,00003147125255509322
Scons25,56868253610655
Shell6,409446969197895
Smarty Template53,06143077491294
Softbridge Basic7,5
Specman e0,0639350358484781
Spice Netlist1,3684555315672042E-48
Standard ML (SML)24,686901116754818
Stata1,5115316917094068
Stylus0,3750006556512421
Swift0,5793484510104517
Swig0 0
SystemVerilog0,250593163372906
Systemd0 0
TCL96,5072605676113
TOML0,0048828125000002776
TaskPaper0 0
TeX54,0588040258797
Thrift0 0
Twig Template2,668124511961211
TypeScript9,191392608918255
TypeScript Typings6,1642456222327375
Unreal Script2,7333421227943004
Ur/Web16,51621568240534
Ur/Web Project0 0
V22,50230618938804
VHDL18,05495198571289
Vala147,2761703068509
Varnish Configuration0 0
Verilog5,582400367711671
Verilog Args File0 0
Vertex Shader File0,0010757446297590262
Vim Script2,4234658314493798
Visual Basic0,0004882812500167852
Visual Basic for Applications4,761343429454877
Vue0,7529517744621779
Wolfram0,0059204399585724215
Wren0,08593750013097715
XAML6,984919309616089E-10
XCode Config0 0
XML0 0
XML Schema0 0
Xtend2,8245844719990547
YAML0 0
Zig1,0158334437942358
Zsh1,81697392626756
gitignore0 0
ignore0 0
m40 0
nuspec0 0
sed22,91158285739948

Número médio de comentários para arquivos em cada idioma?


Qual é o número médio de comentários nos arquivos em cada idioma?

Talvez a questão possa ser reformulada: os desenvolvedores em que idioma escrevem mais comentários, sugerindo um mal-entendido do leitor.

Lista completa
Linguagem
ABAP56,3020026683825
ASP24,67145299911499
ASP.NET9,140447860406259E-11
ATS41,89465025163305
AWK11,290069486393975
ActionScript31,3568633027012
Ada61,269572412982384
Agda2,4337660860304755
Alchemist2,232399710231226E-103
Alex0 0
Alloy0,000002207234501959681
Android Interface Definition Language26,984662160277367
Arvo0 0
AsciiDoc0 0
Assembly2,263919769706678E-72
AutoHotKey15,833985920534857
Autoconf0,47779749499136687
BASH34,15625059662068
Basic1,4219117348874069
Batch1,0430908205926455
Bazel71,21859817579139
Bitbake0,002480246487177871
Bitbucket Pipeline0,567799577547725
Boo5,03128187009327
Bosque0,125244140625
Brainfuck0 0
BuildStream12,84734197699206
C256,2839210573451
C Header184,88885430308878
C Shell5,8409870392823375
C#30,96563720101839
C++44,61584829131642
C++ Header27,578790410119197
CMake1,7564333047949374
COBOL0,7503204345703562
CSS4,998773531463529
CSV0 0
Cabal4,899812531420634
Cargo Lock0,0703125
Cassius0,07177734654413487
Ceylon3,6406326349824667
Clojure0,0987220821845421
ClojureScript0,6025725119252456
Closure Template17,078124673988057
CoffeeScript1,6345682790069884
ColdFusion33,745563628665096
ColdFusion CFScript13,566947396771592
Coq20,3222774725393
Creole0 0
Crystal6,0308081267588145
Cython21,0593019957583
D0 0
Dart4,634361584097128
Device Tree33,64898256434121
Dhall1,0053101042303751
Docker ignore8,003553375601768E-11
Dockerfile4,526245545632278
Document Type Definition0 0
Elixir8,0581139370409
Elm24,73191350743249
Emacs Dev Env2,74822998046875
Emacs Lisp12,168370702306452
Erlang16,670030919109056
Expect3,606161126133445
Extensible Stylesheet Language Transformations0 0
F#0,5029605040200058
F*5,33528354690743E-27
FIDL343,0418392068642
FORTRAN Legacy8,121405267242158
FORTRAN Modern171,32042583820953
Fish7,979248739519377
Flow90,5049991616979244
Forth0,7578125
Fragment Shader File0,2373057885016209
Freemarker Template62,250244379050855
Futhark0,014113984877253714
GDScript31,14457228694065
GLSL0,2182627061047912
GN17,443267241931284
Game Maker Language3,9815753922640824
Game Maker Project0 0
Gherkin Specification0,0032959059321794604
Go6,464829990599041
Go Template4,460169822267483E-251
Gradle0,5374194774415457
Groovy32,32068506016523
HEX0 0
HTML0,16671794164614084
Hamlet4,203293477836184E-24
Handlebars0,9389737429747177
Happy0 0
Haskell20,323476462551376
Haxe9,023509566990532
IDL1,01534495399968
Idris0,36279318680267497
Intel HEX0 0
Isabelle4,389802167076498
JAI2,220446049250313E-16
JSON0 0
JSONL0 0
JSX0,9860839844113964
Jade0,25000000000034117
Janet9,719207406044006
Java330,66188089718935
JavaScript22,102491285372537
JavaServer Pages4,31250095370342
Jenkins Buildfile0 0
Jinja2,5412145720173454E-50
Julia12,542627036271085
Julius0,24612165248208867
Jupyter0 0
Just0,3186038732601446
Korn Shell40,89005232702741
Kotlin0,3259347784770708
LD Script3,7613336386434204
LESS15,495439701029127
LEX55,277186392539086
LOLCODE13,578125958700468
LaTeX3,316717967334341
Lean21,194565176965895
License0 0
Lisp88,10676444837796
Lua76,67247973843406
Lucius0,3894241626790286
Luna16,844066019174637
MQL Header82,22436339969337
MQL41,957314499740677
MQL527,463183855085845
MSBuild0,19561428198176206
MUMPS5,960464477541773E-8
Macromedia eXtensible Markup Language0 0
Madlang6,75
Makefile1,2287070602578574
Mako1,3997604187154047E-8
Markdown0 0
Meson4,594536366188615
Modula33,4375390004645627
Module-Definition7,754887182446689
Monkey C0,02734480644075532
Mustache0,0000038370490074157715
Nim0,8432132130061808
Nix165,09375
OCaml27,238212826702338
Objective C32,250000004480256
Objective C++4,688333711547599
Opalang3,2498599900436704
Org2,4032862186444435
Oz11,531631554476924
Php0,37573912739754056
PKGBUILD0 0
PSL Assertion4,470348358154297E-7
Pascal274,7797153576955
Patch0 0
Perl42,73014043490598
Plain Text0 0
Polly0 0
Pony0,2718505859375
Powershell2,0956492198317282
Processing11,358358417519032
Prolog6,93889390390723E-17
Properties File4,297774864451927
Protocol Buffers5,013992889700926
Puppet1,9962931947466012
PureScript6,608705271035433
Python15,208443286809963
Q#0,4281108849922295
QCL13,880147817629737
QML16,17036877582475
R5,355639399818855
Rakefile0,4253943361101697
Razor0,2500305203720927
ReStructuredText0 0
Report Definition Language1,8589575837924928E-119
Robot Framework0 0
Ruby8,696056880656087
Ruby HTML0,031281024218515086
Rust22,359375028118006
SAS0,7712382248290134
SKILL0,002197265625
SPDX0 0
SQL0,4963180149979617
SRecode Template17,64534428715706
SVG0,780306812508952
Sass1,6041624981030795
Scala2,7290137764062656
Scheme18,68675828842983
Scons9,985132321266597
Shell19,757167057040007
Smarty Template0,0009841919236350805
Softbridge Basic4,76177694441164E-25
Specman e0,1925095270881778
Spice Netlist5,29710110812646
Standard ML (SML)0,20708566564292288
Stata0,04904100534194722
Stylus4,534405773074049
Swift1,8627019961192913E-9
Swig11,786422730001505
SystemVerilog0,00009708851624323821
Systemd0 0
TCL382,839838598133
TOML0,37500173695180483
TaskPaper0 0
TeX8,266233975096164
Thrift50,53134153016524
Twig Template0 0
TypeScript8,250029131770134
TypeScript Typings37,89904005334354
Unreal Script46,13322029508541
Ur/Web0,04756343913582129
Ur/Web Project6,776263578034403E-21
V28,75797889154211
VHDL37,47892257625405
Vala74,26528331441615
Varnish Configuration19,45791923156868
Verilog4,165537942430622
Verilog Args File0 0
Vertex Shader File1,7979557178975683
Vim Script0 0
Visual Basic0,26300267116040704
Visual Basic for Applications0,3985138943535276
Vue5,039982162930666E-52
Wolfram70,01674025323683
Wren30694,003311276458
XAML0,5000169009533838
XCode Config13,653495818959595
XML3,533205032457776
XML Schema0 0
Xtend19,279739396268607
YAML1,1074293861154887
Zig0,507775428428431
Zsh6,769231127673729
gitignore1,3347179947709417E-20
ignore0,0356445312500015
m45,4183238737327075
nuspec3,640625
sed6,423678000929861

Quais são os nomes de arquivos mais comuns?


Quais nomes de arquivos são mais comuns em todas as bases de código, ignorando extensão e maiúsculas e minúsculas?

Se você me perguntasse anteriormente, eu diria: README, main, index, license. Os resultados refletem muito bem minhas suposições. Embora haja muitas coisas interessantes. Não faço ideia por que tantos projetos contêm um arquivo chamado 15or s15.

O makefile mais comum me surpreendeu um pouco, mas lembrei que ele era usado em muitos novos projetos JavaScript. Outra coisa interessante a ser observada: parece que o jQuery ainda está no cavalo, e os relatos de sua morte são muito exagerados, e ele está em quarto lugar na lista.

Lista completa
file-namecount
makefile59 141 098
index33 962 093
readme22 964 539
jquery20 015 171
principal12 308 009
package10 975 828
license10 441 647
__init__10 193 245
strings8 414 494
andróide7 915 225
config7 391 812
default5 563 255
build5 510 598
setup5 291 751
test5 282 106
irq4 914 052
154 295 032
country4 274 451
pom4 054 543
io3 642 747
system3 629 821
common3 629 698
gpio3 622 587
core3 571 098
module3 549 789
init3 378 919
dma3 301 536
bootstrap3 162 859
application3 000 210
time2 928 715
cmakelists2 907 539
plugin2 881 206
base2 805 340
s152 733 747
androidmanifest2 727 041
cache2 695 345
depurar2 687 902
file2 629 406
app2 588 208
version2 580 288
assemblyinfo2 485 708
exception2 471 403
project2 432 361
util2 412 138
user2 343 408
clock2 283 091
timex2 280 225
pci2 231 228
style2 226 920
styles2 212 127

Observe que, devido a limitações de memória, tornei esse processo um pouco menos preciso. Após cada 100 projetos, verifiquei o mapa e excluí os nomes dos arquivos que ocorreram menos de 10 vezes da lista. Eles poderiam voltar ao próximo teste e, se se encontrassem mais de 10 vezes, permaneceriam na lista. Talvez alguns resultados apresentem algum erro se algum nome comum raramente aparecer no primeiro lote de repositórios antes de se tornar comum. Em resumo, esses números não são absolutos, mas devem estar próximos o suficiente deles.

Eu poderia usar a árvore de prefixos para "espremer" o espaço e obter os números absolutos, mas não queria escrevê-lo; portanto, abusei levemente do mapa para economizar memória e obter o resultado. No entanto, será bastante interessante tentar a árvore de prefixos posteriormente.

Quantos repositórios estão faltando uma licença?


Isso é muito interessante. Quantos repositórios têm pelo menos algum arquivo de licença explícito? Observe que a ausência de um arquivo de licença aqui não significa que o projeto não o possui, pois ele pode existir no arquivo LEIA-ME ou pode ser indicado nas linhas de comentário do SPDX. Significa simplesmente que sccnão foi possível encontrar o arquivo de licença explícito usando seus próprios critérios. Atualmente, esses arquivos são considerados "licença", "licença", "cópia", "cópia3", "falta de licença", "falta de licença", "licença-mit", "licença-mit" ou "direitos autorais".

Infelizmente, a grande maioria dos repositórios não possui uma licença. Eu diria que existem muitas razões pelas quais qualquer software precisa de uma licença, mas alguém disse isso para mim.

Tem uma licença?Quantidade
não6 502 753
está ai2 597 330



Quantos projetos usam vários arquivos .gitignore?


Alguns podem não saber disso, mas pode haver vários arquivos .gitignore em um projeto git. Com isso em mente, quantos projetos usam vários arquivos .gitignore? E, ao mesmo tempo, quantos não têm um único?

Encontrei um projeto bastante interessante com 25.794 arquivos .gitignore no repositório. O próximo resultado foi 2547. Não tenho ideia do que está acontecendo lá. Olhei brevemente: parece que eles são usados ​​para verificar diretórios, mas não posso confirmar isso.

Voltando aos dados, aqui está um gráfico de repositórios com até 20 arquivos .gitignore, que cobrem 99% de todos os projetos.



Como esperado, a maioria dos projetos tem 0 ou 1 arquivos .gitignore. Isso é confirmado por uma queda maciça de dez vezes no número de projetos com arquivos 2. O que me surpreendeu foi quantos projetos possuem mais de um arquivo .gitignore. A cauda longa, neste caso, é especialmente longa.

Fiquei curioso por que alguns projetos têm milhares desses arquivos. Um dos principais causadores de problemas é o fork https://github.com/PhantomX/slackbuilds : cada um deles possui cerca de 2547 arquivos .gitignore. Outros repositórios com mais de mil arquivos .gitignore estão listados abaixo.


.gitignore
0 03 628 829
14 576 435
2387 748
3136 641
479 808
548 336
633 686
733 408
822 571
916 453
1011 198
1110 070
128 194
137 701
145 040
154 320
165 905
174 156
184 542
193 828
202 706
212 449
221 975
232 255
242 060
251 768
262 886
272 648
282 690
291 949
301 677
313 348
32.1 176
33794
341 153
35845
36488
37.627
38.533
39.502
40398
41.370
42.355
431 002
44265
45262
46.295
47178
48.384
49270
50.189
51435
52202
53196
54325
55253
56.320
57126
58.329
59.286
60292
61152
62237
63.163
64149
65187
66.164
6792
6880
69138
70102
7168
7262
73178
74294
7589
76118
77110
78319
79843
80290
81162
82127
83147
84170
85275
861 290
87614
884 014
892 275
90775
913 630
92362
93147
94110
9571
9675
9762
98228
9971
100174
101545
102304
103212
104284
105516
106236
10739.
10869
109131
11082
111102
112465
113621
11447
11559.
11643
11740
11843
119443
12072
12142.
12233
123392
12466.
12546.
126381
12719
12899
129906
13052
13119
13211
13399
13410
13515
1366
13722
13844
13933
14024
14133
14239.
14348.
14480
14520
14628
14719
14817
14911
15020
15157
15235
15324
15431
15535
15655
15789
15857
15988
16018
16147
16256.
16336
16463.
16599
16644
16764
16886
16970
170111
171106
17225
17339.
17414
17525
17653
17720
17856.
17911
1807
18140
18232.
18317
18468
18538.
18616
1873
1884
1892
19012
19118
19237.
1939
19410
19511
19618
19745
19827
19911
20039.
20123
20237.
20322
20421
2057
20640
2077
2088
20916
21029
21120
21221
2137
2144
21512
21721
21813
22012
2212
22215
2234
22412
2259
2261
2278
2283
2296
2308
23131
23226
2336
23417
2356
23623
2371
23811
2392
24010
2417
24211
2431
24414
24521
2463
24712
2481
2496
25010
2515
25218
2537
25417
2554
25616
2578
25824
25917
2604
2611
2623
26312
2643
2658
2672
2681
2693
2714
2721
2731
2741
2753
2766
2795
2801
2811
2844
2851
2861
2882
2891
2905
2914
2937
2944
2951
2961
2971
29970
3002
3014
3021
3037
3051
3062
3072
3091
3107
3111
31314
3161
3201
3216
3222
3233
3244
3274
3282
3291
33013
3315
33211
3333
3341
3351
33611
3371
33820
33911
3402
3416
34210
34337.
34425
3459
34632.
3474
3489
3497
35012
3512
3525
3547
35832.
3597
3606
3611
36221
36314
36451
36517
36718
3689
3707
3716
37215
3731
37438.
375113
37657
37737.
37823
37987
38065
3821
3862
3881
3915
3921
3941
3973
4011
4031
4081
4092
4105
4111
4134
4151
4181
4201
4273
4282
4302
433314
4371
4502
4531
4681
4691
4835
4841
4861
4882
4899
4904
4922
493106
4943
4951
4962
4981
5121
5391
5531
5602
5702
6001
6023
6431
6462
6571
6631
6701
6722
7295
7321
7391
7441
7591
7781
8191
8591
9561
9592
9642
9651
9731
1 1331
1 1861
1 2672
1 5231
2 5351
2 5361
2 5372
2 5391
2 5401
2 5415
2 5421
2 5451
2 5471
25 7941

?


Esta seção não é uma ciência exata, mas pertence à classe de problemas do processamento de linguagem natural. A pesquisa de termos abusivos ou abusivos em uma lista específica de arquivos nunca será eficaz. Se você pesquisar com uma pesquisa simples, encontrará muitos arquivos comuns, como assemble.shetc. Então, peguei uma lista de maldições e verifiquei se algum arquivo em cada projeto começa com um desses valores seguido por um ponto. Isso significa que o arquivo nomeado gangbang.javaserá levado em consideração, mas assemble.shnão. No entanto, ele sentirá falta de muitas opções diferentes, como pu55syg4rgle.javaoutros nomes igualmente rudes.

Minha lista contém algumas palavras no leetspeak, como b00bse b1tch, para capturar alguns dos casos interessantes. Lista completa aqui.

Embora isso não seja totalmente preciso, como já mencionado, é incrivelmente interessante observar o resultado. Vamos começar com a lista de idiomas em que mais maldições. Provavelmente, você deve correlacionar o resultado com a quantidade total de código em cada idioma. Então, aqui estão os líderes.

LinguagemJurar nomes de arquivoPorcentagem de arquivo
Cabeçalho C76600,00126394567906%
Java70230.00258792635479%
C68970,00120706524533%
Php57130,00283428484703%
Javascript43060,00140692338568%
HTML35600.00177646776919%
Ruby31210,00223136542655%
Json15980.00293688627715%
C ++15430,00135977378652%
Dardo15330.19129310646%
Ferrugem15040,038465935524%
Ir modelo15000,0792233157387%
Svg12340.00771043360379%
XML12120,000875741051608%
Python10920.00119138129893%
Páginas JavaServer10370,0215440542669%


Interessante! Meu primeiro pensamento foi: “Oh, esses safados desenvolvedores C!” Mas, apesar do grande número desses arquivos, eles escrevem tanto código que a porcentagem de maldições é perdida no valor total. No entanto, é bastante claro que os desenvolvedores de Dart têm algumas palavras em seu arsenal! Se você conhece um dos programadores do Dart, pode apertar a mão dele.

Também quero saber quais são as maldições mais usadas. Vejamos uma mente coletiva suja comum. Alguns dos melhores que encontrei foram nomes normais (se você olhar de soslaio), mas a maioria dos outros certamente surpreenderá os colegas e alguns comentários nos pedidos de pool.

A palavraQuantidade
bunda11 358
botão10 368
bolas8001
xxx7205
sexo5021
nob3385
penhor2919
inferno2819
porcaria1112
anal950
arrebatar885
foda572
cocô510
cox476
merda383
luxúria367
bunda265
vagabundo151
caralho132
pron121
cum118
cok112
maldito105


Observe que algumas das palavras mais ofensivas da lista tinham nomes de arquivos correspondentes, o que eu acho bastante chocante. Felizmente, eles não são muito comuns e não estão incluídos na lista acima, que é limitada a arquivos com um número superior a 100. Espero que esses arquivos existam apenas para testar listas de permissões / negações e similares.

Os maiores arquivos pelo número de linhas em cada idioma


Como esperado, texto sem formatação, SQL, XML, JSON e CSV ocupam as primeiras posições: geralmente contêm metadados, despejos de banco de dados e similares.

Nota Alguns dos links abaixo podem não funcionar devido a algumas informações adicionais ao criar arquivos. A maioria deve funcionar, mas para alguns, pode ser necessário modificar um pouco a URL.

Lista completa
Linguagem
Plain Text1366100696temp.txt347 671 811
Phpphpfox_error_log_04_04_12_3d4b11f6ee2a89fd5ace87c910cee04b.php121 930 973
HTMLyo.html54 596 752
LEXl39 743 785
XMLdblp.xml39 445 222
Autoconf21-t2.in33 526 784
CSVontology.csv31 946 031
Prologtop500_full.p22 428 770
JavaScriptmirus.js22 023 354
JSONdouglasCountyVoterRegistration.json21 104 668
Game Maker Languagelg.gml13 302 632
C Headertrk6data.h13 025 371
Objective C++review-1.mm12 788 052
SQLnewdump.sql11 595 909
Patchclook_iosched-team01.patch10 982 879
YAMLdata.yml10 764 489
SVGlarge-file.svg10 485 763
Sasslarge_empty.scss10 000 000
AssemblyJs8 388 608
LaTeXtex8 316 556
C++ Headerprimpoly_impl.hh8 129 599
LispsimN.lsp7 233 972
PerlaimlCore3.pl6 539 759
SASoutput.sas5 874 153
CCathDomainDescriptionFile.v3.5.c5 440 052
Luagiant.lua5 055 019
Rdisambisearches.R4 985 492
MUMPSref.mps4 709 289
HEXcombine.hex4 194 304
Pythonmappings.py3 064 594
Schemeatomspace.scm3 027 366
C++Int.cpp2 900 609
Properties Filenuomi_active_user_ids.properties2 747 671
AlexDalek.X2 459 209
TCLTCL2 362 970
Rubysmj_12_2004.rb2 329 560
Wolframhmm.nb2 177 422
BrainfuckBF2 097 158
TypeScriptall_6.ts1 997 637
Module-Definitionmatrix.def1 948 817
LESSless1 930 356
Objective Cfaster.m1 913 966
Orgdefault.org1 875 096
JupyterReHDDM — AllGo sxFits-Copy0.ipynb1 780 197
Specman etwitter.e1 768 135
F*Pan_troglodytes_monomers.fst1 739 878
Systemdvideo_clean_lower_tokenized.target1 685 570
VImageMazeChannelValueROM.v1 440 068
Markdowneukaryota.md1 432 161
TeXjapanischtest.tex1 337 456
Fortheuroparl.tok.fr1 288 074
Shelladd_commitids_to_src.sh1 274 873
SKILLhijacked.il1 187 701
CSS7f116c3.css1 170 216
C#Form1.cs1 140 480
gitignore.gitignore1 055 167
Boo3.out.tex1 032 145
JavaMonster.java1 000 019
ActionScriptas1 000 000
MSBuildtrain.props989 860
DD883 308
CoqCompiledDFAs.v873 354
Clojureraw-data.clj694 202
Swig3DEditor.i645 117
Happyy624 673
GLSLcapsid.vert593 618
Verilogpipeline.vg578 418
Standard ML (SML)Ambit3-HRVbutNoHR.sml576 071
SystemVerilogbitcoinminer.v561 974
Visual BasiclinqStoreProcs.designer.vb561 067
Goinfo.go559 236
ExpectArgonne_hourly_dewpoint.exp552 269
Erlangsdh_analogue_data.erl473 924
MakefileMakefile462 433
QML2005.qml459 113
SPDXlinux-coreos.spdx444 743
VHDLcpuTest.vhd442 043
ASP.NETAllProducts.aspx438 423
XML SchemaAdvanceShipNotices.xsd436 055
Elixirgene.train.with.rare.ex399 995
Macromedia eXtensible Markup LanguageStaticFlex4PerformanceTest20000.mxml399 821
Adabmm_top.adb390 275
TypeScript Typingsdojox.d.ts384 171
PascalFHIR.R4.Resources.pas363 291
COBOLcpy358 745
Basicexcel-vba-streams-#1.bas333 707
Visual Basic for ApplicationsDispatcher.cls332 266
Puppetmain_110.pp314 217
FORTRAN Legacyf313 599
OCamlPent.ML312 749
FORTRAN Modernslatec.f90298 677
CoffeeScriptdictionary.coffee271 378
Nixhackage-packages.nix259 940
Intel HEXepdc_ED060SCE.fw.ihex253 836
Scalamodels_camaro.sc253 559
JuliaIJulia 0 .jl221 058
SRecode Templateespell.srt216 243
sedCSP-2004fe.SED214 290
ReStructuredTextS40HO033.rst211 403
Bosqueworld_dem_5arcmin_geo.bsq199 238
Emacs Lispubermacros.el195 861
F#Ag_O1X5.5_O2X0.55.eam.fs180 008
GDScript72906.gd178 628
Gherkin Specificationfeature175 229
HaskellExcel.hs173 039
Dartsurnames_list.dart153 144
Bazelmatplotlib_1.3.1-1_amd64-20140427-1441.build149 234
Haxeelf-x86id.hx145 800
IDLall-idls.idl129 435
LD Scriptkernel_partitions.lds127 187
Monkey CLFO_BT1-point.mc120 881
Modula3tpch22.m3120 185
BatchEZhunter.cmd119 341
Rustdata.rs114 408
Ur/Webdict.ur-en.ur113 911
Unreal Scriptorfs.derep_id97.uc110 737
Groovygroovy100 297
Smarty Templateassign.100000.tpl100 002
Bitbakebb100 000
BASHpalmer-master-thesis.bash96 911
PSL Assertiontest_uno.psl96 253
ASPsat_gbie_01.asp95 144
Protocol Buffersselect1.proto89 796
Report Definition LanguageACG.rdl84 666
PowershellPresentationFramework.ps183 861
Jinjajinja276 040
AWKwords-large.awk69 964
LOLCODElol67 520
Wrenreuse_constants.wren65 550
JSXAEscript.jsx65 108
Rakefileseed.rake63 000
Stata.31113.do60 343
Vim Scriptddk.vim60 282
SwiftGoogle.Protobuf.UnittestEnormousDescriptor.proto.swift60 236
Korn Shellattachment-0002.ksh58 298
AsciiDocindex.adoc52 627
Freemarker Templatedesigned.eml.ftl52 160
CythonCALC.pex.netlist.CALC.pxi50 283
m4ax.m447 828
Extensible Stylesheet Language Transformationsgreen_ccd.xslt37 247
Licensecopyright37 205
JavaServer Pages1MB.jsp36 007
Document Type Definitionbookmap.dtd32 815
FishGodsay.fish31 112
ClojureScriptcore.cljs31 013
Robot Frameworkrobot30 460
Processingdata.pde30 390
Ruby HTMLbig_table.rhtml29 306
ColdFusionspreadsheet2009Q1.cfm27 974
CMakeListOfVistARoutines.cmake27 550
ATStest06.dats24 350
Nimwindows.nim23 949
VueOgre.vue22 916
Razorvalidationerror.cshtml22 832
Spice Netlistinput6.ckt22 454
IsabelleWooLam_cert_auto.thy22 312
XAMLSymbolDrawings.xaml20 764
Opalangp4000_g+5.0_m0.0_t00_st_z+0.00_a+0.00_c+0.00_n+0.00_o+0.00_r+0.00_s+0.00.opa20 168
TOMLtoo_large.toml20 000
Madlangevgg.mad19 416
Stylustest.styl19 127
Go Templatehtml-template.tmpl19 016
AutoHotKeyglext.ahk18 036
ColdFusion CFScriptIntakeHCPCIO.cfc17 606
Zsh_oc.zsh17 307
Twig Templateshow.html.twig16 320
ABAPZRIM01F01.abap16 029
Elm57chevy.elm14 968
Kotlin_Arrays.kt14 396
Varnish Configuration40_generic_attacks.vcl13 367
Mustachehuge.mustache13 313
Alloyoutput.als12 168
Device Treetegra132-flounder-emc.dtsi11 893
MQL4PhD Appsolute System.mq411 280
Jadefugue.jade10 711
Q#in_navegador.qs10 025
JSONLtrain.jsonl10 000
Flow9graph2.flow9902
Valamwp.vala8765
Handlebarstheme.scss.hbs8259
CrystalCR8084
C Shellplna.csh8000
Hamlethamlet7882
BuildStreambiometrics.bst7746
Makoverificaciones.mako7306
AgdaPifextra.agda6483
Thriftconcourse.thrift6471
Fragment Shader Filems812_bseqoslabel_l.fsh6269
Cargo LockCargo.lock6202
XtendUMLSlicerAspect.xtend5936
Arvotest-extra-large.avsc5378
SconsSConstruct5272
Closure Templatebuckconfig.soy5189
GNBUILD.gn4653
Softbridge Basicowptext.sbl4646
PKGBUILDPKGBUILD4636
OzStaticAnalysis.oz4500
Luciusbootstrap.lucius3992
CeylonRedHatTransformer.ceylon3907
CreoleMariaDB_Manager_Monitors.creole3855
LunaBase.luna3731
Gradledependencies.gradle3612
MQL HeaderIncGUI.mqh3544
Cabalsmartword.cabal3452
Emacs Dev Envede3400
Mesonmeson.build3264
nuspecNpm.js.nuspec2823
Game Maker ProjectLudumDare.yyp2679
Juliusdefault-layout.julius2454
Idrisring_reduce.idr2434
Alchemistout.lmf-dos.crn2388
MQL5DTS1-Build_814.1_B-test~.mq52210
Android Interface Definition LanguageITelephony.aidl2005
Vertex Shader Filesdk_macros.vsh1922
Leaninteractive.lean1664
Jenkins BuildfileJenkinsfile1559
FIDLamb.in.fidl1502
Ponyscenery.pony1497
PureScriptprelude.purs1225
TaskPapertask-3275.taskpaper1196
DockerfileDockerfile1187
JanetJanet1158
Futharkmath.fut990
Zigmain.zig903
XCode ConfigProject-Shared.xcconfig522
JAILCregistryFile.jai489
QCLbwt.qcl447
Ur/Web Projectreader.urp346
Cassiusdefault-layout.cassius313
Docker ignore.dockerignore311
DhalllargeExpressionA.dhall254
ignore.ignore192
Bitbucket Pipelinebitbucket-pipelines.yml181
JustJustfile95
Verilog Args Fileor1200.irunargs60
Pollypolly26

Qual é o arquivo mais complexo em todos os idiomas?


Mais uma vez, esses valores não são diretamente comparáveis ​​entre si, mas é interessante ver o que é considerado o mais difícil em todos os idiomas.

Alguns desses arquivos são monstros absolutos. Por exemplo, considere o arquivo C ++ mais complexo que encontrei: COLLADASaxFWLColladaParserAutoGen15PrivateValidation.cpp : são 28,3 megabytes do inferno do compilador (e, felizmente, parece ser gerado automaticamente).

Nota Alguns dos links abaixo podem não funcionar devido a algumas informações adicionais ao criar arquivos. A maioria deve funcionar, mas para alguns, pode ser necessário modificar um pouco a URL.

Lista completa
Linguagem
C++COLLADASaxFWLColladaParserAutoGen15PrivateValidation.cpp682 001
JavaScriptblocks.js582 070
C Headerbigmofoheader.h465 589
CfmFormula.c445 545
Objective Cfaster.m409 792
SQLdump20120515.sql181 146
ASP.NETresults-i386.master164 528
JavaConcourseService.java139 020
TCL68030_TK.tcl136 578
C++ HeaderTPG_hardcoded.hh129 465
TypeScript Typingsall.d.ts127 785
SVGClass Diagram2.svg105 353
LualuaFile1000kLines.lua102 960
Phpfopen.php100 000
Org2015-02-25_idfreeze-2.org63 326
Rubyall_search_helpers.rb60 375
Schemetest.ss50 000
Stata.31113.do48 600
Elixirpmid.sgd.crawl.ex46 479
BrainfuckPoll.bf41 399
Perlr1d7.pl41 128
Gosegment_words_prod.go34 715
Pythonlrparsing-sqlite.py34 700
Module-Definitionwordnet3_0.def32 008
Clojureraw-data.clj29 950
C#Matrix.Product.Generated.cs29 675
Dparser.d27 249
FORTRAN Moderneuitm_routines_407c.f9027 161
Puppetsqlite3.c.pp25 753
SystemVerilog6s131.sv24 300
AutoconfMakefile.in23 183
Specman ehansards.e20 893
Smarty Templatetest-include-09.tpl20 000
TypeScriptJSONiqParser.ts18 162
Valtera_mf.v13 584
F*slayer-3.fst13 428
TeXdefinitions.tex13 342
SwiftGoogle.Protobuf.UnittestEnormousDescriptor.proto.swift13 017
Assemblyall-opcodes.s12 800
Bazelfirebird2.5_2.5.2.26540.ds4-10_amd64-20140427-2159.build12 149
FORTRAN Legacylm67.F11 837
RRallfun-v36.R11 287
ActionScriptAccessorSpray.as10 804
HaskellTags.hs10 444
Prologbooks_save.p10 243
DartDartParser.dart9606
VHDLunisim_VITAL.vhd9590
Batchtest.bat9424
Boocompman.tex9280
CoqNangateOpenCellLibrary.v8988
Shelli3_completion.sh8669
Kotlin1.kt7388
JSXtypescript-parser.jsx7123
MakefileMakefile6642
Emacs Lispbible.el6345
Objective C++set.mm6285
OCamlsparcrec.ml6285
Expectcondloadstore.stdout.exp6144
SASimport_REDCap.sas5783
Juliapilot-2013-05-14.jl5599
Cythontypes.pyx5278
Modula3tpch22.m35182
HaxeT1231.hx5110
Visual Basic for ApplicationsCoverage.cls5029
LispsimN.lsp4994
ScalaSpeedTest1MB.sc4908
GroovyZulTagLib.groovy4714
PowershellPresentationFramework.ps14108
Adabhps-print_full_version.adb3961
JavaServer Pagessink_jq.jsp3850
GNpatch-third_party ffmpeg ffmpeg_generated.gni3742
BasicMSA_version116_4q.bas3502
PascalPython_StdCtrls.pas3399
Standard ML (SML)arm.sml3375
Erlanglipsum.hrl3228
ASPmylib.asp3149
CSSthree-viewer.css3071
Unreal ScriptScriptedPawn.uc2909
CoffeeScriptgame.coffee2772
AutoHotKeyfishlog5.93.ahk2764
MQL4PhD Appsolute System.mq42738
ProcessingFinal.pde2635
IsabelleStdInst.thy2401
RazorChecklist.cshtml2341
Sass_multi-color-css-stackicons-social.scss2325
Valavalaccodebasemodule.vala2100
MSBuildall.props2008
Rustffi.rs1928
QMLDots.qml1875
F#test.fsx1826
Vim Scriptnetrw.vim1790
Korn Shellattachment.ksh1773
Vuevue1738
sedSED1699
GLSLcomp1699
Nixauth.nix1615
Mustachetemplate.mustache1561
Bitbakemy-2010.bb1549
Ur/Webvotes.ur1515
BASHpgxc_ctl.bash1426
MQL Headerhanoverfunctions.mqh1393
Visual BasicLGMDdataDataSet.Designer.vb1369
Q#flfacturac.qs1359
C Shellregtest_hwrf.csh1214
MQL5DTS1-Build_814.1_B-test~.mq51186
XtendParser.xtend1116
Nimdisas.nim1098
CMakeMacroOutOfSourceBuild.cmake1069
Protocol Buffersconfigure.proto997
SKILLswitch.il997
COBOLgeekcode.cob989
Game Maker LanguagehydroEx_River.gml982
Gherkin Specificationupload_remixed_program_again_complex.feature959
Alloybattleformulas.als948
Bosquerecover.bsq924
ColdFusionjquery.js.cfm920
Stylusbuttron.styl866
ColdFusion CFScriptapiUtility.cfc855
Verilogexec_matrix.vh793
Freemarker TemplateDefaultScreenMacros.html.ftl771
Crystallexer.cr753
Forthe4690
Monkey Cmc672
Rakefileimport.rake652
Zshzshrc649
Ruby HTMLext_report.rhtml633
Handlebarstemplates.handlebars557
SRecode TemplateAl3SEbeK61s.srt535
SconsSConstruct522
AgdaSquare.agda491
Ceylonruntime.ceylon467
Juliusdefault-layout.julius436
WolframqmSolidsPs8dContourPlot.nb417
Cabalparconc-examples.cabal406
Fragment Shader Fileflappybird.fsh349
ATSats_staexp2_util1.dats311
Jinjaphp.ini.j2307
Opalangunicode.opa306
Twig Templateproduct_form.twig296
ClojureScriptcore.cljs271
Hamlethamlet270
OzStaticAnalysis.oz267
ElmIndexer.elm267
Mesonmeson.build248
ABAPZRFFORI99.abap244
DockerfileDockerfile243
Wrenrepl.wren242
Fishfisher.fish217
Emacs Dev Envede211
GDScripttiled_map.gd195
IDLbgfx.idl187
Jadedocs.jade181
PureScriptList.purs180
XAMLMidnight.xaml179
Flow9TypeMapper.js.flow173
IdrisUtils.idr166
PSL Assertionpre_dec.psl162
Leankernel.lean161
MUMPSlink.mps161
Vertex Shader Filebase.vsh152
Go Templatecode-generator.tmpl148
Makopokemon.mako137
Closure Templatetemplate.soy121
Zigmain.zig115
TOMLtelex_o.toml100
Softbridge Basicasm.sbl98
QCLbwt.qcl96
Futharkmath.fut86
Ponyjstypes.pony70
LOLCODELOLTracer.lol61
Alchemistalchemist.crn55
MadlangCopying.MAD44
LD Scriptplugin.lds39.
Device Treedts22
FIDLGlobalCapabilitiesDirectory.fidl19
JAILICENSE.jai18
JustJustfile7
Android Interface Definition Languageaidl3
Ur/Web ProjectjointSpace.urp2
Spice NetlistGRI30.CKT2

O arquivo mais complicado sobre o número de linhas?


Parece bom em teoria, mas na realidade ... algo reduzido ou sem quebras de linha distorce os resultados, tornando-os sem sentido. Portanto, não publico os resultados dos cálculos. No entanto, criei um ticket para sccdar suporte à detecção de minificação, a fim de removê-lo dos resultados do cálculo.

Você provavelmente pode tirar algumas conclusões com base nos dados disponíveis, mas quero que todos os usuários se beneficiem desse recurso scc.

Qual é o arquivo mais comentado em cada idioma?


Não tenho idéia de quais informações valiosas você pode extrair disso, mas é interessante ver.

Nota Alguns dos links abaixo podem não funcionar devido a algumas informações adicionais ao criar arquivos. A maioria deve funcionar, mas para alguns, pode ser necessário modificar um pouco a URL.

Lista completa
Linguagem
Prologts-with-score-multiplier.p5 603 870
Ctestgen.c1 705 508
PythonUntitled0.py1 663 466
JavaScript100MB.js1 165 656
SVGp4-s3_I369600.svg1 107 955
SQLtest.sql858 993
C Headerhead.h686 587
C++ResidueTopology.cc663 024
Autoconfsquare_detector_local.in625 464
TypeScriptreallyLargeFile.ts583 708
LEXpolaris-xp900.l457 288
XMLTest1-CDL-soapui-project.xml411 321
HTMLtodos_centros.html366 776
PascalFHIR.R4.Resources.pas363 289
SystemVerilogmkToplevelBT64.v338 042
Phplt.php295 054
TypeScript Typingsdojox.d.ts291 002
VerilogCVP14_synth.vg264 649
Luaobjects.lua205 006
VTestDataset01-functional.v201 973
JavaFinalPackage.java198 035
C++ Headertest_cliprdr_channel_xfreerdp_full_authorisation.hpp196 958
Shelladd_commitids_to_src.sh179 223
C#ItemId.cs171 944
FORTRAN Modernslatec.f90169 817
AssemblyHeavyWeather.asm169 645
Module-Definitiontop_level.final.def139 150
FORTRAN Legacydlapack.f110 640
VHDLcpuTest.vhd107 882
Groovygroovy98 985
IDLall-idls.idl91 771
WolframK2KL.nb90 224
Gofrequencies.go89 661
Schemes7test.scm88 907
Dcoral.jar.d80 674
Coqcycloneiv_hssi_atoms.v74 936
Specman esysobjs.e65 146
Puppetsqlite3.c.pp63 656
Wrenmany_globals.wren61 388
Boosun95.tex57 018
Rubybigfile.rb50 000
Objective Cjob_sub011.m44 788
CSSscreener.css43 785
SwigCIDE.I37 235
FishGodsay.fish31 103
Sasssm30_kernels.sass30 306
CoffeeScripttmp.coffee29 088
Erlangnci_ft_ricm_dul_SUITE.erl28 306
Lispkm_2-5-33.lisp27 579
YAMLciudades.yml27 168
RPhyloSimSource.R26 023
ScalaGeneratedRedeclTests.scala24 647
Emacs Lisppjb-java.el24 375
HaskellDipole80.hs24 245
ATStest06.dats24 179
m4ax.m422 675
ActionScript__2E_str95.as21 173
Objective C++edges-new.mm20 789
Visual BasicclsProjections.vb20 641
TCL68030_TK.tcl20 616
Nixnix19 605
PerlLF_aligner_3.12_with_modules.pl18 013
Adaamf-internals-tables-uml_metamodel-objects.adb14 535
BatchMAS_0.6_en.cmd14 402
OCamlcode_new.ml13 648
LaTeXpm3dcolors.tex13 092
Properties Filemessages_ar_SA.properties13 074
MSBuildncrypto.csproj11 302
ASP.NETGallerySettings.ascx10 969
Powershellmail_imap.ps110 798
Standard ML (SML)TCP1_hostLTSScript.sml10 790
Darthtml_dart2js.dart10 547
AutoHotKeystudio.ahk10 391
ExpectNavigator.exp10 063
JuliaPETScRealSingle.jl9417
MakefileMakefile9204
Fortheuroparl.lowercased.fr9107
ColdFusionjs.cfm8786
TeXhyperref.sty8591
Opalangi18n_language.opa7860
LESS_variables.less7394
SwiftCodeSystems.swift6847
Bazelgcc-mingw-w64_12_amd64-20140427-2100.build6429
Kotlin_Arrays.kt5887
SAS202_002_Stream_DQ_DRVT.sas5597
HaxeCachedRowSetImpl.hx5438
Rustlrgrammar.rs5150
Monkey Cmc5044
Cythonpcl_common_172.pxd5030
Nimdisas.nim4547
Game Maker Languagegm_spineapi.gml4345
ABAPZACO19U_SHOP_NEW_1.abap4244
XAMLRaumplan.xaml4193
RazorPrivacy.cshtml4092
Varnish Configuration46_slr_et_rfi_attacks.vcl3924
BasicMSA_version116_4q.bas3892
IsabellePick.thy3690
Protocol Buffersmetrics_constants.proto3682
BASHbashrc3606
Clojureall-playlists-output.clj3440
F#GenericMatrixDoc.fs3383
ThriftNoteStore.thrift3377
COBOLdb2ApiDf.cbl3319
JavaServer Pagessink_jq.jsp3204
Modula3gdb.i33124
Visual Basic for ApplicationsHL7xmlBuilder.cls2987
Oztiming.oz2946
Closure Templatebuckconfig.soy2915
AgdaPifextra.agda2892
StataR2_2cleaningprocess.do2660
ColdFusion CFScriptIntake.cfc2578
LunaBase.luna2542
Unreal ScriptUIRoot.uc2449
CMakecmake2425
Orglens-wsn.org2417
Flow9index.js.flow2361
MQL HeaderIncGUI.mqh2352
JSXContactSheetII.jsx2243
MQL4PhD Appsolute System.mq42061
Ruby HTMLFinalOral-Old.Rhtml2061
GDScriptgroup.gd2023
Processingtestcode.pde2014
PSL Assertion2016-08-16.psl2011
ASPc_system_plugin.asp1878
AWKdic-generator.awk1732
Jinjaphp.ini.j21668
Zsh.zshrc1588
Q#in_navegador.qs1568
sedMakefile.sed1554
Styluspopup.styl1550
BitbakeDoxyfile.bb1533
Rakefilesamples.rake1509
Gherkin SpecificationWorkflowExecution.feature1421
Crystalstring.cr1412
Android Interface Definition LanguageITelephony.aidl1410
XtendProperties.xtend1363
SKILLDT_destub.il1181
Madlang.config.mad1137
Spice NetlistAPEXLINEAR.ckt1114
QMLMainFULL.qml1078
GLSLsubPlanetNoise.frag1051
Ur/Webinitial.ur1018
AlloyTransactionFeatureFinal.als1012
Valapuzzle-piece.vala968
Smarty TemplateEnsau.tpl965
Makojobs.mako950
TOMLtraefik.toml938
gitignore.gitignore880
Elixirmacros.ex832
GNrules.gni827
Korn Shelllx_distro_install.ksh807
LD Scriptvmlinux.lds727
SconsSConstruct716
HandlebarsConsent-Form.handlebars714
Device Treeddr4-common.dtsi695
FIDLamb.in.fidl686
JuliusglMatrix.julius686
C Shellsetup_grid.csh645
Leanperm.lean642
IdrisOverview.idr637
PureScriptArray.purs631
Freemarker Templateresult_softwares.ftl573
ClojureScriptlt-cljs-tutorial.cljs518
Fragment Shader Filebulb.fsh464
ElmAttributes.elm434
Jadeindex.jade432
Vueform.vue418
Gradlebuild.gradle416
Luciusbootstrap.lucius404
Go Templatefast-path.go.tmpl400
Mesonmeson.build306
F*Crypto.Symmetric.Poly1305.Bignum.Lemmas.Part1.fst289
CeylonIdeaCeylonParser.ceylon286
MQL5ZigzagPattern_oldest.mq5282
XCode ConfigProject-Shared.xcconfig265
Futharkblackscholes.fut257
Ponyscenery.pony252
Vertex Shader FileCC3TexturableRigidBones.vsh205
Softbridge Basicgreek.sbl192
Cabaldeeplearning.cabal180
nuspecXamarin.Auth.XamarinForms.nuspec156
DockerfileDockerfile152
Mustachemodels_list.mustache141
LOLCODELOLTracer.lol139
BuildStreamastrobib.bst120
JanetJanet101
Cassiusxweek.cassius94
Docker ignore.dockerignore92
Hamletupload.hamlet90
QCLmod.qcl88
Dhallnix.bash.dhall86
ignore.ignore60
JustJustfile46.
SRecode Templatesrecode-test.srt35
Bitbucket Pipelinebitbucket-pipelines.yml30
Ur/Web Projectreader.urp22
Alchemistctrl.crn16
Zigmain.zig12
MUMPSmps11
Bosquebosque.bsq8
Report Definition Languageexample.rdl4
Emacs Dev EnvProject.ede3
Cargo LockCargo.lock2
JAIthekla_atlas.jai1


Quantos projetos "limpos"


Sob o "puro", os tipos de projetos são puramente em um idioma. Obviamente, isso não é muito interessante por si só, então vamos vê-los em contexto. Como se viu, a grande maioria dos projetos tem menos de 25 idiomas e a maioria tem menos de dez.

O pico no gráfico abaixo está em quatro idiomas.

Obviamente, em projetos limpos, pode haver apenas uma linguagem de programação, mas há suporte para outros formatos, como markdown, json, yml, css, .gitignore, que são levados em consideração scc. Provavelmente, é razoável supor que qualquer projeto com menos de cinco idiomas seja "limpo" (para algum nível de limpeza), e isso representa pouco mais da metade do conjunto total de dados. Obviamente, sua definição de limpeza pode diferir da minha, para que você possa se concentrar em qualquer número que desejar.

O que me surpreende é uma onda estranha em torno de 34-35 idiomas. Não tenho uma explicação razoável de onde veio, e isso provavelmente é digno de uma investigação separada.



Lista completa
1886 559
2951 009
3989 025
41 070 987
51 012 686
6845 898
7655 510
8542 625
9446 278
10392 212
11295 810
12204 291
13139 021
14110 204
1587 143
1667 602
1761 936
1844 874
1934 740
2032 041
2125 416
2224 986
2323 634
2416 614
2513 823
2610 998
279 973
286 807
297 929
306 223
315 602
32.6 614
3312 155
3415 375
357329
366227
37.4158
38.3744
39.3844
401570
41.1041
42.746
431037
441363
45934
46.545
47503
48.439
49393
50.662
51436
52863
53393
54684
55372
56.366
57842
58.398
59.206
60208
61177
62377
63.450
64341
6586
66.78
67191
68280
6961
70209
71330
72171
73190
74142
75102
7632.
7757
7850.
7926
8031
8163.
8238.
8326
8472
85205
8673
8767
8821
8915
906
9112
9210
938
9416
9524
967
9730
984
991
1006
1017
10216
1031
1045
1051
10619
1082
1092
1101
1113
1121
1131
1143
1155
1165
1181
1205
1241
1251
1312
1321
1342
1361
1371
1381
1421
1432
1441
1581
1592

Projetos com TypeScript, mas não JavaScript


Ah, o mundo moderno do TypeScript. Mas para projetos TypeScript, quantos são puramente nessa linguagem?

Projetos limpos do TypeScript
27.026 projetos

Devo admitir que estou um pouco surpreso com esse número. Embora eu entenda que misturar JavaScript com TypeScript é bastante comum, acho que haveria mais projetos na linguagem newfangled. Mas é possível que um conjunto mais recente de repositórios aumente drasticamente seu número.

Alguém usa CoffeeScript e TypeScript?


Usando TypeScript e CoffeeScript
7849 projetos

Sinto que alguns desenvolvedores de TypeScript ficam doentes só de pensar nisso. Se isso os ajudar, posso assumir que a maioria desses projetos são programas como sccexemplos de todos os idiomas para fins de teste.

Qual é o tamanho típico do caminho em cada idioma


Como você pode fazer upload de todos os arquivos necessários em um diretório ou criar um sistema de diretórios, qual é o tamanho típico do caminho e o número de diretórios?

Para fazer isso, conte o número de barras no caminho para cada arquivo e a média. Eu não sabia o que esperar aqui, exceto que o Java poderia estar no topo da lista, pois geralmente existem caminhos de arquivo longos.

Lista completa
Linguagem
ABAP4,406555175781266
ASP6,372800350189209
ASP,NET7,25
ATS4,000007286696899
AWK4,951896171638623
ActionScript8,139775436837226
Ada4,00042700953189
Agda3,9126438455441743
Alchemist3,507827758789091
Alex5,000001311300139
Alloy5,000488222547574
Android Interface Definition Language11,0048217363656
Arvo5,9999994741776135
AsciiDoc3,5
Assembly4,75
AutoHotKey2,2087400984292067
Autoconf5,8725585937792175
BASH2,1289059027401294
Basic3,003903865814209
Batch6,527053831937014
Bazel3,18005371087348
Bitbake2,015624999069132
Bitbucket Pipeline2,063491820823401
Boo4,010679721835899
Bosque4,98316764831543
Brainfuck4,2025654308963425
BuildStream3,4058846323741645
C4,923767089530871
C Header4,8744963703211965
C Shell3,027952311891569
C#3,9303305113013427
C++3,765686050057411
C++ Header5,0468749664724015
CMake4,474763816174707
COBOL2,718678008809146
CSS3,158353805542812
CSV2,0005474090593514
Cabal2,0234456174658693
Cargo Lock2,602630615232607
Cassius3,56445312181134
Ceylon4,750730359584461
Clojure3,992209411809762
ClojureScript4,905477865257108
Closure Template6,800760253008946
CoffeeScript4,503051759227674
ColdFusion6,124976545410084
ColdFusion CFScript6,188602089623717
Coq4,000243186950684
Creole3,124526690922411
Crystal3,1243934621916196
Cython5,219657994911814
D9,291626930357722
Dart3,939864161220478
Device Tree6,530643464186369
Dhall0,12061593477278201
Docker ignore2,9984694408020562
Dockerfile3,1281526535752064
Document Type Definition6,3923129292499254
Elixir3,9999989270017977
Elm2,968016967181992
Emacs Dev Env4,750648772301943
Emacs Lisp2,0156250001746203
Erlang4,756546300111156
Expect5,126907349098477
Extensible Stylesheet Language Transformations4,519531239055546
F#5,752862453457055
F*4,063724638864983
FIDL4,484130888886213
FORTRAN Legacy6,117128185927898
FORTRAN Modern5,742561882347131
Fish3,993835387425861
Flow99,462829245721366
Forth4,016601327653859
Fragment Shader File3,8598623261805187
Freemarker Template11,122007250069213
Futhark6,188476562965661
GDScript3,2812499999872675
GLSL6,6093769371505005
GN3,497192621218512
Game Maker Language4,968749999941792
Game Maker Project3,8828125
Gherkin Specification3,999099795268081
Go3,9588454874029275
Go Template4
Gradle2,655930499769198
Groovy11,499969503013528
HEX3,98394775342058
HTML4,564478578133282
Hamlet3,4842224120074867
Handlebars4,998766578761208
Happy5,699636149570479
Haskell2,000140870587468
Haxe5,999999999999997
IDL6,249999993495294
Idris3,515075657458509
Intel HEX3,983397483825683
Isabelle4,18351352773584
JAI7,750007518357038
JSON3,9999972562254724
JSONL5,751412352804029
JSX5,0041952044625715
Jade4,744544962807595
Janet3,0312496423721313
Java11,265740856469563
JavaScript4,242187985224513
JavaServer Pages7,999993488161865
Jenkins Buildfile2,000000000087315
Jinja6,937498479846909
Julia3,9999848530092095
Julius3,187606761406953
Jupyter2,375
Just4,312155187124516
Korn Shell7,0685427486899925
Kotlin6,455277973786039
LD Script5,015594720376608
LESS5,999999999999886
LEX5,6996263030493495
LOLCODE3,722656242392418
LaTeX4,499990686770616
Lean4,1324310302734375
License4,7715609660297105
Lisp6,00048828125
Lua3,999999057474633
Lucius3,0000303482974573
Luna4,758178874869392
MQL Header5,421851994469764
MQL45,171874999953652
MQL54,069171198975555
MSBuild4,8931884765733855
MUMPS4,999999672174454
Macromedia eXtensible Markup Language3,9139365140181326
Madlang3,625
Makefile4,717208385332443
Mako4,0349732004106045
Markdown2,25
Meson3,342019969206285
Modula33,980173215190007
Module-Definition8,875000973076205
Monkey C3,0672508481368164
Mustache6,000003708292297
Nim3,7500824918105313
Nix2,0307619677526234
OCaml3,269392550457269
Objective C3,526367187490962
Objective C++5,000000834608569
Opalang4,500069382134143
Org5,953919619084296
Oz4,125
Php7,999984720368943
PKGBUILD4,875488281252839
PSL Assertion5,004394620715175
Pascal5,0781240425935845
Patch3,999999999999819
Perl4,691352904239976
Plain Text5,247085583343509
Polly2,953125
Pony2,9688720703125
Powershell4,596205934882159
Processing3,999931812300937
Prolog4,4726600636568055
Properties File3,5139240025278604
Protocol Buffers6,544742336542192
Puppet6,662078857422106
PureScript4,000007774680853
Python5,4531080610843805
Q#3,7499999999999996
QCL2,992309644818306
QML7,042003512360623
R3,0628376582587578
Rakefile4,78515574071335
Razor8,062499530475186
ReStructuredText5,061766624473476
Report Definition Language5,996573380834889
Robot Framework4,0104638249612155
Ruby5,1094988621717725
Ruby HTML5,57654969021678
Rust3,2265624976654292
SAS4,826202331129183
SKILL6,039547920227052
SPDX4,000203706655157
SQL7,701822280883789
SRecode Template3,500030428171159
SVG5,217570301278483
Sass6,000000000056957
Scala4,398563579539738
Scheme6,999969714792911
Scons5,010994006631478
Shell4,988665378738929
Smarty Template5,000527858268356
Softbridge Basic4,87873840331963
Specman e5,765624999999318
Spice Netlist3,9687499998835882
Standard ML (SML)4,031283043158929
Stata6,27345275902178
Stylus3,5000006667406485
Swift3
Swig5,246093751920853
SystemVerilog2,9995259092956985
Systemd3,9960937500000284
TCL2,508188682367951
TOML2,063069331460588
TaskPaper2,003804363415667
TeX3,500000000931251
Thrift4,956119492650032
Twig Template8,952746974652655
TypeScript4,976589231140677
TypeScript Typings5,832031190521718
Unreal Script4,22499089783372
Ur/Web4,41992186196147
Ur/Web Project5,1147780619789955
V4,251464832544997
VHDL4,000000961231823
Vala3,99804687498741
Varnish Configuration4,006103516563625
Verilog3,6906727683381173
Verilog Args File8,93109059158814
Vertex Shader File3,8789061926163697
Vim Script3,9995117782528147
Visual Basic4,5
Visual Basic for Applications3,6874962672526417
Vue7,752930045514701
Wolfram3,075198844074798
Wren4
XAML4,515627968764219
XCode Config6,969711296260638
XML6
XML Schema5,807670593268995
Xtend4,315674404631856
YAML3,2037304108964673
Zig3,4181210184442534
Zsh2,0616455049940288
gitignore2,51172685490884
ignore10,6434326171875
m43,7519528857323934
nuspec4,109375
sed4,720429063539986

YAML ou YML?


Houve uma vez uma "discussão" no Slack - usando .yaml ou .yml. Muitos foram mortos lá dos dois lados.

O debate pode finalmente terminar (?). Embora eu suspeite que alguns ainda prefiram morrer em uma disputa.

ExtensãoNúmero
yaml3.572.609
yml14 076 349

Maiúsculas, minúsculas ou mistas?


Qual registro é usado para nomes de arquivos? Como ainda existe uma extensão, podemos esperar, principalmente, um caso misto.

EstiloQuantidade
Misto9 094 732
Inferior2476
Topo2875

O que, é claro, não é muito interessante, porque geralmente as extensões de arquivo são minúsculas. E se ignorar extensões?

EstiloQuantidade
Misto8 104 053
Inferior347 458
Topo614 922

Não é o que eu esperava. Mais uma vez, principalmente misturados, mas eu teria pensado que o fundo seria mais popular.

Fábricas em Java


Outra idéia que os colegas tiveram quando analisaram algum código Java antigo. Pensei, por que não adicionar uma verificação para qualquer código Java onde Factory, FactoryFactory ou FactoryFactoryFactory apareça no título. A idéia é estimar o número dessas fábricas.

TipoQuantidadeCompartilhar
não de fábrica271 375 57497,9%
fábrica5 695 5682,09%
fábrica25.3160,009%
factoryfactoryfactory0 00%

Portanto, pouco mais de 2% do código Java acabou sendo uma fábrica ou fábrica. Felizmente, nenhuma fábrica foi encontrada. Talvez essa piada finalmente acabe, apesar de eu ter certeza de que pelo menos uma multifuncional recursiva séria de terceiro nível ainda funciona em algum tipo de monolito do Java 5 e ganha mais dinheiro todos os dias do que eu vi em toda a minha carreira. .

.Ignore arquivos


A idéia de arquivos .ignore foi desenvolvida por burntsushi e ggreer em uma discussão no Hacker News . Talvez este seja um dos melhores exemplos de ferramentas de código aberto "concorrentes" que trabalham em conjunto com bons resultados e são concluídas em tempo recorde. Tornou-se o padrão de fato para adicionar código que as ferramentas ignoram. scctambém cumpre a regra .ignore, mas também sabe contá-las. Vamos ver o quão bem a idéia se espalhou.

Lista completa
.ignore
0 09 088 796
17848
21258
3508
4333
543
6130
78
814
983
1049
1135
12112
13736
154
171
184
202
211
232
243
262
271
3431
3519
369
38.2
39.1
4312
441
452
46.5
497
50.7
5112
522

Ideias para o futuro


Eu gosto de fazer algumas análises para o futuro. Seria bom verificar coisas como as chaves do AWS AKIA e coisas do gênero. Eu também gostaria de expandir a cobertura dos projetos Bitbucket e Gitlab com análise para cada um, para ver se pode haver equipes de desenvolvimento de diferentes áreas por lá.

Se eu repetir o projeto, gostaria de superar as seguintes deficiências e levar em conta as seguintes idéias.

  • Armazene URLs em algum lugar nos metadados corretamente. Usar um nome de arquivo para armazená-lo foi uma má idéia, pois as informações são perdidas e pode ser difícil determinar a origem e o local do arquivo.
  • Não se preocupe com S3. Não faz sentido pagar pelo tráfego se eu o usar apenas para armazenamento. Desde o início, era melhor martelar tudo em um arquivo tar.
  • , .
  • -n , , , .
  • scc, , . , CIDE.C C, , HTML. .
  • , scc, , , . .
  • Gostaria de adicionar uma detecção shebang ao scc .
  • Seria bom considerar de alguma forma o número de estrelas no Github e o número de confirmações.
  • Quero, de alguma forma, adicionar um cálculo de índice de manutenção. Seria muito bom ver quais projetos são considerados os mais reparáveis, dependendo do tamanho.

Por que isso é tudo?


Bem, eu posso pegar algumas dessas informações e usá-las no meu mecanismo de pesquisa e programa searchcode.com scc. Pelo menos alguns pontos de dados úteis. Inicialmente, o projeto foi concebido de várias maneiras para o efeito. Além disso, é muito útil comparar seu projeto com outros. Foi também uma maneira interessante de passar vários dias resolvendo alguns problemas interessantes. E uma boa verificação de confiabilidade scc.

Além disso, atualmente estou trabalhando em uma ferramenta que ajuda os principais desenvolvedores ou gerentes a analisar o código, procurar idiomas específicos, arquivos grandes, falhas, etc. ... supondo que você precise analisar vários repositórios. Você digita algum tipo de código e a ferramenta diz como é sustentável e quais habilidades são necessárias para mantê-lo. Isso é útil ao decidir comprar algum tipo de base de código, fazer a manutenção ou obter uma idéia sobre o seu próprio produto que a equipe de desenvolvimento emite. Teoricamente, isso deve ajudar as equipes a escalar através de recursos compartilhados. Algo como o AWS Macie, mas para o código - algo como este no qual estou trabalhando. Eu mesmo preciso disso para o trabalho cotidiano e suspeito que outros possam encontrar aplicação para esse instrumento, pelo menos essa é a teoria.

Talvez valha a pena colocar aqui alguma forma de registro para os interessados ​​...

Arquivos não processados ​​/ processados


Se alguém quiser fazer sua própria análise e fazer correções, aqui está um link para os arquivos processados ​​(20 MB). Se alguém quiser postar arquivos brutos em domínio público, informe-me. São tar.gz de 83 GB e o interior tem pouco mais de 1 TB. O conteúdo consiste em pouco mais de 9 milhões de arquivos JSON de vários tamanhos.

UPD Várias almas boas sugeriram colocar o arquivo, os locais são indicados abaixo:


Hospedando este arquivo tar.gz, graças ao CNCF para o servidor para xet7 do projeto Wekan .

Source: https://habr.com/ru/post/pt470852/


All Articles