Procesando 40 TB de código de 10 millones de proyectos en un servidor dedicado con Go por $ 100

La herramienta de línea de comando Sloc Cloc and Code (scc) que escribí , que ahora está finalizada y respaldada por muchas personas excelentes, cuenta líneas de código, comenta y evalúa la complejidad de los archivos dentro de un directorio. Se necesita una buena selección aquí. La herramienta cuenta los operadores de ramificación en código. ¿Pero qué es la complejidad? Por ejemplo, la declaración "Este archivo tiene dificultad 10" no es muy útil sin contexto. Para resolver este problema, ejecuté scc en todas las fuentes en Internet. Esto también le permitirá encontrar algunos casos extremos que no consideré en la herramienta misma. Potente prueba de fuerza bruta.

Pero si voy a ejecutar la prueba en todas las fuentes del mundo, requerirá muchos recursos informáticos, lo que también es una experiencia interesante. Por lo tanto, decidí escribir todo, y apareció este artículo.

En resumen, descargué y procesé muchas fuentes.

Figuras desnudas:

  • 9,985,051 repositorios totales
  • 9.100.083 repositorios con al menos un archivo
  • 884 968 repositorios vacíos (sin archivos)
  • 3,500,000,000 archivos en todos los repositorios
  • Procesado 40736530379778 bytes (40 TB)
  • 1,086,723,618,560 filas identificadas
  • 816,822,273,469 líneas con código reconocido
  • 124 382 152 510 líneas en blanco
  • 145 519 192 581 líneas de comentarios
  • Complejidad total según las normas scc: 718844867919
  • 2 nuevos errores encontrados en scc

Solo mencionemos un detalle. No hay 10 millones de proyectos, como se indica en el título de alto perfil. Perdí 15,000, así que lo redondeé. Pido disculpas por esto.

Tomó alrededor de cinco semanas descargar todo, pasar por scc y guardar todos los datos. Luego, un poco más de 49 horas para procesar 1 TB JSON y obtener los resultados a continuación.

También tenga en cuenta que podría estar equivocado en algunos cálculos. Le informaré de inmediato si se detecta algún error y le proporcionaré un conjunto de datos.

Tabla de contenidos



Metodología


Desde el lanzamiento de searchcode.com, ya he acumulado una colección de más de 7,000,000 de proyectos en git, mercurial, subversión, etc. Entonces, ¿por qué no procesarlos? Trabajar con git suele ser la solución más fácil, por lo que esta vez ignoré mercurial y subversion y exporté una lista completa de proyectos de git. Resulta que en realidad rastreé 12 millones de repositorios git, y probablemente necesito actualizar la página principal para reflejar esto.

Entonces ahora tengo 12 millones de repositorios git para descargar y procesar.

Cuando ejecuta scc, puede seleccionar la salida en JSON guardando el archivo en el disco: scc --format json --output myfile.json main.go Los resultados son los siguientes (para un solo archivo):

 [ { "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 un ejemplo más amplio, vea los resultados del proyecto redis : redis.json . Todos los resultados a continuación se obtienen de dicho resultado sin ningún dato adicional.

Debe tenerse en cuenta que scc generalmente clasifica los idiomas en función de la extensión (a menos que la extensión sea común, como Verilog y Coq). Por lo tanto, si guarda un archivo HTML con la extensión java, se considerará un archivo java. Esto generalmente no es un problema, porque ¿por qué hacer esto? Pero, por supuesto, a gran escala, el problema se vuelve notable. Descubrí esto más tarde cuando algunos archivos se disfrazaron como una extensión diferente.

Hace algún tiempo escribí un código para generar etiquetas github basadas en scc . Como el proceso necesitaba almacenar en caché los resultados, lo cambié un poco para almacenarlos en formato JSON en AWS S3.

Con el código para etiquetas en AWS en lambda, tomé una lista exportada de proyectos, escribí unas 15 líneas de python para borrar el formato para que coincida con mi lambda, y le hice una solicitud. Usando el multiprocesamiento de Python, paralelicé las solicitudes a 32 procesos para que el punto final respondiera lo suficientemente rápido.

Todo funcionó brillantemente. Sin embargo, el problema era, en primer lugar, el costo y, en segundo lugar, lambda tiene un tiempo de espera de 30 segundos para API Gateway / ALB, por lo que no puede procesar repositorios grandes con la suficiente rapidez. Sabía que esta no era la solución más económica, pero pensé que el precio sería de alrededor de $ 100, lo que soportaría. Después de procesar un millón de repositorios, lo comprobé, y el costo fue de aproximadamente $ 60. Como no estaba contento con la perspectiva de una cuenta final de AWS de $ 700, decidí reconsiderar mi decisión. Tenga en cuenta que este fue básicamente el almacenamiento y la CPU que se utilizaron para recopilar toda esta información. Cualquier procesamiento y exportación de datos aumentó significativamente el precio.

Como ya estaba en AWS, una solución rápida sería volcar las URL como mensajes en SQS y extraerlas utilizando instancias de EC2 o Fargate para su procesamiento. Luego escala como loco. Pero a pesar de la experiencia cotidiana con AWS, siempre he creído en los principios de la programación de Taco Bell . Además, solo había 12 millones de repositorios, así que decidí implementar una solución más simple (más barata).

Comenzar el cálculo localmente no fue posible debido a la terrible Internet en Australia. Sin embargo, mi searchcode.com funciona utilizando los servidores dedicados de Hetzner con cuidado. Estas son máquinas i7 Quad Core 32 GB RAM bastante potentes, a menudo con 2 TB de espacio de almacenamiento (generalmente no se usan). Suelen tener un buen suministro de potencia informática. Por ejemplo, el servidor front-end la mayoría de las veces calcula la raíz cuadrada de cero. Entonces, ¿por qué no comenzar a procesar allí?

Esto no es realmente la programación de Taco Bell ya que usé las herramientas bash y gnu. Escribí un programa simple en Go para ejecutar 32 rutinas go que leen datos de un canal, generan subprocesos git y scc antes de escribir la salida en JSON en S3. En realidad, escribí la solución primero en Python, pero la necesidad de instalar dependencias de pip en mi servidor limpio parecía una mala idea, y el sistema se bloqueó de formas extrañas que no quería depurar.

La ejecución de todo esto en el servidor produjo las siguientes métricas en htop, y varios procesos en ejecución de git / scc (scc no aparece en esta captura de pantalla) asumieron que todo estaba funcionando como se esperaba, lo que fue confirmado por los resultados en S3.



Presentación y cálculo de resultados.


Recientemente leí estos artículos , así que tuve la idea de tomar prestado el formato de estas publicaciones en relación con la presentación de información. Sin embargo, también quería agregar jQuery DataTables a tablas grandes para ordenar y buscar / filtrar los resultados. Por lo tanto, en el artículo original, puede hacer clic en los encabezados para ordenar y usar el campo de búsqueda para filtrar.

El tamaño de los datos que debían procesarse planteó otra pregunta. ¿Cómo procesar 10 millones de archivos JSON, ocupando un poco más de 1 TB de espacio en disco en el bucket S3?

El primer pensamiento fue AWS Athena. Pero como costaría algo así como $ 2.50 por consulta para tal conjunto de datos, rápidamente comencé a buscar una alternativa. Sin embargo, si guarda los datos allí y rara vez los procesa, esta puede ser la solución más barata.

Publiqué una pregunta en el chat corporativo (por qué resolver problemas solo).

Una idea era volcar datos en una gran base de datos SQL. Sin embargo, esto significa procesar los datos en la base de datos y luego ejecutar consultas varias veces. Además, la estructura de datos significa varias tablas, lo que significa claves e índices foráneos para proporcionar un cierto nivel de rendimiento. Esto parece un desperdicio, porque podríamos procesar los datos a medida que los leemos del disco, de una sola vez. También me preocupaba crear una base de datos tan grande. Solo con datos, tendrá un tamaño de más de 1 TB antes de agregar índices.

Al ver cómo creé JSON de una manera simple, pensé, ¿por qué no procesar los resultados de la misma manera? Por supuesto, hay un problema. Extraer 1 TB de datos de S3 costará mucho. Si el programa falla, será molesto. Para reducir los costos, quería extraer todos los archivos localmente y guardarlos para su posterior procesamiento. Un buen consejo: es mejor no almacenar muchos archivos pequeños en un directorio . Esto apesta al rendimiento en tiempo de ejecución, y a los sistemas de archivos no les gusta eso.

Mi respuesta a esto fue otro simple programa Go para extraer archivos de S3 y luego guardarlos en un archivo tar. Entonces podría procesar este archivo una y otra vez. El proceso en sí ejecuta un programa Go muy feo para procesar el archivo tar para que pueda volver a ejecutar las consultas sin tener que extraer datos de S3 una y otra vez. No me molesté con las rutinas de go aquí por dos razones. En primer lugar, no quería cargar el servidor tanto como fuera posible, así que me limité a un núcleo para que la CPU trabaje duro (el otro estaba bloqueado principalmente en el procesador para leer el archivo tar). En segundo lugar, quería garantizar la seguridad del hilo.

Cuando esto se hizo, se necesitaba un conjunto de preguntas para responder. Nuevamente utilicé la mente colectiva y conecté a mis colegas mientras se me ocurrían mis propias ideas. El resultado de esta fusión de mentes se presenta a continuación.

Puede encontrar todo el código que utilicé para procesar JSON, incluido el código para el procesamiento local, y el script de Python feo que utilicé para preparar algo útil para este artículo: por favor no lo comente, sé que el código es feo , y está escrito para una tarea única, ya que es poco probable que lo vuelva a ver.

Si quieres ver el código que escribí para uso general, mira las fuentes scc .

Costo


Gasté alrededor de $ 60 en informática mientras intentaba trabajar con lambda. Todavía no he analizado el costo de almacenar S3, pero debería estar cerca de $ 25, dependiendo del tamaño de los datos. Sin embargo, esto no incluye los costos de transmisión, que tampoco vi. Tenga en cuenta que limpié el cubo cuando terminé con él, por lo que este no es un costo fijo.

Pero después de un tiempo todavía abandoné AWS. Entonces, ¿cuál es el costo real si quisiera volver a hacerlo?

Todo el software que tenemos es gratuito y gratuito. Entonces no hay nada de qué preocuparse.

En mi caso, el costo sería cero, ya que utilicé la potencia informática "gratuita" que quedaba de searchcode.com. Sin embargo, no todos tienen esos recursos gratuitos. Por lo tanto, supongamos que la otra persona quiere repetir esto y debe elevar el servidor.

Esto se puede hacer por 73 € utilizando el nuevo servidor dedicado más barato de Hetzner , incluido el costo de instalar un nuevo servidor. Si espera y profundiza en la sección de subastas , puede encontrar servidores mucho más baratos sin tarifas de instalación. Al momento de escribir, encontré un automóvil que es perfecto para este proyecto, por € 25.21 al mes sin tarifas de instalación.



Lo que es aún mejor, fuera de la Unión Europea, el IVA se eliminará de este precio, así que no dude en tomar otro 10%.

Por lo tanto, si levanta un servicio de este tipo desde cero en mi software, en última instancia le costará hasta $ 100, pero más bien hasta $ 50, si es un poco paciente o exitoso. Esto supone que ha estado utilizando el servidor durante menos de dos meses, lo cual es suficiente para descargar y procesar. También hay tiempo suficiente para obtener una lista de 10 millones de repositorios.

Si usara un alquitrán comprimido (que en realidad no es tan difícil), podría procesar 10 veces más repositorios en la misma máquina, y el archivo resultante seguirá siendo lo suficientemente pequeño como para caber en el mismo HDD. Aunque el proceso puede llevar varios meses, porque la descarga llevará más tiempo.

Sin embargo, para ir más allá de los 100 millones de repositorios, se requiere algún tipo de fragmentación. Sin embargo, es seguro decir que repetirá el proceso en mi escala o mucho más, en el mismo equipo sin mucho esfuerzo o cambios de código.

Fuentes de datos


He aquí cuántos proyectos provienen de cada una de las tres fuentes: github, bitbucket y gitlab. Tenga en cuenta que esto es antes de excluir los repositorios vacíos, por lo tanto, la cantidad excede el número de repositorios que realmente se procesan y se tienen en cuenta en las siguientes tablas.

FuenteCantidad
github9 680 111
bitbucket248 217
gitlab56 722

Pido disculpas al personal de GitHub / Bitbucket / GitLab si lees esto. Si mi guión causó algún problema (aunque lo dudo), tengo un trago de su elección al conocerme.

¿Cuántos archivos hay en el repositorio?


Pasemos a los problemas reales. Comencemos con uno simple. ¿Cuántos archivos hay en el repositorio promedio? ¿La mayoría de los proyectos solo tienen un par de archivos o más? Después de recorrer los repositorios, obtenemos el siguiente programa:



Aquí, el eje x muestra depósitos con la cantidad de archivos, y el eje y muestra la cantidad de proyectos con tantos archivos. Limite el eje horizontal a mil archivos, porque entonces el gráfico está demasiado cerca del eje.

Parece que la mayoría de los repositorios tienen menos de 200 archivos.

Pero, ¿qué pasa con la visualización hasta el percentil 95, que mostrará la imagen real? Resulta que en la gran mayoría (95%) de los proyectos, menos de 1000 archivos. Mientras que el 90% de los proyectos tienen menos de 300 archivos y el 85% tienen menos de 200.



Si desea crear un gráfico usted mismo y hacerlo mejor que yo, aquí hay un enlace a los datos sin procesar en JSON .

¿Cuál es el desglose del idioma?


Por ejemplo, si se identifica un archivo Java, entonces aumentamos el número de Java en los proyectos en uno, y no hacemos nada para el segundo archivo. Esto da una idea rápida de qué idiomas se usan más comúnmente. Como era de esperar, los lenguajes más comunes incluyen markdown, .gitignore y texto sin formato.

Markdown es el lenguaje más utilizado; se ve en más de 6 millones de proyectos, que es aproximadamente 2⁄3 del total. Esto tiene sentido, ya que casi todos los proyectos incluyen README.md que se muestra en HTML para páginas de repositorio.

Lista completa
IdiomaNumero de proyectos
Markdown6 041 849
gitignore5,471,254
Texto sin formato3,553,325
Javascript3 408 921
HTML3 397 596
CSS3 037 754
Licencia2 597 330
XML2 218 846
Json1 903 569
Yaml1 860 523
Pitón1 424 505
Concha1 395 199
Rubí1,386,599
Java1 319 091
Encabezado C1,259,519
Makefile1 215 586
Rakefile1 006 022
Php992 617
Archivo de propiedades909 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
Encabezado C ++199,245
CMake173,482
Parche169,078
Asamblea165,587
Esquema XML148 511
m4147 204
Páginas JavaServer142,605
Vim script134 156
Scala132 454
Objetivo C ++127 797
Gradle126,899
Definición del módulo120 181
Bazel114 842
R113 770
ASP.NET111 431
Ir plantilla111 263
Definición del tipo de documento109,710
Especificación de pepinillo107 187
Plantilla Smarty106 668
Jade105 903
Feliz105 631
Emacs lisp105 620
Prólogo102 792
Ir99 093
Lua98 232
Golpe95 931
D94,400
ActionScript93,066
Tex84 841
Powershell80 347
Awk79 870
Maravilloso75 796
Lex75 335
nuspec72,478
sed70 454
Marioneta67 732
Org67 703
Clojure67 145
Xaml65 135
TypeScript62 556
Systemd58 197
Haskell58 162
Xcode Config57 173
Boo55 318
LaTeX55 093
Zsh55 044
Stylus54 412
Maquinilla de afeitar54 102
Manillares51 893
Erlang49,475
Maleficio46,442
Tampones de protocolo45 254
Bigote44,633
ASP43 114
Transformaciones de lenguaje de hoja de estilo extensible42,664
Plantilla de ramita42,273
Procesamiento41,277
Dockerfile39,664
Swig37 539
LD Script36 307
FORTRAN Legacy35,889
Scons35,373
Esquema34 982
Alex34 221
TCL33,766
Lenguaje de definición de interfaz de Android33,000
HTML rubí32 645
Árbol de dispositivos31 918
Esperar30,249
Cabal30 109
Guión irreal29 113
Pascal28,439
GLSL28,417
Intel hexadecimal27 504
Aleación27 142
Plantilla de marcador libre26,456
IDL26,079
Visual Basic para aplicaciones26,061
Lenguaje de marcado extensible de Macromedia24,949
F #24,373
Cython23,858
Jupyter23,577
Adelante22 108
Visual básico21 909
Lisp21,242
OCaml20,216
Herrumbre19,286
Pescado18,079
Mono c17 753
Ada17 253
SAS17 031
Dardo16,447
TypeScript Typings16,263
Systemverilog15 541
Ahorro15 390
C concha14,904
Archivo de sombreador de fragmentos14,572
Vertex Shader File14 312
QML13,709
Fusión Fría13,441
Elixir12 716
Haxe12 404
Jinja12,274
Jsx12 194
Specman e12 071
FORTRAN Modern11,460
PKGBUILD11 398
ignorar11,287
Mako10 846
Tol10 444
Habilidad10 048
Asciidoc9 868
Veloz9 679
Buildstream9 198
ColdFusion CFScript8 614
Stata8 296
Criollo8 030
Básico7 751
V7 560
Vhdl7,368
Julia7 070
ClojureScript7 018
Plantilla de cierre6.269
AutoHotKey5 938
Wolfram5,764
Docker ignorar5 555
Korn shell5 541
Arvo5,364
Coq5,068
Plantilla SRecode5 019
Lenguaje creador de juegos4 557
Nix4.216
Vala4 110
COBOL3 946
Configuración de barniz3,882
Kotlin3,683
Bitbake3 645
Gdscript3 189
ML estándar (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
Documento de trabajo1,330
Ceilán1,265
Cristal1 259
Agda1,182
Vue1,139
LOLCODE1 101
Hamlet1,071
Marco robot1,062
MUMPS940
Emacs dev env937
Bloqueo de carga905
Flow9839
Idris804
Julius765
Oz764
Q #695
Lucius627
Meson617
F *614
ATS492
Afirmación de PSL483
Tubería Bitbucket418
Purescript370
Lenguaje de definición de informe313
Isabelle296
Jai286
MQL4271
Proyecto Ur / Web261
Alquimista250
Cassius213
Softbridge básico207
Encabezado MQL167
Jsonl146
Inclinarse104
Netlist de especias100
Madlang97
Luna91 91
Poni86
MQL546
Wren33
Solo30
QCL27
Zig21
SPDX20
Futhark16
Dhall15
Fidl14
Bosque14
Janet13
Proyecto de creador de juegos6 6
Polly6 6
Verilog Args File2

¿Cuántos archivos hay en el repositorio por idioma?


Adición a la tabla anterior, pero promediada por el número de archivos para cada idioma en el repositorio. Es decir, ¿cuántos archivos Java existen en promedio para todos los proyectos donde hay Java?

Lista completa
IdiomaNúmero promedio de archivos
Abap1,0008927583699165
ASP1.6565139917314107
ASP.NET346.88867258489296
ATS7.888545610390882
Awk5,098807478952136
ActionScript15.682562363539644
Ada7.265376817272021
Agda1,2669381110755398
Alquimista7.437307493090622
Alex20.152479318023637
Aleación1,0000000894069672
Lenguaje de definición de interfaz de Android3.1133707938643074
Arvo9.872687772928423
Asciidoc14,645389421879814
Asamblea1049.6270518312476
AutoHotKey1,5361384288472488
Autoconf33,99728695464163
Golpe3.7384110335355545
Básico5,103623499110781
Lote3.943513588378872
Bazel1.0013122734382187
Bitbake1,0878349272366024
Tubería Bitbucket1
Boo5,321822367969364
Bosque1.28173828125
Brainfuck1,3141119785974242
Buildstream1,4704635441667189
C15610,17972307699
Encabezado C14103,33936083782
C concha3.1231084093649315
C #45.804460355773394
C ++30,416980313492328
Encabezado C ++8.313450764990089
CMake37.2566873554469
COBOL3,129408853490878
CSS5.332398714337156
CSV8.370432089241898
Cabal1.0078125149013983
Bloqueo de carga1.0026407549221519
Cassius4.657169356495984
Ceilán7,397692655679642
Clojure8,702303821528872
ClojureScript5.384518778099244
Plantilla de cierre1,0210028022356945
CoffeeScript45.40906609668401
Fusión Fría13.611857060674573
ColdFusion CFScript40,42554202020521
Coq10,903652047164622
Criollo1.000122070313864
Cristal3.8729367926098117
Cython1.9811811237515262
D529,2562750397005
Dardo1,5259554297822313
Device Tree586,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
Pitón22,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

¿Cuántas líneas de código hay en un archivo de idioma típico?


¿Creo que todavía es interesante ver qué idiomas tienen los archivos más grandes en promedio? El uso de la media aritmética genera números anormalmente altos debido a proyectos como sqlite.c, que se incluye en muchos repositorios, combinando muchos archivos en uno, pero nadie trabaja en este archivo grande (¡espero!)

Por lo tanto, calculé el promedio de la mediana. Sin embargo, los lenguajes con valores absurdamente altos, como Bosque y JavaScript, aún permanecen.

Entonces pensé, ¿por qué no hacer el movimiento de un caballero? A sugerencia de Darrell (un residente de Kablamo y un excelente científico de datos), hice un pequeño cambio y cambié la media aritmética, colocando archivos en más de 5,000 líneas para eliminar anomalías.

Lista completa
Idioma< 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 5
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 4
LaTeX8957 482
Lean1819 9
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 7
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 años
Protocol Buffers5768 080
Puppet499660
PureScript598363
Pitón879258
Q#4755 417
QCL5483
QML8156 067
R56620
Rakefile1227 7
Razor7131 842
ReStructuredText7355 049
Report Definition Language1 38934 337
Robot Framework292115
Ruby7394 942
Ruby HTML326192
Rust1 0074 4
SAS23365
SKILL526123
SPDX1 242379
SQL466143
SRecode Template796534
SVG7961 538
Sass68214 653
Scala612661
Scheme5666
Scons5456 042
Shell3044 4
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
TaskPaper377 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 9
gitignore333
ignore62
m4959807
nuspec187193
sed8233

¿Complejidad de archivo promedio en cada idioma?


¿Cuál es la complejidad promedio de los archivos para cada idioma?

De hecho, las clasificaciones de complejidad no pueden correlacionarse directamente entre idiomas. Extracto del propio archivo Léame scc:

El puntaje de complejidad es solo un número que solo puede coincidir entre archivos en el mismo idioma. No debe usarse para comparar idiomas directamente. La razón es que se calcula buscando operadores de rama y bucle para cada archivo.

Por lo tanto, los lenguajes no se pueden comparar entre sí aquí, aunque esto se puede hacer entre lenguajes similares como Java y C, por ejemplo.

Esta es una métrica más valiosa para archivos individuales en el mismo idioma. Por lo tanto, puede responder la pregunta "¿Este archivo con el que estoy trabajando es más fácil o más difícil que el promedio?"

Debo mencionar que estaré contento con sugerencias para mejorar esta métrica en scc . Para una confirmación, generalmente es suficiente agregar solo algunas palabras clave al archivo languages.json, para que cualquier programador pueda ayudar.

Lista completa
Idioma
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 4
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
Pitón11,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 promedio de comentarios para archivos en cada idioma?


¿Cuál es el número promedio de comentarios en archivos en cada idioma?

Quizás la pregunta pueda reformularse: los desarrolladores en qué idioma escriben la mayoría de los comentarios, lo que sugiere un malentendido del lector.

Lista completa
IdiomaComentarios
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
Pitón15,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

¿Cuáles son los nombres de archivo más comunes?


¿Qué nombres de archivo son más comunes en todas las bases de código, ignorando la extensión y el caso?

Si me preguntaras antes, diría: LÉAME, principal, índice, licencia. Los resultados reflejan bastante bien mis suposiciones. Aunque hay muchas cosas interesantes. No tengo idea de por qué tantos proyectos contienen un archivo llamado 15o s15.

El archivo MAKE más común me sorprendió un poco, pero luego recordé que se utilizó en muchos proyectos nuevos de JavaScript. Otra cosa interesante a tener en cuenta: parece que jQuery todavía está en el caballo, y los informes de su muerte son muy exagerados, y él está en el cuarto lugar en la 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
androide7 915 225
config7 391 812
por defecto5 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

Tenga en cuenta que debido a las limitaciones de memoria, hice este proceso un poco menos preciso. Después de cada 100 proyectos, verifiqué el mapa y eliminé los nombres de los archivos que ocurrieron menos de 10 veces de la lista. Podrían regresar a la próxima prueba, y si se encontraban más de 10 veces, permanecerían en la lista. Quizás algunos resultados tengan algún error si algún nombre común rara vez aparece en el primer lote de repositorios antes de volverse común. En resumen, estos no son números absolutos, pero deberían estar lo suficientemente cerca de ellos.

Podría usar el árbol de prefijos para "exprimir" el espacio y obtener los números absolutos, pero no quería escribirlo, así que abusé un poco del mapa para ahorrar suficiente memoria y obtener el resultado. Sin embargo, será bastante interesante probar el árbol de prefijos más adelante.

¿A cuántos repositorios le falta una licencia?


Esto es muy interesante ¿Cuántos repositorios tienen al menos algún archivo de licencia explícito? Tenga en cuenta que la ausencia de un archivo de licencia aquí no significa que el proyecto no lo tenga, ya que puede existir en el archivo README o puede indicarse mediante etiquetas de comentarios SPDX en líneas. Simplemente significa que sccno pudo encontrar el archivo de licencia explícito utilizando sus propios criterios. Actualmente, dichos archivos se consideran "licencia", "licencia", "copia", "copia 3", "licencia", "licencia", "licencia-mit", "licencia-mit" o "copyright".

Desafortunadamente, la gran mayoría de los repositorios no tienen licencia. Diría que hay muchas razones por las cuales cualquier software necesita una licencia, pero alguien más lo dijo por mí.

¿Tienes una licencia?Cantidad
no6 502 753
esta ahi2 597 330



¿Cuántos proyectos usan múltiples archivos .gitignore?


Algunos pueden no saber esto, pero puede haber varios archivos .gitignore en un proyecto git. Con esto en mente, ¿cuántos proyectos usan múltiples archivos .gitignore? Y al mismo tiempo, ¿cuántos no tienen uno solo?

Encontré un proyecto bastante interesante con 25,794 archivos .gitignore en el repositorio. El siguiente resultado fue 2547. No tengo idea de lo que está sucediendo allí. Eché un vistazo brevemente: parece que se usan para verificar directorios, pero no puedo confirmar esto.

Volviendo a los datos, aquí hay un gráfico de repositorios con hasta 20 archivos .gitignore, que cubre el 99% de todos los proyectos.



Como se esperaba, la mayoría de los proyectos tienen 0 o 1 archivos .gitignore. Esto se confirma por una caída masiva de diez veces en el número de proyectos con archivos 2. Lo que me sorprendió fue cuántos proyectos tienen más de un archivo .gitignore. La cola larga en este caso es especialmente larga.

Tenía curiosidad por qué algunos proyectos tienen miles de esos archivos. Uno de los principales alborotadores es la bifurcación https://github.com/PhantomX/slackbuilds : cada uno de ellos tiene aproximadamente 2547 archivos .gitignore. A continuación se enumeran otros repositorios con más de mil archivos .gitignore.


.gitignore
0 03 628 829
14 576 435
2387 748
3136 641
4 479 808
5 548 336
633 686
7 733 408
822 571
9 916 453
1011 198
1110 070
128 194
137 701
145 040
154 320
165 905
174 156
18 años4 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 años
16147
16256
16336
16463
16599
16644
16764
16886
16970
170111
171106
17225
17339
17414
17525
17653
17720
17856
17911
1807 7
18140
18232
18317
18468
18538
18616
1873
1884 4
1892
19012
19118 años
19237
1939 9
19410
19511
19618 años
19745
19827
19911
20039
20123
20237
20322
20421
2057 7
20640
2077 7
2088
20916
21029
21120
21221
2137 7
2144 4
21512
21721
21813
22012
2212
22215
2234 4
22412
2259 9
2261
2278
2283
2296
2308
23131
23226
2336
23417
2356
23623
2371
23811
2392
24010
2417 7
24211
2431
24414
24521
2463
24712
2481
2496
25010
2515 5
25218 años
2537 7
25417
2554 4
25616
2578
25824
25917
2604 4
2611
2623
26312
2643
2658
2672
2681
2693
2714 4
2721
2731
2741
2753
2766
2795 5
2801
2811
2844 4
2851
2861
2882
2891
2905 5
2914 4
2937 7
2944 4
2951
2961
2971
29970
3002
3014 4
3021
3037 7
3051
3062
3072
3091
3107 7
3111
31314
3161
3201
3216
3222
3233
3244 4
3274 4
3282
3291
33013
3315 5
33211
3333
3341
3351
33611
3371
33820
33911
3402
3416
34210
34337
34425
3459 9
34632
3474 4
3489 9
3497 7
35012
3512
3525 5
3547 7
35832
3597 7
3606
3611
36221
36314
36451
36517
36718 años
3689 9
3707 7
3716
37215
3731
37438
375113
37657
37737
37823
37987
38065
3821
3862
3881
3915 5
3921
3941
3973
4011
4031
4081
4092
4105 5
4111
4134 4
4151
4181
4201
4273
4282
4302
433314
4371
4502
4531
4681
4691
4835 5
4841
4861
4882
4899 9
4904 4
4922
493106
4943
4951
4962
4981
5121
5391
5531
5602
5702
6001
6023
6431
6462
6571
6631
6701
6722
7295 5
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 5
2 5421
2 5451
2 5471
25 7941

?


Esta sección no es una ciencia exacta, pero pertenece a la clase de problemas del procesamiento del lenguaje natural. La búsqueda de términos abusivos o abusivos en una lista específica de archivos nunca será efectiva. Si busca con una búsqueda simple, encontrará muchos archivos comunes, assemble.shetc. Así que tomé una lista de maldiciones y luego verifiqué si algún archivo en cada proyecto comienza con uno de estos valores seguido de un punto. Esto significa que el archivo nombrado se gangbang.javatendrá en cuenta, pero assemble.shno. Sin embargo, echará de menos muchas opciones diferentes, como pu55syg4rgle.javaotros nombres igualmente groseros.

Mi lista contiene algunas palabras en leetspeak, como b00bsy b1tch, para ver algunos de los casos interesantes. Lista completa aquí.

Aunque esto no es del todo exacto, como ya se mencionó, es increíblemente interesante observar el resultado. Comencemos con la lista de idiomas en los que más maldiciones. Probablemente, debería correlacionar el resultado con la cantidad total de código en cada idioma. Así que aquí están los líderes.

IdiomaJurar nombres de archivoPorcentaje de archivo
Encabezado C76600.00126394567906%
Java70230.00258792635479%
C68970.00120706524533%
Php57130.00283428484703%
Javascript43060.00140692338568%
HTML35600.00177646776919%
Rubí31210.00223136542655%
Json15980.00293688627715%
C ++15430.00135977378652%
Dardo15330.19129310646%
Herrumbre15040.038465935524%
Ir plantilla15000.0792233157387%
Svg12340.00771043360379%
XML12120,000875741051608%
Pitón10920.00119138129893%
Páginas JavaServer10370.0215440542669%


Interesante! Mi primer pensamiento fue: "¡Oh, estos traviesos desarrolladores de C!" Pero a pesar de la gran cantidad de tales archivos, escriben tanto código que el porcentaje de maldiciones se pierde en la cantidad total. Sin embargo, ¡está bastante claro que los desarrolladores de Dart tienen algunas palabras en su arsenal! Si conoces a uno de los programadores de Dart, puedes darle la mano.

También quiero saber cuáles son las maldiciones más utilizadas. Veamos una mente colectiva sucia común. Algunos de los mejores que encontré fueron nombres normales (si entorna los ojos), pero la mayoría de los demás seguramente sorprenderán a sus colegas y algunos comentarios en las solicitudes de la piscina.

La palabraCantidad
culo11 358
perilla10 368
bolas8001
xxx7205
sexo5021
nob3385
peón2919
el infierno2819
mierda1112
anal950
arrebatar885
joder572
caca510
cox476
mierda383
lujuria367
a tope265
vagabundo151
cabrón132
pron121
cum118
cok112
maldita sea105


Tenga en cuenta que algunas de las palabras más ofensivas en la lista tenían nombres de archivos coincidentes, lo que me parece bastante impactante. Afortunadamente, no son muy comunes y no se incluyen en la lista anterior, que se limita a archivos con un número de más de 100. Espero que estos archivos existan solo para probar listas de permiso / denegación y similares.

Los archivos más grandes por el número de líneas en cada idioma.


Como era de esperar, el texto sin formato, SQL, XML, JSON y CSV ocupan las primeras posiciones: generalmente contienen metadatos, volcados de bases de datos y similares.

Nota Es posible que algunos de los enlaces a continuación no funcionen debido a información adicional al crear archivos. La mayoría debería funcionar, pero para algunos, es posible que deba modificar ligeramente la URL.

Lista completa
IdiomaNombre de archivo
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
Pitónmappings.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

¿Cuál es el archivo más complejo en cada idioma?


Una vez más, estos valores no son directamente comparables entre sí, pero es interesante ver lo que se considera más difícil en todos los idiomas.

Algunos de estos archivos son monstruos absolutos. Por ejemplo, considere el archivo C ++ más complejo que encontré: COLLADASaxFWLColladaParserAutoGen15PrivateValidation.cpp : son 28.3 megabytes del compilador infernal (y, afortunadamente, parece generarse automáticamente).

Nota Es posible que algunos de los enlaces a continuación no funcionen debido a información adicional al crear archivos. La mayoría debería funcionar, pero para algunos, es posible que deba modificar ligeramente la URL.

Lista completa
IdiomaNombre de archivo
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
Pitónlrparsing-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 años
JustJustfile7 7
Android Interface Definition Languageaidl3
Ur/Web ProjectjointSpace.urp2
Spice NetlistGRI30.CKT2

¿El archivo más complicado con respecto al número de líneas?


Suena bien en teoría, pero de hecho ... algo minimizado o sin saltos de línea distorsiona los resultados, haciéndolos sin sentido. Por lo tanto, no publico los resultados de los cálculos. Sin embargo, he creado un billete en sccla detección de apoyo minimización eran para sacarlo de los resultados del cálculo.

Probablemente pueda sacar algunas conclusiones basadas en los datos disponibles, pero quiero que todos los usuarios se beneficien de esta función scc.

¿Cuál es el archivo más comentado en cada idioma?


No tengo idea de qué información valiosa puede extraer de esto, pero es interesante verlo.

Nota Es posible que algunos de los enlaces a continuación no funcionen debido a información adicional al crear archivos. La mayoría debería funcionar, pero para algunos, es posible que deba modificar ligeramente la URL.

Lista completa
IdiomaNombre de archivo
Prologts-with-score-multiplier.p5 603 870
Ctestgen.c1 705 508
PitónUntitled0.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 4
Emacs Dev EnvProject.ede3
Cargo LockCargo.lock2
JAIthekla_atlas.jai1


¿Cuántos proyectos "limpios"


Bajo el "puro" en los tipos de proyectos son puramente en un idioma. Por supuesto, esto no es muy interesante en sí mismo, así que echemos un vistazo en contexto. Al final resultó que, la gran mayoría de los proyectos tienen menos de 25 idiomas, y la mayoría tiene menos de diez.

El pico en el siguiente gráfico está en cuatro idiomas.

Por supuesto, en proyectos limpios solo puede haber un lenguaje de programación, pero hay soporte para otros formatos, como markdown, json, yml, css, .gitignore, que se tienen en cuenta scc. Probablemente sea razonable suponer que cualquier proyecto con menos de cinco idiomas está "limpio" (para cierto nivel de limpieza), y esto es solo un poco más de la mitad del conjunto de datos total. Por supuesto, su definición de limpieza puede diferir de la mía, por lo que puede concentrarse en cualquier número que desee.

Lo que me sorprende es un extraño aumento en torno a 34-35 idiomas. No tengo una explicación razonable de dónde vino, y esto probablemente sea digno de una investigación por separado.



Lista completa
1886 559
2951 009
3989 025
4 41 070 987
5 51 012 686
6845 898
7 7655 510
8542 625
9 9446 278
10392 212
11295 810
12204 291
13139 021
14110 204
1587 143
1667 602
1761 936
18 años44 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 7
9730
984 4
991
1006
1017 7
10216
1031
1045 5
1051
10619
1082
1092
1101
1113
1121
1131
1143
1155 5
1165 5
1181
1205 5
1241
1251
1312
1321
1342
1361
1371
1381
1421
1432
1441
1581
1592

Proyectos con TypeScript pero no JavaScript


Ah, el mundo moderno de TypeScript. Pero para los proyectos de TypeScript, ¿cuántos hay exclusivamente en este lenguaje?

Proyectos limpios de TypeScript
27,026 proyectos

Debo admitir que estoy un poco sorprendido por este número. Aunque entiendo que mezclar JavaScript con TypeScript es bastante común, creo que habría más proyectos en el lenguaje novedoso. Pero es posible que un conjunto más reciente de repositorios aumente drásticamente su número.

¿Alguien usa CoffeeScript y TypeScript?


Usando TypeScript y CoffeeScript
7849 proyectos

Siento que algunos desarrolladores de TypeScript se enferman con solo pensarlo. Si esto les ayuda, puedo suponer que la mayoría de estos proyectos son programas scccon ejemplos de todos los idiomas para fines de prueba.

¿Cuál es la longitud de ruta típica en cada idioma?


Dado que puede cargar todos los archivos que necesita en un directorio o crear un sistema de directorio, ¿cuál es la longitud de ruta típica y el número de directorios?

Para hacer esto, cuente el número de barras en la ruta para cada archivo y promedio. No sabía qué esperar aquí, excepto que Java podría estar en la parte superior de la lista, ya que generalmente hay largas rutas de archivos.

Lista completa
Idioma
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 4
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
Pitón5,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 4
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 o YML?


Hubo una vez una "discusión" en Slack - usando .yaml o .yml. Muchos fueron asesinados allí en ambos lados.

El debate puede finalmente (?) Finalizar. Aunque sospecho que algunos aún preferirán morir en una disputa.

ExtensiónNumero
ñame3,572,609
yml14 076 349

Mayúsculas, minúsculas o mayúsculas?


¿Qué registro se usa para los nombres de archivo? Como todavía hay una extensión, podemos esperar, principalmente, un caso mixto.

EstiloCantidad
Mezclado9 094 732
Bajar2476
Arriba2875

Lo cual, por supuesto, no es muy interesante, porque generalmente las extensiones de archivo están en minúsculas. ¿Qué pasa si ignora las extensiones?

EstiloCantidad
Mezclado8 104 053
Bajar347 458
Arriba614 922

No es lo que esperaba. De nuevo, en su mayoría mixtos, pero hubiera pensado que el fondo sería más popular.

Fábricas en Java


Otra idea que se les ocurrió a los colegas al mirar algún código Java antiguo. Pensé, ¿por qué no agregar un cheque para cualquier código Java donde Factory, FactoryFactory o FactoryFactoryFactory aparece en el título? La idea es estimar el número de tales fábricas.

TipoCantidadCompartir
no de fábrica271 375 57497,9%
fabrica5 695 5682,09%
fábrica25,3160.009%
factoryfactoryfactory0 00%

Entonces, un poco más del 2% del código Java resultó ser una fábrica o una fábrica. Afortunadamente, no se encontró factoryfactoryfactory. Quizás esta broma finalmente muera, aunque estoy seguro de que al menos un multifactorio recursivo serio de tercer nivel todavía funciona en algún tipo de monolito Java 5, y genera más dinero todos los días de lo que he visto en toda mi carrera. .

Ignorar archivos


La idea de los archivos .ignore fue desarrollada por burntsushi y ggreer en una discusión en Hacker News . Quizás este sea uno de los mejores ejemplos de herramientas de código abierto "competidoras" que funcionan juntas con buenos resultados y se completan en un tiempo récord. Se ha convertido en el estándar de facto para agregar código que las herramientas ignorarán. scctambién cumple la regla .ignore, pero también sabe cómo contarlos. Veamos qué tan bien se ha extendido la idea.

Lista completa
.ignore
0 09 088 796
17848
21258
3508
4 4333
5 543
6130
7 78
814
9 983
1049
1135
12112
13736
154 4
171
18 años4 4
202
211
232
243
262
271
3431
3519
369 9
382
391
4312
441
452
465 5
497 7
507 7
5112
522

Ideas para el futuro.


Me gusta hacer un análisis para el futuro. Sería bueno escanear cosas como las teclas AWS AKIA y similares. También me gustaría ampliar la cobertura de los proyectos de Bitbucket y Gitlab con análisis para cada uno, para ver si puede haber equipos de desarrollo de diferentes áreas colgando allí.

Si alguna vez repito el proyecto, me gustaría superar las siguientes deficiencias y tener en cuenta las siguientes ideas.

  • Almacene las URL en algún lugar de los metadatos correctamente. Usar un nombre de archivo para almacenarlo fue una mala idea, ya que se pierde información y puede ser difícil determinar el origen y la ubicación del archivo.
  • No te molestes con S3. No tiene mucho sentido pagar por el tráfico si lo uso solo para almacenamiento. Era mejor desde el principio meter todo en un archivo tar.
  • , .
  • -n , , , .
  • scc, , . , CIDE.C C, , HTML. .
  • , scc, , , . .
  • Me gustaría agregar una detección de shebang a scc .
  • Sería bueno considerar de alguna manera la cantidad de estrellas en Github y la cantidad de confirmaciones.
  • Quiero de alguna manera agregar un cálculo de índice de mantenibilidad. Sería muy bueno ver qué proyectos se consideran los más reparables según su tamaño.

¿Por qué es todo esto?


Bueno, puedo tomar parte de esta información y usarla en mi motor de búsqueda y programa searchcode.com scc. Al menos algunos puntos de datos útiles. Inicialmente, el proyecto fue concebido de muchas maneras por el bien de esto. Además, es muy útil comparar su proyecto con otros. También fue una forma interesante de pasar varios días resolviendo algunos problemas interesantes. Y una buena verificación de fiabilidad scc.

Además, actualmente estoy trabajando en una herramienta que ayuda a los principales desarrolladores o gerentes a analizar el código, buscar idiomas específicos, archivos grandes, fallas, etc. ... con el supuesto de que necesita analizar varios repositorios. Ingresa algún tipo de código, y la herramienta dice qué tan fácil de mantener es y qué habilidades se necesitan para mantenerlo. Esto es útil al decidir si comprar algún tipo de código base, repararlo o tener una idea sobre su propio producto que el equipo de desarrollo ofrece. Teóricamente, esto debería ayudar a los equipos a escalar a través de recursos compartidos. Algo así como AWS Macie, pero por el código, algo en lo que estoy trabajando. Yo mismo necesito esto para el trabajo diario, y sospecho que otros pueden encontrar la aplicación para tal instrumento, al menos esa es la teoría.

Quizás valdría la pena poner aquí alguna forma de registro para los interesados ​​...

Archivos no procesados ​​/ procesados


Si alguien quiere hacer su propio análisis y hacer correcciones, aquí hay un enlace a los archivos procesados ​​(20 MB). Si alguien quiere publicar archivos sin formato en el dominio público, avíseme. Esto es 83 GB tar.gz, y en el interior hay poco más de 1 TB. El contenido consta de poco más de 9 millones de archivos JSON de varios tamaños.

UPD Varias almas buenas sugirieron colocar el archivo, los lugares se indican a continuación:


Al alojar este archivo tar.gz, gracias a CNCF para el servidor para xet7 del proyecto Wekan .

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


All Articles