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)

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

это хорошо, да. а я не говорю что плохо. в С++ самое гадкое это как раз тихая порча памяти а не сегфолт.

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

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

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

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

Ты говоришь с рандомной мартышкой, которую дядя заставил ваять гуйню на кути, а она мечтает о пхп. Естественно, у неё родились сотни комплексов на фоне неосилятортва и теперь у неё есть два варианта а) признать себя неосилятором, б) объяснить свою неспособность «кресты просто говно».

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

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

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

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

Я правда тебе подсказал как можно сделать.

Вы не поняли задачу, но уверены в своей правоте. Это прекрасно.

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

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

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

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

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

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

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

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

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

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

Где-то читал, что, кажется, в Обероне программы представляются не в виде текстового документа, а в виде бинарника(!), с которым может работать только своё собственное IDE (что естественно), и из этого извлекаются какие-то ништяки. Конечно, информация из разряда «одна бабка сказала», но концепция мне запомнилась своей оригинальностью.

Virtuos86 ★★★★★
()

Раст какашка, Сишка няшка thread/

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

На английских форумах какие-то другие люди?

Скорее модерация более жёсткая, ну и заодно аудитория побольше.

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

местные фанбои сразу же обвиняют меня в скудоумии.

Как будто ты не ведёшь себя точно так же, когда «нападают» на раст.

Ну что поделать, если «фанбои» плохо воспринимают нападки на предмет своего обожания. Даже если нападки кажущиеся.

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

Как будто ты не ведёшь себя точно так же, когда «нападают» на раст.

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

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

Тем более я никогда не хамлю и не матерю собеседника, как eao197.

Видимо, это потому, что ты

дебил

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

Virtuos86 ★★★★★
()

Тред не читал, но вы что наркоманы лексер и парсер вручную писать? yacc, bison, flex или куча других генераторов есть, в которых можно указать правила в удобной форме, а они генерируют код на любом языке.

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

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

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

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

Не при чем.

У тебя какая-то своя логика.

возьми язык, в котором это сделано хорошо.

Оно не так работает. И ты это знаешь.

Ах, опять заказчик?

Может быть. Но есть и другие обстоятельства.

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

Есличо, в приличных компиляторах флексы-бизоны не используются, а парсеры руками написаны.

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

Есличо, те, кто пишут компиляторы, не сидят на форуме, и не обсуждают, как лексер на си/расте написать. Это абсолютно исключительный случай, однако и там это редкость.

Раз мы тут за раст трем, вот лексер раста (на flex), а вот парсер раста (на yacc), например.

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

Завязывай с тупняком. Либы и модули на холодную, по твоему, собираются где-то в высших сферах сами?

80 сек с учетом сборки всех заюзанных либ и модулей.

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

Возможно RazrFalcon — необходимый элемент в схеме пиара раста, и это расчетливый план rust evangelism strike force :)

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

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

Почитай новость про firefox 56 пожалуйста и не неси херни. Там — реальное применение раста в продакшн, servo — тестовый полигон и для реального применения еще не годится (и этого никто не заявлял, но ты почему-то так решил)

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

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

Опять врёшь. Уязвимость была логическая в коде на языке смарт-контрактов Solidity. При чем тут раст?

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

получил(скорее чутка наврал) 7секунд

Finished target(s) in 6.61 secs

Действительно чутка наврал.

которые не получил бы в С++ никогда на хелвордах такого уровня. А на си и одной секунды не получил бы.

Большая часть времени — работа llvm

time: 2.707; rss: 213MB	LLVM passes
  time: 0.000; rss: 210MB	serialize work products
    time: 1.905; rss: 210MB	running linker
  time: 1.907; rss: 210MB	linking

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

У тебя какая-то своя логика.

Скорее ты игнорируешь то, что тебе говорят.

Посему еще раз: если тебе заказчик заказал написание каких-то автоматизирующих скриптов для Excel-я, то тебе придется использовать Visual Basic for Application (или как он там сейчас называется). Но если ты не сможешь в Visual Basic-е использовать какие-нибудь монады или алгебраические типы данных с паттерн-матчингом, к которым ты привык в Haskell-е, то это не проблема Visual Basic-а. Это твоя проблема, т.к. ты пытаешься привнести привычки из другого языка в язык, который привычный тебе стиль программирования не поддерживает.

И такая ситуация возможно для любых языков. На C++ можно жаловаться, что в нем нет паттерн-матчинга, на Rust — что в нем нет множественного наследования, на Haskell — что в нем нет volatile и reinterpret_cast.

Оно не так работает. И ты это знаешь.

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

А если ты топишь за Rust, который компилируется в такой же машинный код, что и C и C++, но не можешь начать использовать Rust вместо ненавистного тебе C, то что-то здесь не так. Либо Rust у вас в принципе не применим (например, нет поддержки ваших аппаратных платформ), либо ты вообще никаких решений о выборе инструментария не принимаешь и не влияешь на них. Значит, в твоем случае Rust — это просто фетишь, на который можно подрочить на форуме, но не более того.

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

Завязывай с тупняком. Либы и модули на холодную, по твоему, собираются где-то в высших сферах сами?

Т.е. ты очередной вася, который взял 3 готовых либы, сваял на них хелворд на тыщу строк и выдал его не за хелворд? А как пел «Проект с асинхронным HTTP сервером, ORM». Когда ты говоришь «проект с» - это значит, что у тебя есть реализация. Когда реализации у тебя нет - это не проект С, а проект на либе.

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

Так же, я сомневаюсь, что при полной пересборки у тебя пересобираются все либы и всех их зависимости. У тебя там может быть либа-обёртка на либе, которая не собирается.

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

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

Большая часть времени — работа llvm

Большая - это какая? И к чему ты решил, что работа ллвм не имеет отношения к расту? Имеет и прямое. В сишке/крестах ллвм столько не работает.

Опять же - с кем ты собирал? -O3 + lto? Либо это линкер без лто так втупляет?

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

У тебя там может быть либа-обёртка на либе, которая не собирается.

Так и есть. Почти все растолибы тупо обертки. Так что вся сложная логика там внезапно на сишке. А канпелятор раста тупит пару минут над обертками и по 10 секунд над фанбойским хеловордом. Такие то инновации.

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

Как я тебя сразу не заметил.

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

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

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

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

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

При полной сборке собираются все либы и все их зависимости. С разморозкой.

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

В сишке/крестах ллвм столько не работает.

Ага. Он там волшебный и генерит исполняемый код не из LLVM IR а напрямую из космолучей величия адептов сишки.

В расте нет «холодно» и «горячего».

Расскажите еще мне о расте, о котором вы очевидно ничего не знаете абсолютно. Ни о языке ни о его инфаструктуре.

У тебя там может быть либа-обёртка на либе, которая не собирается.

Для этого у нормальных людей есть семвер

Большая - это какая?

Очевидно, это бОльшая часть.

Опять же - с кем ты собирал? -O3 + lto?

С O3 + LTO 12сек, это девбилд O0 с дебагсимволами и трейсами.

Слинкуй C++ный код с полусотней либ — втуплять будет не меньше.

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

При полной сборке собираются все либы и все их зависимости. С разморозкой.

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

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

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

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

Ага. Он там волшебный и генерит исполняемый код не из LLVM IR а напрямую из космолучей величия адептов сишки.

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

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

Хелворд на крестах генерирует 10метров ir, а на сишке 100байт. Твой раст устроен так же, как и кресты. Это всё дерьмо просто инклюдится в код и далее уже скармливается ллвм. От того там его рождает в тысячи раз больше, нежели ты его написал.

Расскажите еще мне о расте, о котором вы очевидно ничего не знаете абсолютно. Ни о языке ни о его инфаструктуре.

Расскажу. Можешь что-то кукарекнуть в ответ - валяй. Но ты же ничего не смог? Не смог.

Для этого у нормальных людей есть семвер

Что ты несёшь? Ты вообще понял то, что я сказал? Либо нет?

Есть либа А, которая либо биндинги к другому языку, либо дерьмо на расте. Есть либа-обёртка над либой А, либо Б. Где гарантии того, что твоё дерьмо при пересборке пересобирает именно ВЕСЬ код.

Если проще. Есть llvm, а раст-либа-биндинг. В рамках раста ты пересоберёшь этот биндинг, но это не значит, что ты собрал все зависимости - они просто во внешнем мире.

Очевидно, это бОльшая часть.

Я вижу там 2секунды.

С O3 + LTO 12сек, это девбилд O0 с дебагсимволами и трейсами.

Ну т.е. наврал. Ничего нового. Хотя у ламерков «девбилд» всегда O0 - вчера с маздайки слезли и уже за раст взялись.

Слинкуй C++ный код с полусотней либ — втуплять будет не меньше.

Было 3, а стало полсотни. Вася, крестовый компилятор быстрее растового в разы. И то, если сравнивать с самым жестким кодом.

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

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

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

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

И да, подписыпайся хотя бы «аз езмь Царь», если регистрироваться не хочешь, чтобы твои потоки сознания можно было скриптом заигнорить.

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

А потому что любой хелворд на бусте - это 10мегабайт кода.

Браво! Наконец-то, неужели просветление!

А теперь иди и почитай про cargo и узри, что любой хэлловорлд на расте — это 10мб кода подключенных растолиб, если собирать нахолодную + кодогенерация (как в бусте, если тебе так проще понять) в любом случае.

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

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

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

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

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

Браво! Наконец-то, неужели просветление!

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

А теперь иди и почитай про cargo и узри, что любой хэлловорлд на расте — это 10мб кода подключенных растолиб, если собирать нахолодную + кодогенерация (как в бусте, если тебе так проще понять) в любом случае.

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

Дело тут не в либах, а в архитектуре недоязыка.

Дале, балаболка, в расте единица трансляции - это не файл как в крестах. Поэтому никакой нет разницы 10 там мегабайт, либо 100. Они собираются отдельно от твоего дерьма, а потом с ним линкуются.

В бусте 80% кода не линкуются, а инклюдятся. Таким образом - это эквивалентно сборки твоего дерьма «на холодную».

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

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

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

Дело тут не в либах, а в архитектуре недоязыка.

После этого задвигать про единицу трансляции «файл» и инклуды было особенно сочно. Продолжай.

Где там кстати твоя икспердная проверка растолиб?

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

Ну и да, любой «хэлловорлд» на расте юзает кодогенерацию в виде автодерайва трейтов. Так что помножь 1000 строк кода на 10 и получишь примерное количество финального кода.

А потом разверни весь сахар в упрощенный IR и еще раз умножь на 2.

Пруф: cargo expand.

Или автодерайвы мы тоже назовем ненужной херней?

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

Потому что ты ведешь себя как невменяемый и порешь тупняк уже вторую страницу

Вторую страницу? Если бы. Он порет тупняк уже пятый год.

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

Я не следил за активностью Царя, в растотредах он вроде первый раз, а масштаб тупняка в темах о C++ я оценить не мог)

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

возьми язык, в котором это сделано хорошо.

Оно не так работает. И ты это знаешь.

Не знаю.

А. Ну окей.

Либо Rust у вас в принципе не применим (например, нет поддержки ваших аппаратных платформ), либо ты вообще никаких решений о выборе инструментария не принимаешь и не влияешь на них. Значит, в твоем случае Rust — это просто фетишь, на который можно подрочить на форуме, но не более того.

Твоя логика не перестает удивлять.

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

Ну, как я и говорю. A low-level HTTP implementation for Rust. - смешно читать.

Обёртка над обёрткой над обёрткой. mio->tokio->ещё тонна дерьма->твоё дерьмо. Из-за этого оно собирается 5минут, а не 15.

Было бы это всё одним проектом, как asio, то собиралось бы оно 15минут, т.к. это монолит.

lto в твоём дёрьме фейковое, а иначе оно бы собиралось несколько минут и явно не с 200метрами памяти. Ну это стандартно для шланга - оно просто игнорирует лто для всех не лто объектников.

Кстати, асио собирается пару секунд. Если туда прикрутить хттп, то ничего почти не измениться. И это полная «горячая» сборка.

Для неё не нужно ни лто ибо она имеет ipo в рамках всей программы.

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

И к чему ты это написал?

lto в твоём дёрьме фейковое

Пруфов подвезешь, или опять просто разглагольствуешь?

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

Из-за этого оно собирается 5минут, а не 15.

Оно собирается со всеми зависимостями, включая токио, мио и hyper около 80 секунд.

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

И к чему ты это написал?

К тому, что ты идиот. Ты пишешь ахинею, игноирруешь то, что тебе пишут. Выдаёшь 1000мелких проектов, которые ты собираешь с O0 за не хелворд.

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

Пруфов подвезешь, или опять просто разглагольствуешь?

Тебе написали про пруфы. Я знаю производительность лто и я знаю, что его у тебя нет. А то, что ты там врубил lto(скорее всего наврал) - это ничего не значит и тебе сказали почему.

Для того, чтобы собрать всё с lto - нужно собрать всё с лто, а потом всё это слинковать.

Вперёд - выкатывай выхлоп --verbose своей лто сборки.

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

Для того, чтобы собрать всё с lto - нужно собрать всё с лто, а потом всё это слинковать.

Именно этим cargo и занимается, болезненный вы наш.

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