Джефф Мэррисон (Jeff Marrison), автор реализованной на ассемблере x86_64 свободной (GPLv3) библиотеки HeavyThing, предлагающей в том числе реализации протоколов TLS 1.2 и SSH2, опубликовал видео под названием «Зачем писать на ассемблере?». В видео приводятся результаты тестирования при помощи утилит perf и strace простейшего приложения (вывод 'hello'), написанного на 13 языках программирования. Фактически, сравниваются затраты на загрузку исполняемого образа и инициализацию сред выполнения для языков Assembler, C, C++, Go, Rust, Python, Perl, TCL, Java, PHP, NodeJS, Ruby и Bash. Использованные в видео примеры доступны для загрузки. https://2ton.com.au/videos/tvs_part1/tvs_part1.mp4 8.12.2019 http://www.opennet.ru/opennews/art.shtml?num=51992
АСМ по умолчанию, при правильном использовании не может быть ТОЧНО хуже того что написано на другом ЯП. Вопрос может быть ТОЛЬКО в трудоемкости. Хочешь быстрее выделять память ? Сделай себе менеджер памяти. Хочешь быстрее выполнять код - оптимизируй код под процессор. Да, на высокоуровневом языке ты один раз напишешь код и он будет оттранслирован в код под нужный процессор. Т.е. трудоемкость уменьшается в десятки раз. Но... нет. Лучше чем на асме - написать нельзя. В конце-концов возьми код их виртуальной машины (например тот же ДотНет) и открой в IDA. Там будет асм. И этот код можно написать на асме лучше чем он есть сейчас. Но сложнее, дольше, геморней. Волосы у тебя повыпадут не только из жопы, у тебя и ресницы повыпадут. Но написать лучше можно. ======================= Сравнивал как-то код на дотнете и на С++. Циклы дотнет хавает просто божественно. И на асме за ним не угонишься ибо если дело касается какого-нибудь malloc - Дотнет отрабатывает просто моментально. Намного быстрее. Но... когда начинается какой-то сплошной участок - он даже и рядом не стоял. Изначально глупо сравнение в скорости между асмом и "чем-то еще" ибо "что-то еще" в любом случае превращается в машинный код = асм.
В примере еще одна некорректность. Он слишком мал. Си в самом начале подгружает кучу всякого барахла для своей работы. Тоесть на этом временном промежутке он явно отстает. И все будут отставать ибо это этап подготовки к работе. В асме его нет (в данном примере точно) так что тут и замерять нечего. Ежу понятно что конечно он будет быстрее на этом этапе. Лишние подготовительные этапы и прочие системные вызовы безусловно будут стопорить скорость испытуемого в самом начале, но в общем-то это такая себе жертва в угоду эффективности. Если и дальше продолжать код на асме без усовершенствований (например менеджера памяти) - плюсы с бустом (буст еще дольше будет грузиться вначале) - обгонят его как несмышленого котенка. Замер требуется производить по какой-нибудь отмашке. Типо on_button_click какой-либо.
Вообще так если подумать... эти замеры половых органов и языков погромирования - это сравнения сладкого с прямоугольным. Какбэ... х/з. Напишешь эффективный код на асме под x86 - молодец. Точно такой же код на плюсах будет сосать где-то вдалеке позади. Но. Под x64 тебе на асме надо будет писать другой код. А на плюсах - просто откомпилить и он будет работать. На питоне ты за плюсами никогда не угонишься, но зато код на питоне могут юзать и на Маке и на Венде... да хоть на Ведроиде. На Асме - тебе придется писать код под каждую платформу. И именно писать ибо там переписывать дохуя. (хотя можно подумать о макросах каких-то но все-равно... это очень геморно). И тут какбэ "что быстрее ?" да хрен его знает. Пожалуй парсить веб я буду лучше на Питоне, писать какой-то средний кодес на плюсах а системный на асме. И нет тут какбэ особого сравнения. ====================================================== Каждому инструменту - свое место. Можно-ли срубить дерево хирургическим скальпелем ? Ну.... наверное можно я не пробовал. Асм - скальпель. Им можно наверное рубить деревья но это будет глупо. Рубить деревья проще всего Питоном. И далее в таком духе.