LINUX.ORG.RU
ФорумTalks

Rust обогнал Сишечку по скорости распаковки

 , ,


0

5

Привет, ЛОР!

Случилось непредвиденное и невероятное: реализация библиотеки zlib на Rust (zlib-rs) обогнала реализацию на C по скорости распаковки и показывает примерно схожую с последней скорость запаковки данных. Разница в производительности может достигать аж 14%.

Есть ли смысл теперь вообще писать новый софт на Си, если даже в производительности он начинает терять лидерство? Что скажут эксперты по Си и почему zlib на Си так плохо оптимизирован?

Ссылка на бенчмарки: https://trifectatech.org/blog/zlib-rs-is-faster-than-c/

Перемещено dataman из development

★★★★★

Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от alysnix

все UB сишки, это «UB» железки на которой крутится код

Даже близко нет. Сходи список UB почитай.

hateyoufeel ★★★★★
() автор топика
Ответ на: комментарий от unC0Rr

Да это-то ладно. В сишечке незакрытые кавычки – UB. Да, так написано в стандарте. Я всё хочу чтобы сишные гуру объяснили мне смысл этого вот и почему это UB, а не гарантированная ошибка синтаксиса.

Цитата:

An unmatched ’ or " character is encountered on a logical source line during tokenization

hateyoufeel ★★★★★
() автор топика
Ответ на: комментарий от hateyoufeel

ибо парсинг не всегда ll(1) дк(1) и прочий фан

кой какие реализации успели просто строки поэтому не факт что отсутствие(а точнее не обнаруженость как того суслика которого не видно а он есть) -

вот такая загагулина

«просто не рассчитывай» что ошибка в синтаксисе будет словленна до отправки посылки из места с лозунгом «наша цель коммунизм»

qulinxao3 ★★
()
Ответ на: комментарий от unC0Rr

INT_MAX + 1 это UB. Никаких прерываний и запретов со стороны железа нет.

еще раз говорю. заниматься сишечкой не зная ассемблера, это все равно что резать скальпелем не зная анатомии.

при переполнении процессор выставляет флаг переполнения и этот флаг можно учитывать при следующей арифметической команде или проверить этот флаг.

таким образом делается длинная арифметика, например. или проверятся факт переполнения.

то есть переполнение это не UB!, это нормальная работа железа, например при длинной арифметике.

а вот для тех, кого занесло из пытона - страшная проблема и потеря значения.

alysnix ★★★
()
Ответ на: комментарий от alysnix

то есть переполнение это не UB!, это нормальная работа железа

Ну так а я о чём говорю? Железу нормально, а по стандарту Си это UB.

unC0Rr ★★★★★
()
Ответ на: комментарий от alysnix

этот флаг можно учитывать при следующей арифметической команде или проверить этот флаг

И при чём тут Си?

unC0Rr ★★★★★
()
Ответ на: комментарий от alysnix

при переполнении процессор выставляет флаг переполнения

то есть переполнение это не UB!, это нормальная работа железа, например при длинной арифметике.

А сишечку делали чтобы её можно было вкрячить на любые процессоры, в том числе те, где флага переноса нет, а есть, например, аппаратное прерывание при переполнении. Поэтому переполнение сделали UB, чтобы программисты не завязывались на наличие флагов у процессора.

Впрочем, в C11 (annex L) многие UB включая переполнение перенесли в категорию bounded undefined behavior. То есть UB для которого разработчики компилятора должны гарантировать отсутствие записи за пределы выделенной памяти (should they choose to accept the mission).

red75prim ★★★
()
Ответ на: комментарий от red75prim

А сишечку делали чтобы её можно было вкрячить на любые процессоры, в том числе те, где флага переноса нет

а есть и такие? флаг переноса делается для длинной арифметики. и индикации переполнения. процессор без такого флага выглядит странно. видимо экономили на вентилях лет 50 назад.

alysnix ★★★
()
Ответ на: комментарий от red75prim

А сишечку делали чтобы её можно было вкрячить на любые процессоры, в том числе те, где флага переноса нет, а есть, например, аппаратное прерывание при переполнении. Поэтому переполнение сделали UB, чтобы программисты не завязывались на наличие флагов у процессора.

В си только знаковое переполнения является неопределённым поведением. Беззнаковое вполне определено: UINT_MAX + 1 == 0.

Флаги переноса тут не причём. Знаковое переполнение будет себя вести по-разному на one’s complement и two’s complement платформах, поэтому в Си такая залупа. Другой вопрос, что one’s complement не осталось в принципе, это говно давно сдохло. Поэтому эта срань с UB в Си не имеет смысла и нужна только для страданий ради страданий.

hateyoufeel ★★★★★
() автор топика
Последнее исправление: hateyoufeel (всего исправлений: 2)
Ответ на: комментарий от hateyoufeel

Знаковое переполнение будет себя вести по-разному на one’s complement и two’s complement платформах

Для этого бы хватило implementation defined. Но пытались охватить вообще всё что возможно с сохранением возможности оптимизаций.

red75prim ★★★
()
Последнее исправление: red75prim (всего исправлений: 1)
Ответ на: комментарий от red75prim

Для этого бы хватило implementation defined.

Для очень многих вещей хватило бы implementation defined, но наркоманы, писавшие стандарт, решили всем поднасрать. И не то чтобы они останавливались, UB в Си продолжают добавлять, дабы нам всем не было скучно.

hateyoufeel ★★★★★
() автор топика
Ответ на: комментарий от hateyoufeel

дык

именно - поэтому и накладывать ограничения на поведение в случае отсутсвия парной скобки - особенно уже после массового распространения разных реализаций (pcc и прочая) - стандарт же появился очень поздно

а изначально Си это буквально переносимый асм для реализаций остальных инструментов Ахо awk и прочие компиляторы картинок

вообще Сяшка победила(а для эмбедивщины это выглядит вообще парадоксально) - что и ся изначально выделенно что есть сервисы машины - и поэтому многие(не все)ub что бы не ограничивать количество хостов годных без рантайма - и что есть сервесы «рантайма» который обычно воспринимается как операционная система :)

парадокс Си как таковых сам язык был реально беднее и кривее но благо юниксу стал лингво-франкой

по хорошему в Си как и JS тока транспилинг :)

ps https://en.wikipedia.org/wiki/Portable_C_Compiler#Features

PSS https://en.wikipedia.org/wiki/Stephen_C._Johnson#Bell_Labs_and_AT&T

PSSS https://en.wikipedia.org/wiki/Yacc#History

qulinxao3 ★★
()
Последнее исправление: qulinxao3 (всего исправлений: 2)
Ответ на: комментарий от qulinxao3

именно - поэтому и накладывать ограничения на поведение в случае отсутсвия парной скобки - особенно уже после массового распространения разных реализаций (pcc и прочая) - стандарт же появился очень поздно

Почему нет? При отсутствии парных скобок, кавычек и прочего должна быть выброшена ошибка синтаксиса. Думаешь, никто бы не справился? Авторы сишных цомпилеров настолько беспомощны, что даже этого не могут?

а изначально Си это буквально переносимый асм для реализаций остальных инструментов Ахо awk и прочие компиляторы картинок

К асму Си был близок только на PDP-11. На любом другом компьютери в Си от асма нет ничего.

парадокс Си как таковых сам язык был реально беднее и кривее но благо юниксу стал лингво-франкой

Учитывая, что юникс благополучно сдох – линукс к юниксу отношение имеет примерно такое же, как венда – мы можем только надеяться, что сишечка последует его примеру.

hateyoufeel ★★★★★
() автор топика
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

На любом другом компьютери в Си от асма нет ничего.

а если найду?

int x = (*ptr)[i] - такая штука пишется на интеле одной командой. думаешь просто так к поинтеру индекс прицепили, системный ты теоретег. это мода адресации - база плюс индекс в регистрах и константа - размер элемента. вычисляется аппартно как base_reg + index_reg * size.

alysnix ★★★
()
Ответ на: комментарий от hateyoufeel

Потому что надо было нормальные типографические кавычки-ёлочки или лапки юзать, но в силу ограниченности tty model 33 решили один и тот же символ для начала и конца строки использовать.

luke ★★★★★
()
Ответ на: комментарий от luke

А сколько микро-операций на такое уйдёт?

меньше чем делать то же самое несколькими командами.

alysnix ★★★
()
Ответ на: комментарий от alysnix

int x = (*ptr)[i] - такая штука пишется на интеле одной командой

let x: int = array[i]; такая штука пишется на интеле одной командой. Rust близок к ассемблеру.

Мне нравится твоя повёрнутость на Си. Ты не знаешь этого языка, но у тебя офигенное мнение о нём.

hateyoufeel ★★★★★
() автор топика
Последнее исправление: hateyoufeel (всего исправлений: 2)
Ответ на: комментарий от hateyoufeel

Мне нравится твоя повёрнутость на Си. Ты не знаешь этого языка, но у тебя офигенное мнение о нём.

а мне нравится твой девочкин стиль изготовления логических выводов. они возникают как бы из воздуха, без внутренней логики, только на основе внезапных резонансов в твоем сознании(если это можно так назвать).

alysnix ★★★
()
Ответ на: комментарий от alysnix

Возможно, что и так. Но Rust уже в ядре и его там будет только больше, а тебе жопу рвёт. Разве это не прекрасно?

hateyoufeel ★★★★★
() автор топика
Ответ на: комментарий от hateyoufeel

Но Rust уже в ядре и его там будет только больше

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

а вот в ядре его и в лупу не разглядишь.

alysnix ★★★
()
Ответ на: комментарий от alysnix

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

Там выше написали подробно про проблему с твоей методологией.

hateyoufeel ★★★★★
() автор топика
Ответ на: комментарий от hateyoufeel

Там выше написали подробно про проблему с твоей методологией.

жалкие отмазки. достаточно просто посмотреть списки и видно, что там про конкретно про руст сплошь и подряд, а не случайное совпадение с чем-то там.

для меня даже удивительно, как этот жалкий недоязычок, сумел набрать втрое больше уязвимостей, чем с++, на котором пишет большинство разумных программистов(хотя видимо недостаток разумности и есть причина такого рустового лидерства).

alysnix ★★★
()
Ответ на: комментарий от alysnix

жалкие отмазки. достаточно просто посмотреть списки и видно, что там про конкретно про руст сплошь и подряд, а не случайное совпадение с чем-то там.

Это-то да, всё так. Навскидку, 80% поиска про Rust там имеют отношение к Rust. Проблема в том, что это же утверждение неверно для C++. Большая часть уязвимостей в коде на C++ в твой поиск не попала.

Всё, что ты показал, это что авторы кода на Rust любят пихать слово Rust в название. Вот и всё.

с++, на котором пишет большинство разумных программистов

Толсто же!

hateyoufeel ★★★★★
() автор топика
Последнее исправление: hateyoufeel (всего исправлений: 2)
Ответ на: комментарий от hateyoufeel

Всё, что ты показал, это что авторы кода на Rust любят пихать слово Rust в название.

причем тут авторы? уязвимости описывали не авторы, а какие-то независимые копатели уязвимостей. ровно как и про случаи с++.

видимо руст так всех достал, что даже копатели немедля указывают его в описании того, что нашли.

alysnix ★★★
()
Ответ на: комментарий от alysnix

выбирать по собственной воле плюсы как язык имплементации это заявка на гурманство ортогональное разумности

ибо

С++ хорошь как компромис во восход wintel 80-90ых когда охота по внешности летающий шар смолтока со всяким 3d gui и шоб летало как сяшка( просто асм не катил ибо хоть wintel уже был мажорирующией частью но не было гарантий что это на 20-30 лет - да и синтаксис у просто асмов излишне примитивен)

жаль что моден rust а не zig :)

плюсы это франкеншнейн и в этом смысле жаль что Страуструп настолько крут как менеджер проекта

при этом : Alexander Stepanov Introduces Bjarne Stroustrup

т.е достаточно возможности до битов и качественная перегрузка синтаксиса

во втором в С++ адиизраиль

qulinxao3 ★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)