The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги | ]

03.09.2008 17:30  JavaScript реализации Ruby, выполненная в V8 VM, оказалась быстрее интерпретатора Ruby

По предварительным тестам, JavaScript реализации языка Ruby (HotRuby), запущенная внутри виртуальной машины Google V8, выполнила тестовое задание в 10 раз быстрее (операция заняла 0.987 сек.), чем при выполнении в стандартном Ruby 1.8.6 и 1.9.0 (тест был выполнен за 9.565 и 9.669 сек).

Более того, аналогичный тестовый код написанный на Си, был выполнен за 3.322 сек. После оптимизации Си кода тест был выполнен за 0.017 сек., но это лишний раз доказывает, то что написанный на скорую руку Си код часто выполняется медленнее, чем код написанный на интерпретируемом языке.

V8 - написанная с нуля виртуальная JavaScript машина, открытая вчера компанией Google. Проект HotRuby позволяет выполнять в браузере Ruby приложения, преобразованные в байткод, используя для компиляции YARV (Yet Another Ruby VM) из состава Ruby 1.9. На базе HotRuby и Google V8 за пару часов был создан проект rbv8.

Общие результаты тестирования:

  • rbv8: 0.987 сек.
  • Firefox 3: 3.636 сек.
  • Safari 3: 4.368 сек.
  • Opera 9.50: 4.679 сек.
  • Ruby 1.8.6: 9.565 сек.
  • Ruby 1.9.0: 9.669 сек.
  • Rubinius 0.8.0: 15.576 сек.
  • JRuby 1.1 b1: 42.691 сек.


  1. Главная ссылка к новости (http://macournoyer.wordpress.c...)
  2. OpenNews: Реализация Ruby и Java на JavaScript
  3. OpenNews: Первый релиз в новой экспериментальной ветке Ruby 1.9
Лицензия: CC-BY
Источник: heise-online.co.uk
Тип: Тема для размышления
Ключевые слова: ruby, benchmark, javascript, vm
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Ajax/Линейный | Раскрыть все сообщения | RSS
 
 
Часть нити удалена модератором

  • 2.2, I (?), 18:12, 03/09/2008 [ответить]    [к модератору]
  • +/
    >>Более того, аналогичный тестовый код написанный на Си, был выполнен за 3.322 сек.
    >
    >По-любому индусы писали.

    Вообще-то такое бывает. Бывало и в некоторых тестах Java vs C, например. И не из-за индусов вовсе, а потому, что при JIT-компиляции возможны некоторые дополнительные оптимизации, которые нельзя выполнить при AOT.

     
     
  • 3.5, I (?), 18:28, 03/09/2008 [^] [ответить]    [к модератору]
  • +/
    Но это был явно не тот случай.
     
  • 3.11, User294 (??), 20:19, 03/09/2008 [^] [ответить]    [к модератору]
  • +/
    >Вообще-то такое бывает. Бывало и в некоторых тестах Java vs C, например.

    Угу, только это случай когда исключения только подтверждают правило :).На тяжелых задачах, где скорость как раз и важна - у жабы и дотнета наблюдается традиционный слив в 2-3-4 раза сям.Вон например бенчи: http://quicklz.com/ - одно и то же сжатие на одной и той же машине (даже нескольких) забенчено в сишной, жабистой и дотнетовой версии.Результат заметен и предсказуем.

     
  • 1.4, Аноним (4), 18:25, 03/09/2008 [ответить] [показать ветку] [···]     [к модератору]
  • +/
    Задача сферическая Ясное дело, что чуда не будет и конец строки будет каждый ра... весь текст скрыт [показать]
     
     
  • 2.7, Аноним (7), 18:55, 03/09/2008 [^] [ответить]     [к модератору]  
  • +/
    Можно перевести эту формулировку в нормальный общедоступный вид А то хочется ск... весь текст скрыт [показать]
     
  • 2.10, Дмитрий Ю. Карпов (?), 19:39, 03/09/2008 [^] [ответить]    [к модератору]  
  • +/
    > Ясное дело, что чуда не будет и конец строки будет каждый раз вычисляться поиском завершающего '\0'.

    В некоторых языках программирования (например, BBC-basic) конец строкИ обозначается не нулевым символом, а записанной в определённом месте длиной строкИ (т.е. строка - это не массив, а более сложная структура). В частности, это позволяет включать в строку нулевой символ; ну и ускоряет некоторые операции, а также на операциях изменения строкИ нагружает дополнительной работой процессор (т.е. замедляет работу); и ещё позволяет контролировать выход за границу массива.

     
     
  • 3.13, Anonymous (?), 07:26, 04/09/2008 [^] [ответить]    [к модератору]  
  • +/
    да ну, вы наверное врете все :)
     
  • 3.15, Имя (?), 11:57, 04/09/2008 [^] [ответить]    [к модератору]  
  • +/
    >В некоторых языках программирования (например, BBC-basic) конец строкИ обозначается не нулевым символом

    Речь, вероятно, была про стандартные функции C, которым передаётся один указатель.

    > а записанной в определённом месте длиной строкИ (т.е. строка - это не массив, а более сложная структура)

    Это и сделали по ссылке, только на С.

     
  • 1.6, I (?), 18:32, 03/09/2008 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Результат сомнительный.
    В комментах:

    > The ruby version is slow code.
    > By replacing += with <<, it becomes faster tens of times.
    > And HotRuby is optimized for String += String.

     
  • 1.8, Pilat (ok), 19:24, 03/09/2008 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Всё указывает на то, что JavaScript станет основным языком для web разработчиков.
     
     
  • 2.12, User294 (??), 20:47, 03/09/2008 [^] [ответить]    [к модератору]  
  • +/
    >Всё указывает на то, что JavaScript станет основным языком для web разработчиков.

    У него на самом деле только 1 проблема :) он не стал популярным на server side.А так - JS вроде всегда и был одним из таковых средств.

     
     
  • 3.17, Pilat (ok), 14:28, 04/09/2008 [^] [ответить]    [к модератору]  
  • +/
    >>Всё указывает на то, что JavaScript станет основным языком для web разработчиков.
    >
    >У него на самом деле только 1 проблема :) он не стал
    >популярным на server side.А так - JS вроде всегда и был
    >одним из таковых средств.

    Ну не совсем. flash, ActiveX, Java . JavaScript из-за тормознутости использовался как сервисный язык, для обработки больших объёмов данных его использовать до сих пор не получается.

     
     
  • 4.24, User294 (ok), 23:46, 04/09/2008 [^] [ответить]    [к модератору]  
  • +/
    >для обработки больших объёмов данных его использовать до сих
    >пор не получается.

    А ему обычно и не надо большие объемы данных лопатить.Для черной работы есть например, БД, писанные отнюдь не на JS.Вот они перелопатить большой объем данных могут.Для того и созданы.Хотя тормозные скрипты все-равно никому не нужны - это верно.Но если уж Ruby слегка юзают местами некоторые, а его реализация на JS обгоняет обычный вариант - саму эту реализацию JS, очевидно, тоже можно заюзать ничуть не хуже тогда.Как минимум она будет не медленее :)))

     
     
  • 5.26, Pilat (ok), 14:24, 05/09/2008 [^] [ответить]    [к модератору]  
  • +/
    >А ему обычно и не надо большие объемы данных лопатить.Для черной работы

    Вот мне надо вывести на страницу 6000 строк из базы. JSON код JavaScript парсит 10-15 секунд, eval() за две управляется, но не секурно. На таких задачах проблемы со скоростью хорошо видны.

     
  • 2.20, tr (?), 17:50, 04/09/2008 [^] [ответить]    [к модератору]  
  • +/
    >Всё указывает на то, что JavaScript станет основным языком для web разработчиков.

    Не смешите меня. Поробуйте проверить являится ли в JS строка числом, да чтобы это работало во всех браузерах... Это до того неудобно решается в JS, что говорить о "основном" ЯП просто преждевременно... Что это за ЯП такой, что элементарные операции то работают, то не работают?

     
     
  • 3.25, Pilat (ok), 14:21, 05/09/2008 [^] [ответить]    [к модератору]  
  • +/
    >>Всё указывает на то, что JavaScript станет основным языком для web разработчиков.
    >
    >Не смешите меня. Поробуйте проверить являится ли в JS строка числом, да
    >чтобы это работало во всех браузерах... Это до того неудобно решается
    >в JS, что говорить о "основном" ЯП просто преждевременно... Что это
    >за ЯП такой, что элементарные операции то работают, то не работают?
    >

    А Вы не пробовали ParseInt запустить, ParseFloat ? Или регулярное выражение? Где-то тут проблемы обнаружились?

     
     
  • 4.27, tr (?), 18:17, 05/09/2008 [^] [ответить]    [к модератору]  
  • +/
    >>>Всё указывает на то, что JavaScript станет основным языком для web разработчиков.
    >>
    >>Не смешите меня. Поробуйте проверить являится ли в JS строка числом, да
    >>чтобы это работало во всех браузерах... Это до того неудобно решается
    >>в JS, что говорить о "основном" ЯП просто преждевременно... Что это
    >>за ЯП такой, что элементарные операции то работают, то не работают?
    >>
    >
    >А Вы не пробовали ParseInt запустить, ParseFloat ? Или регулярное выражение? Где-то
    >тут проблемы обнаружились?

    parseInt('1x11',10); что выдаст?
    -----
    function isNumber(src){
    var res = '';
    var re = /[0-9]+/g;
    var arr = '';
    var arr = re.exec(src);
    if (arr != null) {
    if (arr.size() == src.length) {
    return true;
    }
    }
    return false;
    }
    что выдаст если два раза подряд к одним и тем же данным вызвать?(в форме ОК два раза нажимаем к примеру)

     
     
  • 5.28, Pilat (ok), 19:17, 05/09/2008 [^] [ответить]    [к модератору]  
  • +/
    >parseInt('1x11',10); что выдаст?

    ничего интересного не выдаст, как и масса случайных функций. А вот
    function isInteger(a){
    var b = parseInt(a,10);
    if( a==b) return true;
    return false;
    }
    выдаст. точно так же, как и выражение /^\-?\d+$/


    >[оверквотинг удален]
    > var arr = re.exec(src);
    > if (arr != null) {
    >  if (arr.size() == src.length) {
    >   return true;
    >  }
    > }
    > return false;
    >}
    >что выдаст если два раза подряд к одним и тем же данным
    >вызвать?(в форме ОК два раза нажимаем к примеру)

    Опять какая-то каша, замысел функции непонятен, что она вообще должна была делать? arr.size никакого отношения к src.length не имеет (и вообще что это за size()), arr.length тоже.

     
  • 1.9, Aleksey (??), 19:26, 03/09/2008 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Я конечно извиняюсь, но делать такие далеко идущие выводы по тесту из 2 строчек - это надо постараться.
     
     
  • 2.16, Michael (??), 12:33, 04/09/2008 [^] [ответить]    [к модератору]  
  • +/
    Мудрец по одной капле воды может заключить о существовании океана
     
     
  • 3.18, Аноним (-), 14:34, 04/09/2008 [^] [ответить]    [к модератору]  
  • +/
    > Мудрец по одной капле воды может заключить о существовании океана

    А глупец примит одну каплю за океан.

     
  • 1.19, Аноним (7), 17:34, 04/09/2008 [ответить] [показать ветку] [···]     [к модератору]  
  • +/
    То что JavaScript ускорили - молодца Но вот сравнивать с Ruby - нечестно Ряба ... весь текст скрыт [показать]
     
     
  • 2.21, Anonymous (?), 19:16, 04/09/2008 [^] [ответить]    [к модератору]  
  • +/
    >Ряба

    Жесткий термин. Спасибо поржал (c)

    >Было бы интересно получить JavaScript компилятор.

    Черт, так и чешутся руки написать свой велос^W язык программирования. С но без совместимости с С, с поддержкой классов с жесткой типизацией и вообще без сборки мусора /механизма выделения ресурсов. Все это жестко завязать на драйвер режима яра, который будет разруливать (на уровне страниц) любые операции с памятью.

     
  • 1.23, FSA (??), 22:58, 04/09/2008 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    >это лишний раз доказывает, то что написанный на скорую руку Си код часто выполняется медленнее, чем код написанный на интерпретируемом языке.

    Это лишний раз доказывает, что современные программисты плевали на математику, разработку алгоритмов и оптимизацию. А зачем, если можно поставить более мощный процессор, добавить памяти. Да и зачем использовать языки программирования, которые требуют дополнительной внимательности от программиста, если можно писать на языках "высокого уровня".

     
     
  • 2.29, Клыкастое (?), 18:40, 06/09/2008 [^] [ответить]    [к модератору]  
  • +/
    респект. есть такое
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:


      Закладки на сайте
      Проследить за страницей
    Created 1996-2018 by Maxim Chirkov  
    ДобавитьПоддержатьВебмастеруГИД  
    Hosting by Ihor