Traitement de 40 To de code à partir de 10 millions de projets sur un serveur dédié avec Go pour 100 $

L' outil de ligne de commande Sloc Cloc and Code (scc) que j'ai écrit , qui est maintenant finalisé et pris en charge par de nombreuses personnes formidables, compte les lignes de code, les commentaires et évalue la complexité des fichiers dans un répertoire. Une bonne sélection est nécessaire ici. L'outil compte les opérateurs de branchement dans le code. Mais qu'est-ce que la complexité? Par exemple, l'énoncé «Ce fichier a une difficulté 10» n'est pas très utile sans contexte. Pour résoudre ce problème, j'ai exécuté scc sur toutes les sources sur Internet. Cela vous permettra également de trouver des cas extrêmes que je n'ai pas pris en compte dans l'outil lui-même. Test de force brute puissant.

Mais si je vais exécuter le test sur toutes les sources du monde, cela nécessitera beaucoup de ressources informatiques, ce qui est également une expérience intéressante. Par conséquent, j'ai décidé de tout écrire - et cet article est apparu.

En bref, j'ai téléchargé et traité de nombreuses sources.

Figures nues:

  • 9 985 051 dépôts totaux
  • 9 100 083 référentiels avec au moins un fichier
  • 884968 référentiels vides (sans fichiers)
  • 3 500 000 000 fichiers dans tous les référentiels
  • Traités 40 736 530 379 778 octets (40 To)
  • 1 086 723 618 560 rangées identifiées
  • 816 822 273 469 lignes avec code reconnu
  • 124 382 152 510 lignes blanches
  • 145 519 192 581 lignes de commentaires
  • Complexité totale selon les règles scc: 71 884 867 919
  • 2 nouveaux bugs trouvés dans scc

Mentionnons juste un détail. Il n'y a pas 10 millions de projets, comme indiqué dans le titre très médiatisé. J'ai raté 15 000, alors je l'ai arrondi. Je m'en excuse.

Il a fallu environ cinq semaines pour tout télécharger, passer par scc et enregistrer toutes les données. Ensuite, un peu plus de 49 heures pour traiter 1 To JSON et obtenir les résultats ci-dessous.

Notez également que je peux me tromper dans certains calculs. Je vous informerai rapidement si une erreur est détectée et fournirai un ensemble de données.

Table des matières



Méthodologie


Depuis le lancement de searchcode.com, j'ai déjà accumulé une collection de plus de 7 000 000 de projets sur git, mercurial, subversion et ainsi de suite. Alors pourquoi ne pas les traiter? Travailler avec git est généralement la solution la plus simple, donc cette fois j'ai ignoré mercurial et subversion et exporté une liste complète des projets git. Il s'avère que j'ai suivi 12 millions de dépôts git, et j'ai probablement besoin de rafraîchir la page principale pour refléter cela.

Alors maintenant, j'ai 12 millions de dépôts git à télécharger et à traiter.

Lorsque vous exécutez scc, vous pouvez sélectionner la sortie dans JSON en enregistrant le fichier sur le disque: scc --format json --output myfile.json main.go Les résultats sont les suivants (pour un seul fichier):

 [ { "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 } ] 

Pour un exemple plus grand, voir les résultats du projet redis : redis.json . Tous les résultats ci-dessous sont obtenus à partir d'un tel résultat sans aucune donnée supplémentaire.

Il convient de garder à l'esprit que scc classe généralement les langues en fonction de l'extension (sauf si l'extension est commune, comme Verilog et Coq). Ainsi, si vous enregistrez un fichier HTML avec l'extension java, il sera considéré comme un fichier java. Ce n'est généralement pas un problème, car pourquoi faire cela? Mais, bien sûr, à grande échelle, le problème devient perceptible. J'ai découvert cela plus tard lorsque certains fichiers ont été déguisés en une extension différente.

Il y a quelque temps, j'ai écrit du code pour générer des balises github basées sur scc . Étant donné que le processus devait mettre en cache les résultats, je l'ai légèrement modifié pour les mettre en cache au format JSON sur AWS S3.

Avec le code des étiquettes dans AWS sur lambda, j'ai pris une liste exportée de projets, écrit environ 15 lignes python pour effacer le format pour correspondre à mon lambda, et lui ai fait une demande. En utilisant le multiprocessing python, j'ai parallélisé les requêtes à 32 processus afin que le point de terminaison réponde assez rapidement.

Tout fonctionnait parfaitement. Cependant, le problème était, d'une part, en termes de coût, et d'autre part, lambda a un délai d'expiration de 30 secondes pour API Gateway / ALB, de sorte qu'il ne peut pas traiter les grands référentiels assez rapidement. Je savais que ce n'était pas la solution la plus économique, mais je pensais que le prix serait d'environ 100 $, ce que je supporterais. Après avoir traité un million de référentiels, j'ai vérifié - et le coût était d'environ 60 $. Comme je n'étais pas satisfait de la perspective d'un compte AWS final de 700 $, j'ai décidé de reconsidérer ma décision. Gardez à l'esprit qu'il s'agissait essentiellement du stockage et du processeur utilisés pour collecter toutes ces informations. Tout traitement et exportation de données a considérablement augmenté le prix.

Comme j'étais déjà sur AWS, une solution rapide serait de supprimer les URL en tant que messages dans SQS et de les retirer en utilisant des instances EC2 ou Fargate pour le traitement. Puis évoluez comme un fou. Mais malgré l'expérience quotidienne avec AWS, j'ai toujours cru aux principes de la programmation de Taco Bell . De plus, il n'y avait que 12 millions de référentiels, j'ai donc décidé de mettre en œuvre une solution plus simple (moins chère).

Il n'a pas été possible de commencer le calcul localement en raison du terrible Internet en Australie. Cependant, mon searchcode.com fonctionne en utilisant les serveurs dédiés de Hetzner avec soin. Ce sont des machines i7 Quad Core 32 Go de RAM assez puissantes, souvent avec 2 To d'espace de stockage (généralement non utilisés). Ils disposent généralement d'une bonne puissance de calcul. Par exemple, le serveur frontal calcule la plupart du temps la racine carrée de zéro. Alors pourquoi ne pas commencer le traitement là-bas?

Ce n'est pas vraiment de la programmation Taco Bell puisque j'ai utilisé les outils bash et gnu. J'ai écrit un programme simple sur Go pour exécuter 32 go-routines qui lisent les données d'un canal, génèrent des sous-processus git et scc avant d'écrire la sortie sur JSON en S3. En fait, j'ai écrit la solution en premier en Python, mais la nécessité d'installer des dépendances pip sur mon serveur propre semblait être une mauvaise idée, et le système s'est écrasé de manière étrange que je ne voulais pas déboguer.

L'exécution de tout cela sur le serveur a produit les métriques suivantes dans htop, et plusieurs processus git / scc en cours d'exécution (scc n'apparaît pas dans cette capture d'écran) ont supposé que tout fonctionnait comme prévu, ce qui a été confirmé par les résultats dans S3.



Présentation et calcul des résultats


J'ai récemment lu ces articles , j'ai donc eu l'idée d'emprunter le format de ces articles en relation avec la présentation des informations. Cependant, je voulais également ajouter jQuery DataTables à de grands tableaux pour trier et rechercher / filtrer les résultats. Ainsi, dans l' article d'origine, vous pouvez cliquer sur les titres pour trier et utiliser le champ de recherche pour filtrer.

La taille des données à traiter a soulevé une autre question. Comment traiter 10 millions de fichiers JSON, occupant un peu plus de 1 To d'espace disque dans le compartiment S3?

La première pensée a été AWS Athena. Mais comme cela coûterait quelque chose comme 2,50 $ par requête pour un tel ensemble de données, j'ai rapidement commencé à chercher une alternative. Cependant, si vous enregistrez les données là-bas et les traitez rarement, cela peut être la solution la moins chère.

J'ai posté une question dans le chat d'entreprise (pourquoi résoudre des problèmes seul).

Une idée était de vider les données dans une grande base de données SQL. Cependant, cela signifie traiter les données dans la base de données, puis exécuter plusieurs fois des requêtes sur celle-ci. De plus, la structure de données signifie plusieurs tables, ce qui signifie des clés étrangères et des index pour fournir un certain niveau de performance. Cela semble inutile, car nous pourrions simplement traiter les données pendant que nous les lisons sur le disque - en une seule fois. J'étais également inquiet de créer une base de données aussi grande. Avec des données uniquement, sa taille sera supérieure à 1 To avant d'ajouter des index.

Voyant comment j'ai créé JSON d'une manière simple, j'ai pensé, pourquoi ne pas traiter les résultats de la même manière? Bien sûr, il y a un problème. Extraire 1 To de données de S3 coûtera cher. Si le programme plante, ce sera ennuyeux. Pour réduire les coûts, je voulais retirer tous les fichiers localement et les enregistrer pour un traitement ultérieur. Bon conseil: il vaut mieux ne pas stocker de nombreux petits fichiers dans un seul répertoire . Cela craint pour les performances d'exécution, et les systèmes de fichiers n'aiment pas cela.

Ma réponse à cela était un autre programme Go simple pour extraire des fichiers de S3, puis les enregistrer dans un fichier tar. Ensuite, je pourrais traiter ce fichier encore et encore. Le processus lui-même exécute un programme Go très laid pour traiter le fichier tar afin que je puisse réexécuter les requêtes sans avoir à extraire les données de S3 encore et encore. Je n'ai pas pris la peine de faire des routines ici pour deux raisons. Tout d'abord, je ne voulais pas charger le serveur autant que possible, donc je me suis limité à un cœur pour que le CPU travaille dur (l'autre était principalement verrouillé sur le processeur pour lire le fichier tar). Deuxièmement, je voulais garantir la sécurité des fils.

Une fois cela fait, une série de questions était nécessaire pour répondre. J'ai à nouveau utilisé l'esprit collectif et connecté mes collègues pendant que je proposais mes propres idées. Le résultat de cette fusion des esprits est présenté ci-dessous.

Vous pouvez trouver tout le code que j'ai utilisé pour traiter JSON, y compris le code pour le traitement local et le vilain script Python que j'ai utilisé pour préparer quelque chose d'utile pour cet article: veuillez ne pas commenter, je sais que le code est moche , et il est écrit pour une tâche ponctuelle, car il est peu probable que je le revoie jamais.

Si vous voulez voir le code que j'ai écrit pour une utilisation générale, regardez les sources scc .

Coût


J'ai dépensé environ 60 $ en informatique en essayant de travailler avec lambda. Je n'ai pas encore examiné le coût de stockage de S3, mais il devrait être proche de 25 $, selon la taille des données. Cependant, cela n'inclut pas les coûts de transmission, que je n'ai pas surveillés non plus. Veuillez noter que j'ai nettoyé le seau lorsque j'en ai fini, donc ce n'est pas un coût fixe.

Mais après un certain temps, j'ai encore abandonné AWS. Alors, quel est le coût réel si je voulais recommencer?

Tous les logiciels que nous avons sont gratuits et gratuits. Il n'y a donc rien à craindre.

Dans mon cas, le coût serait nul, puisque j'ai utilisé la puissance de calcul «gratuite» de searchcode.com. Cependant, tout le monde n'a pas de telles ressources gratuites. Par conséquent, supposons que l'autre personne veuille répéter cela et doit relever le serveur.

Cela peut être fait pour 73 € en utilisant le nouveau serveur dédié le moins cher de Hetzner , y compris le coût d'installation d'un nouveau serveur. Si vous attendez et explorez la section des enchères , vous pouvez trouver des serveurs beaucoup moins chers sans frais d'installation. Au moment d'écrire ces lignes, j'ai trouvé une voiture parfaite pour ce projet, pour 25,21 € par mois sans frais d'installation.



Ce qui est encore mieux, en dehors de l'Union européenne, la TVA sera supprimée de ce prix, alors n'hésitez pas à prendre encore 10%.

Par conséquent, si vous supprimez un tel service à partir de zéro sur mon logiciel, cela coûtera finalement jusqu'à 100 $, mais plutôt jusqu'à 50 $, si vous êtes un peu patient ou que vous réussissez. Cela suppose que vous utilisez le serveur depuis moins de deux mois, ce qui est suffisant pour le téléchargement et le traitement. Il y a également suffisamment de temps pour obtenir une liste de 10 millions de référentiels.

Si j'ai utilisé un tar compressé (ce qui n'est pas si difficile en fait), je pourrais traiter 10 fois plus de référentiels sur la même machine, et le fichier résultant restera toujours assez petit pour tenir sur le même disque dur. Bien que le processus puisse prendre plusieurs mois, car le téléchargement prendra plus de temps.

Cependant, pour aller bien au-delà des 100 millions de référentiels, une sorte de partage est nécessaire. Néanmoins, il est sûr de dire que vous répéterez le processus sur ma balance ou beaucoup plus grande, sur le même équipement sans trop d'effort ou de changements de code.

Sources de données


Voici le nombre de projets provenant de chacune des trois sources: github, bitbucket et gitlab. Notez que ceci est avant d'exclure les référentiels vides, par conséquent, le montant dépasse le nombre de référentiels qui sont réellement traités et pris en compte dans les tableaux suivants.

SourceLa quantité
github9 680 111
bitbucket248 217
gitlab56 722

Je m'excuse auprès du personnel de GitHub / Bitbucket / GitLab si vous lisez ceci. Si mon script a causé des problèmes (bien que j'en doute), j'ai un verre de votre choix lors de ma rencontre.

Combien de fichiers se trouvent dans le référentiel?


Passons aux vrais problèmes. Commençons par un simple. Combien de fichiers se trouvent dans le référentiel moyen? La plupart des projets n'ont que quelques fichiers ou plus? Après avoir parcouru les référentiels, nous obtenons le calendrier suivant:



Ici, l'axe des x montre les compartiments avec le nombre de fichiers, et l'axe des y montre le nombre de projets avec autant de fichiers. Limitez l'axe horizontal à mille fichiers, car le graphique est alors trop proche de l'axe.

Il semble que la plupart des référentiels contiennent moins de 200 fichiers.

Mais qu'en est-il de la visualisation jusqu'au 95e centile, qui montrera l'image réelle? Il s'avère que dans la grande majorité (95%) des projets - moins de 1000 fichiers. Alors que 90% des projets ont moins de 300 fichiers et 85% en ont moins de 200.



Si vous voulez construire un graphique vous-même et le faire mieux que moi, voici un lien vers les données brutes en JSON .

Quelle est la répartition linguistique?


Par exemple, si un fichier Java est identifié, alors nous augmentons le nombre de Java dans les projets d'un, et nous ne faisons rien pour le deuxième fichier. Cela donne une idée rapide des langues les plus couramment utilisées. Sans surprise, les langages les plus courants sont le markdown, le .gitignore et le texte en clair.

Markdown est le langage le plus utilisé; il est utilisé dans plus de 6 millions de projets, ce qui représente environ les 2/3 du total. Cela a du sens, car presque tous les projets incluent README.md qui est affiché en HTML pour les pages du référentiel.

Liste complète
La langueNombre de projets
Markdown6 041 849
gitignore5 471 254
Texte brut3,553,325
Javascript3 408 921
HTML3 397 596
CSS3 037 754
Licence2 597 330
XML2 218 846
Json1 903 569
Yaml1 860 523
Python1 424 505
Coquille1 395 199
Rubis1 386 599
Java1 319 091
En-tête C1259 519
Makefile1 215 586
Rakefile1 006 022
Php992 617
Fichier de propriétés909 631
Svg804 946
C791 773
C ++715 269
Lot645 442
Sass535 341
Autoconf505 347
Objectif c503 932
CoffeeScript435 133
SQL413 739
Perl390 775
C #380 841
ReStructuredText356 922
Msbuild354,212
MOINS281 286
Csv275,143
En-tête C ++199 245
CMake173 482
Patch169,078
Assemblage165,587
Schéma XML148 511
m4147 204
Pages JavaServer142 605
Script Vim134 156
Scala132 454
Objectif C ++127 797
Gradle126 899
Définition du module120 181
Bazel114 842
R113 770
ASP.NET111 431
Aller modèle111 263
Définition du type de document109 710
Spécifications du cornichon107 187
Modèle Smarty106 668
Jade105 903
Heureux105 631
Emacs lisp105 620
Prolog102 792
Allez99 093
Lua98 232
Bash95 931
D94 400
ActionScript93 066
Tex84 841
Powershell80 347
Awk79 870
Groovy75 796
Lex75 335
nuspec72 478
sed70 454
Marionnette67 732
Org67 703
Clojure67 145
Xaml65 135
TypeScript62 556
Systemd58 197
Haskell58 162
Config Xcode57 173
Boo55 318
LaTeX55 093
Zsh55 044
Stylet54 412
Rasoir54 102
Guidon51 893
Erlang49 475
Hex46 442
Tampons de protocole45 254
Moustache44,633
ASP43 114
Transformations de langage de feuille de style extensible42 664
Modèle de brindille42 273
Traitement41 277
Dockerfile39 664
Swig37 539
Script LD36 307
FORTRAN Legacy35 889
Scons35,373
Schéma34 982
Alex34 221
TCL33,766
Langage de définition d'interface Android33 000
Ruby HTML32 645
Arborescence des appareils31 918
Attendre30 249
Cabale30 109
Script irréel29 113
Pascal28,439
GLSL28,417
Intel hex27 504
Alliage27 142
Modèle Freemarker26,456
IDL26,079
Visual Basic pour les applications26,061
Langage de balisage extensible Macromedia24 949
F #24,373
Cython23 858
Jupyter23 577
Forth22 108
Visual basic21 909
Lisp21 242
OCaml20,216
Rouille19,286
Poisson18 079
Singe c17 753
Ada17 253
SAS17 031
Fléchette16 447
Typings TypeScript16,263
Systemverilog15 541
Thrift15 390
Coque C14 904
Fichier de shader de fragment14 572
Fichier d'ombrage de sommet14 312
QML13 709
Coldfusion13 441
Elixir12 716
Haxe12 404
Jinja12 274
Jsx12 194
Specman e12 071
FORTRAN Modern11,460
PKGBUILD11 398
ignorer11,287
Mako10 846
Tol10 444
COMPÉTENCE10 048
Asciidoc9 868
Rapide9 679
Buildstream9 198
ColdFusion CFScript8 614
Stata8 296
Créole8 030
Basique7 751
V7 560
Vhdl7,368
Julia7 070
ClojureScript7 018
Modèle de fermeture6 269
AutoHotKey5 938
Wolfram5 764
Docker ignorer5 555
Coquille de Korn5 541
Arvo5 364
Coq5,068
Modèle SRecode5 019
Langage du créateur de jeux4 557
Nix4 216
Vala4 110
COBOL3 946
Configuration du vernis3 882
Kotlin3,683
Bitbake3 645
Gdscript3 189
ML standard (SML)3,143
Jenkins buildfile2 822
Xtend2 791
Abap2 381
Modula32,376
Nim2,273
Verilog2013
Orme1 849
Brainfuck1 794
Ur / web1,741
Opalang1 367
GN1 342
Papier de travail1,330
Ceylan1 265
Cristal1 259
Agda1,182
Vue1 139
LOLCODE1 101
Hameau1 071
Cadre de robot1 062
MUMPS940
Emacs dev env937
Serrure de chargement905
Flow9839
Idris804
Julius765
Oz764
Q #695
Lucius627
Meson617
F *614
ATS492
Assertion PSL483
Pipeline Bitbucket418
Purescript370
Langage de définition de rapport313
Isabelle296
Jai286
MQL4271
Projet Ur / Web261
Alchimiste250
Cassius213
Softbridge basic207
En-tête MQL167
Jsonl146
Maigre104
Netlist d'épices100
Madlang97
Luna91
Poney86
MQL546
Troglodyte33
Juste30
QCL27
Zig21
SPDX20
Futhark16
Dhall15
Fidl14
Bosque14
Janet13
Projet Game Maker6
Polly6
Verilog Args File2

Combien de fichiers sont dans le référentiel par langue?


Ajout au tableau précédent, mais en moyenne par le nombre de fichiers pour chaque langue dans le référentiel. Autrement dit, combien de fichiers Java existent en moyenne pour tous les projets où il y a Java?

Liste complète
La langueNombre moyen de fichiers
Abap1,0008927583699165
ASP1.6565139917314107
ASP.NET346.88867258489296
ATS7.888545610390882
Awk5,098807478952136
ActionScript15,682562363539644
Ada7.265376817272021
Agda1,2669381110755398
Alchimiste7.437307493090622
Alex20.152479318023637
Alliage1,0000000894069672
Langage de définition d'interface Android3.1133707938643074
Arvo9.872687772928423
Asciidoc14,645389421879814
Assemblage1049.6270518312476
AutoHotKey1,5361384288472488
Autoconf33,99728695464163
Bash3.7384110335355545
Basique5,103623499110781
Lot3.943513588378872
Bazel1.0013122734382187
Bitbake1,0878349272366024
Pipeline Bitbucket1
Boo5,321822367969364
Bosque1.28173828125
Brainfuck1,3141119785974242
Buildstream1,4704635441667189
C15610,17972307699
En-tête C14103,33936083782
Coque C3.1231084093649315
C #45.804460355773394
C ++30,416980313492328
En-tête C ++8.313450764990089
CMake37.2566873554469
COBOL3,129408853490878
CSS5.332398714337156
Csv8.370432089241898
Cabale1.0078125149013983
Serrure de chargement1.0026407549221519
Cassius4.657169356495984
Ceylan7,397692655679642
Clojure8,702303821528872
ClojureScript5.384518778099244
Modèle de fermeture1,0210028022356945
CoffeeScript45.40906609668401
Coldfusion13.611857060674573
ColdFusion CFScript40,42554202020521
Coq10,903652047164622
Créole1.000122070313864
Cristal3.8729367926098117
Cython1.9811811237515262
D529,2562750397005
Fléchette1.5259554297822313
Arborescence des appareils586 4119588123021
Dhall5.072265625
Docker ignorer1.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
Allez115,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

Combien de lignes de code dans un fichier de langue typique?


Je suppose qu'il est toujours intéressant de voir quelles langues ont les fichiers les plus volumineux en moyenne? L'utilisation de la moyenne arithmétique génère des nombres anormalement élevés en raison de projets comme sqlite.c, qui est inclus dans de nombreux référentiels, combinant de nombreux fichiers en un seul, mais personne ne travaille jamais sur ce seul gros fichier (j'espère!)

Par conséquent, j'ai calculé la moyenne de la médiane. Cependant, les langues avec des valeurs absurdement élevées, comme Bosque et JavaScript, sont restées.

Alors j'ai pensé, pourquoi ne pas faire le pas d'un chevalier? À la suggestion de Darrell (un résident de Kablamo et un excellent scientifique des données), j'ai apporté un petit changement et changé la moyenne arithmétique, en supprimant des fichiers de plus de 5 000 lignes pour supprimer les anomalies.

Liste complète
La langue< 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
Bosque58199 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
Allez780558
Go Template41125 342
Gradle22822
Groovy73413
HEX1 00217 208
HTML5561 814
Hamlet22070
Handlebars5063 162
Happy1 6170
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
Spice Netlist9061 465
Standard ML (SML)47875
Stata20012
Stylus505214
Swift683663
Swig1 0314 540
SystemVerilog563830
Systemd12726
TCL77442 396
TOML10017
TaskPaper377
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

Complexité moyenne des fichiers dans chaque langue?


Quelle est la complexité moyenne des fichiers pour chaque langue?

En fait, les cotes de complexité ne peuvent pas être directement corrélées entre les langues. Extrait du fichier Lisezmoi lui scc- même :

Le score de complexité n'est qu'un nombre qui ne peut être mis en correspondance qu'entre des fichiers dans la même langue. Il ne doit pas être utilisé pour comparer directement les langues. La raison en est qu'il est calculé en recherchant des opérateurs de branche et de boucle pour chaque fichier.

Ainsi, les langages ne peuvent pas être comparés entre eux ici, bien que cela puisse être fait entre des langages similaires tels que Java et C, par exemple.

Il s'agit d'une mesure plus précieuse pour les fichiers individuels dans la même langue. Ainsi, vous pouvez répondre à la question "Ce fichier avec lequel je travaille est-il plus facile ou plus difficile que la moyenne?"

Je dois mentionner que je serai heureux des suggestions pour améliorer cette métrique dans scc . Pour une validation, il suffit généralement d'ajouter quelques mots-clés au fichier languages.json pour que tout programmeur puisse vous aider.

Liste complète
La langue
ABAP11,180740488380376
ASP11,536947250366211
ASP.NET2,149275320643484
ATS0,7621728432717677
AWK0
ActionScript22,088579905848178
Ada13,69141626294931
Agda0,19536590785719454
Alchemist0,3423442907696928
Alex0
Alloy6,9999997997656465
Android Interface Definition Language0
Arvo0
AsciiDoc0
Assembly1,5605608227976997
AutoHotKey423,87785756399626
Autoconf1,5524294972419739
BASH7,500000094871363
Basic1,0001350622574257
Batch1,4136352496767306
Bazel6,523681727119303
Bitbake0,00391388021490391
Bitbucket Pipeline0
Boo65,67764583729533
Bosque236,79837036132812
Brainfuck27,5516445041791
BuildStream0
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
Cabal3,6547924155738194
Cargo Lock0
Cassius0
Ceylon21,664400369259404
Clojure0,00009155273437716484
ClojureScript0,5347588658332859
Closure Template0,503426091716392
CoffeeScript0,02021490140137264
ColdFusion6,851776515250336
ColdFusion CFScript22,287403080299764
Coq3,3282556015266307
Creole0
Crystal1,6065794006138856
Cython42,87412906489837
D0
Dart2,1264450684815657
Device Tree0
Dhall0
Docker ignore0
Dockerfile6,158891172385556
Document Type Definition0
Elixir0,5000612735793482
Elm5,237952479502043
Emacs Dev Env1,2701271416728307E-61
Emacs Lisp0,19531250990197657
Erlang0,08028322620528387
Expect0,329944610851471
Extensible Stylesheet Language Transformations0
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
Gherkin Specification0,4085178437480328
Allez50,06279203974034
Go Template2,3866690339840662E-153
Gradle0
Groovy3,2506868488244898
HEX0
HTML0
Hamlet0,25053861103978114
Handlebars1,6943764911351036E-21
Happy0
Haskell28,470107150053625
Haxe66,52873523714804
IDL7,450580598712868E-9
Idris17,77642903881352
Intel HEX0
Isabelle0,0014658546850726184
JAI7,749968137734008
JSON0
JSONL0
JSX0,3910405338329044
Jade0,6881713929215119
Janet0
Java297,22908150612085
JavaScript1,861130583340945
JavaServer Pages7,24235416213196
Jenkins Buildfile0
Jinja0,6118526458846931
Julia5,779676990326951
Julius3,7432448068125277
Jupyter0
Just1,625490248219907
Korn Shell11,085027896435056
Kotlin5,467347841779503
LD Script6,538079182471746E-26
LESS0
LEX0
LOLCODE5,980839657708373
LaTeX0
Lean0,0019872561135834133
License0
Lisp4,033602018074421
Lua44,70686769972825
Lucius0
Luna0
MQL Header82,8036524637758
MQL42,9989408299408566
MQL532,84198718928553
MSBuild2,9802322387695312E-8
MUMPS5,767955578948634E-17
Macromedia eXtensible Markup Language0
Madlang8,25
Makefile3,9272747722381812E-90
Mako0,007624773579836673
Markdown0
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
PSL Assertion0,5009768009185791
Pascal4
Patch0
Perl48,16959255514553
Plain Text0
Polly0
Pony4,91082763671875
Powershell0,43151378893449877
Processing9,691001653621564
Prolog0,5029296875147224
Properties File0
Protocol Buffers0,07128906529847256
Puppet0,16606500436341776
PureScript1,3008141816356456
Python11,510142201304832
Q#5,222080192729404
QCL13,195626304795667
QML0,3208023407643109
R0,40128818821921775
Rakefile2,75786388297917
Razor0,5298294073055322
ReStructuredText0
Report Definition Language0
Robot Framework0
Ruby7,8611656283491795
Ruby HTML1,3175727506823756
Rust8,62646485221385
SAS0,5223999023437882
SKILL0,4404907226562501
SPDX0
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
SystemVerilog0,250593163372906
Systemd0
TCL96,5072605676113
TOML0,0048828125000002776
TaskPaper0
TeX54,0588040258797
Thrift0
Twig Template2,668124511961211
TypeScript9,191392608918255
TypeScript Typings6,1642456222327375
Unreal Script2,7333421227943004
Ur/Web16,51621568240534
Ur/Web Project0
V22,50230618938804
VHDL18,05495198571289
Vala147,2761703068509
Varnish Configuration0
Verilog5,582400367711671
Verilog Args File0
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
XML0
XML Schema0
Xtend2,8245844719990547
YAML0
Zig1,0158334437942358
Zsh1,81697392626756
gitignore0
ignore0
m40
nuspec0
sed22,91158285739948

Nombre moyen de commentaires pour les fichiers dans chaque langue?


Quel est le nombre moyen de commentaires dans les fichiers dans chaque langue?

Peut-être que la question peut être reformulée: les développeurs dans quelle langue écrivent le plus de commentaires, suggérant une incompréhension du lecteur.

Liste complète
La langueCommentaires
ABAP56,3020026683825
ASP24,67145299911499
ASP.NET9,140447860406259E-11
ATS41,89465025163305
AWK11,290069486393975
ActionScript31,3568633027012
Ada61,269572412982384
Agda2,4337660860304755
Alchemist2,232399710231226E-103
Alex0
Alloy0,000002207234501959681
Android Interface Definition Language26,984662160277367
Arvo0
AsciiDoc0
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
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
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
Crystal6,0308081267588145
Cython21,0593019957583
D0
Dart4,634361584097128
Device Tree33,64898256434121
Dhall1,0053101042303751
Docker ignore8,003553375601768E-11
Dockerfile4,526245545632278
Document Type Definition0
Elixir8,0581139370409
Elm24,73191350743249
Emacs Dev Env2,74822998046875
Emacs Lisp12,168370702306452
Erlang16,670030919109056
Expect3,606161126133445
Extensible Stylesheet Language Transformations0
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
Gherkin Specification0,0032959059321794604
Allez6,464829990599041
Go Template4,460169822267483E-251
Gradle0,5374194774415457
Groovy32,32068506016523
HEX0
HTML0,16671794164614084
Hamlet4,203293477836184E-24
Handlebars0,9389737429747177
Happy0
Haskell20,323476462551376
Haxe9,023509566990532
IDL1,01534495399968
Idris0,36279318680267497
Intel HEX0
Isabelle4,389802167076498
JAI2,220446049250313E-16
JSON0
JSONL0
JSX0,9860839844113964
Jade0,25000000000034117
Janet9,719207406044006
Java330,66188089718935
JavaScript22,102491285372537
JavaServer Pages4,31250095370342
Jenkins Buildfile0
Jinja2,5412145720173454E-50
Julia12,542627036271085
Julius0,24612165248208867
Jupyter0
Just0,3186038732601446
Korn Shell40,89005232702741
Kotlin0,3259347784770708
LD Script3,7613336386434204
LESS15,495439701029127
LEX55,277186392539086
LOLCODE13,578125958700468
LaTeX3,316717967334341
Lean21,194565176965895
License0
Lisp88,10676444837796
Lua76,67247973843406
Lucius0,3894241626790286
Luna16,844066019174637
MQL Header82,22436339969337
MQL41,957314499740677
MQL527,463183855085845
MSBuild0,19561428198176206
MUMPS5,960464477541773E-8
Macromedia eXtensible Markup Language0
Madlang6,75
Makefile1,2287070602578574
Mako1,3997604187154047E-8
Markdown0
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
PSL Assertion4,470348358154297E-7
Pascal274,7797153576955
Patch0
Perl42,73014043490598
Plain Text0
Polly0
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
Report Definition Language1,8589575837924928E-119
Robot Framework0
Ruby8,696056880656087
Ruby HTML0,031281024218515086
Rust22,359375028118006
SAS0,7712382248290134
SKILL0,002197265625
SPDX0
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
TCL382,839838598133
TOML0,37500173695180483
TaskPaper0
TeX8,266233975096164
Thrift50,53134153016524
Twig Template0
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
Vertex Shader File1,7979557178975683
Vim Script0
Visual Basic0,26300267116040704
Visual Basic for Applications0,3985138943535276
Vue5,039982162930666E-52
Wolfram70,01674025323683
Wren30694,003311276458
XAML0,5000169009533838
XCode Config13,653495818959595
XML3,533205032457776
XML Schema0
Xtend19,279739396268607
YAML1,1074293861154887
Zig0,507775428428431
Zsh6,769231127673729
gitignore1,3347179947709417E-20
ignore0,0356445312500015
m45,4183238737327075
nuspec3,640625
sed6,423678000929861

Quels sont les noms de fichiers les plus courants?


Quels noms de fichiers sont les plus courants dans toutes les bases de code, en ignorant l'extension et la casse?

Si vous me l'aviez demandé plus tôt, je dirais: README, main, index, license. Les résultats reflètent assez bien mes hypothèses. Bien qu'il y ait beaucoup de choses intéressantes. Je n'ai aucune idée pourquoi tant de projets contiennent un fichier appelé 15ou s15.

Le makefile le plus courant m'a un peu surpris, mais je me suis alors souvenu qu'il était utilisé dans de nombreux nouveaux projets JavaScript. Une autre chose intéressante à noter: il semble que jQuery soit toujours sur le cheval, et les rapports de sa mort sont grandement exagérés, et il est à la quatrième place de la liste.

Liste complète
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
android7 915 225
config7 391 812
default5 563 255
construire5 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
déboguer2 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

Veuillez noter qu'en raison de limitations de mémoire, j'ai rendu ce processus un peu moins précis. Après 100 projets, j'ai vérifié la carte et supprimé les noms des fichiers apparus moins de 10 fois dans la liste. Ils pourraient revenir au test suivant, et s'ils se rencontraient plus de 10 fois, ils restaient sur la liste. Peut-être que certains des résultats contiennent une erreur si un nom commun apparaît rarement dans le premier lot de référentiels avant de devenir commun. En bref, ce ne sont pas des nombres absolus, mais devraient être assez proches d'eux.

Je pouvais utiliser l’arbre des préfixes pour «presser» l’espace et obtenir les nombres absolus, mais je ne voulais pas l’écrire, alors j’ai légèrement abusé de la carte pour économiser suffisamment de mémoire et obtenir le résultat. Cependant, il sera très intéressant d'essayer plus tard l'arborescence des préfixes.

Combien de référentiels n'ont pas de licence?


C'est très intéressant. Combien de référentiels ont au moins un fichier de licence explicite? Veuillez noter que l'absence d'un fichier de licence ici ne signifie pas que le projet ne l'a pas, car il peut exister dans le fichier README ou peut être indiqué via des balises de commentaire SPDX en lignes. Cela signifie simplement sccqu'il n'a pas pu trouver le fichier de licence explicite en utilisant ses propres critères. Actuellement, ces fichiers sont considérés comme "licence", "licence", "copie", "copie3", "non-licence", "non-licence", "licence-mit", "licence-mit" ou "copyright".

Malheureusement, la grande majorité des référentiels n'ont pas de licence. Je dirais qu'il existe de nombreuses raisons pour lesquelles un logiciel a besoin d'une licence, mais quelqu'un d'autre l'a dit pour moi.

Vous avez une licence?La quantité
non6 502 753
est là2 597 330



Combien de projets utilisent plusieurs fichiers .gitignore?


Certains peuvent ne pas le savoir, mais il peut y avoir plusieurs fichiers .gitignore dans un projet git. Dans cet esprit, combien de projets utilisent plusieurs fichiers .gitignore? Et en même temps, combien n'en ont pas un seul?

J'ai trouvé un projet assez intéressant avec 25 794 fichiers .gitignore dans le référentiel. Le résultat suivant était 2547. Je n'ai aucune idée de ce qui se passe là-bas. J’ai jeté un coup d’œil: on dirait qu’ils sont utilisés pour vérifier les répertoires, mais je ne peux pas le confirmer.

Pour en revenir aux données, voici un graphique des référentiels contenant jusqu'à 20 fichiers .gitignore, qui couvre 99% de tous les projets.



Comme prévu, la plupart des projets ont 0 ou 1 fichier .gitignore. Cela est confirmé par une décuplée massive du nombre de projets avec 2 fichiers. Ce qui m'a surpris, c'est combien de projets ont plus d'un fichier .gitignore. La longue queue dans ce cas est particulièrement longue.

J'étais curieux de savoir pourquoi certains projets ont des milliers de tels fichiers. L'un des principaux fauteurs de troubles est la fourchette https://github.com/PhantomX/slackbuilds : chacun d'eux a environ 2547 fichiers .gitignore. D'autres référentiels contenant plus d'un millier de fichiers .gitignore sont répertoriés ci-dessous.


.gitignore
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
321 176
33794
341 153
35845
36488
37627
38533
39502
40398
41370
42355
431 002
44265
45262
46295
47178
48384
49270
50189
51435
52202
53196
54325
55253
56320
57126
58329
59286
60292
61152
62237
63163
64149
65187
66164
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

?


Cette section n'est pas une science exacte, mais appartient à la classe des problèmes de traitement du langage naturel. La recherche de termes abusifs ou abusifs dans une liste spécifique de fichiers ne sera jamais efficace. Si vous effectuez une recherche avec une recherche simple, vous trouverez de nombreux fichiers ordinaires comme assemble.shet ainsi de suite. J'ai donc pris une liste de malédictions, puis vérifié si des fichiers dans chaque projet commencent par l'une de ces valeurs suivie d'un point. Cela signifie que le fichier nommé gangbang.javasera pris en compte, mais assemble.shpas. Cependant, il manquera de nombreuses options différentes, telles que d' pu55syg4rgle.javaautres noms tout aussi impolis.

Ma liste contient quelques mots sur le leetspeak, comme b00bset b1tch, pour attraper certains des cas intéressants. Liste complète ici.

Bien que ce ne soit pas tout à fait exact, comme déjà mentionné, il est incroyablement intéressant de regarder le résultat. Commençons par la liste des langues dans lesquelles le plus de malédictions. Vous devriez probablement corréler le résultat avec la quantité totale de code dans chaque langue. Voici donc les dirigeants.

La langueJurer les noms de fichiersPourcentage de fichier
En-tête C76600,00126394567906%
Java70230,00258792635479%
C68970,00120706524533%
Php57130,00283428484703%
Javascript43060,00140692338568%
HTML35600,00177646776919%
Rubis31210,00223136542655%
Json15980,00293688627715%
C ++15430,00135977378652%
Fléchette15330,19129310646%
Rouille15040,038465935524%
Aller modèle15000,0792233157387%
Svg12340,00771043360379%
XML12120,000875741051608%
Python10920,00119138129893%
Pages JavaServer10370,0215440542669%


Intéressant! Ma première pensée a été: "Oh, ces développeurs C coquins!" Mais malgré le grand nombre de ces fichiers, ils écrivent tellement de code que le pourcentage de malédictions est perdu dans le montant total. Cependant, il est assez clair que les développeurs de Dart ont quelques mots dans leur arsenal! Si vous connaissez l'un des programmeurs Dart, vous pouvez lui serrer la main.

Je veux aussi savoir quelles sont les malédictions les plus utilisées. Regardons un sale esprit collectif commun. Certains des meilleurs que j'ai trouvés étaient des noms normaux (si vous plissez les yeux), mais la plupart des autres surprendront certainement vos collègues et certains commentaires dans les demandes de pool.

Le motLa quantité
cul11 358
bouton10 368
balles8001
xxx7205
sexe5021
nob3385
pion2919
l'enfer2819
merde1112
anal950
arracher885
baiser572
merde510
cox476
merde383
la luxure367
fesses265
clochard151
enculer132
pron121
jouir118
cok112
putain105


Veuillez noter que certains des mots les plus offensants de la liste avaient des noms de fichiers correspondants, ce que je trouve assez choquant. Heureusement, ils ne sont pas très courants et ne sont pas inclus dans la liste ci-dessus, qui est limitée aux fichiers de plus de 100. J'espère que ces fichiers n'existent que pour tester les listes d'autorisation / refus et similaires.

Les fichiers les plus volumineux par le nombre de lignes dans chaque langue


Comme prévu, le texte en clair, SQL, XML, JSON et CSV occupent les premières positions: ils contiennent généralement des métadonnées, des vidages de base de données, etc.

Remarque Certains des liens ci-dessous peuvent ne pas fonctionner en raison d'informations supplémentaires lors de la création de fichiers. La plupart devraient fonctionner, mais pour certains, vous devrez peut-être modifier légèrement l'URL.

Liste complète
La langueNom du fichier
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
Allezinfo.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

Quel est le fichier le plus complexe dans toutes les langues?


Encore une fois, ces valeurs ne sont pas directement comparables entre elles, mais il est intéressant de voir ce qui est considéré comme le plus difficile dans chaque langue.

Certains de ces fichiers sont des monstres absolus. Par exemple, considérons le fichier C ++ le plus complexe que j'ai trouvé: COLLADASaxFWLColladaParserAutoGen15PrivateValidation.cpp : c'est 28,3 mégaoctets d'enfer du compilateur (et, heureusement, il semble être généré automatiquement).

Remarque Certains des liens ci-dessous peuvent ne pas fonctionner en raison d'informations supplémentaires lors de la création de fichiers. La plupart devraient fonctionner, mais pour certains, vous devrez peut-être modifier légèrement l'URL.

Liste complète
La langueNom du fichier
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
Allezsegment_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

Le fichier le plus compliqué concernant le nombre de lignes?


Cela semble bon en théorie, mais en fait ... quelque chose de minifié ou sans coupure de ligne déforme les résultats, les rendant vides de sens. Par conséquent, je ne publie pas les résultats des calculs. Cependant, j'ai créé un ticket en scccharge la détection de minification devait l' enlever à partir des résultats de calcul.

Vous pouvez probablement tirer des conclusions sur la base des données disponibles, mais je souhaite que tous les utilisateurs bénéficient de cette fonctionnalité scc.

Quel est le fichier le plus commenté dans chaque langue?


Je n'ai aucune idée des informations précieuses que vous pouvez en tirer, mais c'est intéressant à voir.

Remarque Certains des liens ci-dessous peuvent ne pas fonctionner en raison d'informations supplémentaires lors de la création de fichiers. La plupart devraient fonctionner, mais pour certains, vous devrez peut-être modifier légèrement l'URL.

Liste complète
La langueNom du fichier
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
Allezfrequencies.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


Combien de projets «propres»


Sous le "pur" dans les types de projets sont purement dans une seule langue. Bien sûr, ce n'est pas très intéressant en soi, alors regardons-les dans leur contexte. Il s'est avéré que la grande majorité des projets ont moins de 25 langues et la plupart en ont moins de dix.

Le pic dans le graphique ci-dessous est en quatre langues.

Bien sûr, dans les projets propres, il ne peut y avoir qu'un seul langage de programmation, mais il existe un support pour d'autres formats, tels que markdown, json, yml, css, .gitignore, qui sont pris en compte scc. Il est probablement raisonnable de supposer que tout projet avec moins de cinq langues est «propre» (pour un certain niveau de propreté), et cela représente un peu plus de la moitié de l'ensemble de données total. Bien sûr, votre définition de la propreté peut différer de la mienne, vous pouvez donc vous concentrer sur n'importe quel nombre que vous aimez.

Ce qui me surprend, c'est une étrange vague de 34 à 35 langues. Je n'ai aucune explication raisonnable d'où cela vient, et cela mérite probablement une enquête séparée.



Liste complète
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
326 614
3312 155
3415 375
357329
366227
374158
383744
393844
401570
411041
42746
431037
441363
45934
46545
47503
48439
49393
50662
51436
52863
53393
54684
55372
56366
57842
58398
59206
60208
61177
62377
63450
64341
6586
6678
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

Projets avec TypeScript mais pas JavaScript


Ah, le monde moderne de TypeScript. Mais pour les projets TypeScript, combien sont purement dans ce langage?

Projets Clean TypeScript
27 026 projets

Je dois admettre que je suis un peu surpris par ce chiffre. Bien que je comprenne que le mélange de JavaScript avec TypeScript est assez courant, je pense qu'il y aurait plus de projets dans le nouveau langage. Mais il est possible qu'un ensemble plus récent de référentiels augmente considérablement leur nombre.

Quelqu'un utilise-t-il CoffeeScript et TypeScript?


Utilisation de TypeScript et CoffeeScript
7849 projets

J'ai l'impression que certains développeurs TypeScript sont malades à l'idée même de cela. Si cela les aide, je peux supposer que la plupart de ces projets sont des programmes comme sccavec des exemples de toutes les langues à des fins de test.

Quelle est la longueur typique du chemin dans chaque langue


Étant donné que vous pouvez soit télécharger tous les fichiers dont vous avez besoin dans un répertoire, soit créer un système de répertoires, quelle est la longueur de chemin et le nombre de répertoires typiques?

Pour ce faire, comptez le nombre de barres obliques dans le chemin pour chaque fichier et la moyenne. Je ne savais pas à quoi m'attendre ici, sauf que Java pourrait être en haut de la liste, car il y a généralement de longs chemins de fichiers.

Liste complète
La langue
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
Allez3,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?


Il y a eu une fois une «discussion» à Slack - en utilisant .yaml ou .yml. Beaucoup y ont été tués des deux côtés.

Le débat peut enfin (?) Se terminer. Bien que je soupçonne que certains préfèrent encore mourir dans un différend.

ExtensionNuméro
yaml3,572,609
yml14 076 349

Majuscules, minuscules ou casse mixte?


Quel registre est utilisé pour les noms de fichiers? Puisqu'il y a encore une extension, on peut s'attendre, principalement, à un cas mixte.

Le styleLa quantité
Mixte9 094 732
Inférieur2476
Haut2875

Ce qui, bien sûr, n'est pas très intéressant, car généralement les extensions de fichier sont en minuscules. Et si ignorer les extensions?

Le styleLa quantité
Mixte8 104 053
Inférieur347 458
Haut614 922

Pas ce à quoi je m'attendais. Encore une fois, principalement mixte, mais j'aurais pensé que le fond serait plus populaire.

Usines à Java


Une autre idée que les collègues ont eue en regardant un vieux code Java. J'ai pensé, pourquoi ne pas ajouter une vérification pour tout code Java où Factory, FactoryFactory ou FactoryFactoryFactory apparaît dans le titre. L'idée est d'estimer le nombre de ces usines.

TapezLa quantitéPartagez
pas d'usine271 375 57497,9%
usine5 695 5682,09%
usine25,3160,009%
usine00%

Ainsi, un peu plus de 2% du code Java s'est avéré être une usine ou une usine. Heureusement, aucune usine d'usine n'a été trouvée. Peut-être que cette plaisanterie mourra enfin, même si je suis sûr qu'au moins une multifonctionnelle récursive sérieuse de troisième niveau fonctionne toujours quelque part dans une sorte de monolithe Java 5, et elle fait plus d'argent chaque jour que je n'en ai vu dans toute ma carrière. .

Fichiers .gnore


L'idée des fichiers .ignore a été développée par burntsushi et ggreer dans une discussion sur Hacker News . C'est peut-être l'un des meilleurs exemples d'outils open source «concurrents» qui fonctionnent avec de bons résultats et sont réalisés en un temps record. C'est devenu la norme de facto pour ajouter du code que les outils ignoreront. sccremplit également la règle .ignore, mais sait également les compter. Voyons voir comment l'idée s'est propagée.

Liste complète
.ignore
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
382
391
4312
441
452
465
497
507
5112
522

Des idées pour l'avenir


J'aime faire une analyse pour l'avenir. Ce serait bien de scanner des choses comme les clés AWS AKIA et autres. Je voudrais également étendre la couverture des projets Bitbucket et Gitlab avec une analyse pour chacun, pour voir s'il peut y avoir des équipes de développement de différents domaines.

Si jamais je répète le projet, je voudrais surmonter les lacunes suivantes et prendre en compte les idées suivantes.

  • Stockez correctement les URL quelque part dans les métadonnées. L'utilisation d'un nom de fichier pour le stocker était une mauvaise idée, car les informations sont perdues et il peut être difficile de déterminer la source et l'emplacement du fichier.
  • Ne vous embêtez pas avec S3. Cela n'a pas de sens de payer pour le trafic si je ne l'utilise que pour le stockage. Il valait mieux dès le début de tout marteler dans un fichier tar.
  • , .
  • -n , , , .
  • scc, , . , CIDE.C C, , HTML. .
  • , scc, , , . .
  • Je voudrais ajouter une détection de shebang à scc .
  • Ce serait bien de considérer le nombre d'étoiles sur Github et le nombre de commits.
  • Je veux en quelque sorte ajouter un calcul d'indice de maintenabilité. Il serait très agréable de voir quels projets sont considérés comme les plus réparables en fonction de leur taille.

Pourquoi tout cela?


Eh bien, je peux prendre certaines de ces informations et les utiliser dans mon moteur et programme de recherche searchcode.com scc. Au moins quelques points de données utiles. Initialement, le projet a été conçu de plusieurs façons pour cela. De plus, il est très utile de comparer votre projet avec d'autres. C'était aussi une façon intéressante de passer plusieurs jours à résoudre des problèmes intéressants. Et une bonne vérification de fiabilité scc.

De plus, je travaille actuellement sur un outil qui aide les principaux développeurs ou gestionnaires à analyser du code, à rechercher des langues spécifiques, des fichiers volumineux, des failles, etc. ... en supposant que vous devez analyser plusieurs référentiels. Vous entrez une sorte de code et l'outil indique à quel point il est maintenable et quelles compétences sont nécessaires pour le maintenir. Cela est utile pour décider d'acheter une sorte de base de code, de la réparer ou de se faire une idée de votre propre produit que l'équipe de développement distribue. Théoriquement, cela devrait aider les équipes à évoluer grâce à des ressources partagées. Quelque chose comme AWS Macie, mais pour le code - quelque chose comme ça, je travaille. J'ai moi-même besoin de cela pour le travail quotidien, et je soupçonne que d'autres peuvent trouver une application pour un tel instrument, du moins c'est la théorie.

Il vaudrait peut-être la peine de mettre ici une forme d'enregistrement pour les personnes intéressées ...

Fichiers non traités / traités


Si quelqu'un veut faire sa propre analyse et faire des corrections, voici un lien vers les fichiers traités (20 Mo). Si quelqu'un veut publier des fichiers bruts dans le domaine public, faites le moi savoir. Il s'agit de 83 Go tar.gz, et à l'intérieur d'un peu plus de 1 To. Le contenu se compose d'un peu plus de 9 millions de fichiers JSON de différentes tailles.

UPD Plusieurs bonnes âmes ont suggéré de placer le dossier, les lieux sont indiqués ci-dessous:


En hébergeant ce fichier tar.gz, merci à CNCF pour le serveur pour xet7 du projet Wekan .

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


All Articles