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).Верней можно ли сделать такое в расте?

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

Ты неправильно ссылку дал, надо нажимать кнопку share

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

Ты неправильно ссылку дал, надо нажимать кнопку share

Разместил ниже, уже исправить не могу

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

Твой код падает если на входе «Привет, Мир!» вместо «Hello world»

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

Я пока не знаю как читать юникод файл,поэтому с char'ами обычными буду.

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

Как качать с этого сайта? жму download и ничего не происходит. Даже adblock отключил и все равно не работает

pftBest ★★★★ ()
Ответ на: комментарий от pftBest
#include <stdio.h>

int main() {
    FILE* file = fopen("data","w");
    for(int i = 0;i != 500000;i++) {
        fprintf(file,"Is Rust,Example,"
                "And Is , C,,Example Okay");	
    }
    
    fclose(file);
}

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

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

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

Скопировал пример где читается /etc/password и думаю чего у тебя неправильно считает...))А это я файл криво считал)

cargo build --release
...
~/speed-lexer time ./target/release/speed-lexer
Итого: 4000000 слов, и 2500000 запятых

real	0m0,179s
user	0m0,172s
sys	0m0,007s

Поправил,чтоб честнее было
https://pastebin.com/du635mit

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

gcc -O5 my2.c

real 0m0,146s
user 0m0,133s
sys 0m0,013s
-------------------------
Сейчас попробую перекодировку в юникод

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

Ансейф - небезопасно по определению.

Не надо придумывать. Ансейф = «безопасность гарантирует программист».

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

Ну да, один unsafe и мы все умрём =)

Да, так и есть. Вроде как все говорили, что разговоры крестовиков/сишников о том, что у них всё «сейф» на словах - плохие разговоры, и ничего их слова не стоят.

Поэтому, либо у нас всё сейф, либо не сейф ничего.

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

Поэтому, либо у нас всё сейф, либо не сейф ничего.

Бред.

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

Не надо придумывать. Ансейф = «безопасность гарантирует программист».

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

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

Не надо использовать одно, а когда угодно другое. Это не идёт вам на пользу.

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

Не надо использовать одно, а когда угодно другое.

Чёйт? Ну вот захотелось мне сделать заведомо безопасное действие, которое нельзя сделать без unsafe и что теперь? Допустим есть память mut, а мне нужно поделить её и на каждую часть получить mut ссылку. А стандартную библиотеку видели? Там практически всё в unsafe. И что теперь? Rust всё равно остаётся более безопасным по сравнению с любым иным компилируемым ЯП.

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

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

Давай попроще. У тебя есть салат, он состоит из неопределённого состояния помидоров и из свежих овощей, других. Можно ли гарантировать свежесть салата? Нет. Мы говорим про гарантии уровня языка.

На самом деле, если разбираться в логике евангелистов, то там настолько много подмен понятий, но мы сейчас не об этом. Если язык не может гарантировать безопасность, то и безопасности нету. Иначе любой язык без гарантий даёт то же самое. Гарантий нет? Нет. Безопасность может быть? Может. А может и не быть.

В целом, ничего не меняется.

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

Переубеждать царя - занятие так себе.

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

А почему раст юникод а Си нет?У меня ж текст utf8.)Короче Раст медленее на 30 мс))Пойду изучать проект от RazrFalcon

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

Так а что ты предлагаешь, запретить всем пользоваться mmap ом? Или предлагаешь писать на сишке где даже банальное a+b не безопасно?

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

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

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

Это всё херня, отбросим теорию, в примере pftBest просто читается файл в кусок памяти, как раст должен понять, что в этой памяти просто текст? Это не возможно проверить и соответственно не будет скомпилировано, даже если код правильный. По этому через unsafe отключаются такие проверки и ни чего страшного в его unsafe не произойдёт ни когда

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

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

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

Чёйт? Ну вот захотелось мне сделать заведомо безопасное действие, которое нельзя сделать без unsafe и что теперь?

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

Rust всё равно остаётся более безопасным по сравнению с любым иным компилируемым ЯП.

Вот вроде как понимаешь что-то, а вроде как и жертва пропаганды.

Вот ты определяешь «безопасноей» - безопасней чем что? Чем хацкель? А может С++? А что именно в С++? Чем твои строки безопасней строк в С++? Тем, что имеют 10% функционала?

А можешь ли ты спокойно писать f(string str); f(str); ? Нет, ты не можешь. А каким хреном ты сравниваешь жопу с пальцем? Да, можно подменять понятия, можно врать, но толку?

В чём смысл существования раста? В том, что все лоулевел возможно вынесли в unsafe? Дак, то же самое в С++ впиливается за месяц.

Запретил указатели и наштампавал вместо указателей/памяти, memory, а на самом деле банальные обёртки над указателями/памятью, аля вектор из С++. Далее прикрутил в ним слайсы, аля вектор без владения.

Ты просто сделал стандартную библиотеку и забрал все возможности для написания своей и засунул их в ансейф. Что это? Школьники схавают.

И вся мистическая безопасность раста держится именно на ансейфе. Ведь он нихрена не безосней любой либы для С++, объективно. Но есть нюанс. В крестах ты можешь в любом месте вылезти за рамки этой либы, а в расте нет.

И если ты начинаешь выдавать ансейф за то, что можно использовать когда захочешь - как указатели в С++. Да, это типа не комильфо, но и укзаатели в модернсипипи не комильфо. Это же не аргумент.

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

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

Дак, то же самое в С++ впиливается за месяц.

Можешь начать впиливать, я подожду :)

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

В чём смысл существования раста?

cargo,дизайн языка,безопасность.Мне С++ и такую безопасность как раст не дает,а тут прям можно писать многопоточность

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

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

Но мир не состоит полностью из идиотов. А те, кто понимают, в такую херню не поверят.

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

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

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

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

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

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

Ты неправильно понял код

На самом деле впервые вижу Mmap, прошу извинить за ошибочное предположение.

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

Можешь начать впиливать, я подожду :)

Я не обязан отвечать на такие глупые потуги. Я пишу текст не для идиотов. Если ты считаешь, что впилить новый вид блоков unsafe {} в С++ сложно - это просто глупая потуга.

В любой реализации С++ уже есть такая штука - блоки из gnu c, ({}) - сколько там их впиливали в шланг? 0 минут?

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

Ну и да, любимая манипуляция идиотов. Сколько твой раст высерали? 8лет? За бабки мозилы на базе ллвм? Сколько там тел было? 10-20? Ну вот, у меня есть лет 100. Жди.

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

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

Впилить новый блок это конечно не проблема, проблемой будет убрать UB из всего что вне этого блока. Про совместимость с сишкой и текущим С++ можешь сразу забыть.

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

Какой-то бред через поток сознания. Как тебя тут в игнор добавить? =)

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

У вас нет пяти мегабайт?

Я не говорил, что память жрёт как не в себя, я говорил, что оно жрёт бесполезно. Ему все равно выделять память под структуру токенов, на накой там выделять под указатель на никогда не освобождаемой буфер, стартовое значение и размер? Ваше однородный/неоднородный совсем неубедительно. Прошлись лексическим анализатором и передали значения токенов в синтаксический. Чего тут на ровном месте тормозить и жрать ресурсы?

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

cargo

Не имеет отношения к языку.

дизайн языка

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

безопасность

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

Такая безопасность не даётся на халяву. Я уже писал, но ты слишком глуп, чтобы это понять. Опять же - без обид. Если ты не понимаешь того, что в С++ я пишу f(string str); f(str);, а в расте я пишу это же, но через жопу - мне не нужно такое счастье.

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

Мне С++

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

Ты слишком слаб, чтобы понять подобные манипуляции. Это типичная ситуация.

И да, я хейтер С++. А то опять заведёте свою шарманку.

а тут прям можно писать многопоточность

Не можно. Тебя обманули. Тебя просто ограничили в функционале и выдали это за киллерфичу.

Никакой вменяемой многопоточности 25эшелон не напишет. Берёшь жаву и стримапи - халява. Берёшь го и пишешь. В 10раз проще.

С/С++ и раст - это языки абсолютно разных категорий. Раст из котегории «программист-аутист», а С++, как и си.

Если ты используешь раст иначе( это ещё одна из манипуляций), то ты получаешь все те же самые проблемы с безопасностью, что и с С++.

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

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

Ты - жертва пропаганды, которую обманули.

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

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

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

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

проблемой будет убрать UB из всего что вне этого блока

Раст не убирает УБ - он запрещает все операции, которые могу получить УБ.

Указателей нет, памяти нет, ничего нет. Вот и УБ нет. А это уже 70% УБ из крестов. Виртуальных методов нет, всей этой канители с классами и динамиккастом нет.

Это основная манипуляция, которой парят «мозг» неокрепшим адептам. Раст - это не бесплатное отсутствие УБ, раст - это не бесплатное memory safety.

Про совместимость с сишкой и текущим С++ можешь сразу забыть.

Вот я хотел написать о том, что ты мне начнёшь парить эту херню. Раст совместим с С/С++? Нет. Ещё больше несовместим. Тебя же это не волнует.

Да и не совместимым будет safe, а не unsafe. Весь старый код можно засовывать в ансейф и ему там ничего не поменяет работать. Так же, как и в твоём расте. Все дыры в unsafe у тебя пролезут на уровень safe - что бы ты не делал.

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

Не имеет отношения к языку.

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

дизайн языка

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

Такая безопасность не даётся на халяву. Я уже писал, но ты слишком глуп, чтобы это понять.

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

В 10раз проще.

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

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

что значит «бесполезно»?

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

Единственное, когда такой нужен — я даже знаю, так как сам писал: подсветка синтаксиса в редакторе. Там действительно только и надо определять токены и их длину. И то, желательно раскрашивать по разному ключевые слова и пользовательские идентификаторы.

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

Ты не хочешь думать, ты не хочешь понимать. Тебе проще верить в том, что тебе сказали. В то, что ты там что-то знаешь. Знаешь как в С++, знаешь как в расте.

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

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

Вот я спокойно пишу и писал на крестах, но я объективно понимаю, что они дерьма кусок. Объективно я понимаю, что в расте есть некие вещи лучшие.

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

И лучший дизайн это не плюс раста - это плюс времени. Сейчас можно позволить себе компилятор в 10раз тормознее самого тормазного С++-компилятора. А С++-комплиятор в 100раз тормазнее си-компилятора.

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

Это свойство любого сектанта. Искать некие знамения для обожествления своего будущего идола.

А критически мыслить не умеют все. Мир крестов состоит из таких же экспертов. 5лет назад меня банали на лоре за «список - дерьмо» и орали «список O(1) - поучи матчасть», а стоило идолу об этом упомянуть как всё. Сразу все стали знать и на лоре пошел срыв покровов на эту тему.

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

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

И, я думаю, ещё лет через 5 они поймут - о чём я говорил 10лет назад.

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

Ещё больше несовместим. Тебя же это не волнует.

Вот именно что не волнует.

В твоей логике только одна проблема - Раст уже есть и я им пользуюсь, а твоего мифического С+++unsafe не существует.

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

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

Тебе проще верить в том, что тебе сказали

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

И, я думаю, ещё лет через 5 они поймут - о чём я говорил 10лет назад.

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

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

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

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

а твоего мифического С+++unsafe не существует.

Но таки работы ведутся. Например в Visual C++ начали пилить проверку лайфтаймов:

https://blogs.msdn.microsoft.com/vcblog/2016/03/31/c-core-guidelines-checkers...

И уже включили ее в Visual C++ 2017:

https://blogs.msdn.microsoft.com/vcblog/2016/10/12/cppcorecheck/

Понятно, что там имеется огромное кол-во ограничений и отсутсвуют гарантии, но и Rust не сразу стал таким как он есть.

// другой анонимус, который не хейтит Rust, а считает его полезным

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

В твоей логике только одна проблема - Раст уже есть и я им пользуюсь, а твоего мифического С+++unsafe не существует.

Раста нет. Это первое.

Второе - ты пытаешься юлить. Что такое раст? Это по умолчанию альтернатива С++. Именно под этим предлогом мозига этих аборигенов с помойки с их недоязыком и взяла.

Был выбор. Добавить unsafe в С++, либо запилить раст. Это было 7-8лет назад, если не больше. И какие-то плюсы за раст в сравнении с С++-unsafe должны были быть.

И именно об этом я и говорю, а не выкатываю тебе альтернативу расту. unsafe/safe-C++ нужен калекам некомпетентным из мазилы, а не мне.

Никаким нормальным броузерам это дерьмо не нужно. Кстати, я обновился на лису с растом. У меня появился какой-то неведомый процесс(Web), аможет они до раста был(но я не помню такого), который жрёт нереально память и цпу. Так, как чромиум не жрёт на сотне вкладках, а у лисы я больше 5-10 не открываю.

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

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

Повторяю ещё раз. Я не предлагал тебе альтернативу твоему псевдоязыку, я предлагал альтернативу изначальную. Т.е. зачем, имея потребности в safe-c++, нужно было городить 8лет новый язык, который мёрт. На котором сложнее лабы никто и ничего не пишет.

И именно на этот вопрос нужно отвечать, а не придумывать что-то.

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