LINUX.ORG.RU

Ответ на: комментарий от ya-betmen

Потому, что меньше места по горизонтали занимает а читается так же хорошо, как и «function» или «func»? ) Вкусовщина же в чистом виде, чего тут спорить?

ozkriff
() автор топика
Ответ на: комментарий от ozkriff

Везде, описание не соответствует происходящему. Человек получил указатель на память, где расположена «BOOM». Ссылку на подходящий под описание код тут уже приводили.

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

Человек получил указатель на строку в неизменяемой секции данных, затем сказал «измени в неизменяемом букву». Компилятор си это пропустил и программа грохнулась при запуске - косяк си. Компилятор ржавчины еще при компиляции сказал, что так нельзя - ура-ура.

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

ozkriff
() автор топика
Ответ на: комментарий от ozkriff

Тут нет никакого косяка Си. Код на ржавчине не аналогичен сишному и ближе к коду, приведенному аноном

anonymous
()
Ответ на: комментарий от ozkriff

Ты с ума сошёл? Код на твоей ржавчине не имеет ничего общего с этим кодом на Си.

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

Где тут ошибка с точки зрения языка?

Никто не говорит, что «ошибка». Конструктивно рассматривать пример как недостаток подхода «работы с память напрямую» по умолчанию. Есть мнение, что лучше иметь набор безопасных средств, а если действительно нужно - импортировать модуль вроде «unsafe». // Ваш кэп.

anonymous
()
Ответ на: комментарий от Solace

Однако, пока уважаемые форумчане пока не дали корректного ответа на такое поведение компилятора

Какой-то хитрый аргумент). Если опыт тех же плюсов, показывает жизнеспособность unique_ptr / shared_ptr, почему бы не пойти по этому пути? : Презентация «Rust Me, I'm a Developer!» (комментарий)

3) Даже если дробовик плохой

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

anonymous
()
Ответ на: комментарий от ozkriff

меньше места по горизонтали занимает а читается так же хорошо, как и «function» или «func»? )

fun было бы и традиционнее, и понятнее, и прикольнее.

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

Так никто так с памятью не работает. Пример некорректный. Тут давали ссылку на корректный код.

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

Да и для печати fn не шибко проще fun: пальцы обычно сильнее «набиты» на текст с гласными.

anonymous
()
Ответ на: комментарий от ozkriff

А зачем вообще какое-то ключевое слово для функций? Во многих языках обошлись без оного.

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

Во многих языках обошлись без оного

Например в Си, где использовать указатель на функцию без typedef`а никто в здравовом не станет. :)

ozkriff
() автор топика
Ответ на: комментарий от anonymous

Да, никто так не работает с памятью, потому что это, епрст, простой пример того, что Си, в отличие от ржавчины, никак не защищает программиста. И этот подход Си (и С++) в более сложных случаях в больших реальных системах проводит к уязвимостям в программах и неуловимых багах с порчей памяти.

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

Надо было к первому апреля PR в mozilla/rust послать, может и одобрили бы даже.

ozkriff
() автор топика
Ответ на: комментарий от ozkriff

В смысле? Какой смысл вот этого его примера:

fn main() {
    let s = ~"BOOM";
    s.shift_char();
    s.unshigt_char('Z');

    println!("It go {:s}", s);
}
?

Показать, что на попытку изменения константных объектов компилятор ругается? Тогда в чем отличие от:

#include <stdio.h>

int main(void) {
	const char *str = "BOOM";
	str[0] = 'Z';

	return 0;
}
?

А что хотел автор показать этим примером:

fn main() {
    let mut s = ~"BOOM";
    s.shift_char();
    s.unshigt_char('Z');

    println!("It go {:s}", s);
}
?

Что этот код не падает, якобы, в отличие от Си?

#include <stdio.h>

int main(void) {
	char *str = "BOOM";
	str[0] = 'Z';

	return 0;
}
? Так он тут не умеет использовать Си, поскольку надо заиметь буфер памяти, а не указывать абы куда и менять там данные.
#include <stdio.h>

int main(void) {
	char str[] = "BOOM";
	str[0] = 'Z';
        printf("It go %s\n", s);
	return 0;
}

Объясните, плиз, в чем смысл.

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

А какой компилятор ловит? Ведь код на расте в этих примерах соответствует другому коду на си.

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

Можете ответить на мои вопросы по конкретным примерам из презентации?

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

А какой компилятор ловит?

Rust.

Ведь код на расте в этих примерах соответствует

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

Можете ответить на мои вопросы по конкретным примерам из презентации?

Могу, но не стану. Ответы даны в презентации, если ты их правда не понял - перечитай ее, а если ты поесть пришел... уйдешь голодным.

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

Так он не осилил си

И этот глубокий вывод сделан на основании примеров, призванных демонстрировать распространенные ошибки. Окай.

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

Какие распространенные? Ни разу не видел такого в коде на си.

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

Представь себе, что ты начинаешь с этих примеров объяснять что-то конкретному живому сишнику.

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

Представь себе, что ты начинаешь с этих примеров объяснять что-то конкретному живому сишнику.

Человек, глубоко понимающий семантику Си, и так прекрасно знает, какое говно этот ваш Си. Ему не нужны ни примеры, ни чужие объяснения.

Manhunt ★★★★★
()

Нет, ну а чего вы тут недовольны все? Rust - крутая штука, надеюсь у них все получится :)

Так или иначе на том же golang можно увидеть потуги сделать красивые dsl и тп, но понятно, что это только потуги и golang-тим даже не пытается прикрутить хотя бы паттер матчинг :) На этой арене у rust больше шансов и скорее всего всякие деятели аля https://github.com/steveklabnik будут (и уже) активно форсить rust. Так что своя ниша - точно будет. Да и язык получается вполне себе годный.

pechorin
()
Ответ на: комментарий от anonymous

Только что проверил, на 8.1 последней ночной сборке вполне себе компилируются и запускаются всякие helloworld-ы.

ozkriff
() автор топика
Ответ на: комментарий от anonymous

В системе стоит какой-то старый mingw. Не знаю, где его версию смотреть. «mingw32-gcc -v» выдает версию «4.8.1».

Ржавчина под виндой работает со скрипом тут и там, насколько я знаю. По моему опыту, лучший способ поиграться под виндой с Ржавчиной - это поставить виртуалку с линуксом и не мучаться :) .

ozkriff
() автор топика
Ответ на: комментарий от ddos3

Это очень хорошо, что некоторые компиляторы ловят некоторые простые случаи.

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

У меня винда под виртуалкой. Ну да фик с им тогда. Может допилят.

anonymous
()
Ответ на: комментарий от ddos3

Чего вы все так к примеру придрались? Мысль-то он хорошо доносит: Си - опасная штука и ни от чего не защищает программиста. С этим же никто не будет спорить? Да, внешний статический анализ и встроенные в некоторые компиляторы проверки кое-от чего спасут, но это просто костыли для колеки.

ozkriff
() автор топика
Ответ на: комментарий от ozkriff

Мысль доносит хорошо, только мысль неправильная, а пример - некорректный. Потому и придрались.
Ни один язык не защищает программиста от его собственной глупости. И си в этом плане ничуть не опаснее какой-нибудь жабы или того же руста.

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

Ни один язык не защищает программиста от его собственной глупости.

Полностью, конечно, ничего от глупости не спасет, но разве это повод не использовать автоматические проверки? Или ты код на плюсах собираешь без "-Wall -Wextra -Werror -std=### -pedantic", потому что не глупый?

ozkriff
() автор топика
Ответ на: комментарий от ozkriff

Где я сказал, что не нужно пользоваться автоматическими проверками?
Я, кажется, наоборот, писал о том, что при включенных проверках компилятор си защищает программиста от банальных ошибок ничуть не хуже, чем руст.

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

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

Этот неправильный вывод сделан на основе одного примера?

Где я сказал, что не нужно пользоваться автоматическими проверками?

В Си намного меньше проверок на подобные вещи, чем в Расте. Раз ты от них отмахиваешься, то я тебе предложил быть последовательным и вообще отключить все проверки. Даже можно "-fpermissive" использовать, раз от глупости ничего не поможет и все вокруг такие эксперты :) .

ozkriff
() автор топика
Ответ на: комментарий от ddos3

В Ржавчине, допустим, можно иметь или любое количество read-only указателей на объект или только один мутабельный. Иметь, допустим, два мутабельных или мутабельный и немутабельный - нельзя и это прекрасно. Я не в курсе, что бы какой-то компилятор Си или С++ имел такие предупреждения.

ozkriff
() автор топика
Ответ на: комментарий от ozkriff

Си - опасная штука и ни от чего не защищает программиста.

Дверь — штука ещё более опасная. Не боишься за яйца?

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

В Си намного меньше проверок на подобные вещи, чем в Расте.

Позвольте поинтересоваться, на основе чего сделан этот неправильный вывод?

ddos3
()
Ответ на: комментарий от ozkriff

один мутабельный

Мутабельный смысле указатель, или еще и объект? То есть я могу держать несколько немутабельных указателей и менять объект? или не могу?

anonymous
()
Ответ на: комментарий от ozkriff

Правильно ли я понимаю, что дать кому-то почитать указатель на не изменяемые данные не получится, если у нас есть указатель на изменяемые(те же данные)? А ссылку-то хоть можно? Какая гадость.

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

То есть я могу держать несколько немутабельных указателей и менять объект? или не могу?

Если у тебя есть константная ссылка на объект, то ты не можешь его менять, естественно.

Заморозка: http://static.rust-lang.org/doc/master/tutorial.html#freezing

ozkriff
() автор топика
Ответ на: комментарий от ddos3

Да им говорили тут уже, что пример некорректный - бесполезно.

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