Состоялся (https://blog.rust-lang.org/2017/11/22/Rust-1.22.html) релиз языка программирования Rust 1.22 (http://www.rust-lang.org), развиваемого проектом Mozilla. Язык сфокусирован на безопасной работе с памятью, обеспечивает автоматическое управление памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime.
По структуре язык Rust напоминает C++, но существенно отличается в некоторых деталях реализации синтаксиса и семантики. Автоматическое управление памятью избавляет разработчика от манипулирования указателями и защищает от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo (http://blog.rust-lang.org/2014/11/20/Cargo.html), позволяющий получить нужные для программы библиотеки в один клик. Для размещения библиотек поддерживается репозиторий crates.io (https://crates.io/).
В подготовке нового выпуска приняли участие 160 разработчиков. Основные новшества (https://github.com/rust-lang/rust/blob/master/RELEASES.md#ve...):
- В разряд стабильных переведена возможность (https://github.com/rust-lang/rust/pull/42526) использования оператора
"?" вместе с конструкцией "Option‹тип›" по аналогии с ранее обеспеченной поддержкой "?" в блоках "Result‹тип, выражение›". Оператор "?" проверяет значение и если результат отличается от заданного, осуществляется выход с возвратом кода ошибки. Например:fn try_option_none() -› Option‹u8› {
let val = None?;
Some(val)
}
assert_eq!(try_option_none(), None);
- Типы с операцией Drop теперь можно применять в элементах const и static, что позволяет использовать в них значения, вычисляемые на этапе компиляции. Например:
struct Foo {
a: u32
}
impl Drop for Foo {
fn drop(&mut self) {}
}
const F : Foo = Foo { a : 0 };
static S : Foo = Foo { a : 0 };- Операции вида "T op= &T" теперь применимы ко встроенным числовым типам, например:
let mut x = 2;
let y = &8;
x += y; // Ранее нужно было явно выполнять разыменование, указывая x += *y.
- Увеличена скорость компиляции в отладочном режиме;
- В Rustdoc теперь можно добавлять тесты, обрывающие компиляцию ( compile-fail);
- Прекращена поддержка целевой платформы le32-unknown-nacl (https://github.com/rust-lang/rust/pull/45041) в связи с переводом PNaCl в разряд устаревших (теперь рекомендуется использовать WebAssembly);- Стабилизированы API From‹Cow‹str›› в Box‹Error›, Hasher в {&mut Hasher, Box‹Hasher›}, fmt::Debug в SplitWhitespace;
- В пакетном менеджере Cargo появилась возможность определения (https://github.com/rust-lang/cargo/pull/4496) примеров, состоящих из нескольких файлов (для подобных примеров создаётся поддиректория с main.rs). Добавлена (https://github.com/rust-lang/cargo/pull/3992) поддержка взаимодействия с внешними Git-репозиториями вендоров.
URL: https://blog.rust-lang.org/2017/11/22/Rust-1.22.html
Новость: https://www.opennet.ru/opennews/art.shtml?num=47620
приветствую, а есть какие-либо нормальные библиотеки для работы с ЛДАП?
https://github.com/inejge/ldap3 оно?
Синтаксис этого языка почему-то нагоняет депрессию на меня каждый раз как вижу куски кода на нём :(
Ничего страшного. Дело привычки. От JS тоже плевались по началу ;)
Извините, но это совершенно разные вещи.
Разные. Но речь шла про синтаксис.
Отличие заключается в том, чо rust - это продуманный инструмент, в то время как js - наслоение расширений на "то, что уже есть".В то время как rust отталкивает своим непривычным, но оправданным синтаксисом, js - просто тихий ужас
> В то время как rust отталкивает своим непривычным, но оправданным синтаксисом, js - просто тихий ужасЭволюция же :D
> В то время как rust отталкивает своим непривычным, но оправданным синтаксисомДа ну? Вообще, мне довольно интересно было бы послушать, чем оправдано такое дикое количество синтаксического сахара. В каждой новости только об этом и речь.
Да вроде не так его там и много.Вот, например, примеры кода из руководства:
impl Config {
pub fn new (args: &[String]) -> Result<Config, &'static str> {
if args.len() < 3 { return Err("not enough arguments"); }
let cd = Config {query: args[1].clone(), filename: args[2].clone()};
Ok(cd)
}
}
...
pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
let mut res = Vec::new();
for line in contents.lines() {
if line.contains(query){
res.push(line);
}
}
res
}
...
fn read_file (file_name: String) -> Result<String, io::Error> {
let file = File::open(file_name)?;
let mut buf_reader = BufReader::new(file);
let mut contents = String::new();
buf_reader.read_to_string(&mut contents)?;
Ok(contents)
}
...
fn main() {
let args: Vec<String> = env::args().collect();let config = Config::new(&args).unwrap_or_else(|err| {
println!("Problem parsing arguments: {}", err);
process::exit(1);
});if let Err(e) = run(config) {
println!("Application error: {}", e);
process::exit(1);
}
}
Вполне читаемо. Определения функций только сложно читать из-за нагромаждения дженериков и "времен жизни".if let Err(e) = run(config) {} - это да, сахар от match
Особенно доставляет концепция, что почти все пишется в форме выражений fn getdouble2() {x*2} .
Не совсем понятно, зачем snake_case встроен на уровне компилятора.
? - да, действительно сахар
let - да, типы выводятся. Но тип всегда известен
> Вполне читаемо. Определения функций только сложно читать из-за нагромаждения дженериков и "времен жизни".Да любой язык вполне читаем, если приноровиться. Даже Python, даже Perl, даже Scala, даже Java, даже (о боже) Haskell...
Вопрос-то был вот в чём: в каждой новости про Rust разработчики ошарашивают: то перегрузки введут, из-за чего можно сразу можно забыть о нормальном выводе типов и сразу испытать чувство боли от грядущего "нагромождения дженериков"; то всякими "?" порадуют, чтобы писать "foo()?.bar()?.baz()?" вместо "try!(try!(try!(foo()).bar()).baz())"... И это вместо того, чтобы ввести механизм исключений. :/
Хочется сказать вот что: на Rust пока крайне мало работающего в продакшене кода. Я думаю, что причина тому -- неясный вектор развития языка и несколько неудобоваримый синтаксис. Такое чувство, что спецификация языка рождается по мере его развития, что не делает его особо привлекательным: кто знает, как ещё его изменят в будуще?
> Такое чувство, что спецификация языка рождается по мере его развитияТак же было с perl. Что ж, подождём 5 версии…
нет, не так. его быстро создали, а затем решили долго и продуманно создать абсолютно новую версию, которая стала Другим языком. RUST в этом плане правильно развивается, детали, мелочи, ньюансы продумываются по мере апробации и времени...
> Отличие заключается в том, чо rust - это продуманный инструмент, в то
> время как js - наслоение расширений на "то, что уже
> есть".
> В то время как rust отталкивает своим непривычным, но оправданным синтаксисом, js
> - просто тихий ужасХоть по введенным новшествам из новости (сам от себя удивляюсь) полностью поддерживаю, и сложно не согласилься с вашим "но оправданным синтаксисом", но думаю нет на них Вирт.. ой Жана Ишбиа
Не так оно делается. Будут у Rust-a еще последователи, и будут лучше
Не, меня JS как раз не очень бесил. А с растом - как увижу строчку кода, так сразу хочется рспечатать её на 3Д принтере и запихнуть куда-нибудь тому, кто этот синтаксис придумывал.
Так вот зачем нужны 3д принтеры! У меня тут целый отдел программистов которыми я недоволен...
Почему поначалу?
Да что там депрессию, невольно начинаешь задумываться - может у плюсиков с этим все ещё не так плохо?
Да что вы.... (Взято отсюда https://youtu.be/VSlBhAOLtFA)
C++17
template<class... Ts>
struct overloaded : Ts... {
using T s: : operator()...;
}
template<class... Ts>
overloaded(Ts... ) -> overloaded<Ts...>
На C++ можно (ИМХО, и нужно) нормально писать. А с Rust'ом ты постоянно получаешь кучу непонятных ошибок при компиляции. Еще и их пакетный менеджер не всегда нормально отрабатывает -_-"
В плюсах вообще пакетного менеджера нету
Пакетные менеджеры для яп зло. Каждый раз как ставлю что-либо из пакетного для питона, мне становится страшно за "вдруг в зависимостях прописан вредоносный пакет, ведь можно же, никто, проверяя исходники, не будет проверять все зависимости, исходники а их тонна для каждого пакета, и все обновляются кем попало."
Скупшикам/взломщикам аккаунтов разработчиков расширений для хромого продуктивнее было бы заняться скупкой/взломом аккаунтов популярных пакетов в pip, cargo, gems и npm. Сейчас расширения для браузеров шпионят малоценную инфу о миллионах, а встроя бекдр в пакет можно с тысяч разработчиков стрясти куда более ценную инфу вроде чьей-то коммерческой тайны.
> Каждый раз как ставлю что-либо из пакетного для питона, мне становится страшно за "вдруг в зависимостях прописан вредоносный пакет, ведь можно же, никто, проверяя исходники, не будет проверять все зависимости, исходники а их тонна для каждого пакета, и все обновляются кем попало."Это злая судьба девелопера. Как-то давным-давно я читал статью, о том, как печальна жизнь разработчика, потому что он не может позволить антивирусу мониторить неизменность исполняемых файлов.
Если риски неприемлимы, то, конечно же, лучше не заниматься разработкой, а продавать пиццы.
> На C++ можно (ИМХО, и нужно) нормально писать. А с Rust'ом ты
> постоянно получаешь кучу непонятных ошибок при компиляции.так каеф же, чем больше ошибок при компиляции - тем меньше в рантайме
Пишу и на Rust и на D, синтаксис Rust чудовищен, поэтому на D всё прикладное, а на Rust системное. Даже от python отказался в пользу D
:D
Извините, а что именно такое страшное "системное" вы делаете, чего невозможно сделать в D? Как раз Ди и позиционировался как универсальный язык, тем более это преемник С/С++ - куда уж "системнее"??
... доверчивый вы наш (С) Гараж
Мсье, Вы либо очень хорошо знаете психологию, либо никогда не работали в команде.
Ну синтаксис у него, довольно вырвиглазный, но вообще, концепция интересная.
В свободное время изучаю этот язык.Возникает несколько вопросов:
1. Трейты - это что-то типо абстрактных классов? Нельзя создавать переменные типов трейтов?
2. Как тогда мокать объекты в тестах?
3. Кто-нибудь знает хороший пример DI контейнера? Этот шаблон вообще как-нибудь налазит на раст?
4. Я правильно понимаю, что предполагается писать тесты прямо в тех же файлах, что и код?
1. Нельзя.
2. Трейты можно использовать в качестве типа аргумента функции.
4. Как угодно.
https://doc.rust-lang.org/book/first-edition/trait-objects.h...
Что я ненавижу в раст больше всего - это композицию взамен наследования. Это добавляет кучу работы по прокидыванию методов и свойств из одного класса в другой. Наследование для этого и было придумано, как синтаксический сахар, чтобы вручную не прокидывать. Но в мозилле ребята %@№&$ самые умные и его убрали.
https://www.youtube.com/watch?v=VSlBhAOLtFA
Говоря о виртуальных функциях, в C++ всё реализуется аналогично Rust, неинтрузивно, и возможно меньшими усилиями. Нужна неинтрузивность? Напишите шаблон-обертку, отнаследовав ее от интерфейса. Не нужна? Наследуйтесь напрямую от интерфейса.
А есть в текстовом виде?Вообще, никогда не понимал как можно смотреть видео по программированию
> Вообще, никогда не понимал как можно смотреть видео по программированиюэээ.. так ты попкорн-то не бери!
Наследование нужно исключительно для реализации полиморфизма операций (т.е. сохранения законтрактированного интерфейса), а не "как синтаксический сахар". Композиция же как раз удобна для повторного использования кода (всё те же производные от паттерна "Стратегия").
>нужно исключительно для реализации полиморфизма операций (т.е. сохранения законтрактированного интерфейса), а не "как синтаксический сахар".Это можно сделать и через композицию, но придётся прописывать ручками, как в раст.
>Наследование для этого и было придумано, как синтаксический сахар, чтобы вручную не прокидывать.Вот из-за таких "наследователей" ООП и не любят
Не любят те, кто ещё не вылез из 1970-х времён K&R.
Те кто не вылез из времён K&R смотрят на наследование как на синтаксический сахар. И именно их ООП-поделия вызывают столько скепсиса в отношении ООП в целом и наследования в частности.
> Те кто не вылез из времён K&R смотрят на наследование как на
> синтаксический сахар. И именно их ООП-поделия вызывают столько скепсиса в отношении
> ООП в целом и наследования в частности.внезапно любой яп - это синтаксический сахар над опкодами.
> внезапно любой яп - это синтаксический сахар над опкодами.Нет. ЯП определяет то, как будет протекать процесс мышления, какими абстракциями будут ворочать мозги. Если ты думаешь в терминах опкодов, при написании программы на Haskell, то ты впустую греешь воздух своими мозгами. Высокоуровневые ЯП сужают пространство возможных последовательностей опкодов, которые ты можешь получить, но при этом они выводят процесс мышления на иной уровень. Высокоуровневые языки и абстракции созданы для того, чтобы тем же количеством ментальных операций достигать больших результатов.
А синтаксический сахар -- это когда процесс мышления не меняется, но запись становится приятнее по каким-то параметрам. Например, короче.
Новый баг: https://github.com/rust-lang/rust/issues/43370#issuecomment-...
Старый баг, который не дает скомпилить с системным llvm: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=223342Ну пнятнько.
А на чём был написан первый компилятор Раста? Неужто на дьявольском С?
А на чем был первый компилятор ассемблера? Неужели на.. ? Че за вопрос вообще?
А на чём, кстати?
> А на чём, кстати?внезапно на ассемблере. Потом оттранслирован людьми в опкоды. После чего уже собирал себя сам.
На OCamlhttps://github.com/rust-lang/rust/tree/ef75860a0a72f79f97216...
Ужо лучше бы мурзиловцы и писали своё Servo на OCaml.
У Ocaml не всё хорошо с многопоточной работой и сборщик мусора встроенный, что в данном случае минус
> А на чём был написан первый компилятор Раста?На Ocaml. Зачем глупый сарказм?
> А на чём был написан первый компилятор Раста? Неужто на дьявольском С?На js очевидно
Что уже написано на Расте такого, что его вот прям щщяс надо изучать мне?
Может быть, вакансий стало больше? Сколько сейчас в Москве по расту?
Firefox
Так вот почему он скатился в СГ! :-р
> Так вот почему он скатился в СГНет - ты!
Пример провала продукта. Перешедшего на ржавчину. Совпадение?
https://research.mozilla.org/rust/
https://www.rust-lang.org/en-US/friends.html
тебе не нужно, ты слишком глуп для него
> Что уже написано на Расте такого, что его вот прям щщяс надо
> изучать мне?Сколько бы ни было написано, сам язык - мёртворождённое дитя. Будет трепыхаться типа Перла/Tcl'я, но сдохнет только с последним олдфагом, знающим его синтаксис.
>Будет трепыхаться типа Перламного пафоса.
tcl пожалуй мало используется, perl скриптов навалом, ровно как python.
я даже не представляю себе unix без perl.
и мощь его в CPANThe Comprehensive Perl Archive Network (CPAN) currently has 193,967 Perl modules in 35,870 distributions, written by 13,310 authors
Пафоса тут у всех :) Ну типо:
>я даже не представляю себе unix без perl.Нынче Unix - это Linux. И в каком дистре линя перл в базе? Нету? Даже в перво-слаке выпилили? Даже не в линуксе, а в "реал у-них :)" во фряхе уж хз сколько лет как ...
А вот пёйтон в линуксах почти везде - в базе. Это ни плохо, ни хорошо - это как оно есть.
> И в каком дистре линя перл в базе?https://packages.debian.org/en/sid/perl-base "essential"
> Даже в перво-слаке выпилили?
https://mirrors.slackware.com/slackware/slackware-current/sl...
Ну и дальше что? Как вообще с такими как ты общаться? Зачем ты пишешь это враньё?
Ыгнспёрд - из пакета я тебе даже под форточкой наираспоследний перл поставлю :) В базе он у кого? Вот именно ...
> И в каком дистре линя перл в базе?В debian/ubuntu и rhel/centos, что покрывает более 90% серверов.
>Нынче Unix - это Linux.Неверно. Количество копий не равно количеству классов. =)
А классы это
DragonFly,
Open/Free/NetBSD (очень близкие),
Linux kernel based (много разных, но это разновидности сборок утилит на одном ядре),
Solaris/SunOS/Illimos/OpenIndianaНо это ремарка и отклонение от темы.
>И в каком дистре линя перл в базе...
Ты попробуй что-то скомпилировать.
Вот так возьми и попробуй.
PS> А вот пёйтон в линуксах почти везде - в базе. Это ни
> плохо, ни хорошо - это как оно есть.Сразу видно опытного человека.
И что ты будешь делать с базовым дистрибутивом, который только для запуститься?
В котором даже компилятора C и make нет?while sleep 1;do uptime; echo "I'm cool";done и тащиться от этого?
В массовой разработке и эксплуатации реальных систем и компонент perl так или иначе используется.
>The Comprehensive Perl Archive Network (CPAN) currently has 193,967 Perl modules in 35,870 distributions, written by 13,310 authorsСейчас ноджЫЭсники вылезут и достанут линейку :) И ты почувствуешь себя so miserable :)
Нет у них там ничего такого, чего бы в CPAN не было.
https://metacpan.org/pod/LeftPad
Как достанут, так и обратно её себе засунут. "Разосрать прогу на кучу мелких модулей по одной функции на каждый" - это залепа в чистом виде.
> so miserable :)ущербным, жалким
Науке неизвестен ни один "олдфаг, знающим его синтаксис" :) Можно зaкaпывaть прямо сейчас?PS: Не так кстати плох раст сам по себе. А вот растишек надо активно давить :)
> Науке неизвестен ни один "олдфаг, знающим его синтаксис" :) Можно зaкaпывaть прямо
> сейчас?
> PS: Не так кстати плох раст сам по себе. А вот растишек
> надо активно давить :)Ну ты там у себя на раене хоть всех уже передавил? Этож не мешки ворочать
Подскажите книжку толковую на русском по Rust? Уже что-то появилось?
мануал?
> Подскажите книжку толковую на русском по Rust? Уже что-то появилось?
>> Подскажите книжку толковую на русском по Rust? Уже что-то появилось?
> https://www.rust-lang.org/ru-RU/documentation.htmlПисать надо на Си, в крайнем случае, на Си++, а не на этом дерь*е.
>>> Подскажите книжку толковую на русском по Rust? Уже что-то появилось?
>> https://www.rust-lang.org/ru-RU/documentation.html
> Писать надо на Си, в крайнем случае, на Си++, а не на
> этом дерь*е.вот как раз с Си и хочу перейти на это "дерь*о".
>>> Подскажите книжку толковую на русском по Rust? Уже что-то появилось?
>> https://www.rust-lang.org/ru-RU/documentation.html
> Писать надо на Си, в крайнем случае, на Си++, а не на
> этом дерь*е.Зачем же так о русском языке?
>Оператор "?" проверяет значение и если результат отличается от заданного, осуществляется выход с возвратом кода ошибки.Но зачем? Есть же вроде pattern matching.
Это сахар для паттерн-мачинга
Надо больше сахара. Пусть у растоманов всё послипается!
ironframework.io vs rocket.rs ?
Уважаемый автор новости, большая просьба - перестаньте использовать символы "‹" и "›" в тексте новостей как замену символам "<" и ">". Это не только не правильно но и приводит к нерабочему коду после copy-paste.
> приводит к нерабочему коду
> после copy-paste.Перепись копипастокодеров объявляется открытой!
Хмм, а что плохого в copy-paste из новости чтобы поиграться с новыми возможностями языка на реальном примере?
Хотя бы то, что в новости не реальный, а заведомо синтетический пример.
А как же stackoverflow driven development?
забавно что все жалуются на синтаксис раста. Помню мне синтаксис Erlang тоже казался чудовищным когда я его не знал, а когда изучил и понял уже на практике как надо на ФП кодить, все встало на свои места. Меня конечно синтаксис раста пугает но я не знаю сам язык, но думаю после изучения все также встанет на свои места.
>Помню мне синтаксис Erlang тоже казался чудовищнымМне даже после нескольких лет опыта написания эрлангокода за деньги его синтаксис кажется чудовищным. Особенно правила с ; , и .
>>Помню мне синтаксис Erlang тоже казался чудовищным
> Мне даже после нескольких лет опыта написания эрлангокода за деньги его синтаксис
> кажется чудовищным. Особенно правила с ; , и .Вы на Прологе программировали? Именно задачи, которые на него хорошо ложатся?
Ну я слышал в детстве страшную сказку что оно было где то в кровавом Ынтерпрайзе, а не только в японских универах работавших над 5世代 ... Жило оно плохо и умерло в мучениях :(
Но то - сказка! В реале может и вовсе не было :-)))
Вот пример использования: https://www.corezoid.com/en/deepmemo-whitepaperЭтот самый DeepMemo интерпретирует Prolog и написан на Erlang (даже логотип явно отсылается к логотипу Erlang). Раньше у них была отдельная страница про Deepmemo с примерами кода на Prolog, но её убрали. Если кому интересно, то где-то в недрах шитхаба есть очень ранняя версия этого интерпретатора (ссылку сохранил, но на другом компьютере), видимо, её перестали пилить после коммерциализации.
Из другого софта на Erlang - CouchDB, например.
Нашёл.
https://github.com/perldev/hprolog
https://github.com/perldev/hpro_console
https://github.com/perldev/hprolog_rest_api