Re[6]: Модульные тесты и "безопасные" языки - хорошо.
От: criosray  
Дата: 16.07.09 16:25
Оценка: -1
Здравствуйте, Mystic, Вы писали:

C>>Потому, что управляемые языки ИСКЛЮЧАЮТ "ДТП", связанные, с этим (манипуляция указателей) классом ошибки.


M>Будут ошибки, связанные не с манипуляцией указателями, а с манипуляцией индексами. Если код перевести на C#, то ошибка никуда не исчезнет, но сразу проявится при запуске.


Не будет ошибки — трудноуловимого бага, как в С++, будет исключение с сообщением о том, что индекс за пределами диапазона.
Re: Модульные тесты и "безопасные" языки - хорошо.
От: Vamp Россия  
Дата: 16.07.09 16:47
Оценка: 1 (1) +4 -3
C>"Прелесть" С++ (кто представляет себе ассемблерный код после компиляции поймет что в таком случае произойдет):
C>
C>int i;
C>int array[4];
C>for (int i = 0; i <= 4; i++) { 
C>    array[i]=0;
C>}
C>

C>(подсказка: бесконечный цикл)
Во-первых, совершенно необязательно. Зависит от компилятора, системы, параметров оптимизации и много чего другого. Например, никто не помешать разложить компилятору цикл в последовательность из четырех операций.
Во-вторых, подобное звучит примерно на столько же убедительно, насколько такое:

C++ — плохой язык, на нем можно написать такое: system("del C:\*.*").

Кстати, человек, действительно знакомый с С++ не по-наслышке, никогда такого, что у тебя в примере не напишет. Мне, например, сразу в глаза бросилось <= — такое условие в цикле итерации не встречается никогда.
Ну и в последних, писать итеративные циклы в С++, где есть for_each, bind и lambda — каменный век.
Да здравствует мыло душистое и веревка пушистая.
Re[2]: Модульные тесты и "безопасные" языки - хорошо.
От: criosray  
Дата: 16.07.09 17:02
Оценка: -2
Здравствуйте, Vamp, Вы писали:

C>>"Прелесть" С++ (кто представляет себе ассемблерный код после компиляции поймет что в таком случае произойдет):

C>>
C>>int i;
C>>int array[4];
C>>for (int i = 0; i <= 4; i++) { 
C>>    array[i]=0;
C>>}
C>>

C>>(подсказка: бесконечный цикл)
V>Во-первых, совершенно необязательно. Зависит от компилятора, системы, параметров оптимизации и много чего другого. Например, никто не помешать разложить компилятору цикл в последовательность из четырех операций.
V>Во-вторых, подобное звучит примерно на столько же убедительно, насколько такое:

V>

V>C++ — плохой язык, на нем можно написать такое: system("del C:\*.*").

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

void myFoo(int *arr, int length)
{
    for (int i = 0; i < length; i++) { 
        arr[i] = 0;
    }
}
...
int *arr = new int[length];
...
length++;
...
myFoo(arr, length);



V>Мне, например, сразу в глаза бросилось <= — такое условие в цикле итерации не встречается никогда.

В VISA тоже так думали.

V>Ну и в последних, писать итеративные циклы в С++, где есть for_each, bind и lambda — каменный век.

В std есть lambda? С каких пор?
Re[3]: Модульные тесты и "безопасные" языки - хорошо.
От: Vamp Россия  
Дата: 16.07.09 17:13
Оценка: +2 -1
C>Напишет.

C>
C>void myFoo(int *arr, int length)
C>{
C>    for (int i = 0; i < length; i++) { 
C>        arr[i] = 0;
C>    }
C>}
C> const int length = 4;
C>int *arr = new int[length];
C>...
C>length++;
C>...
C>myFoo(arr, length);
C>



C>В std есть lambda? С каких пор?

В tr есть. А еще есть буст.
Да здравствует мыло душистое и веревка пушистая.
Re[2]: Модульные тесты и "безопасные" языки - хорошо.
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 16.07.09 17:35
Оценка: 12 (5) +1
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, criosray, Вы писали:


C>>У кого еще остались сомнения в целесообразности модульных тестов, в целесообразности использования языков/платформ с большим количеством статических и динамических проверок...


Pzz>Я где-то читал, что повсеместное введение автомобильных ремней безопасности не снизило количество смертей на дорогах: люди почувствовали себя "безопаснее" и стали ездить быстрее.


Ой, а можно с контр-аналогией встряну? Спасибо.

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

"Так-то" (с)

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re: Модульные тесты и "безопасные" языки - хорошо.
От: March_rabbit  
Дата: 16.07.09 18:21
Оценка: 3 (1) +1 -2 :)
Здравствуйте, criosray, Вы писали:

C>http://habrahabr.ru/blogs/lifehack/64627/


C>"Прелесть" С++ (кто представляет себе ассемблерный код после компиляции поймет что в таком случае произойдет):

C>
C>int i;
C>int array[4];
C>for (int i = 0; i <= 4; i++) { 
C>    array[i]=0;
C>}
C>



C>(подсказка: бесконечный цикл)

садитесь, два.
Если бы Вы знали, как работает стэк, то поняли бы, что запись в array[4] затрет внешнюю (по отношению к циклу) переменную i, и никаким образом на количестве итераций не скажется.
Re[2]: Модульные тесты и "безопасные" языки - хорошо.
От: criosray  
Дата: 16.07.09 19:40
Оценка: -3 :)
Здравствуйте, March_rabbit, Вы писали:


C>>http://habrahabr.ru/blogs/lifehack/64627/


C>>"Прелесть" С++ (кто представляет себе ассемблерный код после компиляции поймет что в таком случае произойдет):

C>>
C>>int i;
C>>int array[4];
C>>for (int i = 0; i <= 4; i++) { 
C>>    array[i]=0;
C>>}
C>>



C>>(подсказка: бесконечный цикл)

M_>садитесь, два.
M_>Если бы Вы знали, как работает стэк, то поняли бы, что запись в array[4] затрет внешнюю (по отношению к циклу) переменную i, и никаким образом на количестве итераций не скажется.
Опечатка конечно подразумевалось for (i = 0;
Если Вам нравится цепляться к словам, то и я прицеплюсь к Вашим: в языке С конструкция for (int i;... синтаксически некорректна.
Садитесь, два.
Re[4]: Модульные тесты и "безопасные" языки - хорошо.
От: criosray  
Дата: 16.07.09 19:42
Оценка:
Здравствуйте, Vamp, Вы писали:

C>>Напишет.


C>>
C>>void myFoo(int *arr, int length)
C>>{
C>>    for (int i = 0; i < length; i++) { 
C>>        arr[i] = 0;
C>>    }
C>>}
C>> const int length = 4;
C>>int *arr = new int[length];
C>>...
C>>length++;
C>>...
C>>myFoo(arr, length);
C>>



C>>В std есть lambda? С каких пор?

V>В tr есть. А еще есть буст.
Ни то, ни другое пока не стандарт, а следовательно пременимо далеко не везде. Не говоря уж о МАССЕ legacy кода.
Re[4]: Модульные тесты и "безопасные" языки - хорошо.
От: criosray  
Дата: 16.07.09 19:45
Оценка: :))
Здравствуйте, Vamp, Вы писали:

C>>Напишет.


C>>
C>>void myFoo(int *arr, int length)
C>>{
C>>    for (int i = 0; i < length; i++) { 
C>>        arr[i] = 0;
C>>    }
C>>}
const int length = 4;
C>>int length; std::cin >> length;
C>>int *arr = new int[length];
C>>...
C>>length++;
C>>...
C>>myFoo(arr, length);
C>>


Давайте без самодеятельности, ок? length должно быть получено в рантайм (пользовательский ввод, или на основе какой-то логики).
Re[3]: Модульные тесты и "безопасные" языки - хорошо.
От: Vamp Россия  
Дата: 16.07.09 19:57
Оценка: +3 -1
C>>>"Прелесть" С++ (кто представляет себе ассемблерный код после компиляции поймет что в таком случае произойдет):
C>>>
C>>>int i;
C>>>int array[4];
C>>>for (int i = 0; i <= 4; i++) { 
C>>>    array[i]=0;
C>>>}
C>>>



C>Опечатка конечно подразумевалось for (i = 0;

C>Если Вам нравится цепляться к словам, то и я прицеплюсь к Вашим: в языке С конструкция for (int i;... синтаксически некорректна.
А причем тут С? В начале речь шла о С++. В С++ это более чем корректная конструкция.
Да здравствует мыло душистое и веревка пушистая.
Re[5]: Модульные тесты и "безопасные" языки - хорошо.
От: Vamp Россия  
Дата: 16.07.09 20:09
Оценка:
C>ccode]
C>>>void myFoo(int *arr, int length)
C>>>{
C>>> for (int i = 0; i < length; i++) {
C>>> arr[i] = 0;
C>>> }
C>>>}
C>const int length = 4;
C>>>int length; std::cin >> length;
C>>>int *arr = new int[length];
C>>>...
C>>>length++;
C>>>...
C>>>myFoo(arr, length);
C>>>[/ccode]

C>Давайте без самодеятельности, ок? length должно быть получено в рантайм (пользовательский ввод, или на основе какой-то логики).

Тогда это пишется так:

void myFoo(std::vector<int> &vec)
{
    for (std::vector<int>::const_iterator it = vec.begin(), end = vec.end(); it != end; it++) { 
        *it = 0;
        }
}
std::vector<int> arr(length);
myFoo(arr);


Хотя, как я уже сказал, разумный человек использует лямбду.
Да здравствует мыло душистое и веревка пушистая.
Re: Модульные тесты и "безопасные" языки - хорошо.
От: Шахтер Интернет  
Дата: 16.07.09 22:01
Оценка:
Здравствуйте, criosray, Вы писали:


C>У кого еще остались сомнения в целесообразности модульных тестов, в целесообразности использования языков/платформ с большим количеством статических и динамических проверок...


C>http://habrahabr.ru/blogs/lifehack/64627/


C>"Прелесть" С++ (кто представляет себе ассемблерный код после компиляции поймет что в таком случае произойдет):

C>
C>int i;
C>int array[4];
C>for (int i = 0; i <= 4; i++) { 
C>    array[i]=0;
C>}
C>



C>(подсказка: бесконечный цикл)


Неверно. UB. Вполне возможно, что просто ничего не будет.


/* temp.cpp */ 

void func()
 {
  int i;
  
int array[4];
for (int i = 0; i <= 4; i++) { 
    array[i]=0;
}  
 }



; Listing generated by Microsoft (R) Optimizing Compiler Version 15.00.21022.08 

    TITLE    d:\2009\MagiC_1_00\CCore\test\temp.cpp
    .686P
    .XMM
    include listing.inc
    .model    flat

INCLUDELIB LIBCMT

PUBLIC    ?func@@YAXXZ                    ; func
; Function compile flags: /Ogtpy
; File d:\2009\magic_1_00\ccore\test\temp.cpp
;    COMDAT ?func@@YAXXZ
_TEXT    SEGMENT
?func@@YAXXZ PROC                    ; func, COMDAT

; 5    :   int i;
; 6    :   
; 7    : int array[4];
; 8    : for (int i = 0; i <= 4; i++) { 
; 9    :     array[i]=0;
; 10   : }  
; 11   :  }

    ret    0
?func@@YAXXZ ENDP                    ; func
_TEXT    ENDS
END
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[7]: Модульные тесты и "безопасные" языки - хорошо.
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.07.09 22:04
Оценка: -1
Здравствуйте, criosray, Вы писали:

C>Не будет ошибки — трудноуловимого бага, как в С++, будет исключение с сообщением о том, что индекс за пределами диапазона.


Вот приятно получить от банкомата исключение с сообщением в тот момент, когда бапки со счета он уже списал, за щеку себе отслюнил, а в руки вам еще не выдал.
Re[6]: Модульные тесты и "безопасные" языки - хорошо.
От: Шахтер Интернет  
Дата: 16.07.09 22:49
Оценка:
Здравствуйте, Vamp, Вы писали:

C>>ccode]

C>>>>void myFoo(int *arr, int length)
C>>>>{
C>>>> for (int i = 0; i < length; i++) {
C>>>> arr[i] = 0;
C>>>> }
C>>>>}
C>>const int length = 4;
C>>>>int length; std::cin >> length;
C>>>>int *arr = new int[length];
C>>>>...
C>>>>length++;
C>>>>...
C>>>>myFoo(arr, length);
C>>>>[/ccode]

C>>Давайте без самодеятельности, ок? length должно быть получено в рантайм (пользовательский ввод, или на основе какой-то логики).

V>Тогда это пишется так:

V>
V>void myFoo(std::vector<int> &vec)
V>{
V>    for (std::vector<int>::const_iterator it = vec.begin(), end = vec.end(); it != end; it++) { 
V>        *it = 0;
V>        }
V>}
V>std::vector<int> arr(length);
V>myFoo(arr);
V>

Код неверный. std::vector<int>::const_iterator

Лучше так

int array[444];

Range(array).set_null();


V>Хотя, как я уже сказал, разумный человек использует лямбду.


Не. Разумный лямбду не использует.
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re: Модульные тесты и "безопасные" языки - хорошо.
От: landerhigh Пират  
Дата: 16.07.09 23:10
Оценка: :)
Здравствуйте, criosray, Вы писали:

C>"Прелесть" С++ (кто представляет себе ассемблерный код после компиляции поймет что в таком случае произойдет):

C>
C>int i;
C>int array[4];
C>for (int i = 0; i <= 4; i++) { 
C>    array[i]=0;
C>}
C>


Что ж вы так убиваетесь? Вы так никогда не убъетесь!
А еще можно format c: сделать.
www.blinnov.com
Re[8]: Модульные тесты и "безопасные" языки - хорошо.
От: _d_m_  
Дата: 17.07.09 00:29
Оценка: 1 (1) +1 :)
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, criosray, Вы писали:


C>>Не будет ошибки — трудноуловимого бага, как в С++, будет исключение с сообщением о том, что индекс за пределами диапазона.


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


Смешно. Для этого существуют транзакции.
Re[3]: Модульные тесты и "безопасные" языки - хорошо.
От: swined Россия  
Дата: 17.07.09 04:32
Оценка:
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>Здравствуйте, Pzz, Вы писали:


Pzz>>Здравствуйте, criosray, Вы писали:


C>>>У кого еще остались сомнения в целесообразности модульных тестов, в целесообразности использования языков/платформ с большим количеством статических и динамических проверок...


Pzz>>Я где-то читал, что повсеместное введение автомобильных ремней безопасности не снизило количество смертей на дорогах: люди почувствовали себя "безопаснее" и стали ездить быстрее.


KV>Ой, а можно с контр-аналогией встряну? Спасибо.


KV>Когда в ПДД, водителей мотоциклов обязали едить в шлеме, травматизм в стране резко вырос. Стали разбираться че за фигня. И вопреки очевидному мнению, что люди стали ездить небрежнее, чувствуя себя в большей защищенности, выяснилась несколько другая вещь. Травматизм действительно вырос, т.к. раньше люди тупо убивались насмерть и портили статистику моргам, а не отделениям травматологии.


KV>"Так-то" (с)


одно не ясно — почему они все вместе не портили статистику ментам, как пострадавшие в аварии?
Re[4]: Модульные тесты и "безопасные" языки - хорошо.
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 17.07.09 06:05
Оценка: +1 :)
Здравствуйте, swined, Вы писали:

S>одно не ясно — почему они все вместе не портили статистику ментам, как пострадавшие в аварии?


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

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re: Модульные тесты и "безопасные" языки - хорошо.
От: catBasilio  
Дата: 17.07.09 07:09
Оценка:
Здравствуйте, criosray, Вы писали:

C>"Прелесть" С++ (кто представляет себе ассемблерный код после компиляции поймет что в таком случае произойдет):

C>
C>int i;
C>int array[4];
C>for (int i = 0; i <= 4; i++) { 
C>    array[i]=0;
C>}
C>


Если уж быть совсем точным, то это "прелесть" C. А в C++ есть std::vector который не позволяет выходить за границу массива.
P.S. Ты еще приведи ассемблерные вставки и рассажи как легко в С++ можно испортить стек\регистры...
UNIX way — это когда тебе вместо туалетной бумаги дают топор, рубанок и карту близлежащего леса
Re[2]: Модульные тесты и "безопасные" языки - хорошо.
От: yoriсk.kiev.ua  
Дата: 17.07.09 07:51
Оценка:
Здравствуйте, Pzz, Вы писали:

C>>У кого еще остались сомнения в целесообразности модульных тестов, в целесообразности использования языков/платформ с большим количеством статических и динамических проверок...


Pzz>Я где-то читал, что повсеместное введение автомобильных ремней безопасности не снизило количество смертей на дорогах: люди почувствовали себя "безопаснее" и стали ездить быстрее.


Т.е. повысив скорость смертность не увеличили.

Pzz>Внедрение безопасных методик и инструментов может повысить продуктивность и качество каждого из нас, уже сложившихся программистов, но не увеличит качество индустрии в целом. Продуктивность может и увеличит, за счет снижения требований к квалификации работников.


Т.е. увеличив количество решаемых задач/уменьшив время на разработку/уменьшив стоимость разработки надёжность не уменьшится.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.