Drive your career as React Developer with Symphony Solutions!
×Закрыть

Вивчення Rust

Привіт.

Тут є хто не проти поспілкуватися зі мною щодо дженеріків, трейтів та багатопоточності?

Для початку: як паралельно встановити nigtly та beta?

LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Я — автор операционной системы на Rust: platform.rs
Погнали комментировать, пацаны!

byrd.im/go-vs-rust

TL;DR

You know, tbh impl<’a> Foo for &’a [u8] is nuff said already. Each time I look at such a crazy piece of “code”, all I want is to find great man Rob Pike and shake his manly hand! Honestly, thanks for not putting this sort of unmaintainable rubbish into the language.

Го бои не токо скалу не осилили но и раст тоже. И они этим гордятся.

погоди — скоро должна появиться тема типа «Про ниасиливших Rust или фигак-фигак...». Ну ты понял)))

Я — автор операционной системы на Rust: platform.rs
Чем она отличается от www.redox-os.org ?

Так на эрланге уже написали такое, LING называется.
$ sudo apt-get install xen-hypervisor-amd64
на любом линуксе и вперед!

Ling 0.2.2 is here
Started in 49438 us
Erlang [ling-0.2.2]

Eshell V5.10.2 (abort with ^G)
1> application:start(n2o_sample).

старт за 50мс.

Послушайте солидный выпуск подкаста о Rust с гостем, который глубоко в теме 5minphp.ru/episode26

После прочтения The Rust Programming Language сложилось первое впечатление, что Rust состоит сплошь из неудобных в использовании костылей (которые почему-то называют zero-cost abstractions, забывая про ментальный cost) во имя memory safety и data race safety.

Не завидую программистам, пишущим на rust многопоточные программы, работающие с shared mutable state :)

Также поразило отсутствие аналога go-шных горутин в стандартной поставке rust. Обнаружил там только стандартные потоки операционной системы, потребляющие мегабайты памяти под стек при старте и жрущие процессорное время при переключении между ними. Не понятно, как в этом случае писать серверные приложения, обрабатывающие миллион одновременных подключений. Через callback hell?

shared mutable state
по определению хорошо не будет, чудес у них в кастрюльке нет

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

Господи, шо ты несешь, чувак. Как можно писать у себя в README zero-copy и нести такую х-йню на Rust. Беспредельное разочарование, как и во всем DOU, Go и еще миллионе вещей.

Не zero-copy, а zero memory allocations.

Я ж тебе дал либу нашу либу для гошных короутин. Есть еще tokio-rs и еще десяток имплементаций turbine на расте LMAX дисраптора, кастомные CAS очередя на nanomsg раст имплементациях. Винить раст, что в нем нет короутинг — это не понимать ландшафт существуюших пакетов. Биндинги есть тупо под все включая EFI, все виды GPU стандартов и векторизация из коробки на уровне Haskell, то где гошечка соснет на рынке векторного процессинга. Думаю джавашный JIT гошечку уделает. LuaJIT тоже наверно.

осталось ответить на вопрос — ЗАЧЕМ

Кто-нибудь встречал работающие полезные программы на rust ?

Кажуть що всі корисні програми пишуть на PHP. :)

Полезных программ не бывает. Все программы проносят страдания конечным пользователям.

Вы все не правы, программ вообще не бывает. И это все обман и матрице.

Технически, матрица это тоже программа. Но вы как-то слишком фантастики пересмотрели.

не) все полезные программы уже написаны на 6-м вижуал бейсике))

тут недавно аэропорт во Франции стал из за багов в винде 3.1 — те 6той VB это еще не очень страшно

значит у них на QuickBasic (или TurboBasic, или какой там бейсик на третьей винде был) там всё небось)
в общем как ни крути, а бейсик рулит полюбасу)

ех, молодьож... був навіть Visual Basic for DOS

псс дос
дос для молодых позеров, настоящий basic только из rom

да это достойная замена. Я в такие бездны обычно предпочитаю не смотреть

а может все таки осилить кресты?

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

Зачем кому-то в трезвом уме может понадобиться осваивать С++?

Хотя бы затем чтобы не задавать такие вопросы

Не помогает :(

Потому что C++ не умер ещё и долго будет оставаться востребованным.
А новые стандарты делают язык ещё мощнее.

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

в маразм уже начал впадать
Это неправда. Наоборот — компиляторы начали поддерживать стандарт намного лучше за последние годы.
А про строки: за месяц-два можно осилить Страуструпа и C++98
Потому неделя на чтение Саттера (Effective modern C++) для того, чтобы получить понимание о фичах/новых идиомах C++11/14. Если подкреплять всё время практикой, то язык можно выучить за полгода-год примерно до того уровня, чтобы писать нормальный прод на нём.
Вообщем от Python/Rust/Go/Java не сильно отличается по затратам времени.

Про Мертвого Страуса — надеюсь это шутка?

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

Это один из самых простых языков. Классическая книжка по С от его создателей — en.m.wikipedia.org/...he_C_Programming_Language — читается за час, т.к. там всего 200 страниц простого в понимании текста.

Пробовали объяснить чем static int i; внутри функции отличается от того же самого снаружи функции? Что такое предпроцессор (по хорошему вообще отдельный язык программирования)? Зачем вообще нужны .h файлы?
Не. Не простой он и весьма.

Это один из самых простых языков. Классическая книжка по С от его создателей — en.m.wikipedia.org/...he_C_Programming_Language — читается за час, т.к. там всего 200 страниц простого в понимании текста.
А потом нужно ещё суметь забыть тот С и прочитать 550 страниц менйстримного груза: www.open-std.org/...2/wg14/www/docs/n1256.pdf

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

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

Почему Вы воспринимаете фундаментальное описание языка от его создателя в шутку ? Я ж не стандарт советую читать.
(почему я кормлю тролля ?)

Вот это шутка:

за месяц-два можно осилить Страуструпа и C++98
 Может, порекомендуете книжку, как изучить С++ за 21 день? s00.yaplakal.com/...original/3/3/6/252633.jpg

Не понял, почему «осилить книгу» у Вас ассоциируется с «выучить язык» ? Ещё раз:

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

Т.е. знает Джаву и С, но хочется странного?

Т.е. знает практически любой не эзотерический язык, которому обучают в школе/младших курсах университета. Pascal`а достаточно.

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

Джава образцово объектный язык. С — образцово процедурно-низкоуровневый. Современный С++ не дает ни портабельности С, ни защиты от дурака Джавы.
Поэтому не нужен. Кто займет нишу «многопоточный язык с объектами и прямым доступом к железу» остается открытым.

Джава образцово объектный язык
Очень спорное утверждение.
Современный С++ не дает ни портабельности С, ни защиты от дурака Джавы.
Тоже неправда. Как и миф о портабельности C или какой-то защите от дурака в Java. Всё зависит от умения пользоваться языком.
Как и миф о портабельности C
Это не миф. Это реальность. С С++ всё гораздо грустнее, я не понимаю этой тяги использовать самое всё новое и самое последнее в самой последней версии компилятора. У нас есть линейка сертифицированных компиляторов, за рамки которых выходить нельзя и есть сторонний продукт в исходниках, который использует всё самое новое, которое мы хрен скомпилим нашими компиляторами, которые может на год остают от апстрима. Всё, приехали.

ох эксперты подтянулись
а value types чо?

А может подождать 1.0?

можно не только обучаться языку, а и помогать его писать.

Хочеш холівару?

Го уже декілька років стабільний і обріс бібліотеками, а в Расті в ось-ось вийде перший стабільний реліз і ще немає бібліотек.

github.com/golang/go 6,909
github.com/rust-lang/rust 9,738

Принаймі до другого більше уваги.

Хочеш холівару?
Ну да, а то Java vs C# уже как-то не стартует, а тут два конкурирующих, молодых языка, самое время искать настоящих адептов культа.
github.com/golang/go 6,909
github.com/rust-lang/rust 9,738
Принаймі до другого більше уваги.
 go уже обогнал rust по количеству звезд на гитхабе — 25к vs 20k, если пройтись по этим ссылкам. Это говорит о том, что rust никому не нужен )

Раст круче. В го куча ошибок дизайна.

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

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

go
проблемы которые типа решать rust для меня не существуют- я системными вещами не занимаюсь вроде как

НУ так раст вполне Ок и для несистемного программисования. Из плюсов которые могут заинтересовать прикладного программиста — в языке отличный баланс фич.

я после scala осторожнее инвестирую свое время в языки

Раст более консервативный по сравнению с скалой. Основной его риск — он может не получить распространения, как какой нибудь Д.

работы небыло и нет в наших краях

таки сложнный язык а всем надо хyяк хyяк

Go тоже позиционируют как системный язык, замена Си.

Какой он системный с недоделанным стопворлд гарбадж коллектором. Тогда и джава — еще более системная.

Спустя два года go полностью излечился от этой болезни — STW паузы в GC сейчас не превышают для большинства программ 0.1 мс, т.е. в 1000 раз меньше, чем в среднем по jvm и .net.

Я писал реалтаймовую систему. Тоесть на ГО крутилась система, которая весьма жестко отслеживала все таймауты. С тормозами проблем не заметил (хорошо что я не знал что у ГО такие проблемы могут быть, я бы кучу времени на всякую фигню потратил.)

Лол, для джавы есть вообще stopless gc.
В случае ГЦ это известный компромис между его throughput и pause time. Можно пруфы про в 1000 раз меньше?

В go STW паузы не превышают 100 микросекунд в большинстве программ. Соответствующая выдержка из golang.org/doc/go1.8#gc :

Garbage collection pauses should be significantly shorter than they were in Go 1.7, usually under 100 microseconds and often as low as 10 microseconds

В java STW по умолчанию 200 миллисекунд, да и то это гарантируется только на маленьких хипах. Выдержка из www.oracle.com/...es/java/g1gc-1984535.html :


-XX:MaxGCPauseMillis=200

Sets a target value for desired maximum pause time. The default value is 200 milliseconds. The specified value does not adapt to your heap size.

Это все потому что как я уже сказал STW pause — это компромис между задержкой и throughput, в джаве логично сделали компромис в 100мс, который не критичен для 99% програм. Но его можно поменять.

Я могу написать на расте интерпретатор который за 100 микросекунд факториал посчитает небольшой. Например принять решение о сделке на бирже. Получается не все приложения даже на Го можна написать, не то, что системные вещи.

Go не замена Си. Ни в коей мере!!! На нем в принципе не написать модуль/драйвер в ядро, его не прилинковать к чему-то необычному. Из Ассемблера можно вызвать Сишную функцию, и даже С++ (сложнее, но не через задницу), с Го, не прокатит. Это язык очень высокого уровня, или это скорее недо-операционка поверх операционки. На нем можно афигеннийшую цифродробилку написать, для моделирования ядерной бомбы, или эти ваши нейронные сети, с бакендом просто по умолчанию все ок.

не пойму с какого хрена народ так на него кинулся.
«Given enough thrust, pigs fly». Гугль его очень мощно толкает. Несмотря на недостатки.

ок еще одна победа тяги над аэродинамикой, согласен
странно что они dart так быстро слили при таких то ресурсах

просто они решили пока продвигать Го, загнется Го — попробуют еще раз протолкнуть Дарт))

да они GoScript замутят тогда
там похоже критическая концентрация упоротых и много денег на их развлечение

Неее гугл стиль это по новой повелосипедить

а еще есть Gopher.js ( www.gopherjs.org , компилятор из го в джаваскрипт), так что возможно это гугл его и навелосипедил как GoScript уже (хотя кто именно написал гоферджс — не знаю, может и не гугловские разрабы).

Толкает в смысле рекламирует что ли? Пример «толкания» гуглом ну кроме разве что поддержки в Appengine?

уход от эксепшнов, но при этом не добавили классных средств по обработке ретурн кодов как в расте
Це спочатку дістає.
Потім, як звик, то мови з ексепшнами стають стрьомними: читаєш, і не знаєш, де там що може вискочить.
нету наследования
Є воно, може хоч трохе інакше.
странные мапы
Шо там дивного? мапи як мапи.
и странный оператор make
Шо там дивного? [2]
странный не сиподобный синтаксис
ой, та не так же він й відрізняється від сішки.
засунутые в язык зачем то средства многопоточности.
тому що горутини та канали — це основна мякотка рантайму гошного: можливість дешево спавнить сотні тисяч процесів, які безгеморойно взаємодіють між собою.
Це спочатку дістає.
Потім, як звик, то мови з ексепшнами стають стрьомними: читаєш, і не знаєш, де там що може вискочить.
Я же написал, отсуствие эксепшнов еще можно пережить, но нету клевых средств обработке кодов как в раст, поэтому 50% го кода, это констукции вида: if err != nil return err
Є воно, може хоч трохе інакше.
Его нету, не трынди
Шо там дивного? мапи як мапи.
Ну вот у нас на работе одна утилитка от этого страдает: github.com/golang/go/issues/9477
Шо там дивного? [2]
А зачем он нужен при живом операторе new?
ой, та не так же він й відрізняється від сішки.
Отличается, зачем так сделали непонятно, наверное опять что бы программисты побольше мозг ломали
тому що горутини та канали — це основна мякотка рантайму гошного: можливість дешево спавнить сотні тисяч процесів, які безгеморойно взаємодіють між собою.
Такая мякота есть где хочешь, зачем делать это частью языка а не опциональной библиотекой — непонятно
поэтому 50% го кода, это констукции вида: if err != nil return err
Обожемій, зайві три рядки які заплутують код та роблять програму баганою!
Его нету, не трынди
Якщо ти розумієш під наслідуванням лише “жавове extends” та забористі ієрархії класів, то в мене для тебе погані новини.
Ну вот у нас на работе одна утилитка от этого страдает: github.com/golang/go/issues/9477
Так це тимчасові проблеми рантайму, а не дизайну. Ти ж не починаєш бикувать на джаву, через те що там сортування багане?
А зачем он нужен при живом операторе new?
Тому що new тільки й робить, що аллокує пам’ять під структуру.
А при створенні вбудованих типів треба проробить ще певну ініціалізацію.
наверное опять что бы программисты побольше мозг ломали
Як на мене, це для трейні характерно “о боже, в цій мові тип не ліворуч, а праворуч”.
Такая мякота есть где хочешь, зачем делать это частью языка а не опциональной библиотекой — непонятно
Настільки дешевих в плані ресурсів — далеко не де хочеш.
Обожемій, зайві три рядки які заплутують код та роблять програму баганою!
Это меня еще по Си задрало, в Го я надеялся на какое-то “чудо”.
Тому що new тільки й робить, що аллокує пам’ять під структуру.
А при створенні вбудованих типів треба проробить ще певну ініціалізацію.
А бывают ситуации когда инициализацию делать не надо?
“о боже, в цій мові тип не ліворуч, а праворуч”
Я когда это первый раз увидел, просто охренел))) Меня еще большие и маленькие буквы убили просто наповал, с одной стороны названия переменных это индивидуально, с другой стороны вносит некоторое единообразие.
Обожемій, зайві три рядки які заплутують код та роблять програму баганою!
Только это нужно тулить после каждого вызова фунцкии, что увеличивает код в 4 раза, и не дает возможности композиции вызовов функций вроде f(f1, f2); что еще может увеличить количество кода в несколько раз. А терь вопрос: нахера оно надо? Почему не осилили сделать как в расте?
Якщо ти розумієш під наслідуванням лише “жавове extends” та забористі ієрархії класів, то в мене для тебе погані новини.
Та нет, это у меня для тебя есть плохие новости.
Так це тимчасові проблеми рантайму, а не дизайну.
Вига се тимчасови, язык уже 6 лет живет с тормозящими мапами

Ти ж не починаєш бикувать на джаву, через те що там сортування багане?
Началось время охренительных историй
ому що new тільки й робить, що аллокує пам’ять під структуру.
А при створенні вбудованих типів треба проробить ще певну ініціалізацію.
Какую такую инициализацию? Как все другие языки обходятся без мейка?
Як на мене, це для трейні характерно “о боже, в цій мові тип не ліворуч, а праворуч”.
Как для меня это для людей недалекого ума характерно религиозно не замечать очевидных недостатков
Настільки дешевих в плані ресурсів — далеко не де хочеш.
Но почти везде

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

нету наследования
зато нету protected методов, с которыми у меня возникали затруднения
странные мапы
лично меня отсутствие списков напрягает
и странный оператор make
да, немного есть, в языке присутствует new и make, которые, как я понял, делают одно и тоже, но оба присутствуют. Создается такое чувство что сначала был new, затем решили реализовать инициализацию и добавили make
странный не сиподобный синтаксис
Мне, как практикующему сишнику, синтаксис приятен, не возникает никаких неприятных ощущений, которые возникали когда учил пайтон.
Дженерики то такое, встречал С++ код когда функцию принимала шаблон, в котором был еще шаблон и в нем еще один шаблон. Т.е. там только описание функции 7 строчек занимало, я уже молчу про то чтоб понять что эта функция делает.
И поэтому дженерики не нужны? В твоем случае чел мог сделать промежуточные типы, и параметр функции имел бы приятный читаемый вид.
зато нету protected методов, с которыми у меня возникали затруднения
Мне тяжело понять суть твоих затруднений.
лично меня отсутствие списков напрягает
А еще множеств, и вообще сравнивая с датаструктурами из стандартной библиотеки джавы го убог чуть более чем полностью.
Мне, как практикующему сишнику, синтаксис приятен, не возникает никаких неприятных ощущений, которые возникали когда учил пайтон.
Но синтаксис наверное бы был более приятным если был такой как у си? В чем уберфишка гошного синтаксиса, кроме того что это еще один пункт выворачивающий мозг?
И поэтому дженерики не нужны?
Я считаю что дженерики это удобно, но не критично.
Но синтаксис наверное бы был более приятным если был такой как у си?
Да, но у раста синтаксис одинаково далек от сишного.
Я считаю что дженерики это удобно, но не критично.
В той же мере как и статическая типизация вообще не критична для каких то питон и джс программистов
Да, но у раста синтаксис одинаково далек от сишного.
Та нет, главная непохожесть го это шиворот на выворот в паре переменная тип, у раста с этим все Ок, везде взят за основу цпп синтаксис, а непохожести можно рационально обьяснить в отличии от.

Это все слишком субъективно.

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

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

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

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

при том что если бы я выбирал го или раст — выбрал бы го.

Гоу. Тому що код читається набагато більше часу, ніж пишеться, зазвичай іншими людьми а не одним автором. Тому простота рулить, навіть якщо фіч менше.
А то напишуть на фічастій мові однострочників, а ти сиди розбирай ту перловку.

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

Тим, що го привчає прописувать купу штук явним чином. Т.є. те, що на фічастій мові типу расту так і чешуться руки записать коротко і ясно (для автора, лол), на го треба розжовувать на кільканадцять рядків.

Какие именно фичи, пример в студию!

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

интересно, много ли людей на нем пишут...

Однозначно круче — Haskell ))

P.S. По сабжу — а разница между изучением nighty и beta-версиями? просто интересно)

rustlang потрібно шукати. На запит go теж видає якусь китайську гру. Тому шукають golang

Отличную игру, кстати!

А можно для очень далеких от темы, какова область применения Rust’a и чем он хорош?

P.S. Да у меня есть гугл, и да мне лень им воспользоваться.

Нативно комилируемый язык общего назначения. Ниша C++ приблизительно.
D, Go, Rust, Nim, ну и C++17 в некотором смысле — это всё попытки заменить C++ чем-то более логичным-надёжным-быстрым-современным.

Что только люди не делают, чтобы не учить OCaml!

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

Подписаться на комментарии