LINUX.ORG.RU

Посмотрел я этот ваш Rust

 ,


6

8

Вобщем, дошли руки потыкать палочкой.

Я вот что не пойму - зачем и кому он нужен, ну правда?

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

Close to metal? Нет, извините, мне когда надо будет close to metal - я пойду сишку возьму. Которая реально, и Close To Metal, и со стабильным ABI, так важным для низкоуровневого программирования, и так далее. А если просто производительности не будет хватать, в том числе там из-за GC, так ведь - что в Java, что в Common Lisp, есть огромное количество возможностей затюнить производительность до нужного уровня, при этом не стреляя себе в ногу.

Продуктивность разработчика? Я сильно в этом сомневаюсь. Потому что вот есть языки программирования, предлагающие наибольшую продуктивность, не ограничивающие пользователя практически никак, и, конечно, вместе с тем, довольно сильно нагружающие межушной нервный узел, довольно нетривиальные для изучения. Как пример, лиспы всевозможные. Но Rust в их число не входит. Там на каждом углу костыли, подпорки, железные двери с замками, и чуть что так обухом по голове можно получить.

Наконец, ну безопасность чтоли, хваленая? Ну, опять нет. Взять тот же unsafe. Если вам нужна прямо таки безопасность-безопасность - берите что-нибудь вроде хаскеля(или какого-нибудь Coq, или что-нибудь подобное, с зависимыми типами, если совсем упоролись), ну или на худой конец, что-нибудь вроде Java, где все безопасно прямо как в дурдоме с мягкими стенами.

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

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

С чего бы JS?

В веб-фронтенд весь мир чтоли уперся, и больше ничем не занимается? А ты точно не фронтендщик, с такой то эрудицией?

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

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

В расте это в принципе невозможно.

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

Допустим есть большая кодовая база.

Как бы менять по всей кодовой базе стандартный float или как он там называется, на какой-то свой my_float, при этом с вероятностью 100% где-то что-то сломав, это нормально вообще?

Впрочем ход мыслей пользователей Rust понятен.

lovesan ★★★
() автор топика

Вот в этом проблема:

дошли руки

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

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

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

Дак если бы! Суть в том, что это все тот же привычный C++, с таким же подходом к языкостроению, и всеми его «прелестями».

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

Такого уровня дебилизма даже от вас сложно было ожидать.

Но теперь понятно, почему при таком пафосе и всезнайстве/всеумействе вы пишете код так, как вы его пишете.

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

Зачем руст если есть ninja компилятор , только вот я думаю как его теперь сгибридить что бы он был за место make , но компилил как ninja так же быстрее в десять раз чем unix-makefile

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

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

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

В Java и .NET проблема решается применением обфускаторов байт-кода. Для C++ проблема решается разбиением на заголовочные и объектные файлы. Для Ады решение проблемы заложено в сам язык.

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

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

Что касается рантайма, то в случае раста им можно пренебречь - настолько он мал.

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

Go лучше всего характеризует умственно-отсталый суслик

суслик, ты Go ни разу не пробовал. какое право ты имеешь открывать на него страницу?

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

anonymous
()

За что люблю Растишечку - всех дебилов отсеивает безукоризненно.

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

Кто есть царь и есть ли у него царевна?

царь - эт я. давайте мне мою царевну!

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

Аз есмь царь!

ты - самазваниц!

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

Это же новый C++.

Ну вообще-то да.

Ну вообще-то нет.

новый C++ - это D

новый C - это Go

а rust - я не знаю - ни к селу, ни к городу

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

Такого уровня дебилизма даже от вас сложно было ожидать.

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

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

Если бы компилятор Rust не поддерживал SSE/AVX - можно ли было бы их туда добавить? Ответ немного предсказуем.

Открываешь сорцы компилятора и добавляешь.

Что за привычка вырывать гланды через задницу?

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

Это не виртуальная машина, а нижний уровень компилятора. Ассемблер самый настоящий, транслирует в самые настоящие машкоды.

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

Через задницу это как раз вот оно. Когда нормальной расширяемости в языке нет, и приходится делать вот как ты сказал.

К тому же я подозреваю, код компилятора там крайне нетривиальный, и добавить целый SSE, это не раз-два, и 100 строчек написать, как на лиспе.

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

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

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

На крестах даже наколенные поделки на 10000 строк компилируются со скоростью черепахи. i5 не хватает, чтобы просто сделать make && ./myapp, приходится еще и ждать. Индустрия вомгле.

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

SBCL и так оптимизирует неплохо, там выше пример есть. Узкие места и всякие вычисления можно ускорить с помощью вот этого ассемблера и SSE/AVX и быть по производительности вполне себе на уровне C или C++ с ассемблерными же вставками.

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

К тому же я подозреваю, код компилятора там крайне нетривиальный, и добавить целый SSE, это не раз-два

А добавить грамотную и полную поддержку SSE как compile-time evaluation — это так легко и просто, можно подумать.

Через задницу это как раз вот оно. Когда нормальной расширяемости в языке нет, и приходится делать вот как ты сказал.

О какой расширяемости речь, если ты фактически предлагаешь реализовать сам компилятор как compile-time expression evaluator. Можно тогда сразу взять m4 и реализовать компилятор как набор макросов, транслирующих исходный текст в текст на асме — расширяемее некуда.

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

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

100 строчек написать, как на лиспе.

Это если лисп-машина знает, что такое SSE. Или ты сразу в машкод собрался транслировать, минуя байт-код?

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

А это символьное представление чего?

  (:generator 0
              (inst mov r 1)
              LOOP
              (inst test n n)
              (inst jmp :z DONE)
              (inst imul r n)
              (inst dec n)
              (inst jmp LOOP)
              DONE))
Deleted
()
Ответ на: комментарий от Deleted

compile-time expression evaluator

Не понял зачем такие вумные слова для описания расширяемости конпилятора в рантайме.

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

Зачем на m4? У любого более-менее вменяемого языка компилятор написан на нем самом.

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

новый C++ - это D

С этим более-менее можно согласится

новый C - это Go

Паскалевский :=, паскалевское объявление переменных var x Type, сборка мусора и прочий «многопроцессный» мусор.

Как это может быть новым C?

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

Машкодов, внезапно. Это называется «ассемблер».

Собственно второй столбец слева это они самые, машкоды в 16-ричном представлении.

; disassembly for FACT
; Size: 60 bytes. Origin: #x1003469F80                        ; FACT
; 80:       840425F8FF1020   TEST AL, [#x2010FFF8]            ; safepoint
; 87:       31C0             XOR EAX, EAX
; 89:       31C9             XOR ECX, ECX
; 8B:       4885DB           TEST RBX, RBX
; 8E:       7D09             JNL L1
; 90: L0:   488BD1           MOV RDX, RCX
...
lovesan ★★★
() автор топика

Вообще не понимаю, зачем в 2к20 нужны компилируемые языки. Это устарело. Железо достаточно дешёвое, чтобы экономить на нём. Но нет же, есть пердолики, которые задротят в раст и кресты, пытаясь понять, что лучше. В 2к20 достаточно питона и джавы, которые покрывают 146% потребностей.

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

Зачем на m4? У любого более-менее вменяемого языка компилятор написан на нем самом.

Ну вот берешь шланг, написанный на C++, и расширяешь как хочешь. Звучит логично? Логично.

для описания расширяемости конпилятора

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

Всё жду, когда станет возможна чисто функциональная реализация компилятора C++ на шаблонах — вот это будет пушка. Мы встроили компилятор в компилятор, чтобы вы могли компилировать ваши сорцы в то время, пока компилируются ваши сорцы.

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

Машкодов, внезапно. Это называется «ассемблер».

Так это еще и к x86 гвоздями прибито?! Закопать. Кодеров уволить и выслать в Антарктиду стеречь пингвинов.

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

Ну вот берешь шланг, написанный на C++, и расширяешь как хочешь. Звучит логично? Логично.

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

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

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

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

Конкретный пример естественно прибит, там x86_64 инструкции, потому как я на x86_64 его запускаю.

Но SBCL, естественно, не только x86_64 поддерживает: http://sbcl.org/platform-table.html

Набор VOP в SBCL вообще и является средством абстракции платформы, в них компилируется первое, машинно-независимое, представление в виде Flow Graph.

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

веб-фронтенд

Ваша информация устарела лет на 10.

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

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

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

Для C++ проблема решается разбиением на заголовочные и объектные файлы.

Шта?! У C++ нет стабильного, единого ABI. Я посмотрю как вы будете решать эту «проблему», когда у вас либы собраны другим компилятором и как тут могут помочь хедеры.

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

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

Что касается рантайма, то в случае раста им можно пренебречь - настолько он мал.

Напомните где там рантайм?

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

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

Развитие идет и идёт, а кресты тормозят и тормозят, а прикладной код падает и падает….

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.