LINUX.ORG.RU

Запилите кто-нибудь нормальный обзор Rust

 , ,


6

9

Коллеги, а не мог бы кто-нибудь из вас запилить нормальное сравнение Rust с плюсами? В последнее время rust то и дело упоминают как будущего убийцу с++, вот мне и стало интересно. Но изучать новый язык у меня сейчас времени нет, а все обзоры и сравнения (вот последнее на хабре: http://habrahabr.ru/post/225507/) сводятся к следующему:

Возьмем пример стандартного кода на с++

$ cat test.cpp
int main()
{
    *((int*)nullptr) = 0xdeadbeef;
}
Давайте его запустим, и посмотрим, что получится:
$ g++ -std=c++0x -o testcpp test.cpp && ./testcpp
Segmentation fault
Как видите, с++ позволяет выстрелить себе в ногу!
А теперь давайте посмотрим, что будет, если этот же код попытаться скомпилировать rust:
rust -o testrust test.cpp
test.cpp:1:1: 1:4 error: expected item but found `int`
test.cpp:1 int main()
           ^~~
Смотрите, компилятор rust не скомпилировал этот код и сохранил нам ногу! ergo, rust - убийца с++.

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

Если где-то есть уже что-то подобное в сети, киньте ссылку.

UPD: нашел очень качественное сравнение с++ и go (http://kidoman.io/programming/go-getter.html).
tl;dr: товарищ сравнивал производительность, в качестве демонстрационной программы использовал трассировщик лучей. В первой серии go победил после множества оптимизацй, во второй серии с++ после таких же оптимизаций одолел go на одном ядре, в третьей серии в с++ впилили многопоточность, и он разорвал go пополам.
Стоит обратить внимание, что рейтрейсер на c++ в этом примере написан без единого new/delete.
Буду очень признателен, если кто-то напишет подобное сравнение с++ с rust, а еще лучше - если портирует трассировщик из примера выше на rust о объяснит, почему он лучше (там уже на несколько других языков портировали).



Последнее исправление: ymn (всего исправлений: 3)
Strawberry ) clang++ -std=c++0x ex.cpp
ex.cpp:3:5: warning: indirection of non-volatile null pointer will be
      deleted, not trap [-Wnull-dereference]
    *((int*)nullptr) = 0xdeadbeef;
    ^~~~~~~~~~~~~~~~
ex.cpp:3:5: note: consider using __builtin_trap() or qualifying
      pointer with 'volatile'
1 warning generated.

ОЙ.

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

Это ты к чему написал? Я, конечно, рад, что clang нашел глупость в коде и поругался, но речь же не об этом. Я хочу нормальное сравнение rust c c++, а компайлеросрач мне здесь не нужен.

ddos3
() автор топика

Хотелось бы увидеть какую-нибудь задачу
чтобы показать убогость плюсов

90% таких примеров схематически отображаются так:

в C++ надо написать 50 строк кода чтобы получить результат

в my_lovely_cpp_killer это делается 1 функцией! C++ - говно!!111

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

Я тоже хочу нормальное сравнение, но пока не нашел, к сожалению.

А clang - эт я так намекнул на то, что сравнение крестов с чем-либо должно учитывать не только g++.

Подписался.

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

Я хочу сравнение языков, а не компиляторов. Если мне покажут пример очевидного преимущества корректного (т.е. соответствующего стандарту, безотносительно к тулчейну) кода на rust над корректным кодом на с++, меня это устроит, чем бы автор этого примера не пользовался: хоть clang, хоть msvc.

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

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

ddos3
() автор топика

Какой еще обзор ты хочешь увидеть, после того как одной строчкой дефолтными средствами заработал сегфолт? Что тут можно обсуждать дальше?

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

Что тут можно обсуждать дальше?

С тобой? Ничего. Ты - феерический идиот.

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

Если на Python и не только примерно такой код написать:

n = 0
while 1:
    n = n + 1
CPU загрузится по полной, выполняя такой код. Python (и не только) — ненужно?

anonymous
()

А теперь давай по-порядку, сравнение rust и С++ не нужно. Во первых потому-что не нужен сам rust. Почему? Да потому что плюсы никто заменять не будет, просто закостылят очередную модную/нужную фичу в них и пойдут дальше. Далее компилятор, если на свежей ОС не собирается gcc, то проблему ищут именно в ОС, а не в gcc. Сколько лет компилятор ржавчины пилить до аналогичного состояния? До следующего стандарта плюсов? Далее. Разработчики rust сами толком не знают что хотят сделать, постоянно запиливая и выпиливая какие-то фичи. О чем это говорит? Да о том что у них нихрена нет плана и чистой удачей для них будет избежать ошибок в дизайне которые выстрелят через пару-тройку лет после релиза и исправляя которые придется поломать половину языка. Еще: совершенно мудацкий синтаксис о который просто ломаются глаза, в старых еще языках простительно, но зачем такое делать в новом?

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

anonymous
()

Теперь про Go: язык изначально создавался для определенной цели (и это ни разу не рейтрейсинг), у него четкая ориентация на многопоточное/асинхронное программирование (только сегодня читал отзыв про использование в продакшене, 2 года без утечек памяти и полностью себя оправдал для решения задачи) и по-моему в нем достигнут хороший компромисс. В нем вообще нет ничего лишнего, и это очень заметно, знакомые нам концепции изменены так что бы наговнокодить или сломать что-то было сложнее. Такой себе язык под текущие реалии, с учетом ошибок прошлого. Далее компилятор: есть свой быстрый и более медленный оптимизирующий gccgo. По твоим же графикам видно что даже в тяжелых задачах (хотя создан явно для другого) он может тягаться с Си и я думаю его оптимизации еще не исчерпаны. Мне думается его ниша это бэкэнды разного рода да и вообще он подвинет многие языки смежных задачах.

Итого: у языка явно есть четкая ниша под которую он заточен, он достаточно компактен (По количеству конструкций в нем, а вот по количеству необходимого кода на нем наоборот нет. Но приходится чем то жертвовать, что ж поделать), он включен в gcc, у него создатели с головой на плечах и руками из нужного места.

anonymous
()

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

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

Возьми да прочитай доки и мануалы и сам запили обзор/сравнение

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

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

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

у него четкая ориентация на многопоточное/асинхронное программирование.
это ни разу не рейтрейсинг.

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

даже в тяжелых задачах он может тягаться с Си

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

ddos3
() автор топика

Запилите кто-нибудь нормальный обзор Rust

ээ, да зачем тебе обзор, судя по докам Rust это: C++ с NIH синдромом который после релиза станет никому не нужен, иди учи плюсы.

umren ★★★★★
()

В C++ есть частичная специализация шаблонов. В Rust её нет, и почему — непонятно.

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

иди учи плюсы

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

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

Ну вот и я не хочу :) но интересно же. Думал, найдется какой-нибудь эксперт, все же ЛОР когда-то славился своими специалистами по всякой экзотике. А теперь, похоже, остались только тро-ло-ло да шко-ло-ло :(

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

к вечеру набегут, были парочка экспертов по Rust, не боись

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

Чтобы на SFINAE не писали дифференцирование в compile-time, естественно.

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

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

Параллельность <> многопоточность. Не надо приводить задачу под которую язык изначально не создавался.

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

А насчет rust'a. Как ты предлагаешь знать язык который переписывают каждые несколько месяцев ломая обратную совместимость?

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

anonymous
()

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

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

Это пример так называемого вранья.

Это пример так называемого цепляния за слова.

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

Это пример не вранья, а анонимного «тро-ло-ло». Не корми его в моей теме. Лучше скажи, ты rust знаешь?

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

Это пример не вранья, а анонимного «тро-ло-ло»

Я предпочитаю называть вещи своими именами. «Тро-ло-ло» - это не имя.

ты rust знаешь?

Я слежу за его развитием года полтора, но не пишу на нем.

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

Я утрировал конечно

Отмазывайся теперь, ага.

после недавнего решения разработчиков снова сломать язык: В Rust хотят заменить &mut на &uniq и убрать константность по умолчанию

Просто для протокола: это решение не принято.

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

От чего отмазываться? Я ни одного аргумента против своей позиции не услышал, только цеплялки к словам. Что в принципе показатель.

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

Я ни одного аргумента против своей позиции не услышал

Какой еще позиции, ты просто дважды соврал. Язык не переписывают - основные концепции на месте уже года 2-3 (после того, как убрали typestate); то изменение, на которое ты сослался, не принято.

Ну а с тем, что совместимость ломают, никто и не спорит.

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

Нафига тебе обзор, если на википедии достаточно буков?


Основная задача Rust — быть удобным языком для написания больших клиент-серверных приложений, работающих в сети Интернет. Такое позиционирование привело к выбору функциональных возможностей с акцентом на безопасность, контроль за использованием памяти и параллельное выполнение задач. Разработчиками языка ставится задача достичь производительности приложений на Rust сравнимой с производительностью C++-приложений. Rust намеренно не включает в себя каких-то новых и непроверенных идей. Проект нацелен на сбор лучших возможностей из уже существующих языков и решений.


Отсюда как бэ видно, что ниши С++ и Rust различны и их сравнение будет носить чисто академических характер. Оно тебе надо?

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

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

Для начала Rust - это совершенно точно не убийца Си++, потому что у Си++ в разы больше фич и бесконечно больше легаси-кода; Rust даже не пытается быть совместимым с Си++ (что вызывает проблемы при написании биндингов к Си++: https://mail.mozilla.org/pipermail/rust-dev/2014-May/009887.html).

Как это не смешно звучит, у Rust есть практически всё, чтобы стать убийцей Си. Собственно, Rust - это Си, перепроектированныйс учетом 40 лет опыта применения и развития языкостроения (вторая попытка, после http://cyclone.thelanguage.org/). Чего не хватает в Си действующим прогерам (оставим в стороне восторженную школоту и гопников вроде спкх)? Первое - параметризуемых типов (кто не верит - см. GLib); второе - проверяемой компилятором дисциплины работы с памятью (кто не верит в это - см. valgrind, mudflap, MemorySanitizer и пр.). Те, кто не ограничиваются Си, хотят так же ФП - HOF, замыкания, pattern-matching. И всё это есть в Rust, при этом рантайм остался прозрачным (а если необходимо, можно обойтись и без рантайма), всеми любимые фигурные скобки в наличии. Правда, оборотной стороной всего этого счастья является сложность - Rust, хотя и не является передним краем CS (которым должен был стать BitC), в разы сложнее Си.

Однако, на пути убийцы есть 2 препятствия: психологическое и техническое (гигатонны легаси не рассматриваем). Психологическое: системные программисты - заскорузлые рутинеры^W^Wконсерваторы, а тут на них вываливают фишки, о которых в ПТУ не рассказывали. Техническое - в самом языке эти фишки могут быть плохо интегрированы (например, все знают, что borrow checker разумен и обладает плохим характером). Так что будущее Rust темно (внезапно, да).

А, и после того, как они заменили ~ на Box<>, шансов у языка почти нет.

а не будешь постить по 4 слова?

А ты попробуй задавать вопросы. Есть шанс, что отвечу я, ozkriff или еще кто-то.

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

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

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

Достойно.

(Между делом эта тема напомнила мне об одной книге: Бьянкуцци Ф., Уорден Ш. - Пионеры программирования. Диалоги с создателями наиболее популярных языков программирования - 2011. 17 разных языков, довольно интересно.)

К теме. Ты в принципе описал почему оно по моему мнению не взлетит. Слишком много разных наворотов. Роль простого Си быть переносимым ассемблером, а разрабы rust хотят протащить чуть ли не haskell на эту роль, ну и зачем? (По-моему вообще Си пытаться подвинуть бесполезно, можно лишь отобрать у него какую-нибудь нишу) Они же не будут писать компилятор под кучу архитектур. Современные языки взлетают если решают какую-то задачу сильно лучше других. За rust такого не замечено.

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

Ты в принципе описал почему оно по моему мнению не взлетит

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

Роль простого Си быть переносимым ассемблером, а разрабы rust хотят протащить чуть ли не haskell на эту роль

Чушь. Рантайм Rust прозрачен. Модель компиляции тоже. Все сложности - с моделью владения. Но где вы все находите там Хаскел - тайна великая.

Они же не будут писать компилятор под кучу архитектур

Не будут, конечно. Их компилятор под кучу архитектур уже написан - это LLVM. И перенос Rust на новую архитектуру тривиален.

Современные языки взлетают если решают какую-то задачу сильно лучше других. За rust такого не замечено.

А кто должен был это заметить - те, кто путает Rust и Haskell?

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

Как ты уже наверное хорошо знаешь, - я в нулину обоссу и тебя и твоего убийцу сишки? В чем убийца?

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

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

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

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

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

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

Я надеюсь ты понимаешь, почему нулёвый зелёный пхпист, который о плюсах знает по курсу С/С++ в недовузе никогда не сможет даже описать проблемы плюсов, не то что их решить. А убийц плюсов/сишки пишут именно эти (пост)студенты-пхписты. Чего ты от них хочешь?

Даже я, понимая сишку лучше всей ссанины на лоре вместевзятой, не могу сформулировать тебе даже 10причин менять гнусишку. Вернее их много, но те, которые действительно стоят потери совместимости еденицы. Да, ansi c годится только для хелворда, но никто в здравом уме на нём уже не пишет.

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

«Решение» обезьяних проблем делает язык прикладушным by design и это уже не сишка и это не лечится. Это взаимоисключающие параграфы.

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

Быстро ты сел в лужу. Чтож ты со мною о проблемах сишки не споришь? Потамучто знаешь - сядешь в лужу. Поэтому можно пацанам пургу гнать?

В отличии от тебя я знаю каждое слабое место сишки, а ты лишь знаешь слабые места твоих кривых ручек, а не сишки. Зачем ты проецируешь кривость ручек на сишку? Сишка лишь проявляет эту кривость, как скальпель. Дрожащие лапки это не вина скальпеля, а твоя, ты реально этого не понимаешь? И тот факт, что лапки дрожат у 95% не оправдание.

Я прям мечтаю, чтобы вы отправились в мир, где не будет сишки, пацанов, которое за вас всё запилят и подумают. Где будешь лишь руст, ГОвно и Дерьмо. Чтоб ты почувствовал на своей шкуре что будет с миром без них, да и будет ли твой мир вообще.

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

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

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

Дай линк.

Лучше всех? Он там случайно Си-наследие с цпп не спутал?

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

Чтож ты со мною о проблемах сишки не споришь?

Потому что ты щенок, никогда не сталкивавшийся ни с чем сложным (это очевидно по «проблемы обезьян, аля «память протекла»/сегфолт мне не интересны»).

В отличии от тебя я знаю каждое слабое место сишки

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

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

Потому что ты щенок, никогда не сталкивавшийся ни с чем сложным (это очевидно по «проблемы обезьян, аля «память протекла»/сегфолт мне не интересны»).

Ну дак покажи мне что-то сложное, что ты написал. Где ты столкнулся с «потекло»? Как может на сишке вообще что-то потечь/засегфолтится на текущем железе?

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

Ты не знаешь нихрена.

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

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

Ненужные они потому, что ты их не осилил? Величайшая отговорка.

Где твои не ошмётки? Где твой код? Где твоя нужность? Ещё раз спрошу.

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