Дошли руки и до поддержки столь модного сейчас JavaScript. Выбрана реализация V8, как наиболее трендовая и развиваемая. С помощью бубна и литра колы я скомпилировал V8 под Windows. Забавно оказалось — я всё думал, что придется городить workaround, чтобы поддержать чтение в JavaScript из консоли. Оказалась, что d8
сам всё умеет. Вот пример для нахождения A+B:
var line = readline().split(' ')
print(parseInt(line[0]) + parseInt(line[1]))
Было замечено, что если не поставить перевод строки в конце ввода, то readline вернет undefined. Еще один аргумент в пользу того, что все строки должны заканчиваться переводом.
В качестве небольшого исследования и чтобы потешить свою уверенность в мнении, что все языки без статической типизации бесконечно медленны, я написал реализацию HeapSort на С++, Java и JavaScript для сортировки 107 значений от 0 до 9999999. Видимо, этот бенчмарк неплохо показывает как быстро будут работать ваши решения, если вы пишите их в стиле старого доброго Pascal (всё на массивчиках, без выделений памяти и без мощных встроенных библиотек). Результаты для меня оказались неожиданными:
Language | Compiler | Running time, ms |
---|---|---|
C++ | MinGW 4.7.2 32-bit | 630 |
C++ | MS VS 2010 32-bit | 650 |
Java | Oracle Java 6 32-bit | 1060 |
Java | Oracle Java 7 32-bit | 1050 |
JavaScript | V8 3.23.0 32-bit | 1700 |
Pascal | Delphi 7 32-bit | 630 |
Pascal | FreePascal 2.6.2 32-bit | 730 |
Python 2 | Python 2.7.4 32-bit | 12500 |
Python 3 | Python 3.3.2 32-bit | 20000 |
Ruby | Ruby 1.9.3p0 (2011-10-30, i386-mingw32) 32-bit | 520000 |
Ruby | Ruby 2.0.0p353 (2013-11-22, i386-mingw32) 32-bit | 345000 |
Scala | Scala 2.10.3 (over Oracle Java 7 32-bit) | 1550 |
Go | Go 1.2 32-bit | 1780 |
D | DMD v2.064.2 32-bit | 800 |
C# | Mono 2.10.9 32-bit | 850 |
C# | MS CSC .Net 4.5.1 64-bit | 850 |
Perl | Perl v5.12.2 for MSWin32-x86-multi-thread | 195000 |
Отставание-то всего ничего! Я конечно понимаю, что такой код можно заанализировать и jit-ом прям в нативный закомпилить, но все же. Впечатляет. Кстати, а Java с её хваленным и нахаченным JIT не на высоте.
Вот я даже запилил микропроект на github, чтобы не потерялось. Предлагаю подключиться и переписать реализацию на ваш любимый язык, а я включу его в исследование. Вот явные ссылки на текущие реализации:
Вы можете оставлять в комментариях ссылки на pastebin или сабмиты в систему. Конечно, будут удобнее пулл реквесты прямо в проект.
Если будете писать свою реализацию, то постарайтесь написать аккуратно и опрятно. Пожалуйста, максимально придерживайтесь вариантов для C++, Java и JavaScript.
UPD 1: С помощью alexei-zayakin добавил Pascal.
UPD 2: С помощью gchebanov Wizmann и juancate добавил Python 2, Python 3, Ruby, Scala, Go.
UPD 3: Вот скомпилированный для Window V8.
UPD 4: Обновил версии некоторых компиляторов, обновил результаты.
UPD 5: Добавил D. Спасибо, Gassa.
UPD 6: Добавил C#. Спасибо, gmogelashvili.