LINUX.ORG.RU

У кого-то на хабре бомбануло от Столярова

 , ,


2

8

https://habr.com/ru/post/598219/

Если вкратце, растофанатик решил доказать, что его любимый язычок тоже умеет в нулевой рантайм, отключил std и core, и у него даже получилось собрать хелловорлд «как на сишечке».
Правда руст в этом состоянии даже два числа сложить не может (а весь хелловорлд по сути написан на ассемблере), в то время как сишечка без библиотек остаётся той же сишечкой, достаточно пары обёрток над сисколлами.

Ваше мнение?

★★★★★

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

Ваше мнение?

Собаки лают, караван идёт. На Rust во всю драйвера пишут и скоро будет поддержка в ядре Linux. Не говоря уже про кучу всего ещё, что на нём сегодня разрабатывается.

th3m3 ★★★★★
()

Почему Rust должен заменять C/C++? Плюньте в интерфейс тому, кто это говорит. Однако это не значит, что Rust не нужен - ему дохера применений найдется. Драйверы, возможно, даже и не самое интересное (и я бы сказал, спорное - потому что драйверы часто пишутся на Rust «как на С», тем самым никаких преимуществ не имея).

pekmop1024 ★★★★★
()

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

Просто кто-то в интернете был не прав, у чувака бомбануло.

ЗЫЖ Сишка там, если что тоже на половину из ассемблера.

ЗЗЫЖ Может раст в таком режиме и не умеет складывать числа, зато по-прежнему умеет проверять типы, чего сишка не умеет ни в каком режиме.

Ivan_qrt ★★★★★
()
Ответ на: комментарий от ya-betmen

Почему они это рантайм?

Там под рантаймом подразумевают код инициализации. Ну странные люди в МГУ, что поделать.

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

Ivan_qrt ★★★★★
()

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

Как про раст разговор заходит так 50% времени повествования про то какой он весь крутой и какое всё вокруг днище доставшееся от дедоф. При этом демонстративно намазывается глобус вазелином с сидящей рядом испуганной совой.

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

что на уже существующем ~50 лет языке делается в почти два тыка.

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

Ivan_qrt ★★★★★
()

На ЛОРе обсудили и пришли к мнению, что студент неосилятор и газзифицировал лужу. Попутно Столярову зашедшему на огонёк слегка напихали в панамку, но поскольку это не он, а студент, то так, слегка.

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

Dark_SavanT ★★★★★
()

Тут две стороны

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

В целом я считаю, что о языке можно судить по

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

Подождём, увидим.

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

Столяров

Доложите как он относится к расту? Положительно или как?

Правда руст в этом состоянии даже два числа сложить не может

Если там оператор сложения не захардкожен в компилятор, то это скорее хорошо. Ну и понятное дело, если в этом случае выпилить std, то и складывать не сможет. Хотя может быть всё по-другому и ты просто набросил про сложение. Проверять я это конечно же не стану.

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

А почему на расте недостаточно?

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

Серьёзно. Я знаю о существовании персонажа, что он пишет книжки и участвует в холиварах. На этом всё. Его позицию по всем вопросам не знаю.

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

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

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

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

Мне вообще показалось, что тот комментарий был неприкрыто саркастическим косплеем. Ну или придётся предположить, что @zamazan4ik и царь — одно и то же лицо :)

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

Core и std в нём подразумевают некую среду исполнения, которой может и не быть.

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

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

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

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

а в том, чтобы собрать минимальный бинарь, дёргающий сискол. В расте это оказалось более многословно.

Я не уверен. Ну, если честно, в расте это делается примерно ровно так же: враппер на асме для вызова сисколла, unsafe и поехали. От растового надо только обработчики для panic и ещё пары функций сунуть.

hateyoufeel ★★★★★
()

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

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

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

Доложите как он относится к расту? Положительно или как?

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

— А. В. Столяров

PPP328 ★★★★★
()

Растофанатики, которые не пробовали раст - не называют одного его очень заметного достоинства по сравнению с плюсами - скорость разработки.

По моему опыту - если у вас на пути встал borrow-checker не по делу… и речь не о мегабайтах инфы - просто сделайте .clone() и 90% проблем borrow-checker решена. Растофанатики скажут что так нельзя, ассемблерщики скажучт что софт тормозит, а по факту получается рабочий софт со «скоростью разработки как на питоне, а производительностью и количеством багов - лучше чем на питоне».

Пошёл абьюзить раст дальше после 15 лет разработки на плюсах.

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

А решать это вообще-то должен программист

Конечно. А как ещё выйти за границу массива или устроить утечку памяти. Без этого ни один сишник жить не может.

ox55ff ★★★★★
()

Кщё как выяснилось Rust ещё и не свободен, за модификации языка и рантайма могут засудить:

Uses that require explicit approval

Distributing a modified version of the Rust programming language, compiler, or the Cargo package manager with modifications other than those permitted above and calling it Rust or Cargo requires explicit, written permission from the Rust Foundation. We will usually allow these uses as long as the modifications are (1) relatively small and (2) very clearly communicated to end-users.

Делать несовместимые версии Си никто не запрещает и их реально делали например Borland и Microsoft.

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

Через 20 лет на сишников будут смотреть как на любителей паскаля и фортрана сейчас.

Есть нюансы. Паскаль и Фортран никогда не достигали популярности и проникновения C/C++. Это во первых. А во вторых - поинтересуйтесь из любопытства сколько за лицензию на libnag хотят нынче (безусловно нИшевый продукт, но просто представьте сколько эти люди продолжают зарабатывать сегодня).

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

Делать несовместимые версии Си никто не запрещает и их реально делали например Borland и Microsoft.

Строго говоря, Rust тоже не запрещает, но нельзя называть это Rust-ом. Схожий подход у Sun/Oracle к Java.

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

Возможно запрет продиктован как раз желанием, чтобы никто вроде Microsoft или Google не приватизировали язык, выпустив какой-нибудь Rust от Microsoft, несовместимый с исходным, но который из-за монополизма MS станет вариантом по умолчанию.

С другой на практике это препятствует альтернативным реализациям. С третьей непонятны пределы. Если например свою реализацию назвать допустим HRust и в документации сказать, что сделано по мотивам Rust - за это уже судить надо или еще нет?

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

На паскале (ST, SCL) как щас АСУТП (SCADA) работает, и через 20 лет будет на нем же работать. Фортран как использовался в числодробилках, так и будет использоваться.

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

Distributing a modified version of the Rust programming language, compiler, or the Cargo package manager with modifications other than those permitted above and calling it Rust or Cargo requires explicit, written permission from the Rust Foundation.

compiler

Ну это пипец, да.

Что характерно, когда подобным баловалась Sun c Java, Линус их открыто послал (см. JFF). Стареет…

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

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

rumgot ★★★★★
()

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

#[inline(always)]
unsafe extern "C" fn syscall1(n: i32, a1: i32) -> i32 {
  let ret: i32;
  asm!(
    "int 0x80",
    in("eax") n,
    in("ebx") a1,
    lateout("eax") ret,
  );
  ret
}

#[inline(always)]
unsafe fn syscall3(n: i32, a1: i32, a2: i32, a3: i32) -> i32 {
  let ret: i32;
  asm!(
    "int 0x80",
    in("eax") n,
    in("ebx") a1,
    in("ecx") a2,
    in("edx") a3,
    lateout("eax") ret,
  );
  ret
}
Psilocybe ★★★★
()
Ответ на: комментарий от X512

Не надо путать оптимизацию с принципиальной возможностью

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

/* no_libc/greet3.c */
int sys_write(int fd, const void *buf, int size);

static const char dunno[] = "I don't know how to greet you\n";
static const char hello[] = "Hello, dear ";

static int string_length(const char *s)
{
  int i = 0;
  while(s[i])
    i++;
  return i;
}

int main(int argc, char **argv)
{
  if(argc < 2) {
    sys_write(1, dunno, sizeof(dunno)-1);
    return 1;
  }
  sys_write(1, hello, sizeof(hello)-1);
  sys_write(1, argv[1], string_length(argv[1]));
  sys_write(1, "\n", 1);
  return 0;
}
Psilocybe ★★★★
()
Ответ на: комментарий от Psilocybe
> gcc greet3.c 
/tmp/cc0uS0eL.o: In function `main':
greet3.c:(.text+0x5e): undefined reference to `sys_write'
greet3.c:(.text+0x7d): undefined reference to `sys_write'
greet3.c:(.text+0xaa): undefined reference to `sys_write'
greet3.c:(.text+0xc2): undefined reference to `sys_write'
collect2: ld returned 1 exit status
X512 ★★★★★
()
Ответ на: комментарий от X512

Кщё как выяснилось Rust ещё и не свободен, за модификации языка и рантайма могут засудить:

Ну так не называй его Rust. Называй его «Руст от Васяна» и всё будет норм. Почти у каждого жирного поперсорцного проекта есть такое в лицензии.

Делать несовместимые версии Си никто не запрещает и их реально делали например Borland и Microsoft.

И к чему это в итоге привело?

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