js2js: компилятор из JavaScript в JavaScript

    JavaScript — это ассемблер Веба. В мире существуют десятки проектов, которые компилируют код на C++, Java, C#, Python, Ruby или любом другом языке в JavaScript. Практически не осталось языка, который невозможно скомпилировать в JavaScript. Ну разве что кроме… самого JavaScript!
    image
    Мы решили исправить эту ситуацию. Встречайте: js2js — революционный компилятор, который компилирует JavaScript в JavaScript!

    Ключевые особенности проекта


    Контроль: вы получаете полный контроль над каждой строчкой результирующего кода. Вы даже можете скомпилировать неработающую программу на JavaScript в идентичную ей неработающую программу.
    Нулевой оверхед: js2js не замедлит исполнение кода, скомпилированный код будет иметь точно такую же производительность как и исходный.
    Интеграция: js2js работает с любой другой существующей технологией связанной с JavaScript: AngularJS, Emscripten, Vanilla JS, jQuery, CoffeeScript, TypeScript, и даже Dart.
    Совместимость: код, сгенерированный js2js поддерживает все виды стационарных, мобильных устройств и браузеров. Даже если вы пишете под Netscape 2.0, вы можете скомпилировать свой код в js2js.

    Использование


    Код проекта доступен на github и работает на NodeJS. Для того чтобы скомпилировать ваш код просто введите в консоли команду:
    node js2.js -i <input_file_or_directory> -o <output_file_or_directory>

    Например, можно скомпилировать сам компилятор:
    >node js2.js -i js2.js -o js2.compiled.js -v
    Welcome to js2js compiler.
    Compiling js2.js...
    Output is written to: js2.compiled.js
    Done!


    Как я могу помочь проекту?


    Код проекта доступен по лицензии MIT, а значит вы можете присылать свои pull-requests, развивать свою ветвь проекта, использовать его в своих коммерческих и не очень проектах или просто рассказать о нем своим друзьям.
    Метки:
    Поделиться публикацией
    Комментарии 30
    • +17
      У меня короче: cp $1 $2
      • +10
        В вашем коде недостаточно джаваскрипта ;)
      • +9
        Зря все-таки хаб ХаброЮмор убрали. Так хоть отписался бы.
        • +2
          Да, надо бы снова завести, что-нибудь типа «Петросян позвонит»
        • +3
          Нужно было хотя бы описать принцип работы и основные проблемы, с которыми пришлось столкнуться.
          Пришлось лезть в код — вот он, ключевой момент компилляции:
          Js2JsCompiler.prototype.compileCode = function(code) {
                  return code; // as we need to compile javascript to javascript, we do nothing here :)
          }
          
          • +3
            При помощи вас, скомпилировал «Войну и Мир» в «Войну && Мир». Спасибо. Пишите побольше подобных компиляторов.
            • +4

              • 0
                С вашего разрешения вставлю эту картинку в тело поста :)
              • +1
                [удалено автором]
                • +1
                  [[удалено автором]]
                  • +1
                    [удалено автором]
                    • НЛО прилетело и опубликовало эту надпись здесь
                      • +2
                        []+{}
                        • –6
                          [здесь могла быть ваша реклама]
                          • –1
                            [object Object] же.
                            • НЛО прилетело и опубликовало эту надпись здесь
                  • +1
                    Вы хотели сказать транслятор?

                    Я года два назад в целях обучения писал свой интерпритатор js-а (с минимальной поддержкой фич) и тогда натыкался на полную реализацию javascript (лексер/парсер/рантайм) на javascript.
                    • –1
                      А если «серьезно», то давно витает в голове идея насчет эволюционирующего кода на js. Представьте, что энтузиасты смогут добавить себе на сайт небольшой скрипт, который подгрузит начальный js код, он выполнится на клиентской машине и немного изменится (например «украв» что-нибудь из другого js кода страницы или еще как-то), и отдаст себя обратно на сервер. Т.е. вычислительные мощности будут обеспечиваться клиентскими машинами, с создателя нужен только мега-крутой алгоритм самомодификации кода без ошибок (тут нужен компилятор). Итого через пару лет получаем вселенский разум на js. PROFIT!!!

                      з.ы. Ну и конечно нужен еще более крутой алгоритм по отбору более «успешного/полезного» кода.
                      • +1
                        «Once in the city of JavaScript an old samurai was playing shōgi thinking that he is playing poker. The outcome of the game was undefined.»
                        Итог работы разума немного предсказуем.
                      • НЛО прилетело и опубликовало эту надпись здесь
                      • +4
                        вот лучше подходит…
                        image
                      • 0
                        Да у Вас еще и сам компилятор на JS написан. Лихо это Вы.
                        • +5
                          Отдал в отдел тестирования, сказали:

                          1. Не соответствует спецификации — обрабатывает не только js-файлы
                          2. Не проверяет js синтаксис — компилит все, что бы ни находилось в js-файле
                          3. Вылетает на больших файлах: не смог справиться с 32gb_porno.avi

                          Это явная альфа — НЕ ПОЛЬЗУЙТЕСЬ!
                          • 0
                            Жаль, не вижу кнопки Donate.
                            • 0
                              А где тесты?
                              • +1
                                закомитить node_modules это залог успеха любого проекта
                                • +1
                                  Почитал код проекта. Понравилось, как используется bottom up парсер, хорошее синтаксическое ядро и неплохой словарь. Ребят ждет большое будущее!

                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.