LINUX.ORG.RU

Rust vs C

 ,


3

7

Я Rust не знаю.
Допустим решил я написать быстрый лексер (разбиватель токенов),как я делаю это в Си:

typedef struct {
    const char* text;
    size_t      text_len;
    size_t      text_pos;

    const char* token;
    size_t      token_len;
} lexer_t;
 
void lexer_next_token(lexer_t* lexer);

И я могу получить все токены без выделения памяти,я просто иду по тексту и ставлю lexer_t.token в начало токена, и в token_t.token_len записываю длинну токена.А в расте как сделать подобную вещь?Тоже без выделения памяти естественно (ну кроме стека,где выделяется код возврата и 2 size_t для функии next_token).Верней можно ли сделать такое в расте?



Последнее исправление: linuhs_user (всего исправлений: 2)

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

Я вообще растом не интересуюсь,меня что облучили?надо было шапочку из фольги,да?))

Ты противоречишь сам себе. Это первое. Второе, если ты думаешь, что жертва пропаганды согласиться с тем, что она жертва, либо с тем, что она заметила пропаганду - нет. Она будет уверять всех и всегда, что она сама и вообще не интересуется.

Не я ошибался,у тебя просто ЧСВ зашкаливает.))

У меня не зашкаливает ЧСВ. У меня зашкаливает реальность. Когда я вижу всяких экспертов 25эшелона, которые начинают вещать о языка, дизайне и прочем.

Право рассуждать нужно заслужить. А таким экспертов, которые вчера на лабе жабку увидели и уже предлагают С++ выпиливать - в этом нет ничего нового.

Вы просто чуть больше шифруетесь, а природа та же.

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

Действительно. Все кто несогласен - упороты. Аргументы? Не, не слышал.

В этом все вы. У вас первым делом стоит вера, а потом уже под неё подбивается реальность.

И где я говорил что раст прекрасен волшебен и идеален?Давай показывай,я же сектант,а не ты просто бред генерируешь))

Где я писал слово «идеален», либо «волшебен»? Ты это сам придумал.

Естественно, никакой сектант не скажет, что его объект обожания - его идол. В этом ничего нового нет. Это ничего не доказывает.

Неважно какими свойствами ты наделяешь что-то. Важно то, что наделяешь свойствами теми, которых нет. И неважно насколько.

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

Кстати, вот тебе типичный пример непрямого влияния.

Ты, как и любая жертва, уверен в том, что ЧСВ, возвеличивание и прочее - это отождествление чего-то с «идеальным», «лучшим» и прочем.

Естественно, что это неверно. Как я уже говорил - все эти явления суть одно - наделение чего-то теми свойствами, которых на самом деле нет.

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

Это просто такие механизмы обхода идентификации в рамках слабого мышления. Тебя уверяли всю жизнь, что нечестно/неправда/сектант - это только «идеально».

И когда тебе скармливают дерьмо под видом «нормального/хорошего» продукта. Ты этого не замечаешь. Ведь это не идеальный продукт, не лучший.

Когда тебе говорят на идиота - слушай, он хороший. Ведь тебе не говорят о том, что он гений. Раз не гений - всё норм. Ты сожрёшь.

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

Точно так же и с людьми. Тебя убедили, что ЧСВ - это только «я дартаньян» и ты не замечаешь, что ЧСВ не обязательно должно быть уровня «я лучший» - такого ЧСВ в реальном мире нет. Это всё фейк.

В реальном мире ЧСВ оно такое «я лучше, чем есть», «я лучший намного», «я почти как лучший, но не лучший». И уже вроде ты «с народом», но и ЧСВ.

То же самое с компетенцией. Не обязательно орать «я всё знаю» - это суть одно с «я говорю „знаю“ на то, чего не знаю» и важно какой объём этого «знаю». В реальности очень редко бывает «я всё знаю».

И к тебе подходит пациент, который такой же ЧСВ, но ЧСВ не во всём( просто не выгодно палиться). И по сути в данной, конкретной, ситуации - он ничего не отличается от полного ЧСВ. Ведь он точно так же знает то, чего не знает.

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

Аргументы? Не, не слышал.

По тебе и видно))То придирались что лексер у меня не по стандртам,теперь я не могу лично для себя о языке судить...

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

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

В данном случае я написал то, что «ЧСВ - это несколько больше, нежели то, о чём думаешь ты». Т.е. в рамках моей пасты не было ни слово о «почему я не ЧСВ». Она не про это.

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

Ты не работаешь правильно - ты сломан и работаешь неправильно. Правильно - это вначале «почему», а потом что.

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

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

Я тебе уже говорил,а ты игнорируешь)Вот я и развлекаюсь...

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

По тебе и видно))

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

теперь я не могу лично для себя о языке судить...

Ты врёшь.

если ты не согласен то ты упорот

Ты писал это. Если ты не претендуешь на объективность и на верность своих суждений. Просто пиши «я так хочу» - никто не в праве запрещать тебе деградировать, но.

Ты ведь не это пишешь? Ты пишешь, что твой выбор обусловлен объективными критериями - ведь те, кто сделал иной выбор - упороты.

И когда дело дошло до аргументации - ты слился на «я так вижу». Видь с дневничном на пару, а не тут с подобными потугами.

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

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

Давай я расскажу в чем твои ошибки:
1.Ты сначала оскорбляешь потом требуешь признать какую либо ошибку
2.Твоя мысль теряется среди остального бреда

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

Да не,мне интересно просто было.Название для привлечения было,изначально хотел назвать как «JavaScript обогал по скорости Rust»

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

Мне нравится,cargo для С/C++ нету.Это для меня плюс

Это к языку отношения не имеет. У любой помойки есть твоё карго. ЖС, хацкель, го. Тысячи их. да даже для крестов есть проекты.

Просто пока ты не далеко ушел от уровня хелвордов. Ты хочешь бахнуть лабу - бам, удобно. Нажал 2кнопки всё подкрузилось. А в крестах. Сложно.

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

Проблемы это тогда, когда ты ваяешь 10лаб в месяц.

Мне нравится такой некий минимализм,не знаю как это назвать.

Это не минимализм. Минимализм - это сишка, а раст это убожество.

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

То с растом такое не прокатывает. Это просто нагромождение дерьма, как в том же ЖС, либо ещё в какой помойке. Мы просто тащим всё что угодно и как угодно. Меняя всё по 10раз.

Надо новую херню? Взяли рандомный символ и рандомную логику. Всё. Это никак не интегрировано в язык, это никак не выводится логически. Это просто есть так потому что есть так. Это аутизм.

С чего ты взял что я не могу понять?)Или ты думаешь я забыл что несколько часов назад я не осилил банальный цикл?

Это попытка к самоиронии? Такое себе. Дело не в этом. Мне неважно кто ты. Я ничего против тебя не имею.

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

Это не значит, что я против домохозяек. У каждого есть его призвание.

Игры на яве и го?Не,не хочу

Ну вот в этом и все твои аргументы. Хочу/не хочу. Вернее аргументов-то и нет. Просто ты пытаешься скрыть их отсутствие под хочу/не хочу.

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

Он специально из под анонима пишет, чтобы его нельзя было заигнорить. Ведь тогда никто не будет читать его бред. Жалкое зрелище.

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

Ты хочешь бахнуть лабу - бам, удобно.

Да,решает ли это мои задачи?Да

а раст это убожество

Мне хочется сишку,но чтоб с интерфейсами,можно взять С++ но он сложный.Может и не сам язык,но все вместе,библиотеки

их отсутствие под хочу/не хочу.

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

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

1.Ты сначала оскорбляешь потом требуешь признать какую либо ошибку

Не верно. Я вывожу следствие из твоих потуг. Если ты втупляешь - я могу тебе на это указывать. В этом нет никаких оскорблений.

Если ты чего-то не понимаешь, если я это вижу - я могу определять это как причину твоим потугам. В этом то же ничего такого нет. Ты хочешь с этим поспорить? Попытайся.

2.Твоя мысль теряется среди остального бреда

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

Ты не понимаешь, что всё не бывает просто так. Что люди могут рассуждать, что люди могут аргументировать, что за словами человека может стоять понимание. Основание, которое он может воспроизвести для публики.

Ты же этого не можешь. Ты может «бэ-мэ», «раст, лучший выбор - почему? Я это где-то услышал. Ну я лабу делаю, а на сишке сложно компилять, а на расте там бах, бах и уже ваяешь. Кнопку нажал - собралось. Я же не буду об этом писать? Опозорюсь ещё. Буду писать абстрактную херню - я где-то видел, что пацаны писали про карго. Это же хороший аргумент - раз пацаны писали» - вот твои рассуждения.

Они настолько примитивны и убоги. Именно поэтому тебе нечего сказать. Ты пытаешься повторять аргументы за кем-то в надежде, что раз ты их где-то слышал, то они котируются. Ты не можешь сказать о том, что карго дало ИМЕННО ТЕБЕ. Т.к. опозоришься.

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

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

Не верно
Я вывожу следствие

Для себя я вывел следствие что ты даун,и я тебя не оскорбляю,мудила))так?))

Я кстати слышал что когда человек как ты перескакивает на подобные темы,отдаляется от реальности то это шизофрения что ле,не помню какое точно заболевание))

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

Раста нет.

Ну и кто тут болен, лол

я предлагал альтернативу изначальную

Ну и отлично что предлагал, мне то что с этого? Хочешь поговорить о том почему мозила N лет назад сделала не так как ты хотел? Такие разговоры не ко мне.

У меня все приземленно, есть два стула, или Rust+unsafe или C++. И от раста мне голова меньше болит.

Это ты залетел в тред и начал свое «кококо у вас тут ансейв это же против вашей религии, вы ничем не лучше плюсов, раст можно за месяц написать» и т.д. и т.п.

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

Да,решает ли это мои задачи?Да

Понимаешь. В этом ничего плохого нет. Но ведь что ты делаешь? Ты выдаёшь твоё мнение за мнение значащие. За мнение полезное. За мнение нужно. Свои задачи выдаёшь за нужные.

Именно это мне не нравиться и именно против этого я выступаю. Я оцениваю язык с т.з. языка, т.е. зрения его применения. Ты же с т.з. «быстрее сваять лабу» - это совершенно ортогональные ТЗ.

Мне хочется сишку,но чтоб с интерфейсами,можно взять С++ но он сложный.Может и не сам язык,но все вместе,библиотеки

Понимаешь в чём штука. Раст это не си. Это дожопы лишнего дерьма, которое ты должен писать.

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

У людей просто не хватает мышления/квалификации для понимания возможностей больших, нежели даёт примитивная версия сишки. Они кидаются на сложные вещи и им кажется, что это всё не запомнить.

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

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

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

Слушай я программирую потому что это мое единственно удовольствие

Понимаешь, я программирую то же только в рамках своего хобби. В 99% случаев. Но это не значит, что эти можно оправдать всё остальное.

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

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

На C++ я не вижу того что мне надо,а в расте вижу.(к примеру библиотеку сейчас нашел, kiss3d)И что я по твоему не логически действую как то?

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

Ты просто мимокрокодил и язык для тебя ничто. Именно в этом твоя нелогичность.

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

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

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

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

Для себя я вывел следствие что ты даун,и я тебя не оскорбляю,мудила))так?))

Проблема в том, что с твоей стороны - это пустой трёп. С моей нет.

Я кстати слышал что когда человек как ты перескакивает на подобные темы,отдаляется от реальности то это шизофрения что ле,не помню какое точно заболевание))

Нет, обратное этому называется твердолобостью. Когда твоё представление о реальности заканчивается на пожрать и посрать, а всё остальное бред. У тебя просто представления чуть шире, чем посрать/пожрать, но не особо.

anonymous
()

Либо я что-то упустил, либо ещё никто не предложил сделать свой итератор поверх итератора строки, который бы возвращал токены.

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

Ты выдаёшь твоё мнение за мнение значащие.

В самом начале написал,что написал плюсы лично для себя.Дальше твой бред не читал)

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

Ну и кто тут болен, лол

А что есть? Какой рынок у него, а какой у го? Одна тысячная от го и то все лабы.

Ну и отлично что предлагал, мне то что с этого? Хочешь поговорить о том почему мозила N лет назад сделала не так как ты хотел? Такие разговоры не ко мне.

Тебе с этого то, что ты начал нести ахинею и менять тему. Не по тебе - не отвечай.

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

У меня все приземленно, есть два стула, или Rust+unsafe или C++. И от раста мне голова меньше болит.

Из этого мало что следует. У тебя может болеть что угодно, но зачем ты агитируешь?

Говоря о вас и о тебе в частности - я говорю о вас, как об источниках всей этой пропаганды, вливающуюся в неокрепшие умы студентоты. Твоё мнение не может быть источником аргументации в агитации. Ты просто впариваешь людям дерьмо, а на самом деле «тебе удобно».

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

В разговорах с ЦА у вас «объективно лучше», а в разговорах со м ною «мне нравиться». В этом вся суть и мне это не нравиться.

Это ты залетел в тред и начал свое «кококо у вас тут ансейв это же против вашей религии, вы ничем не лучше плюсов,

Опять врёшь. Я тебе привёл в пример твои же слова и предыдущих срачей. Это ваша основная аргументация за раст. И она сломалась.

Ну и всё это приправлено откровенным враньём

раст можно за месяц написать» и т.д. и т.п.

Чего я вообще не говорил.

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

В самом начале написал,что написал плюсы лично для себя.Дальше твой бред не читал)

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

Успех я тебе не гарантирую, но наличие пути гарантирую.

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

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

Ты не имеешь права выдавать своё мнение за значащие не потому, что мнение нельзя выдавать за значащие, а потому что значение твоего мнение равно нулю. А если было бы не ноль, то ты бы мог.

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

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

Кстати, ты можешь даже написать что хочешь. Показать мне интерефейс на расте и я бахну тебе интерфейс на крестах. Сравнишь их сложность, красоту и удобство.

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

И вот подобное дерьмо ты называешь интерфейсами, удобством? Да это хуже самого убого сишного дерьма.

        match cleaner::clean_doc(&doc, &cleaning_opt, &write_opt) {
            Ok(_) => {}
            Err(e) => {
                writeln!(stderr(), "Error: {:?}.", e).unwrap();
                on_err();
                break;
            }
        }

Типичный пример жабкахацкелятинки. Ok(_) - магическое дерьмо _? Нам просто нужно экспртировать херню - мы просто её экспортируем. Логика? Нахрена. Экпорт хрен пойти откуда взявшегося дерьма.

Какого хрена бряк? Err(e) - дефинишн функции? e - типы? Не, не слышал. & - привет сишка 60года. Автопреобразование типов не завезли.

Ущербанский синтаксис форматирования. Спашенное :: из крестов. Да хотя в последние годы он уже почти крестами стал. Это очередной пример того, как мы придумали супер-синтаксис. Обосрались и спасили крестовый(на самом деле из жабки, но мы знаем откуда в жабке, а хотя скорее всего нет - кто знает).

Описание типов убогая паскалятинка. => - это что? Функции?

! - это дерьмо просто фееричное.

На самом деле смотрю я на это дерьмо и думаю. Как можно было такое сожрать. Как на этом можно писать. Как?

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

На словах ты лев толстой,показывай свои проекты)

Ну дак вперёд. Докажи обратное. Если это просто слова - ты же сможешь мне что-то противопоставить? Их опровергнуть. Вперёд. Кто тебе не даёт. Всё очень просто проверяется.

Нет, ты ничего не можешь. Именно ты пустой трепач. Балабол.

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

Ok(_) - магическое дерьмо _?
Err(e) - дефинишн функции? e - типы?
=> - это что? Функции?

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

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

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

Неужели повылазила школота с помойки? Что ты мне тут кадахчешь - ты хочешь со мною посраться? Вылетишь же из треда через 2минуты.

И как всегда, мартышка не может в аргументацию, мартышка не может в логику. У мартышки есть базворд. И действительно, если ты называешь реализацию убогим дерьмом, то действительно - расскажи про базворд.

В этом смысл всех убогих. Убогий не может в логику, убогий не может в понимание. Убогий может в базворд, который он где-то увидел и ему сказали, что там и надо. А интегрируется ли он в язык, в общую логику - зачем. Логику не для убогих.

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

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

Вот и все.))А кукарекал сколько,я то по делу говорю))Что то теперь можешь сказать про свою важность?лол)

Тебе сказали. Если ты не можешь найти что-то неверное в моих суждениях/текстах - дак нахрена ты мне пытаешься что-то кукарекать?

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

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

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

Вот ещё один тебе пример. Мне даже не надо искать доказательств - они сами лезут в тред. Я написал про алогичность, про отсутствие интеграции в общую логику, про язык, который слеплен разных кусокв дерьма. Не связанных ничем.

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

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

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

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

Мой тебе совет. Перечитай всё, посмотри на мои примеры, посмотри на адептов. Осознай. Попробуй осилить кресты. И ты, возможно, сможешь понять то, о чём я говорю в полной мере.

Не надо со мною соглашаться. Просто сделай это и мне, либо кому-либо ещё не говори.

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

Мой адаптированный вариант со скипвайлами:

use std::fs;
use std::fs::File;
use std::io::prelude::*;

struct Lexer<'a>{
    left: &'a str
}

impl<'a> Lexer<'a>{
    fn new(source:&'a str)->Lexer<'a> {
        Lexer{left : source}
    }
    
    fn next (&mut self) -> Option<&'a str> {
        let iter = self.left.char_indices();
        let mut iter = iter.skip_while(|i| i.1 == ' ');
        if let Some((start_index, c)) = iter.next() {
            let end_index = match c {
                'A'...'Z' | 'a'...'z' => if let Some((e, _)) = iter
                                                                .skip_while(|i| i.1 >= 'A' && i.1 <= 'Z' || i.1 >= 'a' && i.1 <= 'z')
                                                                .next() { e } else { self.left.len() },
                _ => if let Some((e, _)) = iter.next() { e } else { self.left.len() },
            };
            let t = self.left;
            self.left = &t[end_index..];
            return Some(&t[start_index..end_index]);
        }
        None
    }
}

fn main() {
    let metadata = fs::metadata("data").unwrap();
    let mut f = File::open("data").expect("file not found.");

    let mut text = String::with_capacity(metadata.len() as usize);
    f.read_to_string(&mut text)
        .expect("error reading file.");

    let mut lexer = Lexer::new(&text);

    let mut commas_count = 0;
    let mut words_count = 0;
    while let Some(token) = lexer.next() {
        if token.chars().next() == Some(',') {
            commas_count += 1;
        } else {
            words_count += 1;
        }
    }
    println!("Итого: {} слов и {} запятых", words_count, commas_count);
}

Размер файла в 100 раз увеличил, чтоб время более-менее нормально занимало.

Результат:

~/rust-workspace/rust-lexer$ time ./clexer 
Итого: 350000001 слов и 250000000 запятых

real	0m9,187s
user	0m8,153s
sys	0m1,024s
~/rust-workspace/rust-lexer$ time ./target/release/rust-lexer
Итого: 350000001 слов и 250000000 запятых

real	0m9,733s
user	0m8,106s
sys	0m1,619s
В общем на 5% отстаёт, но зато поддерживает юникод. Ну и лямбды явно заинлайнены. Причём отставание за счёт системного времени. Уж не знаю на что, сначала думал что из-за реаллокаций строки, но тут с ранним выделением, а системное время всё равно больше.

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

Не нужен там второй проход.

А руст такую стуктуру уметь должен.

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

Довольно компактно получилось,странно что я не осилил)

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

Тебя обманули. Я даже не поленился и побенчил:



$ clang --version
clang version 5.0.0 (tags/RELEASE_500/final)
$ time ./benchc 

Итого: 350000001 слов и 250000000 запятых

real    0m2,207s
user    0m2,119s
sys     0m0,071s

$ rustc --version
rustc 1.19.0 (0ade33941 2017-07-17)

$ time ./bench
Итого: 350000001 слов и 250000000 запятых

real    0m5,345s
user    0m4,582s
sys     0m0,760s

Собирал rustc -O. Пусть там эксперты подскажут, если собирал не так. Ну и как всегда руст-эксперты бенчат кофемолках.

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

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

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

Если мне будет не лень и у меня будет время - я бахну тебе токенайзер. Пусть лалки пыхтят.

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

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

Так вставь тогда и в раст версию нормальное чтение.

И собирай rustc -C opt-level=3 -C lto.

cargo build --release

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

Так вставь тогда и в раст версию нормальное чтение.

Вставь. Я показал как надо. Я не хочу даже видеть это дерьмо, не то что писать на нём. Да и это нереал.

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

Даже по сравнению с фридом + маллок пацана оно х2. Я даже не знаю что может быть более днищем, нежели маллок + фрид.

real    0m4,788s
user    0m4,047s
sys     0m0,735s

Не особо помогло.

На самом деле этот бенч дерьмо, ибо нихрена не бенчит. В идеальной( да насрать вообще какой) реализации lat l1d x bytes.

Т.е. сюда даже utf8 чекер, да и просто utf8 можно нахаляву вставить. Время не особо поменяется, а можно даже такое же сделать.

Хотя такая себе обрабатывать юникод в utf8.

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

Да я скопипастил mmap не смотря,смотрю работает,ну и ладно.) Раст без оптимизаций очень сильно сливает,на 2000% на самом первом примере.

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

Замени этим:

  int fd = open("data", O_RDONLY);
  struct stat st;
  fstat(fd, &st);
  file_size = st.st_size;
  file_data = mmap(NULL, file_size, PROT_READ, MAP_POPULATE | MAP_PRIVATE, fd, 0);

Это:

  file = fopen("data", "r");
  fseek(file, 0, SEEK_END);
  file_size = ftell(file);
  fseek(file, 0, SEEK_SET);

  file_data = malloc(file_size);
  fread(file_data, file_size, 1, file);
  fclose(file);
anonymous
()
Ответ на: комментарий от linuhs_user

Да я скопипастил mmap не смотря,смотрю работает,ну и ладно.)

Для справки. Раст пример жрёт 2гига памяти и ещё 2гига фкеша. Мммап-пример жрёт 0 памяти и 2гига фкеша. ro ммап файла просто ммапит фкеш.

Раст без оптимизаций очень сильно сливает,на 2000% на самом первом примере.

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

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

Впрочем, я уже не знаю сколько лет это рассказываю - пока ещё никто не понял. Может и поняли, но молчат.

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