Разработчики из проекта Mozilla представили (https://mail.mozilla.org/pipermail/rust-dev/2013-July/004667... релиз Rust 0.7 (http://www.rust-lang.org/), экспериментального языка программирования со строгой типизацией, сфокусированного на безопасной работе с памятью и обеспечению высокого параллелизма выполнения заданий (возможность порождать тысячи и даже миллионы подпроцессов). Исходные тексты проекта распространяются (https://github.com/mozilla/rust/) под лицензией MIT. Параллельно с Rust совместно с компанией Samsung развивается экспериментальный браузерный движок Servo (http://www.opennet.me/opennews/art.shtml?num=36576), написанный на языке Rust и отличающийся поддержкой многопоточного рендеринга web-страниц и распараллеливанием операций с DOM (Document Object Model).По структуре язык Rust напоминает C++, но существенно отличается в некоторых деталях реализации синтаксиса и семантики, а также ориентацией на блочную организацию структуры кода, которая позволяет реализовать задачи в виде легковесных сопрограмм. Автоматическое управление памятью избавляет разработчика от манипулирования указателями и защищает от возникающих из-за низкоуровневой работой с памятью проблем, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Rust поддерживает смесь императивных процедурных и объектно-ориентированных методов с такими парадигмами, как функциональное программирование и модель акторов, а также обобщённое программирование и метапрограммирование, в статических и динамических стилях.
С момента прошлого выпуска внесено около 2000 изменений. В отличие от прошлых выпусков, которые главным образом были нацелены на усовершенствование синтаксиса и элементов языка, при подготовке версии 0.7 основная работа была сфокусирована на расширении стандартной библиотеки функций. Из изменений (https://github.com/mozilla/rust/wiki/Doc-detailed-release-no... также отмечается новая реализация системы проверки заимствованных указателей и новый модуль итератор (std::iterator), заменивший собой ruby-подобные внутренние итераторы, вместо которых теперь используются тип Iterator, напоминающий внешние итераторы в стиле Java.
Базовые возможности языка:
- Ориентация на безопасность:
- Аккуратная работа с памятью - никаких нулевых и потерянных указателей. Автоматическое управление памятью;- Контроль изменчивости. Объекты неизменяемы (Immutable) по умолчанию;
- Безопасность динамического выполнения: обработка сбоев, исключения, ведение лога, RAII / dtors;
- Typestate: возможность определения сложных инвариантов, контролирующих структуры данных.
- Ориентация на параллельность и эффективность кода:
- Явный контроль памяти, контролирование схемы распределения памяти;- Крайне легкие задачи, формируемые в виде сопрограмм. Лёгкость в порождении тысяч и миллионов подпроцессов;
- Итераторы стека (фактически лямбда-блоки без распределения кучи);
- Статическая, нативная компиляция с созданием исполняемых файлов ELF, PE, Mach-o;
- Прямой и простой интерфейс для кода на языке Си;
- Ориентация на практическое применение:
- Мультипарадигмальный, функциональный, императивно-процедурный, объектно-ориентированный, поддерживающий параллельную actor-модель;- Функции первого класса с биндингами;
- Нет номинальных типов (http://en.wikipedia.org/wiki/Nominative_type_system) или иерархии типов;
- Мультиплатформенный, поддерживается Windows, Linux, Mac OS X, *BSD;
- Хранение строк в UTF8, разнообразие низкоуровневых типов;
- Работает с существующими нативными наборами инструментов: GDB, Valgrind, Shark и т.д.;
- Практическая возможность нарушения правил: возможность игнорирования правил безопасности, если чётко указано, когда и как их нарушать.
URL: https://mail.mozilla.org/pipermail/rust-dev/2013-July/004667...
Новость: http://www.opennet.me/opennews/art.shtml?num=37354
зачем?
Присоединяюсь к вопросу. В чём был фатальный недостаток других языков?
Вот опять троллишки прибежали, кушать хотят, ждут кто накормит
Патаму что
А биндинги для тулкитов будут? Или такого в планах нету и они будут изобретать свой с б. и ж.?
Пусть изобретут. Жалко чтоли?
что ли, ёпта
https://github.com/ktvoelker/GtkRust
только оно похоже сдохло от ненужности
В что в вашем сокращении прячется под "ж."? :))
Судя по описанию, он хорошо подойдёт для написания логических движков с последующим прокидыванием API на C; сейчас так иногда поступают с C++, пишут внутри логику и прокидывают ориентированный на задачу API в сишный хедер.В таком случае биндинги для тулкитов ни к чему, консольный и графический интерфейсы будут делать на других языках.
Отличная новость. Думаю через лет 5 будет популярным.
Не знаю, язык разрывной по-моему.
> язык Rust напоминает C++А что еще должен напоминать нормальный, вменяемый язык программирования? Не Pascal/Delphi же, в самом деле.
у тролля какая-то попоболь по поводу Паскаля? это лечится
Изоляцией Паскаля от людей?
Скорее изоляцией школьников от общества.
делфи не язык программирования.
Да Паскаль
> делфи не язык программирования.
> Да ПаскальКосани Википедию, умник. "Delphi — императивный, структурированный, объектно-ориентированный язык программирования, диалект Object Pascal".
он такой же язык программирования как и php
Delphi не язык, это среда, а язык Object Pascal.
зы, паскаль отличный язык для обучения программированию и понимания строгой логики
> Delphi не язык, это среда, а язык Object Pascal.
> зы, паскаль отличный язык для обучения программированию и понимания строгой логикиага, и привязыванию к маздаю суровыми нитками
А такие диалекты паскаля как Free Pascal, GNU Pascal, TNT Pascal, Oxygene etc.., позволяющие писать на паскале практически под любые платформы?
Это не диалект, а компиляторы
это диалекты, для которых существуют соответствующие компиляторы.. согласен позволяют писать кроссплатформенно именно компиляторы
object pascal. реализован также в virtual pascal (os2,win32)
и free pascal (bsd,linux & others)
fpc кроме всех других преимуществ жив и развивается.
на паскакале (fpc) в частности написана толковая hedgewars.
> Delphi не язык, это среда, а язык Object Pascal.нет, начиная с версии 7, емнип, Delphi — это и название языка тоже.
Врут, там сходство сичто внешнее.
> А что еще должен напоминать нормальный, вменяемый язык программирования? Не Pascal/Delphi
> же, в самом деле.Конечно же Lisp.
Аналог Go?
Go - для серверной части, а Rust разрабатывается в первую очередь для ресурсоемких десктоп приложений, вроде браузеров и игр. Сейчас эту нишу целиком и полностью занимает C++, а хотелось бы иметь альтернативу. По-моему, Rust - очень интересный проект у него есть всё, что нужно для счастья: строгая типизация, нативная компиляция, параллелизация, поддержка ФП, автоматическое управление памяти.
> Go - для серверной части, а Rust разрабатывается в первую очередь для
> ресурсоемких десктоп приложений, вроде браузеров и игр. Сейчас эту нишу целиком
> и полностью занимает C++, а хотелось бы иметь альтернативу. По-моему, Rust
> - очень интересный проект у него есть всё, что нужно для
> счастья: строгая типизация, нативная компиляция, параллелизация, поддержка ФП, автоматическое
> управление памяти.У Go тоже все это есть. И для ресурсоемких десктоп приложений ничто не мешает его использовать - биндинги для большинства виджетов уже давно есть, писать собственные биндинги легко... пиши что хочеш
> для ресурсоемких десктоп приложений ничто не мешает его использоватьhttp://benchmarksgame.alioth.debian.org/u32/benchmark.php?te...
По производительности Go медленнее Java.
>По производительности Go медленнее Java.Слишком громкое заявление - там во многих тестах Java 7 и С/С++ рвет, так что не считается... И с Ржавчиной там тестов нет
> Слишком громкое заявление - там во многих тестах Java 7 и С/С++
> рвет, так что не считается... И с Ржавчиной там тестов нетСударь, это происходит только на примитивных тестах. Как только начинаются тяжелые вычисления или активная работа с памятью, то Java оказаывается позади планеты
>Сударь, это происходит только на примитивных тестах. Как только начинаются тяжелые вычисления или активная работа с памятью, то Java оказаывается позади планетыТак и я о том же.
А что значит "тяжелые вычисления", которые по видимому в простых тестах не воспроизвести?По поводу пямяти:
В есть возможность напрямую управлять памятью.
http://mishadoff.github.io/blog/java-magic-part-4-sun-dot-mi...
Если очень нужно - можно воспользовать.Недостаток java в другом.
> там во многих тестах Java 7 и С/С++ рвет, так что не считаетсяГде рвет? Сам придумал? C++ проигрывает Java только на одном тесте и разница там незначитальная.
В тестах же Go vs Java/C++ разница очень заметная. У вас есть тесты говорящие об обратном?
> По производительности Go медленнее Java.Эти тесты почти никто не оптимизировал, в отличие от тестов для java. И да, вот пример, где го близок по производительности к C++: http://blog.golang.org/profiling-go-programs
>> для ресурсоемких десктоп приложений ничто не мешает его использовать
> http://benchmarksgame.alioth.debian.org/u32/benchmark.php?te...
> По производительности Go медленнее Java.перестаньте верить этому бенчмарку,он не то что далек от реальности, он просто насыщен ложью.
схожесть есть, но не большая
Go несомненно лучше
К сожалению, го не может в генерики.
К чёрту болтовню, покажите код! (с)p.s. Пример кода, точнее. А я вам скажу - хороший это язык, или говно.
fn main() {
let nums = [0, 1, 2, 3];
let noms = ["Tim", "Eston", "Aaron", "Ben"];let mut evens = nums.iter().filter(|&x| x % 2 == 0);
for evens.advance |&num| {
do spawn {
let msg = fmt!("%s says hello from a lightweight thread!",
noms[num]);
println(msg);
}
}
}
>По структуре язык Rust напоминает C++И еще basic
>>По структуре язык Rust напоминает C++
> И еще basicЭто как надо не владеть предметом, чтобы в сабже усмотреть похожесть на Basic.
> Это как надо не владеть предметом, чтобы в сабже усмотреть похожесть на Basic.Владеющему только молотком все проблемы напоминают гвозди.
нужно просто не знать, что оператор let есть не только в бейсике. Просто больше в голову ничего не приходит, что здесь ещё можно найти бейсикоподобного? ))
> fn main() {
> nums.iter().filter(|&x| x % 2 == 0);
> fmt!("%s says hello from a lightweight thread!", noms[num]);
> do spawn {
> } } }Ребята, не хочется вас огорчать... но:
1) "fn".. пипец, чтоб не как у всех, а почему бы не "f"?
2) зачем эти пустые скобки?!
3) зачем точка с запятой в конце каждой строки?!
4) зачем этот повисший в воздухе "do"?!
5) зачем эти уродские фигурные скобки?!Зачем всё это "великолепие" в высокоуровневом языке?
Еще бы строчки нумеровали как в бейсике и картина была бы полной! ))Короче еще один С++ с блэкджеком и шлюхами...
ок, разрешаю тебе никогда не использовать rust. теперь ты можешь спать спокойно.
Чем оно отличается от "D"?
- А это лучше, чем крепдешин?
- Не знаю, не пил... (с) анек
Идеологией. D - это системной программирование с сильным уклоном в обобщённое и мета-программирование, Rust - это программирование высоко-нагруженых и многопоточных серверных приложений.
> Rust - это программирование высоко-нагруженых и многопоточных
> серверных приложений.Вы что-то напутали, Rust создается как замена C++ для разработки движка браузера.
Общей направленностью на ФП, императивным он скорее прикидывается. Хитрозакрученной системой типов. В D она довольно проста для понимания.Еще - рестриктивностью. В D просто "опасные" части языка выделены в отдельное подмножество, но в принципе если очень надо - можно сделать всё, в том числе явно поломать встроенные проверки (и это специально проектировалось так, чтобы это можно было легко изолировать и легко грепать). Rust обхода защит не дает в принципе.
>императивным он скорее прикидываетсяЛолшто? Rust императивнее некуда.
>Хитрозакрученной системой типов
Ты о чем вообще? Система типов простая, как топор. Кайнды только есть еще.
>Rust обхода защит не дает в принципе.
Про unsafe почитый что ли.
На, погляди, как он не дает https://github.com/charliesome/rustboot
Да, насчет функциональности я погорячился. Хотя душок сильный - вон, в мануале все возможные примеры - из функциональщины. Опять же - let, дефолтная иммутабельность, отсутсвие нормального (сишного) for...Система типов - кроме кайндов есть еще виды боксинга, пачка разных указателей, рекурсивные типы (зачем, когда это обычными указателями делается?), зато нет нормальных классов и модификаторов видимости.
блоки unsafe - это хорошо, а толку? Поноценный unsafe cast где? Только ассемблер призывать, как в вашем примере?
А еще, кстати, очень не понравилось то, что они не любят общепринятые обозначения. Textual type вместо string, traits вместо templates и тому подобное.
от СИ там только скобочки, все остальное - унылое гавгно
> от СИ там только скобочки, все остальное - унылое гавгно+1
Rust In Peace
Чем оно лучше D? ( http://dlang.ru ) ?
Тем что активно пилится? И тем что его подхватила большая компания?
> Чем оно лучше D? ( http://dlang.ru ) ?Отсутствием дэнглин поинтеров, например.
Матрешка в матрешке, пожиратель озу