Объявлено (http://leaningtech.com/duetto/blog/2013/10/02/Preview-Duetto/) о начале ограниченного тестирования системы Duetto (http://leaningtech.com/duetto/), нацеленной на предоставление средств для разработки клиентских и серверных web-приложений на языке C++, а также выполнения портирования существующих C++ программ для их работы в Web-браузере. По своей сути Duetto напоминает систему Emscripten (http://www.opennet.me/opennews/art.shtml?num=35313) и также используется наработки LLVM для организации компиляции кода C++ в представление на языке JavaScript. По заявлению разработчиков Duetto ключевым отличием от Emscripten является достижение существенно более высокой производительности для результирующего кода с предоставлением поддержки (http://leaningtech.com/duetto/blog/2013/05/28/Comparing-to-a.../) использования всех возможностей DOM и HTML5, в том числе WebGL (http://leaningtech.com/duetto/blog/2013/07/16/CMake-Bullet-W.../). Duetto также поддерживает использование стандартных библиотек
libc и libc++, и позволяет применять инструменты сборки cmake/autotool.<center>
<div style="position: relative;" id="chart"><div dir="ltr" style="position: relative; width: 550px; height: 300px;"><div style="position: absolute; left: 0px; top: 0px; width: 100%; height: 100%;"><svg style="overflow: hidden;" height="300" width="550"><defs id="defs"><clipPath id="_ABSTRACT_RENDERER_ID_0"><rect height="185" width="356" y="58" x="97"></rect></clipPath></defs><g></g><g><rect fill="#000000" fill-opacity="0" stroke-width="0" stroke="none" height="84" width="77" y="58" x="463"></rect><g><rect fill="#000000" fill-opacity="0" stroke-width="0" stroke="none" height="10" width="77" y="58" x="463"></rect><g><text fill="#000000" stroke-width="0" stroke="none" font-size="10" font-family="Arial" y="66.5" x="477" text-anchor="start">Duetto V8</text></g><rect fill="#13f0d2" stroke-width="0" stroke="none" height="10" width="10" y="58" x="463"></rect></g><g><rect fill="#000000" fill-opacity="0" stroke-width="0" stroke="none" height="23" width="77" y="74" x="463"></rect><g><text fill="#000000" stroke-width="0" stroke="none" font-size="10" font-family="Arial" y="82.5" x="477" text-anchor="start">Emscripten</text><text fill="#000000" stroke-width="0" stroke="none" font-size="10" font-family="Arial" y="95.5" x="477" text-anchor="start">V8</text></g><rect fill="#ff0049" stroke-width="0" stroke="none" height="10" width="10" y="74" x="463"></rect></g><g><rect fill="#000000" fill-opacity="0" stroke-width="0" stroke="none" height="10" width="77" y="103" x="463"></rect><g><text fill="#000000" stroke-width="0" stroke="none" font-size="10" font-family="Arial" y="111.5" x="477" text-anchor="start">Duetto FF</text></g><rect fill="#219bf1" stroke-width="0" stroke="none" height="10" width="10" y="103" x="463"></rect></g><g><rect fill="#000000" fill-opacity="0" stroke-width="0" stroke="none" height="23" width="77" y="119" x="463"></rect><g><text fill="#000000" stroke-width="0" stroke="none" font-size="10" font-family="Arial" y="127.5" x="477" text-anchor="start">Emscripten</text><text fill="#000000" stroke-width="0" stroke="none" font-size="10" font-family="Arial" y="140.5" x="477" text-anchor="start">FF</text></g><rect fill="#ff009b" stroke-width="0" stroke="none" height="10" width="10" y="119" x="463"></rect></g></g><g><rect fill="#000000" fill-opacity="0" stroke-width="0" stroke="none" height="185" width="356" y="58" x="97"></rect><g clip-path="url(http://leaningtech.com/duetto/blog/2013/04/16/Unveiling-Duet...)"><g><rect fill="#444444" stroke-width="0" stroke="none" height="1" width="356" y="242" x="97"></rect><rect fill="#444444" stroke-width="0" stroke="none" height="1" width="356" y="222" x="97"></rect><rect fill="#444444" stroke-width="0" stroke="none" height="1" width="356" y="201" x="97"></rect><rect fill="#444444" stroke-width="0" stroke="none" height="1" width="356" y="181" x="97"></rect><rect fill="#444444" stroke-width="0" stroke="none" height="1" width="356" y="160" x="97"></rect><rect fill="#444444" stroke-width="0" stroke="none" height="1" width="356" y="140" x="97"></rect><rect fill="#444444" stroke-width="0" stroke="none" height="1" width="356" y="119" x="97"></rect><rect fill="#444444" stroke-width="0" stroke="none" height="1" width="356" y="99" x="97"></rect><rect fill="#444444" stroke-width="0" stroke="none" height="1" width="356" y="78" x="97"></rect><rect fill="#444444" stroke-width="0" stroke="none" height="1" width="356" y="58" x="97"></rect></g><g><rect fill="#13f0d2" stroke-width="0" stroke="none" height="16" width="8" y="226" x="109"></rect><rect fill="#13f0d2" stroke-width="0" stroke="none" height="21" width="8" y="221" x="168"></rect><rect fill="#13f0d2" stroke-width="0" stroke="none" height="14" width="8" y="228" x="227"></rect><rect fill="#13f0d2" stroke-width="0" stroke="none" height="22" width="8" y="220" x="287"></rect><rect fill="#13f0d2" stroke-width="0" stroke="none" height="35" width="8" y="207" x="346"></rect><rect fill="#13f0d2" stroke-width="0" stroke="none" height="15" width="8" y="227" x="405"></rect><rect fill="#ff0049" stroke-width="0" stroke="none" height="17" width="8" y="225" x="118"></rect><rect fill="#ff0049" stroke-width="0" stroke="none" height="30" width="8" y="212" x="177"></rect><rect fill="#ff0049" stroke-width="0" stroke="none" height="30" width="8" y="212" x="236"></rect><rect fill="#ff0049" stroke-width="0" stroke="none" height="53" width="8" y="189" x="296"></rect><rect fill="#ff0049" stroke-width="0" stroke="none" height="42" width="8" y="200" x="355"></rect><rect fill="#ff0049" stroke-width="0" stroke="none" height="22" width="8" y="220" x="414"></rect><rect fill="#219bf1" stroke-width="0" stroke="none" height="24" width="8" y="218" x="127"></rect><rect fill="#219bf1" stroke-width="0" stroke="none" height="62" width="8" y="180" x="186"></rect><rect fill="#219bf1" stroke-width="0" stroke="none" height="56" width="8" y="186" x="245"></rect><rect fill="#219bf1" stroke-width="0" stroke="none" height="117" width="8" y="125" x="305"></rect><rect fill="#219bf1" stroke-width="0" stroke="none" height="74" width="8" y="168" x="364"></rect><rect fill="#219bf1" stroke-width="0" stroke="none" height="39" width="8" y="203" x="423"></rect><rect fill="#ff009b" stroke-width="0" stroke="none" height="16" width="8" y="226" x="136"></rect><rect fill="#ff009b" stroke-width="0" stroke="none" height="96" width="8" y="146" x="195"></rect><rect fill="#ff009b" stroke-width="0" stroke="none" height="51" width="8" y="191" x="254"></rect><rect fill="#ff009b" stroke-width="0" stroke="none" height="163" width="8" y="79" x="314"></rect><rect fill="#ff009b" stroke-width="0" stroke="none" height="72" width="8" y="170" x="373"></rect><rect fill="#ff009b" stroke-width="0" stroke="none" height="57" width="8" y="185" x="432"></rect></g><g><rect fill="#333333" stroke-width="0" stroke="none" height="1" width="356" y="242" x="97"></rect></g></g><g></g><g><g><text fill="#000000" stroke-width="0" stroke="none" font-size="12" font-family="Arial" y="258.8666666666667" x="127.08333333333333" text-anchor="middle">primes</text></g><g><text fill="#000000" stroke-width="0" stroke="none" font-size="12" font-family="Arial" y="274.8666666666667" x="186.25" text-anchor="middle">memops</text></g><g><text fill="#000000" stroke-width="0" stroke="none" font-size="12" font-family="Arial" y="258.8666666666667" x="245.41666666666666" text-anchor="middle">corrections</text></g><g><text fill="#000000" stroke-width="0" stroke="none" font-size="12" font-family="Arial" y="274.8666666666667" x="304.5833333333333" text-anchor="middle">copy</text></g><g><text fill="#000000" stroke-width="0" stroke="none" font-size="12" font-family="Arial" y="258.8666666666667" x="363.75" text-anchor="middle">fasta*</text></g><g><text fill="#000000" stroke-width="0" stroke="none" font-size="12" font-family="Arial" y="274.8666666666667" x="422.91666666666663" text-anchor="middle">fann...URL: http://leaningtech.com/duetto/blog/2013/10/02/Preview-Duetto/
Новость: http://www.opennet.me/opennews/art.shtml?num=38068
и зачем оно надо?
Шобы JavaScript не учить, неосиляторам старой школы. С++ по моему и так хорош в своих областях.
Ололо, ты хоть понял, что ляпнул?
Неосиляторы других ЯП есть везде, а уж среди С-пых-пых погромистов их бессчётное множество.
Есть куча софта и библиотек уже написанного на С/C++. Кроме того С++ посложнее javascript.
Теперь попробуй подумать еще раз.
Естественно С-пых-пых сложнее других ЯП, в нём реализовано столько ненужного и бестолкового функционала что это уже превысило все разумные пределы (ну или близко к этому).
Дай угадаю, ни Java, ни С++ не знаешь?!
О великий погромист объясни недалёкому человеку почему для определения "автоматически" определяемого возвращаемого типа в шаблонных функциях используется столь изящный синтаксис в котором сам погромист указывает как этот тип определить или почему функциям необходим constexpr для того чтобы определить результат во время компиляции? И в конце концов почему у с++ такой гениальный и простой синтаксис для работы с шаблонами?
> О великий погромист объясни недалёкому человеку почему для определения "автоматически"
> определяемого возвращаемого типа в шаблонных функциях используется столь изящный синтаксис
> в котором сам погромист указывает как этот тип определитьПотому что в C++ система типов не позволяет прикрутить полноценный вывод типов типа Хиндли-Милнера в ML-подобных языках, а обсуждение реализации своего варианта еще затянуло бы принятие C++11. В C++14 ты, впрочем, сможешь написать что-то типа
template<...>
auto foo(...) -> decltype(auto)
{
// произвольно сложное тело с произвольным количеством return'ов
}> или почему
> функциям необходим constexpr для того чтобы определить результат во время компиляции?Определить результат можно и не во время компиляции. constexpr просто дает компилятору понять, что ты требуешь, чтобы результат можно было определить во время компиляции. Если захочешь функцию в аргументах темплейтов юзать, например. Требовать этого от каждой функции — бред, а с раздельной компиляцией по функции невозможно сказать же, вычислена она в компилтайме или нет.
> И в конце концов почему у с++ такой гениальный и простой
> синтаксис для работы с шаблонами?Что именно тебе не нравится?
Второй вопрос и был зачем указывать constexpr что бы определит результат вовремя компиляции, почему нельзя без него. Почему в других ЯП это возможно было сделать а в С++ нет?
> Второй вопрос и был зачем указывать constexpr что бы определит результат вовремя
> компиляции, почему нельзя без него.Зачем указывать const в функциях-членах, почему нельзя определить без него, что функция ничего (с точностью до mutable) не меняет?
> Почему в других ЯП это возможно
> было сделать а в С++ нет?В каких языках с компил-тайм-шаблонами это можно?
D, нужно ли вычислять результат функции во время компиляции определяется в зависимости от контекста использования функции.
А, ну так все вопросы к отсутствию в плюсах нормальных модулей, что произрастает из-за обратной совместимости с сишечкой. Хотя надо стандарт посмотреть-почитать подробнее.
> почему ...А яебу, я ни С++ ни Java не знаю, и знать не хочу. :)
А зачем вы тогда задаёт эти вопросы?
Потому что уровень интеллекта такой
>Естественно С-пых-пых сложнее других ЯП, в нём реализовано столько ненужного и бестолкового функционала что это уже превысило все разумные пределыК счастью у нормальных людей оные пределы на порядок шире твоих
Дааааааааа! А теперь давайте их все перекомпилим в яваскрипт, х*ле там! :D:D:D:D
> Дааааааааа! А теперь давайте их все перекомпилим в яваскрипт, х*ле там! :D:D:D:DИменно, можно будет сосредоточиться на доводке производительности до уровня Си, ну и сделать сантиксис вкуснее.
> Шобы JavaScript не учить, неосиляторам старой школы.Прикалываешься? Чего там осиливать? Любой сиплюсплюсник на JS будет фигарить только в путь. А вот если JSника посадить с++ юзать - он опухнет в два счета.
У каждого языка свои парадигмы и свои идеи. В том же JS — прототипное наследование, больно динамическая типизация, и так далее. Фигарить-то плюсплюсник, может, и будет, но результат будет уж больно плюсовым.Лучше на JS не писать, чем писать на JS как на плюсах.
Я сиплюсплюсник есличо, да.
Ну, не совсем так. Крестовик на JS писать, конечно, сможет, но эффективно использовать его (простите за каламбур) плюсы сможет только после дополнительного обучения.
Другое дело, что этот транслятор вряд ли блещет интеллектом, и его результат будет заведомо более убогим, чем это сделал бы как JS-, так и C++-программист.А уж простыни с примитивной логикой при желании вообще переводятся из крестов в скрипты регулярками. Что, видимо, и служит основой всего этого проекта...
Очень распространенное заблуждение. Результаты подобного подхода регулярно наблюдаю и они весьма печальны. Хорошие Сшники пишут очень хреновый код даже на PHP, куда там на js. А все дело в опухшем ЧСВ, которое не позволяет им спустится с небес и серьезно изучить скриптовый язык.
> Любой сиплюсплюсник на JS будет фигарить только в путь.«фигарить»-то, может, и будет. а вот нормальный код писать — не факт.
чтобы писать на нормальном языке (c++), а не на таком дерьме как javascript
Ну не знаю ... со стороны они оба ... не конфетки :)
это ты гвидобейсика не видал
А нет такой же "полезной", но из Фортрана в Похапэ?
> А нет такой же "полезной", но из Фортрана в Похапэ?Оттранслируй его в си. Потом закомпиль emscripten'ом в биткод LLVM и перегони в JS. Это конечно не PHP, но тоже ничего. Особенно если запускать в браузере на виртуалке, которую запустили на эмуляторе x86 работающем на ARM. Всего неделя на загрузку и счет - и результат у вас в кармане! Новые горизонты производительности!
Нет, надо искать !
Работы на C++ не принимают на паралимпиаде по программированию, поэтому и возникает необходимость во всём этом. :-D А если серьёзно, то мне кажется, что через 5-10 лет будет очень интересно. Пока переезда полновесных приложений в браузеры как в системно-независимую среду выполнения надо ещё подождать, пока это всё ещё игрушки, хотя и многообещающие. И переезд когда-нибудь да состоится...
> Пока переезда полновесных приложений
> в браузеры как в системно-независимую среду выполнения надо ещё подождать, пока
> это всё ещё игрушки, хотя и многообещающие. И переезд когда-нибудь да
> состоится...Нет. http://sealedabstract.com/rants/why-mobile-web-apps-are-slow/
Да спору нет, что языки с динамической типизацией и поиском переменных/полей по имени (с которым в реализациях борются, но который нельзя побороть до конца) -- принципиально медленные и плохо поддаются оптимизации, даже если их компилировать в нативный код. Да, JS -- очень скверный ассемблер, т.к. вообще не для этого разрабатывался. :-) И тем не менее, уже всего-то -- пять раз, если верить этой статье. А для многих приложений даже это близко к приемлемому уже сейчас. Жаль, что разумной альтернативы JS, которая была бы настолько же переносима, пока нет. Но, может быть, ещё будет... А пока есть то, что есть, и уже с ним результаты довольно интересны. Тенденция очевидна. И если подобный высокоуровневый ассемблер нужен (а он нужен, единое окружение для исполнения программ -- это ПРАВИЛЬНО), он появится и станет стандартом де-факто. И уж за десять лет что-нибудь должно, просто обязано созреть. Так что всё будет. Но, конечно, не сразу. :-)К слову сказать, для того, чтобы сделать JS намного более пригодным на роль ассемблера нужно ввести в язык всего несколько изменений, всего несколько новый конструкций. Операции с полностью явным указанием типов. Особый вариант поиска переменной/поля, который целиком бы рассчитывал на то, что объект или область видимости, в которых поле ищется, не имеет динамически добавленых по сравнению с изначальным шаблоном (который, собственно, тоже надо декларировать -- это ещё одна конструкция) полей. Всего три добавления, причём неважно, насколько новый синтаксис будет удобен для использования человеком, это всего лишь средство сделать JS пригодным на роль промежуточного переносимого языка, на котором будет генерироваться эффективный код. Все эти сборки или не сборки мусора, всё это пройдёт, уж эти проблемы решатся непременно, они уже во многом решены. Настоящее зло -- работа с любым типом данных ТОЛЬКО как с неизвестным и потенциальная необходимость поиска по имени.
http://asmjs.org/
Вот-вот, уже всего лишь в два раза, а не в пять. И это просто подмножество языка, работающее и в обычном движке.
Филипп Филиппович, ты перед тем как такие простыни рожать - зайди в гугел и спроси про JVM :)
"единое окружение для исполнения программ" - уже есть ... а толку то? :)
Так что выдохни, прими стопарик и марш кодить!
Если для того, чтобы узнать про JVM вам нужен гугель, то боюсь делать предположения о вашем возрасте. Объективно к единой среде всё равно придёт.
> Если для того, чтобы узнать про JVM вам нужен гугель, то боюсь
> делать предположения о вашем возрасте. Объективно к единой среде всё равно
> придёт.Филипыч, тебе про виртуальную машину и твой ЕДИНЫЙ АССЕМБЛЕР ( он же в просторечии байткод ) мой анонимный брат толкует, а ты на тему возраста съехал.
Прими таки стопарик и глубоко выдохни.
> Настоящее зло — работа с любым типом данных ТОЛЬКО как с неизвестным
> и потенциальная необходимость поиска по имени.вот же фигня-то… как раз это вполне решается хитрым PIC'ом и tracing JIT compiler'ами. а вот сборка мусора как раз moving target, и до сих пор штука весьма проблемная.
собственно, по одной этой цитате уровень твоей компетентности вполне ясен.
Tracing JIT, нет, ну надо же, уровень понимания! И эти люди запрещают мне в носу ковыряться!
> И эти люди запрещают мне в носу ковыряться!что ты, ковыряйся! и с дерева тоже можешь не слезать.
> Нет. http://sealedabstract.com/rants/why-mobile-web-apps-are-slow/ну так это JIT-ы хреновые. и сам JS не фонтан. LuaJIT2, например, показывает весьма и весьма нехилую производительность, при этом не страдает, например, плюсами и мозголомной архитектурой, как V8. а если найдутся спонсоры, СуперМайк обещает и одно из оставшихся мегатормозных мест добить — сборщик мусора. хотя LJ2 и так достаточно неплохо справляется с уничтожением лишних аллокаций.
>Работы на C++ не принимают на паралимпиаде по программированиюКак ты тонко потролил неплюсовиков