Сторінка 29 з 34
Додано: 28 квітня 2010 15:40
[PK]onSide
плюсовые виртуальные функции, эксепшены, рантайм информация об обьектах, умные указатели, запреты использования указателей - это не велосипедный рантайм и не латентное жаволожество не ?
Я же написал "чистый сишник". Райнтайм, плюсы не использую, только WinAPI
Поконкретнее когда ты тыкаешь грязным поинтером то очень тяжело системе определять ткнул ты туда куда надо или не туда.
Если ты имеешь ввиду проверку валидности указателя, то для этого есть спец. ф-ции + обработчики исключений.
Додано: 28 квітня 2010 15:44
pR13S7
[PK]onSide
Я же написал "чистый сишник". Райнтайм, плюсы не использую, только WinAPI
вин-апи это С++
обработчики исключений
и это тоже не чистый С, а С++. вот ассерты и прочая предпроцессорная муть чистый С
Додано: 28 квітня 2010 15:48
Мега Заяц
Если ты имеешь ввиду проверку валидности указателя, то для этого есть спец. ф-ции + обработчики исключений.
Ну давай помечтаем. указатель это int размерностью с машинное слово. 0 адрес определяет его невалидность например. остальные вполне себе нормальные. Как ты проверишь валидность ?
ты делаешь например
#define TIKAEM_GRYAZNIM_POINTEROM 1
while(i++<1000)
array
= TIKAEM_GRYAZNIM_POINTEROM
каждый раз при косвенной адресации к массиву надо делать проверку ?
вин-апи это С++
Винапи это Си.
и это тоже не чистый С, а С++. вот ассерты и прочая предпроцессорная муть чистый С
Есть куча хаковых реализаций исключений на сях. Даже если ты их не юзаешь то сорт оф ОС-исключения есть, и по дефолту на системные каки выходят из программы.
Додано: 28 квітня 2010 15:50
pR13S7
Мега Заяц
Винапи это Си.
ORLY ?

писать систему на плюсах и делать апи для С ?

Додано: 28 квітня 2010 15:53
Мега Заяц
pR13S7
Мне всёравно на чём оно написано. Во всех доках и функциях чистейший си.
Другое дело что сейчас писать на сях в винапи это надо быть совсем неадекватным... Там же декларация окна на 200 строк только.
Ладно уломал. винапи вобще можно из Асма вызывать. Отладчики даже подхватывают что то типа MessageBox. Наверное просто хотели максимально простой ABI без объектов, виртуальных функций и всего такого...
Додано: 28 квітня 2010 16:15
[PK]onSide
Да уж))
Исключения генерирует процессор, есть такие штуки как SEH & VEH, так же есть ф-ция SetUnhandledExceptionFilter, в которую будут приходит ваши исключения. Сишные експешены это вообще другое=)
Валидность как проверить? В системе ведется учет выделяемых виртуальных страниц памяти, можно перебрать список и проверить юзается ли такой адрес. Плюс самое элементарное это обратится по адресу и словить исключение.
Что значит каждый раз проверять? Это твоя программа, ты должен знать что будет заноситься в твой массив. Конечно любители цпп просто вставят try-catch, не пытаясь сделать так чтобы неверные адреса туда не заносились вообще. Терпеть не могу такой подход, потому что девелопер должен отвечать за действия проги и продумывать все)
Дык оконные приложения не пишу. Хотя пару раз приходилось простенькие, геморно конечно, не спорю))
Додано: 28 квітня 2010 16:30
LeXX
Мега Заяц писав:А чо бы вдруг?
С того что это настолько огромный энтерпрайз что всё меркнет. Тоесть впринципе совершенно другой мир с кучей рефлексий, загрузок модулей, кодогенерацией. На плюсах такое ненавелосипедишь. А во вторых они не няшные.
/me какбэ в курсе
Ну, можно вспомнить всякие мертворожденные извраты в стиле Эйфеля и прочей бадяги, в конце концов, где он чисто номинально есть, но работает постольку поскольку
А ви таки додрочили стандартный набор быдлокодера включающий пхп, питон, жаваскрипт, эрланг и хаскиль ?
Просто даже мне какбы насрать что подсчёт ссылок это некрута, и то что в ФП можно делать эффективные сборщики мусора которые за один проход всё говно чистят. А еще жаву всегда можно потролить отсуствием TCO
о да, хаскель - мечта всей моей жизни. Хотя ващще всегда мечтал пойти на серьезную работку кодить на шекспире или мозготрахе, ога.
А потроллить много чем можно, даже тем же безграничным ынтырпрайзом - было бы желание
Добавлено спустя 37 секунд:
си + апи? мило.
Додано: 28 квітня 2010 16:59
Мега Заяц
[PK]onSide
у тебя походу ваще всё в голове перемешалось.
В системе ведется учет выделяемых виртуальных страниц памяти, можно перебрать список и проверить юзается ли такой адрес.
на каждый байт оперативы флаг занятости ? Ну ладно можно пределы выданного mallocом куска проверять. ты понимаешь что на каждый MOV вызывать функцию которая будет проверять память это некруто совсем.
Плюс самое элементарное это обратится по адресу и словить исключение.
mov шаровой_адрес шаровые_данные
где что ловить в таком случае ?
Это твоя программа, ты должен знать что будет заноситься в твой массив.
идиалист такой идиалист.
Конечно любители цпп просто вставят try-catch, не пытаясь сделать так чтобы неверные адреса туда не заносились вообще.
ЦПП НЕ словит выход на границы массива
Добавлено спустя 2 минуты 3 секунды:
о да, хаскель - мечта всей моей жизни.
пока ты так думаешь ты и будешь относиться к нему как к чему-то заоблачному.
А потроллить много чем можно
Это вас, аматоров можно. Я давно перерос аматорский уровень ))
Додано: 28 квітня 2010 17:27
[PK]onSide
Да вроде не перемешивалось ничего))
Винда работает в защищенном режиме проца. При обращении по виртуальному адресу идет трансляция в физический с использованием таблицы страниц, и если там нет нужной страницы то сгенерится исключение которое сначала попадет в ядро винды а потом в пользовательское приложение. И да, это происходит при каждом MOV, это делает процессор.
Приложение может проверить примерно так try {mov eax,[any_address]} catch(memory_access_violation)
ЦПП НЕ словит выход на границы массива
Твоя программа, ты и лови. Почему то у меня и знакомых такого не бывает, ну разве что по собственной глупости и быстро исправляется. Я не знаю как можно написать такой код

Можно пример реальной задачи где такое может быть?
Додано: 28 квітня 2010 17:48
Мега Заяц
При обращении по виртуальному адресу идет трансляция в физический с использованием таблицы страниц,
говорю ж перемешалось.
Твоя программа, ты и лови. Почему то у меня и знакомых такого не бывает, ну разве что по собственной глупости и быстро исправляется. Я не знаю как можно написать такой код Можно пример реальной задачи где такое может быть?
выход за границы массива = обращение к любой памяти вобще. почему-то раньше ты допускал что такое может быть.
Добавлено спустя 16 минут 45 секунд:
ну в целом я понял куда ты клонишь. что то совсем забыл про x86 ))
Ваще то там АД. кернел моде, юзер моде. страничная память

Никто почти не знает эти тонкости...
Додано: 28 квітня 2010 17:53
[PK]onSide
Что перемешалось? Ты спросил как это работает, я тебе обьяснил))
но обращение к любой памяти != выход за границы массива)) Одно дело, проверить валидность адреса, а другое обьявить массив из 10 элементов а в цикле for(int i=0;i==10;i++) вместо i<10, или по твоему среда разработки должна защищать от таких тупых ошибок?))
Додано: 28 квітня 2010 18:01
Hel
[PK]onSide
за такое вообще нужно пальцы отрывать.
Додано: 28 квітня 2010 18:03
Мега Заяц
Но обращение к любой памяти != выход за границы памяти данной процессу.. если точно. Да, для каждого процесса делается своя память. А когда то были сегменты. Но да, в пределах выданной процессу памяти в винде на x86 можно срать куда угодно...
Ну в хеллоу ворлдах может и не будет такого. Но мало ли. Разные обязанности по созданию и удалению...
Вот сделаешь ты например
char* fun(){ char* s = "segmentation fault"; return s }
и всё... хотя тоже децкая ошибка
Но мало ли. Разные обязанности по созданию и удалению например. в плюсах ваще всё на стеке мутят по raii и не паряца
Додано: 28 квітня 2010 18:51
LeXX
зайка, да мне ващще на троллинг в целом насрать =)
А чем-то заоблачным мну хаскель не кажется, просто он мну и нахрен не сдался. Как и пролог, фортран, кобол, ада, эйфель, матлаб и куча другой бадяги.
Додано: 28 квітня 2010 19:05
Мега Заяц
Как и пролог, фортран, кобол, ада, эйфель, матлаб и куча другой бадяги.
А комон лисп ?