The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Выпуск языка программирования Rust 1.48, opennews (ok), 19-Ноя-20, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


123. "Выпуск языка программирования Rust 1.48"  –1 +/
Сообщение от Аноним (120), 20-Ноя-20, 07:13 
>Нормальный там синтаксис, и очень C-подобный

let big_n =
    if n < 10 && n > -10 {
        println!(", малое по модулю число, умножим его в десять раз");
            10 * n
        } else {
            println!(", большое по модулю число, уменьшим его вдвое");
            n / 2
        };
В каком месте это похоже на Си?

Ответить | Правка | Наверх | Cообщить модератору

126. "Выпуск языка программирования Rust 1.48"  +/
Сообщение от Аноним (101), 20-Ноя-20, 07:44 
Несколько кубиков сахара, нет скобочек и всё, мозг ломается? :)

Вот как это выглядит на C++ (printf для наглядности):
auto big_n = [n] {
    if (n < 10 && n > -10) {
        printf(", малое по модулю число, умножим его в десять раз\n");
        return 10 * n;
    } else {
        printf(", большое по модулю число, уменьшим его вдвое\n");
        return n / 2;
    };
}();

Колоссальная разница, правда? Только Раст чуть почище.
Тоже C++: auto big_n = n < 10 && n > -10 ? 10 * n : n / 2;
А с int вместо auto заработает и в C.

Если для Си-разработчика это слишком сложно, могу только посочувствовать.

Ответить | Правка | Наверх | Cообщить модератору

129. "Выпуск языка программирования Rust 1.48"  +2 +/
Сообщение от Аноним (120), 20-Ноя-20, 07:59 
> Несколько кубиков сахара, нет скобочек и всё, мозг ломается? :)

Да.

> Колоссальная разница, правда? Только Раст чуть почище.
> Тоже C++: auto big_n = n < 10 && n > -10

С++ не Си, а чудовищный монстр. Его синтаксис это пример того, как делать не надо. Он такой же "системный" как и Rust, только проблемы у них разные.

Ответить | Правка | Наверх | Cообщить модератору

133. "Выпуск языка программирования Rust 1.48"  +/
Сообщение от red75prime (?), 20-Ноя-20, 08:31 
Вот на С

    int big_n;
    if (n < 10 && n > -10) {
        printf(", малое по модулю число, умножим его в десять раз");
        big_n = 10 * n;
    } else {
        printf(", большое по модулю число, уменьшим его вдвое");
        big_n = n / 2;
    };

Вывода типов нет, потенциал для получения UB на неинициализированном big_n, ненужные круглые скобки вокруг условия. А так примерно то же самое.

Ответить | Правка | Наверх | Cообщить модератору

134. "Выпуск языка программирования Rust 1.48"  +1 +/
Сообщение от Аноним (120), 20-Ноя-20, 08:37 
Ну так и Python окажется C подобным. Тоже просто избавиться от лишних скобочек.
Ответить | Правка | Наверх | Cообщить модератору

140. "Выпуск языка программирования Rust 1.48"  –1 +/
Сообщение от red75prime (?), 20-Ноя-20, 08:55 
Так эти скобочки и в C не нужны. if (n<10) a++; хуже чем if n<10 {a++} из-за потенциальной опечатки if (n<10); a++;
Ответить | Правка | Наверх | Cообщить модератору

141. "Выпуск языка программирования Rust 1.48"  +1 +/
Сообщение от Аноним (120), 20-Ноя-20, 08:58 
if (n<10); это гарантированный warning, что зачастую ошибка компиляции.
Ответить | Правка | Наверх | Cообщить модератору

143. "Выпуск языка программирования Rust 1.48"  +1 +/
Сообщение от red75prime (?), 20-Ноя-20, 09:07 
Ну, ОК. "А эту пружину, торчащую из дивана, мы оставили как дань уважения первым разработчикам"
Ответить | Правка | Наверх | Cообщить модератору

144. "Выпуск языка программирования Rust 1.48"  +1 +/
Сообщение от red75prime (?), 20-Ноя-20, 09:08 
Вот вам подушечка, прикройте её.
Ответить | Правка | Наверх | Cообщить модератору

170. "Выпуск языка программирования Rust 1.48"  +1 +/
Сообщение от пох. (?), 20-Ноя-20, 11:00 
зато это потом удобно читать - а для борьбы с глупыми опечатками (хотя мне трудно придумать КАК так вы умудряетесь "опечататься" если это не долбежка носом в клавиатуру - вот ЧТО нужно хотеть нажать чтобы рядом со скобкой появилась ; ? ) как раз и существуют компиляторы.

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

Ну да, не для тех чье сознание необратимо искажено пихоном.

Ответить | Правка | К родителю #140 | Наверх | Cообщить модератору

195. "Выпуск языка программирования Rust 1.48"  +1 +/
Сообщение от red75prime (?), 20-Ноя-20, 13:01 
> КАК так вы

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

>  а для борьбы с глупыми опечатками

Ну, в C не только глупые опечатки могут привести к проблемам. Поэтому и существуют предупреждения компиляторов, статические анализаторы, ASAN, TSAN, MSAN, UBSAN и подобные.

Ответить | Правка | Наверх | Cообщить модератору

189. "Выпуск языка программирования Rust 1.48"  +1 +/
Сообщение от Аноним (-), 20-Ноя-20, 12:26 
>  };

В конце зачем это " }; "? Нет, ты не сишник, ты си плюс-плюсник. Выше один индивид написал "C/C++" А таукого языка в природе нет.

Ответить | Правка | К родителю #133 | Наверх | Cообщить модератору

197. "Выпуск языка программирования Rust 1.48"  +1 +/
Сообщение от Совершенно другой аноним (?), 20-Ноя-20, 13:17 
Если не сложно поясните пожалуйста как в данном примере может быть не инициализирован big_n?
Ответить | Правка | К родителю #133 | Наверх | Cообщить модератору

220. "Выпуск языка программирования Rust 1.48"  +/
Сообщение от red75prime (?), 20-Ноя-20, 15:51 
В данном примере никак. Если условие разрастётся, то в одной из веток переменная может быть неинициализирована. gcc предупреждение по этому поводу не выдает.
Ответить | Правка | Наверх | Cообщить модератору

236. "Выпуск языка программирования Rust 1.48"  +/
Сообщение от Совершенно другой аноним (?), 20-Ноя-20, 18:16 
> В данном примере никак. Если условие разрастётся, то в одной из веток
> переменная может быть неинициализирована. gcc предупреждение по этому поводу не выдает.

исторически так сложилось, что такого рода проверками занимаются статические анализаторы (cppcheck, pc-lint, PVS-studio). Сейчас такие проверки понемногу добавляют в компиляторы, но да, с этим действительно пока есть определённые проблемы.

На таком примере:


#include <stdio.h>

int main(int argc, char* argv[])
{
  int q1, q2, q3;

  if (argc > 2)
    q1 = 1;

  switch (argc)
  {
    case 0:
      q2 = 1;
      break;
    default:
      break;
  }

  printf("%d %d %d\n", q1, q2, q3);

  return 0;
}

MSVC 6.0 (98 года разработки) нашел все три использования неинициализированных переменных, как и clang 3.8.1 (). GCC 9.2 нашел только q3. Почему так всё плохо именно с GCC сказать сложно.

Ответить | Правка | Наверх | Cообщить модератору

214. "Выпуск языка программирования Rust 1.48"  +/
Сообщение от Аноним (214), 20-Ноя-20, 14:58 
>int big_n;
>if (n < 10 && n > -10)
>};

Ненавижу когда Си плюс-плюсник выдаёт из себя сишника. Ты совершил 2 ошибки.

Ответить | Правка | К родителю #133 | Наверх | Cообщить модератору

217. "Выпуск языка программирования Rust 1.48"  +/
Сообщение от red75prime (?), 20-Ноя-20, 15:39 
-Wall -Wpedantic -Wextra

https://godbolt.org/z/4z68PT

Компилятор доволен. Но верно - я не сишник, и принятых там церемоний не знаю.

Ответить | Правка | Наверх | Cообщить модератору

306. "Выпуск языка программирования Rust 1.48"  +/
Сообщение от Аноним (-), 21-Ноя-20, 22:03 
Компилятор доволен. Но верно - я не сишник, и принятых там церемоний не знаю.

+++ компилятор не искусственный интеллект, то что ему удалось скормить фрагмент кода еще не значит что код работает так как вы там себе возомнили

Ответить | Правка | Наверх | Cообщить модератору

312. "Выпуск языка программирования Rust 1.48"  +/
Сообщение от red75prim (?), 22-Ноя-20, 01:26 
Нарушенные параграфы стандарта в студию.
Ответить | Правка | Наверх | Cообщить модератору

323. "Выпуск языка программирования Rust 1.48"  +/
Сообщение от Аноним (-), 23-Ноя-20, 06:23 
> Он такой же "системный" как и Rust, только проблемы у них разные.

не, почему - есть и похожие: одуплить что машина реально сделает когда ты тут эти заподвыподверты накодил очень мало кто на этой планете может. к сожалению в системных вещах это достаточно фатально - ведет к массе дурных проблем на ровном месте. торвальдс gcc то костерит за это, а желающих долго и много что-то вот реально системное прогать и вовсе не видно. Как максимум редокс шутейный, и тот - микроядро мертворожденное, наверное как раз чтобы спихнуть все проблемы на пользователя, дескать и хрен с ним что все это тормозит.

Ответить | Правка | К родителю #129 | Наверх | Cообщить модератору

186. "Выпуск языка программирования Rust 1.48"  +/
Сообщение от Ordu (ok), 20-Ноя-20, 12:11 
>    if n < 10 && n > -10 {

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

Ответить | Правка | К родителю #123 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру