URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 104778
[ Назад ]

Исходное сообщение
"Выпуск языка программирования Rust 1.3, развиваемого проекто..."

Отправлено opennews , 18-Сен-15 00:28 
Доступен (http://blog.rust-lang.org/2015/09/17/Rust-1.3.html) релиз языка программирования Rust 1.3 (http://www.rust-lang.org), развиваемого проектом Mozilla, обеспечивающего (https://www.opennet.me/opennews/art.shtml?num=42241) автоматическое управление памятью и предоставляющего средства для высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime. Параллельно с Rust совместно с компанией Samsung развивается экспериментальный браузерный движок Servo (https://www.opennet.me/opennews/art.shtml?num=36576), написанный (https://github.com/servo/servo/) на языке Rust и отличающийся поддержкой многопоточного рендеринга web-страниц и распараллеливанием операций с DOM (Document Object Model).

В новом выпуске (https://github.com/rust-lang/rust/blob/master/RELEASES.md#ve...) работа по оптимизации производительности была сфокусирована на стандартной библиотеке: задействован более эффективный алгоритм сопоставления строк, за счёт улучшения кода обнуления областей увеличена производительность вызовов  Vec::resize и Read::read_to_end, проведена оптимизация вызова Read::read_to_end при работе со стандартным входным потоком и файлами, значительно ускорен код функции PartialEq.


В стандартной библиотеке представлен новый Duration API (http://doc.rust-lang.org/nightly/std/time/struct.Duration.html) для работы с интервалами времени.  Улучшены реализации Error и Hash/Hasher. Добавлена поддержка FreeBSD на системах i686  (x86_64 поддерживается уже давно) и Windows XP, продолжено портирование под инструментарий MSVC. В пакетном менеджере Cargo улучшены (https://github.com/rust-lang/rfcs/pull/1193) средства диагностической сборки (lint). Представлено новое руководство Rustonomicon (http://doc.rust-lang.org/nightly/nomicon/), отражающее тонкости использования Rust и методы написания Unsafe-обработчиков.


URL: http://blog.rust-lang.org/2015/09/17/Rust-1.3.html
Новость: http://www.opennet.me/opennews/art.shtml?num=42981


Содержание

Сообщения в этом обсуждении
"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 00:28 
Эталонное ненужно или все-таки серебряная пуля? Кто что думает?

"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Kuku , 18-Сен-15 00:50 
Вам это не нужно

"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено AnotherReality , 18-Сен-15 02:26 
Посамому  расту у меня мнения нет, но  я доверяю мнению amarao  http://habrahabr.ru/post/239067/#comment_8031769

"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 09:05 
Та же Vala, вид в профиль.
Или еще какой из сотен "c/c++ только лучше!"

"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Капитошка , 18-Сен-15 01:17 
15.05.2015 Rust 1.0
26.06.2015 Rust 1.1
08.08.2015 Rust 1.2
17.09.2015 Rust 1.3

лепят как горячие пирожки


"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Хвост , 18-Сен-15 02:18 
Они сами выбрали небольшой период релизов.

"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено t , 18-Сен-15 02:22 
5 недель. цикл как у firefox..

"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено 0eviy , 18-Сен-15 03:20 
Есть и есть, почему и нет

"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено классический анонимус , 18-Сен-15 04:41 
Название Rustonomicon отдаёт колдунством и некромансией. Рекомендую сменить на Rustomasutra.

"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Адепт , 18-Сен-15 05:49 
Rustomasutra это вторая часть, сначала нужен Rustonomicon

"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 06:24 
все правильно, rust с unsafe - это оно и есть, колдунство и некромансия))

"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 06:35 
руководство распечатывается, скручивается в трубочку и начинается rustomania

"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 16:07 
The Rustonomicon
The Dark Arts of Advanced and Unsafe Rust Programming

http://doc.rust-lang.org/nightly/nomicon/


"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 09:02 
Список приложений написанных на Rust:

bluejekyll/trust-dns — a DNS-server
BurntSushi/xsv — a fast CSV command line tool (slicing, indexing, selecting, searching, sampling, etc.)
buster/rrun — a command launcher for Linux, similar to gmrun  
clog-tool/clog-cli — a conventional changelog port (generates a changelog from git metadata)
gchp/iota — a simple text editor
imjacobclark/Herd — an experimental HTTP load testing application
kbknapp/docli — a command line utility for managing DigitalOcean infrastructure
MaidSafe — a decentralized platform.
seppo0010/rsedis — a Redis reimplementation
Servo — a prototype web browser engine
uutils/coreutils — a cross-platform Rust rewrite of the GNU coreutils

Серво, велосипеды и хелоуворд-ы.
Печально.

"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 09:18 
А как же glutin - переписанный GLFW, а также glium - безопасная обёртка над OpenGL

"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 09:55 
толсто.

http://www.piston.rs

более 3 тысяч приложений и пакетов за несколько месяцев,
от библиотек, вёбфреймворков, до геймдвижков, гуй-менеждеров и аудиcэплеров
https://crates.io/


"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 10:14 
>Список приложений
> http://www.piston.rs
>  game engine

Вы не знаете что такое приложение? Хоть словарь купите, что ли.

> https://crates.io/
> более 3 тысяч приложений и пакетов за несколько месяцев,

Пакетов не приложений. Самые популярные пакеты на этом сайле
libc
winapi
rand - в 2015 в Rust нет инструментов для генерации случайных чисел в стандартной библиотеке
gcc
time см rand
winapi-build
и тп.
Я выше привес список ПРИЛОЖЕНИЙ взятый из kud1ing/awesome-rust из раздела ПРИЛОЖЕНИЯ.



"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 15:56 
>в 2015 в Rust нет инструментов для генерации случайных чисел в стандартной библиотеке

это намеренное решение - сделать стандартную библиотеку как можно более легковесной и вынести все что можно в отдельные крейты под управлением менеджера пакетов (т.е. Cargo). В C++ такого менеджера нет, и поэтому приходится пихать все подряд в уже разросшийся до неприличных размеров libstdc++


"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 10:15 
>более 3 тысяч приложений и пакетов за несколько месяцев,

слабо.
http://go-search.org/

196291 golang packages in 102487 projects


"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 14:50 
а сколько там сам GO с первой версии живет?
Кол-во пакетов c релиза 1й версии GO за 6месяцев?

И ещё, не забываем что GO, тянет любой репозитарий с гитхаба, которые если на мастере, могут разломать весь проект.

Вот тогда на текущий момент на гитхабе 7тыс "пакетов":
https://github.com/search?l=Rust&q=rust&ref=searchresults&ty...


"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 09:49 
Я посмотрел на образцы кода и у меня вытекли глаза.

В 2015 году язык программирования Rust не может объявить массив(vector) с инициализацией значений.


<c++ 2003>
int foo [] = { 16, 2, 77, 40, 12071 };
<Rust 2015>
let x: Vec<u32> = {
    let mut temp_vec = Vec::new();
    temp_vec.push(1);
    temp_vec.push(2);
    temp_vec.push(3);
    temp_vec
};

Фейспалм.
Но, погодите, можно же воспользоваться разрекламированными макросами в Rust и написать костылик!

macro_rules! vec {
    ( $( $x:expr ),* ) => {
        {
            let mut temp_vec = Vec::new();
            $(
                temp_vec.push($x);
            )*
            temp_vec
        }
    };
}

Вот это мощь!
А главное преимущество - если написать много такого кода тебя никогда не уволят.

"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 09:50 
Это пример из стандартной библиотеки
http://doc.rust-lang.org/book/macros.html
или скорее из стандартной костылетеки.

"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 10:06 

>

 
> <c++ 2003>
> int foo [] = { 16, 2, 77, 40, 12071 };

let foo: Vec<u32> = vec![16, 2, 77, 40, 12071];


Уже есть "стандартный" готовый макрос, подключать и вводить дополнительно в код ничего не надо.
И кстати есть Плюсовые конструкции которые в РУСТ выглядят лучше и гораздо удобнее.


"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 10:24 
А я вот вижу в макросе Vec::new(). То есть для пользовательского типа макрос не сработает и потребуется писать его заново.
А ля
let myFoo: Myvec<u32> = myvec![]
Причем, костылесипедирование это официально рекомендованный метод написания кода.


"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 16:05 
>А я вот вижу в макросе Vec::new(). То есть для пользовательского типа макрос не сработает и потребуется писать его заново

эксперты opennet, как обычно, блещут знанием обсуждаемого предмета. Идите курите вывод типов в rust


"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 10:11 
Вот так точнее уж сравнивать
C++
int foo [] = { 16, 2, 77, 40, 12071 };
RUST
let foo = vec![16, 2, 77, 40, 12071];

"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 10:18 
>   vec!

Это! макрос! который! приведен! выше! Любой! пользовательский! тип! потребует! написания! уевой! тучи! таких! макросов!


"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Aleks Revo , 18-Сен-15 10:24 
>>   vec!
> Это! макрос! который! приведен! выше! Любой! пользовательский! тип! потребует! написания!
> уевой! тучи! таких! макросов!

Нахрена любому пользовательскому типу туева хуча макросов?


"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 10:26 
> Нахрена любому пользовательскому типу туева хуча макросов?

Причем тут туева хуча?
Это макрос инициализации. Пользовательскому типу не нужна инициализация?



"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Aleks Revo , 18-Сен-15 10:38 
>> Нахрена любому пользовательскому типу туева хуча макросов?
> Причем тут туева хуча?
> Это макрос инициализации. Пользовательскому типу не нужна инициализация?

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

Вектор - динамическая структура.

В конце концов обычно данные хранятся не в коде программы, а на внешних носителях.


"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 11:27 
let Rust = "Overhyped trash"
Deal::with::it()

"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Aleks Revo , 21-Сен-15 07:23 
Как тут ниже написали? "Анус запеканус". Это не уровень аудитории Rust, это уровень "критиков" (читай "троллей"). По делу ведь сказать нечего, критикуемый материал не осилили, в результате чего путаются и делают заведомо неверные утверждения, но такие ультракатегоричные высказывания )))

"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Aleks Revo , 21-Сен-15 07:28 
>> Нахрена любому пользовательскому типу туева хуча макросов?
> Причем тут туева хуча?
> Это макрос инициализации. Пользовательскому типу не нужна инициализация?

Вот смотри, неосиливший:

    let vertex_data = [
        Vertex { pos: [ -0.5, -0.5 ], color: [1.0, 0.0, 0.0] },
        Vertex { pos: [  0.5, -0.5 ], color: [0.0, 1.0, 0.0] },
        Vertex { pos: [  0.0,  0.5 ], color: [0.0, 0.0, 1.0] },
    ];

Инициализировано. Без макросов. Пользовательский тип.
Зато с макросами можно сильно больше.

    let program = {
        let vs = gfx::ShaderSource {
            glsl_120: Some(include_bytes!("triangle_120.glslv")),
            glsl_150: Some(include_bytes!("triangle_150.glslv")),
            .. gfx::ShaderSource::empty()
        };
        let fs = gfx::ShaderSource {
            glsl_120: Some(include_bytes!("triangle_120.glslf")),
            glsl_150: Some(include_bytes!("triangle_150.glslf")),
            .. gfx::ShaderSource::empty()
        };
        factory.link_program_source(vs, fs).unwrap()
    };


"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Aleks Revo , 18-Сен-15 10:23 
C++ - в 2003 году исполнилось 20 лет.
Rust - в 2015 году - первый стабильный релиз в котором зафиксировали синтаксис.
Кстати, а в чём проблема - компилятор сам понимает {1, 2, 3} или структуру формирует препроцессор vec![1, 2, 3]? Вы от одной мысли про макросы начинаете генерировать говнокод? ))

"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 10:30 
> C++ - в 2003 году исполнилось 20 лет.

Эта возможность появилась в 2003(официально). Но у мозилы терминальный приступ NIH.

> Rust - в 2015 году - первый стабильный релиз

Надеюсь и последний.
> Кстати, а в чём проблема - компилятор сам понимает {1, 2, 3}
> или структуру формирует препроцессор vec![1, 2, 3]?

Слава богу создатели Rust нагенерировали овнокода за нас и назвали стандартной библиотекой.



"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Aleks Revo , 18-Сен-15 10:42 
>> C++ - в 2003 году исполнилось 20 лет.
> Эта возможность появилась в 2003(официально). Но у мозилы терминальный приступ NIH.

То есть, спустя 20 лет после появления самого языка. 20 лет жили не тужили.
И Мозилла как-то больше десяти лет юзала, пока вконец костыли C++ не осточертели и не подвернулась команда разрабатывающая язык с требуемыми фичами.


>> Rust - в 2015 году - первый стабильный релиз
> Надеюсь и последний.
>> Кстати, а в чём проблема - компилятор сам понимает {1, 2, 3}
>> или структуру формирует препроцессор vec![1, 2, 3]?
> Слава богу создатели Rust нагенерировали овнокода за нас и назвали стандартной библиотекой.

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


"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 11:01 
>И Мозилла как-то больше десяти лет юзала

и еще 40 будет "юзать". Servo даже не близок к использованию.
>команда разрабатывающая язык с требуемыми фичами.

Игнорирую все наработки в дизайне языков программирования и прикладной опыт за эти 20 лет.
А потом они удивляются непопулярности их NIH творения.


"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Aleks Revo , 18-Сен-15 14:40 
> Servo даже не близок к использованию

Кто-то его обещал прям сейчас на тарелочке с голубой каёмочкой™?

> Игнорирую все наработки в дизайне языков программирования и прикладной опыт за эти 20 лет.
> все
> ВСЕ

Вот ты, например, ухитряешься игнорировать элементарную логику и ничего - пальцы веером ))
Это инициализация вектора заложенная в синтаксис языка - "все мировые наработки и прикладной опыт"?

Должен разочаровать, твой опыт стремится к плинтусу. Снизу.


"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 10:49 
> let x: Vec<u32> = {
>    let mut temp_vec = Vec::new();
>    temp_vec.push(1);
>    temp_vec.push(2);
>    temp_vec.push(3);
>    temp_vec
>};

Вы массив фиксированного размера сравниваете со списком нефиксированного, разве нет?
Мне кажется более близким эквивалентом вашему коду на С++ является:

let x = &mut [16, 2, 77, 40, 12071];


"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 11:03 
vector <string> vs{"alpha", "beta", "gamma"};
Работает не?

"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 11:43 
C++11?

Вообще-то, как минимум (мы же не необразованные обезьяны использующие "use namespace std;", да?):

std::vector<std::string> vs {"alpha", "beta", "gamma"};

Без макросов можно еще (таки да, длиннее и не так эффективно - хотя фиг знает какие там оптимизации компилятор сделает...):

let vs: &mut Vec<_> = &mut (["alpha", "beta", "gamma"]).iter().cloned().collect();


"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 12:11 
>Вообще-то, как минимум (мы же не необразованные обезьяны использующие "use namespace std;", да?):

using std::vector;

>let vs: &mut Vec<_> = &mut (["alpha", "beta", "gamma"]).iter().cloned().collect();

Без комментариев.


"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 12:43 
> Без комментариев.

Ok, уговорил.


"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 14:24 
<c++ 2003>
int foo [] = { 16, 2, 77, 40, 12071 };
<Rust 2015>
let foo = [16, 2, 77, 40, 12071];

"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено foror , 18-Сен-15 12:18 
Когда уже наследование запилят для нормальной реализации DOM, GUI, RPG и прочих задач из классического ООП?

"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 14:13 
Никогда. И слава богу, ООП не нужен.

"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено burjui , 18-Сен-15 13:25 
Это хорошо, что они развивают язык, но не рановато ли они его зарелизили? Решил как-то изучить Rust на задаче, уже решённой мной несколько раз на C, C++ и D - написании парсера выдуманного мной игрушечного ЯП. Язык показался достаточно приятным для системного, но borrow checker просто вынес мозг при написании парсера. Сначала я думал, что это я тупой и не вкурил в работу механизма заимствования, побежал читать доки, блоги и whatnot. Выяснилось, что всё я понял правильно, просто компилятор умеет определять только лексические области заимствования. То есть следующий код:

fn parseExpr(&mut self) -> ParseResult {
    match self.lexer.read() {
        Some(token) => CompileError::new(&token.location, "parseExpr(): not implemented"),
        None => CompileError::new(&self.location(), "parseExpr(): not implemented")
    }
}

Не компилится:

error: cannot borrow `*self` as immutable because `self.lexer` is also borrowed as mutable
  None => CompileError::new(&self.location(), "parseExpr(): not implemented")

Компилятор считает, что self.lexer заимствован в ветке None, хотя очевидно, что заимствование должно завершиться в самом её начале, т.к. заимствованная ссылка не используется. Но компилятору пофиг.

И разработчикам пофиг, потому что у RFC по этой проблеме - https://github.com/rust-lang/rfcs/issues/811 - стоит статус "отложено" (postponed). Они не считают это достаточно серьёзной проблемой, чтобы решать её до первого релиза, и хотят отложить это до Rust 2.0, хотя именно borrow checker доставляет больше всего проблем новичками-растоманам.

В общем, текущая реализация компилятора для меня сводит на нет всё удовольствие от изучения Rust. Подожду 2.0, чтобы не портить впечатление.


"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 14:34 
Погромисты на низкоуровневых ЯП любят испытывать боль. В русте ты получаешь всё те же ощущения, но зато у тебя появляется надежда: если мучения твои окончатся, ты получишь гарантированно рабочий код без течек и т.п. Можешь утешать себя этим.

"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено burjui , 18-Сен-15 15:10 
Анус запеканус? На Rust в целом гораздо приятнее писать, чем на том же C, просто компилятор пока туповат. Когда починят и смажут, ощущения будут ещё лучше. Не вижу смысла так кипеть, если никто тебя не заставляет писать на Rust здесь и сейчас. А пока чинят, у тебя есть время отдышаться, успокоиться и нанести мазь на припекаемое место.

"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Вареник , 18-Сен-15 21:12 
>> Анус запеканус
>> туповат
>> Когда починят и смажут, ощущения будут ещё лучше.
>> отдышаться, успокоиться и нанести мазь на припекаемое место.

- Вот она, целевая аудитория Rust...


"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено burjui , 19-Сен-15 15:57 
Есть форма, а есть содержание. Видимо, видеть второе за первым (я сейчас не про еду) дано не всем.

"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 15:31 
>ты получишь гарантированно рабочий код

Без утечек памяти и сегфолтов, багов  и логических ошибок, от запуска этого кода у процессора отрастет новое ядро, а на hdd пропадут bad-ы.
Ну и понятно дело, волосы станут живыми и шелковистыми.


"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Aleks Revo , 21-Сен-15 07:16 
Кернел 4.2, amdgpu + radeonsi - null pointer dereference на старте системы и по совместительству вместо старта системы.
Упс, откуда это? Писали, тестировали, дебажили, наконец релизили, а оно...
В неурочный час и все ядра могут отваливаться и волосы на груди седеть ;)

"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено Аноним , 18-Сен-15 15:44 
>>И разработчикам пофиг...

нет, этой проблемой как раз занимаются, должна быть решена с вводом MIR:

https://github.com/rust-lang/rfcs/pull/1211


"Выпуск языка программирования Rust 1.3, развиваемого проекто..."
Отправлено burjui , 18-Сен-15 16:57 
Отличные новости.