LINUX.ORG.RU
ФорумTalks

Как там этот rust поживает?

 ,


0

4

Может уже кто на него смотрел? Что оно такое вообще? На что похоже, для чего подходит, для чего нет?

Может кто уже что пытался на нём писать? Поделитесь впечатлениями, пожалуйста.

Заранее благодарю за интересные коменты.

Что оно такое вообще?

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

На что похоже

На Си, который сделали люди, получившие образование в 90-х.

tailgunner ★★★★★
()

поживает так, что даже хороший срач на ЛОРе не получится.
А всё уже обсудили в предидущих сериях.

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

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

По моему мнению - ЯП общего назначения.
Слишком много различных парадигм и любопытных фич, чтобы rust мог претендовать только на нишу системного программирования.

ps
Возможно мы просто по разному понимаем термин.

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

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

По моему мнению - ЯП общего назначения.

Тогда твое мнение не совпадает с мнением разрабов.

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

Реальность такова, что новый язык общего назначения вынужден быть managed (или хотя бы легко интегрироваться с managed-кодом). Фишки же Rust специально ориентированы на работу в нативе и даже на голом железе (без ОС). Может быть в будущем...

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

Наличие unsafe указателей все-же не делает язык системным.

А где можно прочитать мнение разработчиков об этом?

grim ★★☆☆
()

на HN был пост, что портировали rust для ардуино. значит, живет как-то. я, правда, ни разу не смотрел, что же там такое внутри. очень уж синтаксис его запугал :-)

сам пост https://news.ycombinator.com/item?id=6268291

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

Да фиговина какая-то. Тест на нормальный полиморфизм он с треском провалил.

Miguel ★★★★★
()

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

cdshines ★★★★★
()

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

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

А где можно прочитать мнение разработчиков об этом?

Да там особо нечего читать - они упоминают это как-то походя. В блогах, интервью, листе рассылки. Например, http://www.infoq.com/news/2012/08/Interview-Rust или http://pcwalton.github.io/blog/2013/06/02/removing-garbage-collection-from-th...

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

Закопайте.
Кульхацкеры в реальной жизни не нужны.

Жабке пригорело?

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

Пока они делают интересные вещи и получают нормальные деньги, вы можете продолжать говнокодить за еду.

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

Где, когда, и почему это плохо?

В ихнем трэкере. Несколько месяцев назад.

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

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

Other features from Haskell, such as higher-kinded polymorphism, are not supported.

Угу. А всё почему? Потому что кто-то решил, что темплейты — хороший способ реализовывать дженерики.

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

Где, когда, и почему это плохо?

В ихнем трэкере.

«Вот уж послал так послал» (ц)

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

Естественно. Rust - это не низкоуровневый Хаскель, а высокоуровневый Си.

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

«Вот уж послал так послал»

Да я проверил на нём свою стандартную задачку с двумя последовательностями.

Rust - это не низкоуровневый Хаскель, а высокоуровневый Си.

Скорее, высокоуровневый C++.

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

Да я проверил на нём свою стандартную задачку с двумя последовательностями.

То есть «проваленный тест на нормальный полиморфизм» - это твоя задачка? А я уж думал, там что-то серьезное...

Скорее, высокоуровневый C++.

Чепуха.

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

То есть «проваленный тест на нормальный полиморфизм» - это твоя задачка?

Задачка — это тест. Именно на это самое.

Чепуха.

Нет. Темплейты-то таки есть.

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

Задачка — это тест

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

Скорее, высокоуровневый C++.

Чепуха.

Нет.

Таки да.

Темплейты-то таки есть.

И что? Они есть начиная с CLU - десяток экспериментальных языков из 70-х, Ада, как минимум некоторые реализации ML. Впрочем, конечно, можно это всё назвать «высокоуровневым Си++».

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

Темплейты-то таки есть.

И что?

И то, что это ближе к плюсам, чем к си.

Темплейты - это же макросы, не? Впрочем, если вывод «Rust - это высокоуровневый Си++» сделан из наличия «темплейтов» в Rust, okay.

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

Скорее, высокоуровневый C++.

Высокоуровневости по сравнению с крестами оно не добавляет. За то оно гораздо безопаснее крестов, изначально заточено на многопоточность, и (я молюсь об этом) несколько менее хаотично.

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

Скорее, высокоуровневый C++.

Чепуха.

Почему же? С++ по сравнению с Си добавляет всего две существенные вещи:
1. Синтаксический сахар вокруг наследования-полиморфизма-инкапсуляции. Не будь сахара, можно было бы на чистом Си писать аналогичные конструкции, просто было бы адски громоздко.
2. Систему метапрограммирования, основанную на шаблонах и разрешении перегруженных имен. Причем степень адекватности используемых механизмов по отношению к решаемой задаче можно сравнить с удалением гланд через задницу; Страуструп и сам не догадывался, что люди _таким_ извращенным способом вывернут систему типов и шаблонов.

Механика для сладких наследования-полиморфизма-инкапсуляции присутствует в Rust в полном объеме.

Для метапрограммирования наверняка тоже что-то есть (вон Miguel напирает на шаблоны).

Единственное, что не позволяет обозвать Rust убийцей крестов — это отсуствие обратной совместимости с чистым Си. Если Rust сможет убить чистый Си, то он автоматом получит и аудиторию С++.

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

Почему же?

Потому что:

Manhunt> Высокоуровневости по сравнению с крестами оно не добавляет

С++ по сравнению с Си добавляет всего две существенные вещи:

Всё, что Си++ добавляет, он добавляет к Си. На этом сравнение Си++ с Rust можно закончить.

Механика для сладких наследования-полиморфизма-инкапсуляции присутствует в Rust в полном объеме.

Для метапрограммирования наверняка тоже что-то есть (вон Miguel напирает на шаблоны).

Замечательная логика. Ocaml тебе тоже «высокоуровневый Си++»? Ада?

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

Наследование с проверкой типов в си не сделаешь никак.

А в плюсах есть ещё и исключения, которым longjmp тоже не замена.

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

Не забывай про raii. Я думаю, оно должно быть на первом месте.

У raii два аспекта:
1. С raii сложнее забыть об инициализации и освобождении ресурсов. Отличный сахар в сравнении с Си-шной идиомой «goto cleanup», да и жабка со своей сборкой мусора в пролёте.
2. Raii жизненно необходимо для плюсовых exceptions. Крайне удобная альтернатива Си-шным setjmp/longjmp и жабским finally/ensure.

Соглашусь, что оба аспекта существенны. Как бы там ни было, Rust умеет в raii.

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

Замечательная логика. Ocaml тебе тоже «высокоуровневый Си++»? Ада?

Ключевое и определяющее свойство C++ — это то, что он является zero overhead расширением Си. Чтобы обзывать какой-либо язык словом «C++», этот язык должен обладать тем же самым свойством: zore-overhead расширять Си или преемника Си.

Если говорить о том, каким именно образом C++ расширяет Си, то в Rust расширять уже нечего: он и так обладает сравнимыми с C++ возможностями.

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

Ключевое и определяющее свойство C++ — это то, что он является zero overhead расширением Си. Чтобы обзывать какой-либо язык словом «C++», этот язык должен обладать тем же самым свойством

Rust им не обладает, так что называть Rust «$WHATEVER Си++» причин нет.

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

Ждем подробного сравнения с Go

https://github.com/mozilla/rust/wiki/Doc-language-FAQ

Rust and Go have similar syntax and task models, but they have very different type systems. Rust is distinguished by greater type safety and memory safety guarantees, more control over memory layout, and robust generics.

Rust has several key features that aren't shared by Go:

* No shared mutable state - Shared mutable state allows data races, a large class of bad bugs. In Rust there is no sharing of mutable data, but ownership of data can be efficiently transferred between tasks.

* Minimal GC impact - By not having shared mutable data, Rust can avoid global GC, hence Rust never stops the world to collect garbage. With multiple allocation options, individual tasks can completely avoid GC.

* No null pointers - Accidentally dereferencing null pointers is a big bummer, so Rust doesn't have them.

* Type parametric code - Generics prove useful time and again, though they are inevitably complex to greater or lesser degrees.

Some of Rust's advantages come at the cost of a more intricate type system than Go's.

Go has its own strengths and in particular has a great user experience that Rust still lacks.




Где-то читал ту же критику в адрес Го, высказанную в более острой форме: Типа того,что в Го разные нити могут наперегонки работать с одним и тем же куском кучи, язык это никак не контролирует, и таким образом очень легко отстрелить себе ноги. А в системе типов Rust есть специальные средства контроля за подобными ситуациями (то самое «No shared mutable state»).

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

No shared mutable state - Shared mutable state allows data races, a large class of bad bugs. In Rust there is no sharing of mutable data, but ownership of data can be efficiently transferred between tasks.

А как конкретно оно работает? То что я нагуглил только что очень похоже на агенты (clojure)

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

А как конкретно оно работает?

Я не вникал, пока только «по вершкам» интересовался языком этим. Атрибут mutable/immutable явным образом таскается по всем указателям; как из mutable получается immutable, и как всё это взаимодействует с многопоточностью — хз.

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

как всё это взаимодействует с многопоточностью — хз

Насколько я уловил общую идею, immutable данные можно свободно шарить между потоками. А обмен mutable данными между потоками осуществляется через передачу владения, так что в каждый момент времени только один поток имеет доступ к mutable куску памяти.

Не ясно только, как с такими ограничениями реализовать, например, потокобезопасную очередь (pipe).

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

В целом, го проще. Вот некоторые различия:
- В го нет никакого синтаксического сахара вроде loop.
- Также нет поддержки утверждений.
- Горутины и каналы — неотъемлемая часть языка, для них даже специальный синтаксис.
- И да, если без синхронизации используешь в горутинах общие переменные — ССЗБ: http://golang.org/ref/mem. И вообще, мьютексы и каналы для кого придумали?
- Для возврата ошибки — возвращают ошибку, в го можно возвращать несколько значений. Для обвала программы — panic(). Запущенное с помощью defer будет выполнено при выходе из функции все зависимости от того, произошла катастрова или нет, а recover() позволяет остановить действие panic().
- Го для полиморфизма использует интерфейсы, вместо наследования у него разновидность делегирования, называемая встраиваиванием. Инкапсуляция — на уровне пакета. В rust же используются трейты для полиморфизма и наследования.
- В го нет генериков, и это действительно печально.
- Сопоставления с образцом в го тоже нет, но это уже далеко не так печально.
- Всяких хитрых указателей и ручного управления памятью в го нет.
- enum'ов нет. Невелика потеря, когда нет генериков.

Вроде ничего не забыл.

quantum-troll ★★★★★
()
Ответ на: комментарий от Manhunt

Насколько я уловил общую идею, immutable данные можно свободно шарить между потоками. А обмен mutable данными между потоками осуществляется через передачу владения

Там даже прикольнее - сам язык не позволяет шарить данные; для шаринга есть модуль ARC, реализованный unsafe-кодом :)

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

Я не понял как если immutable данные можно шарить, то как это связано со сборщиком мусора. immutable разве не нужно собирать?

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