컴퓨터 언어 벤치마크 게임

The Computer Language Benchmarks Game

컴퓨터 언어 벤치마크 게임(이전에는 위대한 컴퓨터 언어 승부차기라고 불렸다)은 다양한 인기 프로그래밍 언어로 주어진 알고리즘의 하위 집합이 어떻게 구현될 수 있는지를 비교하기 위한 무료 소프트웨어 프로젝트다.

이 프로젝트는 다음과 같이 구성된다.

  • 일련의 매우 간단한 알고리즘 문제들
  • 다양한 프로그래밍 언어에서 위의 문제에 대한 다양한 구현
  • 제출된 구현이 문제 문을 해결하는지 확인하기 위한 일련의 단위 테스트
  • 구현 실행 및 타이밍을 위한 프레임워크
  • 결과의 상호 비교를 촉진하는 웹 사이트

지원되는 언어

자원 제약 때문에, 게임 운영자의 재량에 따라, 공통 프로그래밍 언어의 작은 부분집합만 지원한다.[1]

지원되는 언어 목록
  • 에이다
  • C
  • 예배당
  • C#
  • C++
  • 다트
  • 얼랑
  • F#
  • 포트란
  • 가다
  • 하스켈
  • 자바
  • 자바스크립트
  • 줄리아.
  • 리스프
  • 루아
  • OCAML
  • 파스칼
  • PHP
  • 파이톤
  • 라켓
  • 루비
  • 스몰토크
  • 스위프트

측정지표

주어진 각 구현의 다음과 같은 측면을 측정한다.[2]

동일한 문제에 대해 동일한 프로그래밍 언어로 복수의 솔루션을 보는 것이 일반적이다. 이것은 주어진 언어의 제약 내에서 높은 추상화, 메모리 효율, 빠름, 또는 더 잘 병렬화될 수 있는 해결책이 주어질 수 있다는 것을 강조한다.

벤치마크 프로그램

그것은 처음부터 매우 간단한 장난감 문제만을 포함하는 디자인 선택이었고, 각각은 다른 종류의 프로그래밍 과제를 제공했다.[3] 이것은 벤치마크 게임의 사용자들에게 다양한 구현을 면밀히 검토할 수 있는 기회를 제공한다.[4]

역사

이 프로젝트는 2007년까지 위대한 컴퓨터 언어 총격전으로 알려져 있었다.[5]

윈도용 포트는 2002년과 2003년 사이에 별도로 유지되었다.[6]

소스는 GitLab에 보관되어 있다.[7]

GitHub에는 더 오래된 포크도 있다.[8]

그 프로젝트는 계속 진화하고 있다. 지원되는 프로그래밍 언어 목록은 시장 동향에 따라 매년 약 한 번 업데이트된다. 사용자는 또한 어떤 문제에 대해서도 개선된 해결책을 제출하거나 시험 방법론의 개선을 제안할 수 있다.[9]

주의사항

개발자 스스로 그러한 마이크로벤치마크를 사용할 때 연구를 하는 사람들이 주의를 기울여야 한다는 사실을 강조한다.

[...] 자바스크립트 벤치마크는 엄청나게 작으며 실제 애플리케이션과는 상당히 다른 방식으로 동작한다. 우리는 행동의 수많은 차이를 문서화했고, 벤치마크에 기초한 결과가 자바스크립트 엔진 구현자들을 오도할 수 있다는 이러한 측정된 차이로부터 결론을 내린다. 또한 벤치마크가 나타나지 않는 실제 자바스크립트 애플리케이션에서 흥미로운 행동을 관찰하여 이전에 미개척된 최적화 전략이 실제로 생산적일 수 있음을 시사한다.

임팩트

벤치마크 결과는 다양한 컴파일러 문제를 밝혀냈다. 때로는 주어진 컴파일러가 비정상적이지만, 그렇지 않으면 문법적으로 유효한 구조를 처리하지 못했다. 다른 때에는 런타임 성능이 기대치를 밑도는 것으로 나타나 컴파일러 개발자들이 최적화 기능을 수정하도록 했다.

다양한 연구 기사들이 벤치마크, 그 결과, 방법론에 기초하고 있다.[10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22]

참고 항목

참조

  1. ^ "The Computer Language Benchmarks Game". benchmarksgame-team.pages.debian.net/benchmarksgame. Retrieved 29 May 2018.
  2. ^ "How programs are measured – The Computer Language Benchmarks Game". benchmarksgame-team.pages.debian.net/benchmarksgame/. Retrieved 29 May 2018.
  3. ^ "Why toy programs? – The Computer Language Benchmarks Game". benchmarksgame-team.pages.debian.net/benchmarksgame. Retrieved 29 May 2018.
  4. ^ "n-body description (64-bit Ubuntu quad core) – Computer Language Benchmarks Game". benchmarksgame-team.pages.debian.net/benchmarksgame. Retrieved 29 May 2018.
  5. ^ "Trust, and verify – Computer Language Benchmarks Game". benchmarksgame-team.pages.debian.net/benchmarksgame. Retrieved 29 May 2018.
  6. ^ "The Great Win32 Computer Language Shootout". Dada.perl.it. Retrieved 13 December 2017.
  7. ^ "archive-alioth-benchmarksgame". salsa.debian.org/benchmarksgame-team. Retrieved 29 May 2018.
  8. ^ Thiel, Sebastian (24 October 2017). "benchmarksgame-cvs-mirror: A git mirror of the benchmarksgame cvs repository". GitHub. Retrieved 13 December 2017.
  9. ^ "Contribute your own program – Computer Language Benchmarks Game". benchmarksgame-team.pages.debian.net/benchmarksgame. Retrieved 29 May 2018.
  10. ^ Kevin Williams; Jason McCandless; David Gregg (2009). "Dynamic Interpretation for Dynamic Scripting Languages" (PDF). Retrieved 25 March 2017. Cite 저널은 필요로 한다. journal= (도움말)
  11. ^ Tobias Wrigstad; Francesco Zappa Nardelli; Sylvain Lebresne Johan; Ostlund Jan Vitek (January 17–23, 2009). Integrating Typed and Untyped Code in a Scripting Language (PDF). POPL’10. Madrid, Spain. Retrieved 25 March 2017.
  12. ^ Lerche, Carl (April 17–18, 2009). Write Fast Ruby: It's All About the Science (PDF). Golden Gate Ruby Conference. San Francisco, California. Retrieved 25 March 2017.
  13. ^ J. Shirako; D. M. Peixotto; V. Sarkar; W. N. Scherer III (2009). Phaser Accumulators: a New Reduction Construct for Dynamic Parallelism (PDF). IEEE International Symposium on Parallel & Distributed Processing. Retrieved 25 March 2017.
  14. ^ Rajesh Karmani and Amin Shali and Gul Agha (2009). "Actor frameworks for the JVM platform: A Comparative Analysis" (PDF). In Proceedings of the 7th International Conference on the Principles and Practice of Programming in Java. Retrieved 26 March 2017.
  15. ^ Brunthaler Stefan (2010). Inline Caching Meets Quickening. European Conference on Object-Oriented Programming (ECOOP). Object-Oriented Programming. pp. 429–451. doi:10.1007/978-3-642-14107-2_21.
  16. ^ Prodromos Gerakios; Nikolaos Papaspyrou; Konstantinos Sagonas (January 23, 2010). Race-free and Memory-safe Multithreading: Design and Implementation in Cyclone (PDF). Proceedings of the 5th ACM SIGPLAN workshop on Types in language design and implementation. Madrid, Spain. pp. 15–26. Retrieved 25 March 2017.
  17. ^ Slava Pestov; Daniel Ehrenberg; Joe Groff (October 18, 2010). Factor: A Dynamic Stack-based Programming Language (PDF). DLS 2010. Reno/Tahoe, Nevada, USA. Retrieved 25 March 2017.
  18. ^ Andrei Homescu; Alex Suhan (October 24, 2011). HappyJIT: A Tracing JIT Compiler for PHP (PDF). DLS’11. Portland, Oregon, USA. Retrieved 25 March 2017.
  19. ^ Vincent St-Amour; Sam Tobin-Hochstadt; Matthias Felleisen (October 19–26, 2012). Optimization Coaching – Optimizers Learn to Communicate with Programmers (PDF). OOPSLA’12. Tucson, Arizona, USA. Retrieved 25 March 2017.
  20. ^ Wing Hang Li; David R. White; Jeremy Singer (September 11–13, 2013). JVM-Hosted Languages: They Talk the Talk, but do they Walk the Walk? (PDF). Proceedings of the 2013 International Conference on Principles and Practices of Programming on the Java Platform: Virtual Machines, Languages, and Tools. Stuttgart, Germany. pp. 101–112. Retrieved 25 March 2017.
  21. ^ Aibek Sarimbekov; Andrej Podzimek; Lubomir Bulej; Yudi Zheng; Nathan Ricci; Walter Binder (October 28, 2013). Characteristics of Dynamic JVM Languages (PDF). VMIL ’13. Indianapolis, Indiana, USA. Retrieved 25 March 2017.
  22. ^ Bradford L. Chamberlain; Ben Albrecht; Lydia Duncan; Ben Harshbarger (2017). Entering the Fray: Chapel's Computer Language Benchmark Game Entry (PDF). Retrieved 25 March 2017.

외부 링크