LINUX.ORG.RU

Ответ на: комментарий от Partisan

Я выше писал про гугл. Почему-то когда я гуглю документацию Питон/Го легко нахожу документацию по программированию

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

Очевидно компютерная игра Rust слишком популярна. А go хоть и обычное слово , но ищут про язык. Врочем я ищу по go lang.Наконец, зверюшка Python совсем непопулярна из-за скверного характер. Google упорядочивает найденные результаты по тому, что предположительно интересует пользователя.

Partisan ★★★★
()

Я гуглил про Rust, а там выдаёт Minecraft

Играть меньше надо. Ну и запрос лучше такой: rust (lang|language|язык программирования|awesome)

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

Я и обратил внимание на одноимённую компьютерную игру

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

У тебя всегда есть возможность написать жалобу в гугл/создателям игр/авторам раста/спортлото, что они там неправильно именуются

Aswed ★★★★★
()

Почему русскоязычный Интернет (как минимум ЛОР и опеннет) ржут над Rust при каждом его упоминании?

ConLenov ★★★★★
() автор топика

Я гуглил про Rust, а там выдаёт Minecraft

верь им.

в данном случае Minecraft это правильно

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

Почему русскоязычный Интернет (как минимум ЛОР и опеннет) ржут над Rust при каждом его упоминании?

Потому что раст угрожает потеснить языки C и С++. Может сомневаются в этом, а может и боятся)

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

На будущее https://devdocs.io/rust/

какая-то свалка референсной документации по всему и вся. непонятна идея такой организации документации. точнее, мысль автора понятна, типа унифицировать, только идея тупиковая и реализация так себе. как пример, оригинальная документация по golang сильно удобнее и интерактивные примеры можно прям там же править и смотреть. Остальные языки даже смотреть не стал.

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

Он предназначен, чтобы теснить, и теснит. Был придуман, чтобы исключить некоторые виды ошибок, обычных в C и C++. Однако о полной замене этих языков речи нет. Кто программирует на C/C++, полезно ознакомиться. А применять ли - решать самостоятельно.

Partisan ★★★★
()

лучше чем o’reilly programming rust для старта не найдешь, при условии что есть уже знания хотя бы питона

ponchik-2
()
Ответ на: комментарий от ConLenov

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

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

выучить еще один язык

Что там учить-то?

Rust хороший язык, сложноватый

«Хороший» – понятие растяжимое. Сложноватый – нет, это примитивный язык.

Если откинуть идиотов из секции комментариев на условном OpenNET, получается следующее:

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

О реальном уровне коммьюнити Rust показательным примером является драма вокруг benchmarksgame, выпиливание крестовых примеров под предлогом «нарушения правил», а когда под этот предлог подвести не удается – то и попросту изменение правил, все ради того, чтобы Rust оставался первым.

Никакого перформанса в реальном (обычном, повседневном) Rust не существует – в отличие от заявляемого. Тот перформанс, что есть, полностью является заслугой LLVM, и достигается не благодаря Rust, а вопреки – достаточно посмотреть выхлоп кодогена и сравнить с крестовым. Тезисы на их главной странице – ложь, или, в лучшем случае, полуправда с огромным количеством оговорок.


Покормил тролля.

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

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

Перфоманс в чем ты ожидаешь, в скорости разработки - нет, на сях быстрей накидать прототип, согласен, хитрые штуки с функциональщиной, да тут будет какой-то Scala/F# быстрей всех в будет, перфоманс раста, то что он сразу тебя дрочит писать осознанно, что в будущем довольно упрощает поддержку приложения, БОЛЬШОЕ живое комьюнити в котором также есть свои упопротые фанатики, но куча статей на медиуме от индусов, позволяет пользователю «A» который чуть-что слышал о системном программировании начать прогать на языке который сопоставим с С, но куда более безопасный для новичков.

Ну и еще раз про активный маркетинг, это хорошо, уверен есть куча гениальных проектов про которые мы с тобой никогда не услышим, просто из за черезмерной гикнутости разрабов.

ponchik-2
()
Ответ на: комментарий от Siborgium

О реальном уровне коммьюнити Rust показательным примером является драма вокруг benchmarksgame, выпиливание крестовых примеров под предлогом «нарушения правил», а когда под этот предлог подвести не удается – то и попросту изменение правил, все ради того, чтобы Rust оставался первым.

Интересно. Если я ничего не путаю, то benchmarksgame админит чуть ли не один человек, который всегда принимал субъективные (естественно!) решения в плане трактовки правил. Помню ещё как лисперы плакались, что их гениальные решения не принимают. Неужели чувака купили/зомбировали и он теперь раст продвигает?..

DarkEld3r ★★★★★
()
Ответ на: комментарий от ponchik-2

Не жизнеспособный это очень субъективно

Не нужно вырывать из контекста слова. В оригинале было «пытающийся лезть в ту нишу, в которой он не жизнеспособен».

Перфоманс в чем ты ожидаешь

В скорости исполнения скомпилированного кода.

в скорости разработки

Там, куда Rust целится, это маловажно.

то что он сразу тебя дрочит писать осознанно

Единственная «осознанность» заключается в том, что приходится извращать код так, чтобы примитивный borrow checker все же дал его скомпилировать. Я напомню, что без unsafe не могу даже получить две мутабельные ссылки на разные элементы слайса.

который чуть-что слышал о системном программировании начать прогать на языке который сопоставим с С

Какое это имеет отношение к системному программированию? Дергать готовые батарейки – это не системное программирование. У питона есть доступ к обертке над libc, с mmap’ами и прочим – это уже системное программирование?

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

benchmarksgame админит чуть ли не один человек

И ряд «контрибуторов» из числа сообщества.

который всегда принимал субъективные (естественно!) решения в плане трактовки правил

Которые оказываются субъективно сдвинуты в одну и ту же сторону. Достаточно посмотреть Issues проекта. Про историю с решением revcomp от царя я думаю ты в курсе.

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

Про историю с решением revcomp от царя я думаю ты в курсе.

Про вот это?

А есть какие-то ссылки или свидетельства этой истории не от самого царя, а то это крайне специфический персонаж, который может написать всё, что угодно?

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

Да.

https://salsa.debian.org/benchmarksgame-team/benchmarksgame/-/issues/206 https://salsa.debian.org/benchmarksgame-team/benchmarksgame/-/issues/226 https://salsa.debian.org/benchmarksgame-team/benchmarksgame/-/issues/231 https://salsa.debian.org/benchmarksgame-team/benchmarksgame/-/issues/447

В Wayback Machine страницы benchmarksgame не сохранилось, так что замеры придется проводить вручную.

А есть какие-то ссылки или свидетельства этой истории не от самого царя

Если есть интерес, можно зайти в телегу proriv_zaparti и искать по ключевому слову revcomp.

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

Чёт у меня дежа вю. Тут, на этом самом форуме был растосрач, в котором так же пиписькомерялись на тему «а может ли ваш раст» с задачей на обработку символов. И точно так же явился Царь и читернул через ммап. 2 минуты гугла и растовая реализация тоже стала работать через ммап, скорость сравнялась.

В данном примере с бенчмаркинггейм надо быть на всю голову ушибленным, чтоб реально считать Царя адекватным. Он отлично понимает, что вся крутизна его программы в ммапе, но при этом включает дурачка и делает вид, будто read_to_end - реальная альтернатива и вообще чего до бедного Царя докопались. Естественно его посылают. Причём идея насчёт растофанатизма модератора сомнительно: в расте можно сделать ммап. А вот во всяких хаскелях - вряд ли.

khrundel ★★★★
()
9 августа 2022 г.
Ответ на: комментарий от khrundel

Чёт у меня дежа вю. Тут, на этом самом форуме был растосрач, в котором так же пиписькомерялись на тему «а может ли ваш раст» с задачей на обработку символов. И точно так же явился Царь и читернул через ммап. 2 минуты гугла и растовая реализация тоже стала работать через ммап, скорость сравнялась.

Пруф. Кстати, удивительно работают оправдания подобных фанатиков. Не смог, а другой смог «читернул». Это основное свойство раст-секты - воровать, а потом орать «мы бы могли».

Он отлично понимает, что вся крутизна его программы в ммапе

Я даже специально сделал версию без ммапа, но что-то пошло не так - фанатики её так же удалили. Неужели опять наврал? Ну бывает.

В результате я задам вопросы, которые почему-то никто не задал:

  1. Если достаточно добавить ммап, то почему никто не добавил? Просто добавь и покажи, но никто не добавил и не показал. Именно побежали удалять моё решение и пытаться задним числом менять правила, зачем менять правила?

  2. Насколько я помню именно данный персонаж там за мною бегал и плакался в коментах, но на каком основании были изменены правила? Насколько я помню плач его был связан с «а другие языки не могут», но почему тогда разрешены симды и прочее? Ах да, нельзя всё, что не осилил раст.

  3. Даже если мы предположим, что дело действительно в ммапе, то какой смысл в бенчмарках? Нормальные и честные бенчмарки должны минимизировать io. А если половину бенчмарка(на самом деле куда больше) занимает io, то какой смысл вообще? Это бенчмарк ядра ОС/памяти, а не языков.

Причём идея насчёт растофанатизма модератора сомнительно: в расте можно сделать ммап. А вот во всяких хаскелях - вряд ли.

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

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

cppagent
()
Ответ на: комментарий от khrundel

Это ответ на вопрос - почему я ничего не пишу. И почему мне нет смысла участвовать в спец-олимпиадах подобных, где адепты будут врать и тереть, тереть и врать.

Я сделал контент для ценителей, но ценителей нет. Я специально оставил ммап, чтобы фанатики на него сагрились. Что мы и наблюдаем, но я надеялся на то что будут те, кто пожелает проверить и осознает уровень, но таких не нашлось. А писать самому и для себя - мне лень.

Так же во второй версии без ммап я так же оставил крючок - нулевой потребление памяти. Её опять снесли(да и вообще все цпп-версии. Совсем не фанатизм, кстати). Но никто так же ничего не понял и не написал об этом.

Просто те, кто понимают - об этом не пишут. И что мы имеем? Всякие эникеи, которые ничего не написали - бегают и срывают покровы. А те, кто пишут - те ссылаются на меня.

Наверное пацан из «топ1» просто не знал, что дело в ммапе. Не заметил. Ну бывает. Люди не понимают всего масштаба невежества и вранья, которое их окружает.

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

https://salsa.debian.org/benchmarksgame-team/benchmarksgame/-/issues/447#note_279823 - там уже фанатик прибежал. Такие же сказки рассказывает. Пруф тому, что ммап нет, а быстрее есть.

Удивительно то, как подобные эникеи позволяют себе рассуждать о чём-то рассуждать. А особенно меня удивляет «некоторые не работаю, но я пришёл ныть не туда, а сюда», «он использует меньше ресурсов».

Это типичный пример того как работает невежество. Фанатик видит ммап и нихрена не понимает, даже того зачем он там. Кому интересно может сравнивать версию на риде и ммап, а после понять - почему там ммап. А то, что он быстрее - это просто дополнение к остальному. Интерфейсы для тех кто может - они работают лучше, чем для тех, кто не может.

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

Пруф

Rust vs C (комментарий)

Не смог, а другой смог «читернул». Это основное свойство раст-секты - воровать, а потом орать «мы бы могли».

Ты бы определился, всё-таки у тебя «украли» твой ммап, или «не смогли».

Я даже специально сделал версию без ммапа, но что-то пошло не так - фанатики её так же удалили.

Есть только твоё слово, а оно сам понимаешь чего стоит. Но, допускаю, что ты сделал и без ммапа и даже не читерил каким-то другим способом, а удалили его просто не став разбираться. Фигли делать, сначала ты работаешь на репутацию, потом репутация работает на тебя.

Если достаточно добавить ммап, то почему никто не добавил?

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

Насколько я помню именно данный персонаж там за мною бегал и плакался в коментах, но на каком основании были изменены правила? Насколько я помню плач его был связан с «а другие языки не могут», но почему тогда разрешены симды и прочее? Ах да, нельзя всё, что не осилил раст.

Какой персонаж? И при чём тут вообще раст? В расте сделать mmap вообще не проблема, хоть напрямую функцию вызови, хоть либу используй, хоть сам себе либу запили. «другие языки» - это всякие хаскели и джаваскрипты.

Даже если мы предположим, что дело действительно в ммапе, то какой смысл в бенчмарках? Нормальные и честные бенчмарки должны минимизировать io. А если половину бенчмарка(на самом деле куда больше) занимает io, то какой смысл вообще? Это бенчмарк ядра ОС/памяти, а не языков.

Что значит «даже»? Опять дурачка включил? Типа ты не затем свой бенч писал, чтоб крутизну ммапа продемонстрировать?

Да, желательно делать бенчмарки так, чтоб io не влияло. Но этот бенчмарк уже сделан, соответственно достаточно следить, чтоб всякие не читерили срезая углы в io.

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

Я сделал контент для ценителей, но ценителей нет. Я специально оставил ммап, чтобы фанатики на него сагрились. Что мы и наблюдаем, но я надеялся на то что будут те, кто пожелает проверить и осознает уровень, но таких не нашлось. А писать самому и для себя - мне лень.

Т.е. по твоим же словам ты, прямо как принц из сказки, специально считерил, чтоб сагрились и удалили и только одна девушка с IQ овер 9000 увидела за попыткой читернуть твоё гениальное решение и доказала тем самым то что тебя достойна. В итоге почти всё прошло как ты спланировал, действительно сагрились и удалили, разве что девушки не нашлось. Так чем ты недоволен?

khrundel ★★★★
()
Ответ на: удаленный комментарий

Ах да, забыл ещё про эту чушь, хотя частично её упоминал множество раз. Ни в каком расте никакой ммап сделать нельзя. Можно сделать через ансейф-ffi, но далее весь раст превращается в тыкву.

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

Ведь если он/другие вруны могли бы что-то - в чём проблема добавить в раст ммап, повторюсь? И никаких оправданий здесь нет.

В смысле в раст добавить? В язык? Ну есть либы под это. Или тебе надо чтоб непременно в стандартную либу? Ну так и в C в стандарте никакого mmap нет. Чем ансейф ffi из раста отличается от ансейф-ffi из C? У тебя вообще какой-то бзик на эту тему, всё чего коснулся C тут же принадлежит ему и если в другом языке заюзали, то «украли». Я бы понял, если бы это была какая-то heavy-load библиотека написанная на C, ты бы сказал, что если 90% времени программа проводит в коде либы, написанной на C, то это не бенч раста, но блин, mmap - это просто биндинг к системному вызову.

В бенчмарки не добавили потому что смысла нет. Сам же написал, фигли замерять производительность ядра линукс?

И вообще, у тебя шизофрения. Ты одновременно доказываешь, что ммап не при чём и тебя дисквалифицировали за то что ты написал самую лучшую реализацию, и то что не пользоваться ммапом не имеет смысла, потому что он очень эффективный.

Это как если бы попавшийся на допинге мошнил и что это вещество не при чём, так как он и так быстро бегает, и что отказаться от приёма вещества не нужно, так как из-за него результаты лучше.

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

Показываю суть.

Читаем что он сообщал:

Чёт у меня дежа вю. Тут, на этом самом форуме был растосрач, в котором так же пиписькомерялись на тему «а может ли ваш раст» с задачей на обработку символов. И точно так же явился Царь и читернул через ммап. 2 минуты гугла и растовая реализация тоже стала работать через ммап, скорость сравнялась.

Читаем по ссылке, которая пруф:

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

Здесь мы можем заметить то как мыслят раст-адепты «я не смог - ты смухлевал». Опять же вопрос остаётся - почему ты не добавил ммап? Не смог, а всё остальное оправдания.

Почему он не добавил? Есть две причины:

  1. не знал и не мог, потом побежал пастить из гугла.

  2. не хотел позориться с этим:

    let bytes = unsafe { file_mmap.as_slice() };

    let mut lexer = Lexer::new(unsafe{std::str::from_utf8_unchecked(bytes)});

Но самое важно здесь то, что он соврал. Он соврал везде. Он выдаёт свои откровения за то, что я не показал какой-то код, сообщает «читерил», но что же там было?

Я ничего не менял, только вставил нормальное чтение файла.

Я так и написал, что вставил нормальное чтение файла. И про код он наврал:

Ах да, когда тебе будут ламерки кудахтать о том, что «ты тратишь память форфан» - кидай им:

mmap(NULL, len, PROT_READ, MAP_POPULATE | MAP_PRIVATE, fd, 0)

Я показывал как читать файл - я показал код чтения. Непонимание этого, кстати, пруфы того что люди не понимают о чём рассуждают.

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

cppagent
()
Ответ на: комментарий от khrundel

По поводу его невежества и прочего вранья про revcomp. Он игнорирует то, что выпилили версию и без ммапа.

В любом случае я там сделал разбор у себя - кому интересно почитает. Я обещал, что как только кто-то осилит понять как оно работает - объясню. В любом случае пацан не до конца понял - он просто пастил и него получилось, но суть он понял.

Так же всё что вам нужно знать - тот кто сделал топ1 версию сейчас знает откуда он копипастил и даже об этом написал.

Copied the idea to use a lookup table for reverse complementing two characters at a time from roman blog’s C++ program.

Тут он, конечно, неправильно написал - там идея не в двух символах. Идея в двух символах была до меня, но у остальных она работала хуже одного. У меня идея именно того как это сделать быстро.

Но мы так и живём. Всякие форумные вруны бегают и врут, что дело в ммапе, но почему-то они не сделали версию на ммапе для раста. Ничего не сделали. А вот те, кто делают топ1 версии - те почему-то не знают про ммап.

Ну бывает.

cppagent
()
Ответ на: комментарий от khrundel

Объясню про mmap тем, кому интересно. Он наврал во всём. Я разберу враньё, а далее покажу правду.

В расте сделать mmap вообще не проблема, хоть напрямую функцию вызови, хоть либу используй, хоть сам себе либу запили. «другие языки» - это всякие хаскели и джаваскрипты.

Здесь ситуация такая же как в случае с ммап. Он видит быстрее, видит магию, но не понимает почему - поэтому агрится на ммап. Далее он видит «в расте нельзя ммап» и так же агрится без понимания.

mmap в расте нельзя не потому, что нельзя украсть llvm/c-ffi, а потому что с этим ммапом нужно дальше что-то делать. И вот это «дальше» не осиливается.

Точно так же mmap можно вызвать и из хаскеля и даже из nodejs, но толку с этого? Никакого.

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

Опять же - задаём простой вопрос - если ммап достаточно вставить, то почему никто не вставил? Чего он бегает, врёт. 2 года прошло? Ведь в примеры выше он побежал и вставил ммап? А чего же тут не вставил?

Да, желательно делать бенчмарки так, чтоб io не влияло. Но этот бенчмарк уже сделан, соответственно достаточно следить, чтоб всякие не читерили срезая углы в io.

Вот опять врёт. Никакой бенчмарк не сделан и прочая чушь/оправдания тоже. Всё было в рамках правил(их не зря меняли под меня).

Нет в принципе никаких оснований для подобного вранья и рассуждений. Ну хорошо - дело в ммапе, в чём проблема? Какой такой бенчмарк сделан? Что он несёт?

Каждая может добавить свою версию. В чём была проблема добавить ммап? Пусть раст тоже его использует и бенчмарк будет лучше. Какие основания для выпила ммапа? А нет их.

cppagent
()
Ответ на: удаленный комментарий

Кстати, я опять же пошёл и не поленился. +/- скопипастил его ио(из топ1). Заодно можно показать уже с пруфами почему типичный ратс-адепт может только врать.


#include <boost/hana.hpp>
#include <limits>
#include <array>
#include <sys/mman.h>
#include <unistd.h>
#include <cassert>
#include <filesystem>
#include <string_view>
#include <vector>
#include<cstring>

namespace hana = boost::hana;
namespace fs = std::filesystem;

using namespace hana::literals;

using sv = std::string_view;

using hana::_;


constexpr uint8_t swmap(uint8_t c) {
  switch(c) {
    case 'A': case 'a': return 'T';// 'A' | 'a' => 'T',
    case 'C': case 'c': return 'G';// 'C' | 'c' => 'G',
    case 'G': case 'g': return 'C';// 'G' | 'g' => 'C',
    case 'T': case 't': return 'A';// 'T' | 't' => 'A',
    case 'U': case 'u': return 'A';// 'U' | 'u' => 'A',
    case 'M': case 'm': return 'K';// 'M' | 'm' => 'K',
    case 'R': case 'r': return 'Y';// 'R' | 'r' => 'Y',
    case 'W': case 'w': return 'W';// 'W' | 'w' => 'W',
    case 'S': case 's': return 'S';// 'S' | 's' => 'S',
    case 'Y': case 'y': return 'R';// 'Y' | 'y' => 'R',
    case 'K': case 'k': return 'M';// 'K' | 'k' => 'M',
    case 'V': case 'v': return 'B';// 'V' | 'v' => 'B',
    case 'H': case 'h': return 'D';// 'H' | 'h' => 'D',
    case 'D': case 'd': return 'H';// 'D' | 'd' => 'H',
    case 'B': case 'b': return 'V';// 'B' | 'b' => 'V',
    case 'N': case 'n': return 'N';// 'N' | 'n' => 'N',
    default: return 0;
  }
}

constexpr auto map = ([] {
  constexpr auto max = std::numeric_limits<uint8_t>::max() + size_t{1};
  std::array<uint16_t, max * max> map{};
  for(size_t it = 0; it < map.size(); ++it) {
    uint8_t hi = (it >> 8), lo = it;
    map[it] = (swmap(lo) << 8) | (swmap(hi));
  }
  return map;
})();

constexpr auto map256 = ([] {
  constexpr auto max = std::numeric_limits<uint8_t>::max()  + size_t{1};
  std::array<uint8_t, max> map{};
  for(size_t it = 0; it < max; ++it)
    map[it] = swmap(it);
  return map;
})();

template<size_t noffset> void replace60(const char * in, char * out) {
  constexpr auto offset = hana::llong_c<noffset>;

  auto op = [&] {
    *(uint16_t *)out = map[*(const uint16_t *)(in -= 2)];
    out += 2;
  };

  auto tail_size = ((60_c - offset) / 2_c);
  tail_size.times(op);

  if constexpr(offset % 2_c) {
//   ...1\n
//   0...
    *out++ = map256[*(--in)];
    --in;
//     assert(*in == '\n');
    *out++ = map256[*(--in)];
    (29_c - tail_size).times(op);
  } else {// even
//   ...\n
//   ...
    in -= 1;
//     assert(*in == '\n');
    (30_c - tail_size).times(op);
  }
  *(out++) = '\n';
}

auto select_replace60 = [](std::string_view in) {
  constexpr static auto replace60_map = ([] {
    std::array<decltype(replace60<0>) *, 60> map{};
    (60_c).times.with_index([&](auto index) {
      map[index()] = replace60<index()>;
    });
    return map;
  })();

  auto first_pos = size(in) - 1;
  assert(in.at(first_pos) == '\n');

  auto diff = first_pos - in.find_last_of('\n', first_pos - 1);
  assert(in.at(size(in) - diff - 1) == '\n');

  return replace60_map.at(61 - diff);
};


void replace(sv data) {
  auto op = select_replace60(data);
  constexpr size_t line_size = 61;
  constexpr size_t buff_size = line_size * 1024;
  char buff[buff_size] = {};
  auto n = size(data) / line_size;
  auto tail = size(data) - (n * line_size);

  auto it = end(data) - 1;
  auto buff_it = std::begin(buff);

  while(n--) {
    op(it, buff_it);
    buff_it += line_size;
    it -= line_size;
    if(buff_it == (std::end(buff) - line_size)) {
      write(STDOUT_FILENO, buff, buff_size - line_size);
      buff_it = buff;
    }
  }
  if(tail) {
    while(tail--) {
      if(*(--it) == '\n') continue;
      *buff_it++ = map256[*it];
    }
    *buff_it++ = '\n';
  }
  write(STDOUT_FILENO, buff, buff_it - std::begin(buff));
}


void revcomp(sv seq) {

  auto header_end = seq.find_first_of('\n');
  assert(header_end != sv::npos);
  auto header = seq.substr(0, header_end + 1);
  write(STDOUT_FILENO, header.data(), header.size());
  seq = seq.substr(header_end + 1);
  auto start = __builtin_ia32_rdtsc();
  replace(seq);
  auto cycles = __builtin_ia32_rdtsc() - start;
  fprintf(stderr, "%.2fbytes/c\n", ((double)seq.size()) / cycles);
//   write(STDOUT_FILENO, seq.data(), seq.size());
}

int main() {
  fs::path path{"/dev/stdin"};
  constexpr size_t block_size = 32 * 1024;

  size_t max_size = 1024ul * 64, size = 0;

  auto data = (char *)mmap(nullptr, max_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);



  size_t start = sv::npos;

  do {
    if((size + block_size) >= max_size) {
      data = (decltype(data))mremap(data, max_size, max_size * 2, MREMAP_MAYMOVE);
      if(data == MAP_FAILED) {
        perror("mmap");
        exit(-1);
      }
      max_size *= 2;
    }

    char * mem = data + size;

    auto bytes = read(STDIN_FILENO, mem, block_size);

    if(bytes < 0) { perror(""); exit(-1); }

    if(!bytes) {
      revcomp({data + start, size - start});
      return 0;
    };

    sv block{mem, (size_t)bytes};

    auto pos = block.find_first_of('>');

    if(pos != sv::npos) {
      if(start == sv::npos) {
        start = pos + size;
      } else {
        revcomp({data + start, (pos + size) - start});
        start = 0;

        auto tail = block.substr(pos);
        assert(tail[0] == '>');
        memmove(data, tail.data(), tail.size());
        size = tail.size();
        continue;

      }
    }

    size += bytes;


  } while(true);
}


Добавил, как уже было сказано, его же io. В общем systime одинаковый. Обмазываться libc мне лень.

Разница на одном потоке на фоне io теряется - там 10-20%, но в реальности его копипаста сливает моей в среднем раза в полтора. И то лишь потому, что что x86. Вот такие они бенчмарки.

В сколько сливает раст-мусор скопипащенный с других сишных реализаций - лучше даже не думать. А представляете, что бы было если бы io не занимало времени вообще? Либо, хотя бы, в 2раза меньше.

cppagent
()
Ответ на: удаленный комментарий

В очередной раз пойман на вранье. Теперь уже правила не запрещают? Ты врал иное.

Ну давай ты хоть раз ответишь за своё балабольство. Предъяви пруф что я когда-то писал про правила.

Пока что у нас 1:0, ты потребовал пруф на историю с твоей попыткой читернуть с ммапом, я потратил время и тебе ссылку нашёл.

Врёт. Пруфы.

Ссылку я тебе давал и ты это сообщение не раз цитировал. Решение с ммапом стало работать с одинаковой скоростью что на расте, что на C. Там в раст решение добавлен ммап. Так что ты опять обосрался.

И ладно написано - это есть в моём ответе -

Ещё раз, если ты не понял, мне плевать что есть в твоём ответе. Ты, дважды попавшийся на мошенничестве и многократно обвинивший меня во вранье на пустом месте, не заслуживаешь доверия вообще. Все твои фактические утверждения требуют проверки. Если бы для меня было важно, решил ли ты этот ревкомп и благодарит ли тебя держатель первого места - я бы проверил. Но мне не важно, писал о другом, о неадеквате, который попытался смухлевать, был пойман, включил дурачка и начал спорить и за это был выпнут из соревнования. И который, как мы видим сейчас, сделал из этого вывод о заговоре растистов против него. Ты понимаешь, что ты - сумасшедший?

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

Надо отдать должное, код нехилый. Там бóльшая часть работы во время компиляции производится. Такое ни на каком расте не изобразишь.

rupert ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.