The OpenNET Project / Index page

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



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

Оглавление

Доступна операционная система Redox 0.2, написанная на языке..., opennews (??), 26-Апр-17, (0) [смотреть все]

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


41. "Доступна операционная система Redox 0.2, написанная на языке..."  –3 +/
Сообщение от Аноним (-), 27-Апр-17, 09:26 
> Surprise! По производительности местами рвёт сишные проги (там бенчмарки не голой ОСи, а прикладные задачи, например DNS-сервер).

Да может он никак рвать сишные проги. Ещё скажи машинный код рвет. Умный аллокатор памяти можно и на сях забабахать, да под любую задачу свой (а в расте сколько разновидностей аллокаторов?) Менеджмент памяти аналогично. Какой хочу, так и сделаю.

Тут другой момент играет роль, немного меньше скорость разработки будет. Ну и кода больше (хотя про объем это смешно, аллокатор ты один раз написал, обкатал да и забыл про него).

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

Реально что может побить это "умный" JIT, который анализирует код. Однако оверхед на сам JIT не забываем.

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

55. "Доступна операционная система Redox 0.2, написанная на языке..."  +4 +/
Сообщение от Просто так влез (?), 27-Апр-17, 10:37 
>Да может он никак рвать сишные проги
>сях и плюсах вообще что хочешь можно тварить и никакой язык со встроенным GC или подсчетом ссылок или крутым менеджером памяти никогда не сможет его догнать по производительности кода.

Вы вообще в курсе, как в rust обеспечивается безопасность работы с памятью? Все проверки выполняются в compile-time. В runtime ничего этого нет. И сгенерированный машинный код может так же без накладных расходов напрямую работать с памятью как и машинный код, который был сгенерирован из исходников на си или c++.

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

69. "Доступна операционная система Redox 0.2, написанная на языке..."  –2 +/
Сообщение от Аноним (-), 27-Апр-17, 12:11 
Нет, не в курсе, я про производительность говорил.

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

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

80. "Доступна операционная система Redox 0.2, написанная на языке..."  +/
Сообщение от Просто так влез (?), 27-Апр-17, 13:38 
обращаться по индексам можно. Сейчас посмотрел, что касается массивов и векторов, то там таки есть реалтайм проверка на предмет выхода за пределы. И сделано это по причине того, что индексом может быть выражение, значение которого может быть неизвестно на этапе компиляции. Но при желании можно обращаться к массиву через слайс с отключенной проверкой, но делать это придется в unsafe блоке. Так что вы метко подметили тонкий момент в языке ))).
Ответить | Правка | Наверх | Cообщить модератору

82. "Доступна операционная система Redox 0.2, написанная на языке..."  +1 +/
Сообщение от Аноним (-), 27-Апр-17, 14:18 

>Иначе как оно проверит какой пользователь
> введет индекс в компайл тайме

Т.е. вы не проверяете ввод пользователя? Или проверяете? Но какая тогда разница, тем более, если автоматическую так же можно отключить?

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

Я вас разочарую, но с 70ых техники компиляции, как и возможности железок - заметно продвинулись. В современном компиляторе, имея соответсвующие ограничения ЯП, вполне можно проследить вся цепочку "ввод -> проверка -> что-то еще -> обращение к индексу".
Опять же, если вы собрались пройтись по индексам [n..m), совсем-совсем не обязательно проверять каждый возможный индекс, можно просто проверить n и m. Такие вот пироги с котятами.


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

90. "Доступна операционная система Redox 0.2, написанная на языке..."  +/
Сообщение от Аноним (-), 27-Апр-17, 15:26 
>можно просто проверить n и m

Этого недостаточно. В самой ячейке может быть мусор. Это тоже надо самому проверять? И зачем этот rust нужен, если все делаеть надо как в сишке? Что он проверяет? Банальщину? Это приходит с опытом.

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

98. "Доступна операционная система Redox 0.2, написанная на языке..."  +2 +/
Сообщение от Аноним (-), 27-Апр-17, 16:33 
>>можно просто проверить n и m
> Этого недостаточно.

Этого обычно достаточно. Особенно при использовании итератора. А если недостаточно, компилятор может и предупредить. Но да, бензопилу можно легко запороть, наткнувшись на гвоздь, поэтому суровые погромистские мужики и далее будут использовать топор.

> В самой ячейке может быть мусор. Это тоже надо самому проверять?

Т.е. у вас может быт массив или вектор с мусором, но вы, все такие из себя красивые, волевым решением отменяете проверки?
В общем, сильно притянуто за уши.
Опять же, отследить инициализацию и высказать свое фи по этому поводу, для современного компилятора не сложнее аналогичного действа анонима опеннета.

> И зачем этот rust нужен,

Чтобы подгорало у анонимных знатоков опеннета, очевидно же!

> если все делаеть надо как в сишке?

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

> Что он проверяет? Банальщину?

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

> Это приходит с опытом.

Опять будет про "криворукость неосиляторов" и "вот настоящие Погромисты…"?
Ну так welcome to the real world, Neo. Количество CVE и популярность в более-менее крупных проектах всяких дополнительных анализаторов, как бы, намекают.

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

102. "Доступна операционная система Redox 0.2, написанная на языке..."  +/
Сообщение от Аноним (-), 27-Апр-17, 17:00 
>Опять же, отследить инициализацию и высказать свое фи по этому поводу, для современного компилятора не сложнее аналогичного действа анонима опеннета.

Возможно. Так почему в этом примере мой gcc не ругается?

#define ARYSIZ 10

extern int
main ()
{
    int i = ARYSIZ;
    int test[ARYSIZ];

    while (--i >= 0)
        test[i]++;

    return 0;
}

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

115. "Доступна операционная система Redox 0.2, написанная на языке..."  +/
Сообщение от Аноним (-), 27-Апр-17, 18:42 
>>Опять же, отследить инициализацию и высказать свое фи по этому поводу, для современного компилятора не сложнее аналогичного действа анонима опеннета.
> Возможно.
> Так почему в этом примере мой gcc не ругается?
> код на си

Мы тут вроде о современных компиляторах современных ЯП. Cм.
> В современном компиляторе, имея соответсвующие ограничения ЯП

ну и тред с веткой тоже о расте. Поэтому, конечно же логично "опровергать" наличие фичи, приводя в качестве примера сишку. Вы еще скажите, что отслеживать время владения совершенно невозможно, потому что gcc  это не умеет.
Это раз.

А теперь, фокус:


fn main() {
  let mut array: [i32; 3];
  for x in &array {
    print!("{} ", x);
  }
}

https://play.rust-lang.org/?gist=4b3b406d706ec597cd525090fa9...

rustc 1.16.0 (30cf806ef 2017-03-10)
error[E0381]: use of possibly uninitialized variable: `array`
--> <anon>:3:13

Это два.

Третье:
Если вместо бессмысленного и беспощадного примера, который практически ничего не делает, вставить что-то более осмысленное ("побочные эффекты" или "взаимодействие с миром"):


#define ARYSIZ 10

extern int
main () {
  int i = ARYSIZ;
  int test[ARYSIZ];

  while (--i >= 0) {
     if (test[i] > 5) return test[i];
  }
    
return 0;
}


то вдруг, совершенно внезапно:

gcc -Wall m.c
m.c: In function 'main':
m.c:10:14: warning: 'test[i]' may be used uninitialized in this function [-Wmaybe-uninitialized]
      if (test[i] > 5) return test[i];
              ^
m.c:10:30: warning: 'test[i]' may be used uninitialized in this function [-Wmaybe-uninitialized]
      if (test[i] > 5) return test[i];


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

116. "Доступна операционная система Redox 0.2, написанная на языке..."  +/
Сообщение от Аноним (-), 27-Апр-17, 18:49 
>if (test[i] > 5) return test[i];

Внезапно, все полезно, а предупреждения нет:

#include <stdio.h>
#define ARYSIZ 10

extern int
main ()
{
    int i = ARYSIZ;
    int test[ARYSIZ];


    while (--i >= 0)
        test[i]++;

    for (i = 0; i < ARYSIZ; i++)
        printf ("%d: %d\n", i, test[i]);

    if (test[0] == 10)
        printf ("ok.jpg\n");

    return 0;
}

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

119. "Доступна операционная система Redox 0.2, написанная на языке..."  +/
Сообщение от Аноним (-), 27-Апр-17, 19:23 
>>if (test[i] > 5) return test[i];
> Внезапно, все полезно, а предупреждения нет:

Т.е. два первых пункта ты бодро проигнорировал и опять "опровергаешь" возможность каких-то фич их отсутсвием в сишном компиляторе? o_O

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

120. "Доступна операционная система Redox 0.2, написанная на языке..."  +/
Сообщение от Аноним (-), 27-Апр-17, 19:29 
Я ничего не опровергаю. Пример не из воздуха, если что. Рабочий такой школоло-код. Дай, пожалуйста, версию на раст. Смысл не в том, где ты поставил return array[i], а в том, что "инициализация", неверная, произошла, результат после такого будет ИНЫМ. Не тем, что думает разработчик.

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

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

121. "Доступна операционная система Redox 0.2, написанная на языке..."  +/
Сообщение от Аноним (-), 27-Апр-17, 20:26 
> Я ничего не опровергаю.

Конечно же нет. Ты просто пишешь, что гцц этого не умеет, а значит этого не умеют компиляторы в целом.

> Пример не из воздуха, если что. Рабочий такой
> школоло-код. Дай, пожалуйста, версию на раст.

https://play.rust-lang.org/?gist=77c9fe2a696cdad1720b881a797...
с инициализацией.
без:
https://play.rust-lang.org/?gist=95075e346ec65e2a6389e028fad...

Оно?

> Смысл не в том, где ты поставил return array[i], а в том, что "инициализация", неверная, произошла,
> результат после такого будет ИНЫМ. Не тем, что думает разработчик.

Слушай, ну ведь слишком же жырно, а?

> Ты же сказал, что современные компиляторы улавливают, где не было должной инициализации.

Не передергивай. Ты прекрасно понял, что за компилятор и ЯП имелись в виду. Хотя как раз растом это не ограничено, просто в нем более наглядная демонстрация.

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

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

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

140. "Доступна операционная система Redox 0.2, написанная на языке..."  –1 +/
Сообщение от Аноним (-), 28-Апр-17, 10:27 
>Оно?

Оно. Спасибо.

>Классика опеннета. Если нечего возразить...

Хватит петушиться. Если такой гордый, мог бы не отвечать.

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

118. "Доступна операционная система Redox 0.2, написанная на языке..."  +/
Сообщение от Аноним (-), 27-Апр-17, 19:03 
Т.к. я не умею в раст, хочу посмотреть на аналогичный пример выше (там где все полезно :). Не такая тривиальная задача для компилятора, если вдуматься.
Ответить | Правка | К родителю #115 | Наверх | Cообщить модератору

122. "Доступна операционная система Redox 0.2, написанная на языке..."  +/
Сообщение от Аноним (-), 27-Апр-17, 20:40 
> Т.к. я не умею в раст, хочу посмотреть на аналогичный пример выше

А что там уметь для хелловорлда-то?
> Не такая тривиальная задача для компилятора, если вдуматься.

Угу, компилятор может отследить владения и время жизни переменных(для тех, кто в танке: да, для этого требуются некоторые ограничения ЯП и/или иногда подсказки), но проследить инициализацию -- ни-ни!

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

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

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




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

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