Доступен (http://blog.rust-lang.org/2016/03/02/Rust-1.7.html) релиз языка программирования Rust 1.7 (http://www.rust-lang.org), развиваемого проектом Mozilla, обеспечивающего автоматическое управление памятью и предоставляющего средства для высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime. Параллельно с Rust совместно с компанией Samsung развивается экспериментальный браузерный движок Servo (https://www.opennet.me/opennews/art.shtml?num=36576), написанный (https://github.com/servo/servo/) на языке Rust и отличающийся поддержкой многопоточного рендеринга web-страниц и распараллеливанием операций с DOM (Document Object Model).
В новом выпуске основное внимание было уделено стабилизации библиотек - около 40 функций и методов (https://github.com/rust-lang/rust/blob/stable/RELEASES.md#ve...) переведены в разряд стабильных. В том числе стабилизирован новый API, позволяющий использовать собственные алгоритмы хеширования в типе HashMap. Ранее допускалось использование только алгоритма SipHash, который слишком медленный при использовании ключей небольшого размера. В Rust 1.7 разработчики могут подключить алгоритм FNV, что значительно ускорит работу с мелкими ключами, но приведёт к потере защиты от DoS-атак через подстановку большого числа значений, вызывающих коллизии.Из других улучшений отмечается добавление вызова clone_from_slice() для эффективного копирования данных из одного слайса в другой, реализация порции методов проверки IP-адресов (например, Ipv4Addr::is_loopback или Ipv6Addr::is_multicast), различные улучшения в CString, новые операторы для числовых типов (например, i32::saturating_mul, i32::overflowing_add, i32::checked_rem). Сборочные скрипты улучшены для информирования пакетного менеджера Cargo о зависимостях. В команду "cargo rustc" добавлена возможность указания профилей, охватывающих используемые только при разработке зависимости, например, необходимые для проведения тестирования.
Напомним, что язык Rust сфокусирован на безопасной работе с памятью и обеспечении высокого параллелизма выполнения заданий. При этом Rust обходится без использования сборщика мусора или runtime, что делает возможным создания на Rust библиотек, которые могут выступать в роли прозрачной замены библиотекам для языка Си. Для распространения библиотек на языке Rust, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo (http://blog.rust-lang.org/2014/11/20/Cargo.html), позволяющий получить нужные для программы библиотеки в один клик. Для размещения библиотек введён в строй репозиторий crates.io (https://crates.io/).
По структуре язык Rust напоминает C++, но существенно отличается в некоторых деталях реализации синтаксиса и семантики. Автоматическое управление памятью избавляет разработчика от манипулирования указателями и защищает от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Rust поддерживает смесь императивных процедурных и объектно-ориентированных методов с такими парадигмами, как функциональное программирование и модель акторов, а также обобщённое программирование и метапрограммирование, в статических и динамических стилях.
URL: http://blog.rust-lang.org/2016/03/02/Rust-1.7.html
Новость: http://www.opennet.me/opennews/art.shtml?num=43985
>1.7
>основное внимание было уделено стабилизации библиотек
И..? в отличии от Go релизы выходят в 6 недельном цыкле.
И имеется ввиду стабилизация ранее "нестабильных конструкций", изменения которых никто не гарантировал.Хороший подход при обкатке новых решений.
"цикле"
>в отличии... ввиду...Неужели кроме "цыкла" ничего не насторожило?
если цель догнать по нумерации firefox то пойдёт, молодци
"молодцы" :D
Каким же образом? Более чем за полгода до второй версии даже не добрались ))
>DOMMake C not Rust! Rust go DOM!
>>DOM
>Rust go DOM!Ты и аглицкого не знаешь? :)) //Раст проигрывает вчистую русскому и английскому в новости про себя. Обсудим суахили -- это интересно!
Rust проигрывает вчистую в этой теме
Rust hupoteza kabisa katika mada hii
錆は完全にこのトピックで失われます
拉斯特将彻底本主题丢失
કાટ સંપૂર્ણપણે આ વિષય ખોવાઈ જશે
Извини, шутить ещё более плоско и очевидно, так чтобы даже ты понял, я не хочу.
https://en.wikipedia.org/wiki/Make_love,_not_war
https://en.wiktionary.org/wiki/Yankee_go_home
> Извини, шутить ещё более плоско и очевидно, так чтобы даже ты понял,
> я не хочу.Ах, не обижайся, а то ж я сам заплачу. Да, не все шекспира в оригинале по памяти, некоторым недоразвитым и разжёвывать надо
Rustie go DOMe
а то go DOM без yourself-а не попадает в шаблон.
> Rustie go DOMeИ то у меня сомнения насчёт, не Rusties ли или Rustees. Rusti не.
>> Rustie go DOMe
> И то у меня сомнения насчёт, не Rusties ли или Rustees. Rusti
> не.Rustaceans)
"напоминает C++, но существенно отличается в некоторых деталях реализации синтаксиса и семантики."
ну почему чтобы пользоваться чем-то новым и хорошим я должен изучать новый синтаксис и портировать старый код?
у меня есть личная жизнь. и я бы изучал, что-то поумнее нового синтаксиса.
c++, java и c# взлетели возможно еще потому что синтаксис близок к C и всем знаком.
Если ты знаешь синтаксис C++ и синтаксис Ruby, то синтаксис Rust не будет для тебя большой проблемой. А вообще, синтаксис языка не так уж и важен, гораздо важнее семантика. Перейти на язык с другим синтаксисом - не такая большая проблема по сравнению с переходом на язык с другой семантикой.
...
>> c++, java и c# взлетели возможно еще потому что синтаксис близок к C и всем знаком.
> Если ты знаешь синтаксис C++ и синтаксис Ruby, то синтаксис Rust не
> будет для тебя большой проблемой. А вообще, синтаксис языка не так
> уж и важен, гораздо важнее семантика. Перейти на язык с другим
> синтаксисом - не такая большая проблема по сравнению с переходом на
> язык с другой семантикой.Только "лишнее" время тратить - чтобы напрягаться лишний раз и т.д. - нафикк..
ИМО, камрад пару постами раньше - правильно все изложил.
Все "фичи" - уничтожили синтаксисом (не подходящим для целевой аудитории) - imo, будет rust "барахтаться" в своей маргинальной нише.
Совершенно верно.Со временем студенты с горящими глазами обнаружат, что слоган "защищенный язык защищает от ошибок" - совершенно не спасает от обычных ляпов обычного кода и убегут в.
А серьезные люди так и не придут, потому что преимуществ перед грамотным использованием boost, STL, Qt - накаких. За прямыми конкурентами (Swift, Go) - стоят деньги, среды разработки, библиотеки, нормальная документация.
А перед Java, Scala, Kotlin, С# - Rust это вырвиглазные головоломки, без преимуществ по скорости, т.к. проверки сьедают преимущества от нативности, без фреймворка, без среды.
А для души есть D.
Кому как.
На работе Ява, "для души" и интереса пока Rust. На Rust-форумах так же есть европейцы джависты которые пишут на Ruste.А энтерпрайс это дело наживное. Там, где важна скорость, на него обратят внимание. Высокочастотный трейдинг это та самая ниша куда он подойдет.
> Кому как.
> На работе Ява, "для души" и интереса пока Rust. На Rust-форумах так
> же есть европейцы джависты которые пишут на Ruste.
> А энтерпрайс это дело наживное. Там, где важна скорость, на него обратят
> внимание. Высокочастотный трейдинг это та самая ниша куда он подойдет.Угу, наживное(ядовито ухмыляясь), где-то год-другой назад зазывали на проект - на новом иновационном языке Rust еще 0.9 версия(если память не подводит), по портингу с С.
Ну как обычно, незнамо кто из троицы TL, SA или PM "обкурились" рекламных проспектов,
и давай "модернизец" хипстерский двигать в массы... (прошу не принимать на свой счет).Так эти архаровцы (из rust) - не "асилили" выложить пакеты ни под один из mainstream дистрибутивов (deb, rpm, etc.)...
Итогец:
- ночная сборка (на то время 0.9) на виртуалке U14.04 не завелась
- из морально-спортивных соображений - удалось запустить только то ли 0.8, то ли 0.7
- после часового интернетинга, включаяя наглосаксонский сегмент, "зазыватели" получили конкрентый отлуп, с описанием целого ряда факторов и ссылкой на более компетентных кaмрадов
- главный вывод отправленный "зазывателям" до bloody Enterprise Rust`y еще 5-7 лет прокачиваться
Между версиями 0.9 и текущей 1.7 огромная разница:* Производительность увеличилась в разы.
* В дистрибутивах linux уже есть пакеты Rust и его собственного пакет-менеджера - cargo.
* Количество приложений в репозитории (~4300) уже позволяет найти что-то готовое.
* Сообщения компилятора о том что не так во многом более понятны и зачастую идут с описанием что требуется изменить.
без тени сарказма,> Между версиями 0.9 и текущей 1.7 огромная разница:
это понятно, даже по цифрам,
> * Производительность увеличилась в разы.
надо приводить цифры, и по конкрентым задачам "интерсеным" для ЦА
> * В дистрибутивах linux уже есть пакеты Rust и его собственного пакет-менеджера
штатные ср-ва скажем 2 из N mainstream(в смысле LTS, BIN-based) дистрибутивов ?
- без левых репов
- без возни со сборкой
- как крайний вариант ШТАТНЫЕ пакеты для 2-3 distr. из mainstream с ОФИЦИАЛЬНОГО сайтаU14.04 - нет, даже ни в одной из секций: multiverse, universe
RhEl 7.x - под рукой нет, проверить не могу - но более чем уверен в той же ситуации как в U14.04итого,
надо Rust & co заниматься серьезным продвижением в mainstream дистрибутивы & OS
думается, одним из признаков зрелости Rust => будет появление в mainstreamвсе, ушел из этой темы
P.S.:
Немного юмора на десерт,
откуда-то из сети, языки можно проставить/заменить по своему усмотрению:"кто-нибудь видел скалу в настоящем ентерпрайзе? гиков которые готовы писать на чем угодно типа кложуре, лишь бы не жаба -- не в счет, много шума и понтов, мало черной икры на завтрак.
скалу учил, но за деньги не писал, сложилось впечатление что это кложуре дубль два - падение камнем вниз. как говорят: решает несуществующую проблему.
на кложуре писал, неудивительно что не взлетело."
Да, грамотное использование защищает от ошибок в с++, поэтому с этой точки зрения нет никакого смысла переходить на Rust. Но есть другой момент, который в c++ так и не решен: http://www.gamedev.ru/flame/forum/?id=156989
Со временем ПО на Rust обойдет по производительности с++, и с этим пока вроде как ничего не планируется делать
> http://www.gamedev.ru/flame/forum/?id=156989Тем временем растоманы предлагают использовать вектор.
И? В Rust нет этой проблемы
А кто будет проверять что использование boost, STL грамотное? например для мультипоточного приложения?Самый опытный сотрудник? или статические анализаторы за 5k долларов? а если и они что-то пропустят, что делать?
Зачем проверять? Просто пиши грамотно и не будет никаких проблем, вот и всё. Если пишешь неграмотно, возникают ошибки, - это твои проблемы, а не проблемы языка. Как было сказано, Qt, boost, stl и с++11 уже предоставили возможность писать полностью безопасный код в плане работы с памятью и вообще, а пользоваться этим или нет - личное дело каждого программиста.
это опять же проблема человеческой ошибки, и тот факт что софт её не словит - уже потенциальная ошибка.Представь обычный проект - уже работает группа программистов. нужны ещё.
берут нового, который проходит все тестовые испытания, но где гарантия что именно его код при мерже не завалит проект?- код-ревью, не всегда помогает (нужный профессионал в отпуске, устал и так замержил - чел.ошибка)
- писать суперпродвинутые тесты, покрывающие, возможные баги при мультипоточном исполнении - это + отдельный профессионал со знаем такой специфики.
- использование статических анализаторов - это деньги на покупку освоение и подписку обновления.Здесь, потенциально, выигрышно и смотрится Rust - компилятор не даст собрать ошибочный("не грамотный код") - это своего рода бесплатный статический анализатор кода, с бесплатными обновлениями который хочешь, не хочешь будет проверять код перед тем как сделать бинарник. Причем у этого статического анализатора ОЧЕНЬ большая юзербаза и очень продвинутые ключевые разработчики.
...> Здесь, потенциально, выигрышно и смотрится Rust - компилятор не даст собрать ошибочный("не
> грамотный код") - это своего рода бесплатный статический анализатор кода, с
> бесплатными обновлениями который хочешь, не хочешь будет проверять код перед тем
> как сделать бинарник. Причем у этого статического анализатора ОЧЕНЬ большая юзербаза
> и очень продвинутые ключевые разработчики.цифры можно привести,
по поводу мощности множеств:
"ОЧЕНЬ большая юзербаза" и "очень продвинутые ключевые разработчики"
vs
something else (gcc, clang, vs, etc..)
тут поясню что сравнивал аудиторию разработчиков статических анализаторов, многие из которых с закрытыми исходниками.
(соовт. возможно имеют меньший фидбек)
например: PVS-Studio или Contemplate ThreadSafe для JavaКомпиляторы не проверяют возможные рейскондишены, threadsafety,... Либо не могут проверить все нюансы без подключения анализаторов. Которые являются опциональными и поэтому им может быть не проверена какая-то библиотека скомпилированная кем либо другим, к которой вы линкуетесь динамически.
> Зачем проверять? Просто пиши грамотно и не будет никаких проблем, вот ипотому-то ынтерпрайз и выбирает жабу, что не все могут просто так взять и писать правильно, а жаба, она, сцуко, педантичная до идиотизма.
По этой же причине может взлететь и раст - как выбор руководителя проекта, а не как выбор одного программера под хэллоуворлд для "души".
у Вас какое-то явно идеалистическое представление о "жабе", "правильности" и "энтерпрайсе" )даже не беря в расчет всеми известный NullPointerExeption
Жаба вполне позволяет писать неправильный (о чем-то можно узнать в рантайме) и не производительный код.
Скажем так, жаба хотя бы пытается, это если сравнивать с тем же це. Нисколько её не идеализирую, но что есть, то есть.
>т.к. проверки сьедают преимущества от нативности, без фреймворка, без среды.какие такие проверки?
> Rust это вырвиглазные головоломки,ок, не осилил, бывает
> без преимуществ по скоростипруф?
> проверки сьедают преимущества от нативностикакие проверки? На этапе компиляции-то? Что они у тебя отЬели, болезный наш?
> А для души есть D.ничего не имею против душевности данного языка, вот только, если уж сравнивать по вышеприведённым критериям, безопасность работы с памятью в нём как раз достигается сборщиком мусора, который, как раз,
> сЬедает преимущества от нативности
И чем же похожи? Код портировать придётся всё равно. Ведь даже C# или Java не содержит некоторых конструкций из C типа указателей.
Ерунда, это только кажется. Один вечер почитать мануал - сразу все понятно становится (синтаксис). Это вам не перл.Как программист вообще может бояться синтаксиса? Ведь абстракции предметной области переложенные в код - это тоже, своего рода, особый синтаксис, с этим и приходится работать.
Раст - это вам не питон-пхп. Он, действительно, близок к С по духу, как оказывается, хоть я и был по-началу скептически настроен. В отличие от Go, например.
Есть хх тыщ строк кода.
Кому и зачем их переписывать на русте?
Никому и незачем. На Rust можно писать новый функционал в виде отдельной библиотеки, благо он прекрасно линкуется с существующими наработками.
> ну почему чтобы пользоваться чем-то новым и хорошим я должен изучать новый
> синтаксис и портировать старый код?потому что если у нового и хорошего всё тоже самое - это не настолько новое и возможно не сильно-то хорошее?
>> ну почему чтобы пользоваться чем-то новым и хорошим я должен изучать новый
>> синтаксис и портировать старый код?
> потому что если у нового и хорошего всё тоже самое - это
> не настолько новое и возможно не сильно-то хорошее?Как бы на пальцах объяснить:
представьте лево- и право- стороннеe движение - вроде и ПДД простые, и навыки - а профи все-таки будут сильно материться......не можно еще две машины с разными рулями купить - но вот зачем ?
> почему чтобы пользоваться чем-то новым и хорошим я должен изучать новый синтаксис и портировать старый код?Вы никому ничего не должны. И, кстати, вас никто не заставляет. Или вы ждёте, что вас сейчас кто-нибудь будет уговаривать потратить своё время на Rust, а вы будете тут ломаться, прям как в первый раз?
> Увидеть свет может только что-то одушевлённое. ПО — это неодушевлённое.идиомы, оксюмороны - нее, не слышал? :D
> обеспечивающего автоматическое управление памятью и ..., при этом обходясь без использования сборщика мусора и runtime.Взаимоисключающие параграфы.
только при условии, что GC - единственный способ автоматического управления памятью
200 лет назад, сеть "открытые берестяные рассылки":
>> cамокатная повозка, обеспечивающая высокую скорость передвижения и ..., при этом обходясь без использования лошадей и овса!
> Взаимоисключающие параграфы.Ну, вон берем тот же Си, урезаем до безобразия и разрешаем только локальные переменные в стеке.
Получаем вполне сферически-рабочее "автоматическое управление памятью и ..., при этом обходясь без использования сборщика мусора и runtime.".
Чешем репу и пользуемся тем, что железки со времен тех 70тых таки стали в -цать раз мощнее, разрешаем маллок, прикручиваем анализатор времени жизни переменной, который в нужных местах вставляет фри, спотыкаемся о алиазинг и еще кучу граблей, приделываем владения, шлифуем ... и получаем через пару лет что-то типа раста.
В общем, почти никакой магии.
Если впрямую - скорее получаем что-то вроде свифта
> Если впрямую - скорее получаем что-то вроде свифтаДля виндохипстеров из мозиллы js то слишком сложный, а ты про что-то еще.
> прикручиваем анализатор времени жизни переменной, который в нужных местах вставляет фриЭтот ваш анализатор и есть GC.
И да, без рантайма все это будет сферический конь в вакууме делать?
>> прикручиваем анализатор времени жизни переменной, который в нужных местах вставляет фри
> Этот ваш анализатор и есть GC.Неверно, попытаюсь изложить свое мнение,
грубо говоря - компилер сам расстaвляет malloc/free (new/delete) во время компиляции.
> во время компиляции.Понял, классная штука.
> Этот ваш анализатор и есть GC.К компилятору, а не рантайму – поэтому и "вставляет free" а не "делает free".
А то ведь и разработчика можно так вот двусмысленно "Сборщиком Мусора" обозвать )Тут проблема скорее в том, что просто расставить free маловато будет, нужно еще не допустить "use after free" и т.д. на уровне языка. Да и некоторые ограничения все равно будут "by design" (возможно, типа хитрых циклических конструктов).
В общем, сама по себе идея интересная.
> без рантайма все это будет сферический конь в вакууме делать?
Гм, у вас malloc/free уже без рантайма работает? )
> 200 лет назад, сеть "открытые берестяные рассылки":
> приделываем владенияЕщё вот это не забудь приделать
https://doc.rust-lang.org/book/traits.html
фактически он и получится.
Все стеснялся спросить: а в продакшне Rust уже используется где-нибудь, или он пока еще только готовится "выстрелить"?
Используется.
Я уже 3 год слышу о браузере на движке Серво, который на Раст, но как его похупать?????
Все, кто хотел, давно уже "похупали", делай выводы =)
И да, начать процесс стоит отсюда https://github.com/servo/servo
Любой язык использующий препроцессор, макросы - синтаксически устарел. Устарел именно эргономически, не по функционалу. Rust родился синтаксически устаревшим.
чем, в плане эргономики, макросы мешают?
Резким снижением понимаемости кода. По сути применяя макросы каждый программер создаёт свой подъязык, подсинтаксис, который и сам вскоре забудет. Текст становится шифром. Макросы, препроцессор ещё оправданы как-то для ассемблеров, но никак не для ЯВУ и без того имеющих средства структурирования, свёртывания кода. Макросы в языках высокого уровня- инетность мышления, анахронизм.
Тут я с Вами в чем-то согласен.
Но в Rust пока макросы не столь всемогущи как C++, и потому компилятор даст только ограниченную возможность их использования/расширения.Тут так же можно сравнить ситуацию с метапрогроммированием в динамических языках, где возможно до неузнаваемости изменить код и то что он делает, что зачастую затрудняет понимание кода.
Тут всё ограничивается насколько это пойдёт в массы разработчиков библиотек. Если судить по Python и его репозиторию к примеру, то подавляющее количество комиттеров библиотек не злоупотребляют имеющейся возможностями, соответственно код остается привычным и читаемым.
> Резким снижением понимаемости кода. По сути применяя макросы каждый программер создаёт
> свой подъязык, подсинтаксис, который и сам вскоре забудет.С другой стороны, это позволяет адаптировать язык к той или иной проблематике. Если бы в драйверах устройств все битовые операции с регистрами устройств записывались так как они реально выглядят в понимании компилятора - ты бы вообще без драйверов остался.
Очередной "я у мамы computer scientist".
Нюансы работы с mut ссылками выглядят немного долбанутыми с непривычки.
Исключений так и нет? Значит зaкaпывайте. Ублюдcкий try! на каждой строчке пусть oбeзьяны пишут.
а что вы предлагаете вместо "try!" ?https://doc.rust-lang.org/nightly/std/macro.try!.html
он же по сути сокращает конструкцию match возвращая Result или Error и выступает аналогом try в той же джаве.
или Вы хотите один раз написать "try" а все варианты catch писать на разные методы/функции:try {
lines = Files.readAllLines(Paths.get("/to/my/file.txt"));
SomeWorker.someWork(lines);
}
catch (IOException e) {
}
catch (SomeOtherException e) {
}
в тему исключений, try и "?":
https://www.reddit.com/r/rust/comments/49i43m/initial_implem.../