The Computer Language Benchmarks Game (anteriormente llamado The Great Computer Language Shootout ) es un proyecto de software gratuito para comparar cómo un subconjunto dado de algoritmos simples se puede implementar en varios lenguajes de programación populares .
El proyecto consta de:
- Un conjunto de problemas algorítmicos muy simples.
- Varias implementaciones de los problemas anteriores en varios lenguajes de programación
- Un conjunto de pruebas unitarias para verificar que las implementaciones enviadas resuelven el enunciado del problema.
- Un marco para ejecutar y cronometrar las implementaciones
- Un sitio web para facilitar la comparación interactiva de los resultados.
Idiomas admitidos
Debido a las limitaciones de recursos, solo se admite un pequeño subconjunto de lenguajes de programación comunes, a discreción del operador del juego. [1]
- Ada
- C
- Capilla
- C#
- C ++
- Dardo
- Erlang
- F#
- Fortran
- Ir
- Haskell
- Java
- JavaScript
- Julia
- Ceceo
- Lua
- OCaml
- Pascal
- Perl
- PHP
- Pitón
- Raqueta
- Rubí
- Oxido
- Charla
- Rápido
Métrica
Se miden los siguientes aspectos de cada implementación dada: [2]
- tiempo de ejecución general del usuario
- asignación de memoria máxima
- gzip 'ped tamaño del código fuente de la solución
- suma del tiempo total de CPU en todos los subprocesos
- utilización de CPU individual
Es común ver múltiples soluciones en el mismo lenguaje de programación para el mismo problema. Esto resalta que dentro de las limitaciones de un lenguaje dado, se puede dar una solución que sea de alta abstracción, que sea eficiente en la memoria, que sea rápida o que se pueda paralelizar mejor.
Programas de referencia
Fue una elección de diseño desde el principio para incluir solo problemas de juguete muy simples, cada uno proporcionando un tipo diferente de desafío de programación. [3] Esto brinda a los usuarios del Benchmark Game la oportunidad de examinar las diversas implementaciones. [4]
Historia
El proyecto fue conocido como The Great Computer Language Shootout hasta 2007. [5]
Un puerto para Windows se mantuvo por separado entre 2002 y 2003. [6]
Las fuentes se han archivado en GitLab. [7]
También hay bifurcaciones más antiguas en GitHub. [8]
El proyecto está en continua evolución. La lista de lenguajes de programación compatibles se actualiza aproximadamente una vez al año, siguiendo las tendencias del mercado. Los usuarios también pueden enviar soluciones mejoradas a cualquiera de los problemas o sugerir un refinamiento de la metodología de prueba. [9]
Advertencias
Los propios desarrolladores destacan el hecho de que quienes investigan deben tener cuidado al utilizar tales microbenchmarks:
[...] los puntos de referencia de JavaScript son brevemente pequeños y se comportan de formas que son significativamente diferentes a las aplicaciones reales. Hemos documentado numerosas diferencias en el comportamiento y, a partir de estas diferencias medidas, concluimos que los resultados basados en los puntos de referencia pueden inducir a error a los implementadores del motor JavaScript. Además, observamos comportamientos interesantes en aplicaciones reales de JavaScript que los puntos de referencia no muestran, lo que sugiere que las estrategias de optimización previamente inexploradas pueden ser productivas en la práctica.
Impacto
Los resultados de las pruebas comparativas han descubierto varios problemas del compilador. A veces, un compilador dado no pudo procesar construcciones inusuales, pero por lo demás gramaticalmente válidas. En otras ocasiones, se demostró que el rendimiento en tiempo de ejecución estaba por debajo de las expectativas, lo que llevó a los desarrolladores del compilador a revisar sus capacidades de optimización.
Diversos artículos de investigación se han basado en los benchmarks, sus resultados y su metodología. [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22]
Ver también
Referencias
- ^ "El juego de parámetros de lenguaje de computadora" . benchmarksgame-team.pages.debian.net/benchmarksgame . Consultado el 29 de mayo de 2018 .
- ^ "Cómo se miden los programas - El juego de los puntos de referencia del lenguaje informático" . benchmarksgame-team.pages.debian.net/benchmarksgame/ . Consultado el 29 de mayo de 2018 .
- ^ "¿Por qué los programas de juguete? - El juego de parámetros de lenguaje informático" . benchmarksgame-team.pages.debian.net/benchmarksgame . Consultado el 29 de mayo de 2018 .
- ^ "Descripción del cuerpo n (núcleo cuádruple de Ubuntu de 64 bits) - Juego de pruebas de lenguaje de computadora" . benchmarksgame-team.pages.debian.net/benchmarksgame . Consultado el 29 de mayo de 2018 .
- ^ "Confíe y verifique - Juego de pruebas comparativas de lenguaje informático" . benchmarksgame-team.pages.debian.net/benchmarksgame . Consultado el 29 de mayo de 2018 .
- ^ "El gran tiroteo del lenguaje informático Win32" . Dada.perl.it . Consultado el 13 de diciembre de 2017 .
- ^ "archive-alioth-benchmarksgame" . salsa.debian.org/benchmarksgame-team . Consultado el 29 de mayo de 2018 .
- ^ Thiel, Sebastian (24 de octubre de 2017). "benchmarksgame-cvs-mirror: un espejo git del repositorio de cvs de benchmarksgame" . GitHub . Consultado el 13 de diciembre de 2017 .
- ^ "Contribuya con su propio programa - Computer Language Benchmarks Game" . benchmarksgame-team.pages.debian.net/benchmarksgame . Consultado el 29 de mayo de 2018 .
- ^ Kevin Williams; Jason McCandless; David Gregg (2009). "Interpretación dinámica para lenguajes de secuencias de comandos dinámicos" (PDF) . Consultado el 25 de marzo de 2017 . Cite journal requiere
|journal=
( ayuda ) - ^ Tobias Wrigstad; Francesco Zappa Nardelli; Sylvain Lebresne Johan; Ostlund Jan Vitek (17 al 23 de enero de 2009). Integración de código escrito y no escrito en un lenguaje de programación (PDF) . POPL'10. Madrid, España . Consultado el 25 de marzo de 2017 .
- ^ Lerche, Carl (17-18 de abril de 2009). Escribe Fast Ruby: Se trata de ciencia (PDF) . Conferencia Golden Gate Ruby. San Francisco, California . Consultado el 25 de marzo de 2017 .
- ^ J. Shirako; DM Peixotto; V. Sarkar; WN Scherer III (2009). Acumuladores de fase: una nueva construcción de reducción para el paralelismo dinámico (PDF) . Simposio internacional IEEE sobre procesamiento paralelo y distribuido . Consultado el 25 de marzo de 2017 .
- ^ Rajesh Karmani y Amin Shali y Gul Agha (2009). "Marcos de actor para la plataforma JVM: un análisis comparativo" (PDF) . En Actas de la 7ma Conferencia Internacional sobre los Principios y Práctica de la Programación en Java . Consultado el 26 de marzo de 2017 .
- ^ Brunthaler Stefan (2010). El almacenamiento en caché en línea Cumple Aceleración . Congreso Europeo de Programación Orientada a Objetos (ECOOP). Programación orientada a objetos. págs. 429–451. doi : 10.1007 / 978-3-642-14107-2_21 .
- ^ Prodromos Gerakios; Nikolaos Papaspyrou; Konstantinos Sagonas (23 de enero de 2010). Multithreading sin carreras y seguro para la memoria: diseño e implementación en Cyclone (PDF) . Actas del 5º taller ACM SIGPLAN sobre Tipos en el diseño e implementación de lenguajes. Madrid, España. págs. 15-26 . Consultado el 25 de marzo de 2017 .
- ^ Slava Pestov; Daniel Ehrenberg; Joe Groff (18 de octubre de 2010). Factor: un lenguaje de programación dinámico basado en pilas (PDF) . DLS 2010. Reno / Tahoe, Nevada, Estados Unidos . Consultado el 25 de marzo de 2017 .
- ^ Andrei Homescu; Alex Suhan (24 de octubre de 2011). HappyJIT: un compilador JIT de rastreo para PHP (PDF) . DLS'11. Portland, Oregon, Estados Unidos . Consultado el 25 de marzo de 2017 .
- ^ Vincent St-Amour; Sam Tobin-Hochstadt; Matthias Felleisen (19 al 26 de octubre de 2012). Coaching de optimización: los optimizadores aprenden a comunicarse con los programadores (PDF) . OOPSLA'12. Tucson, Arizona, Estados Unidos . Consultado el 25 de marzo de 2017 .
- ^ Wing Hang Li; David R. White; Jeremy Singer (11 al 13 de septiembre de 2013). Idiomas alojados en JVM: Hablan de lo que hablan, pero ¿Caminan sobre la marcha? (PDF) . Actas de la Conferencia internacional de 2013 sobre principios y prácticas de programación en la plataforma Java: máquinas virtuales, lenguajes y herramientas. Stuttgart, Alemania. págs. 101–112 . Consultado el 25 de marzo de 2017 .
- ^ Aibek Sarimbekov; Andrej Podzimek; Lubomir Bulej; Yudi Zheng; Nathan Ricci; Walter Binder (28 de octubre de 2013). Características de los lenguajes JVM dinámicos (PDF) . VMIL '13. Indianápolis, Indiana, Estados Unidos . Consultado el 25 de marzo de 2017 .
- ^ Bradford L. Chamberlain; Ben Albrecht; Lydia Duncan; Ben Harshbarger (2017). Entrar en el juego de referencia del lenguaje informático de Fray: Chapel (PDF) . Consultado el 25 de marzo de 2017 .
enlaces externos
- Página web oficial