Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/56: Рейтинг темы: голосов - 56, средняя оценка - 4.54
 Аватар для Power_Basic
46 / 25 / 0
Регистрация: 08.03.2016
Сообщений: 443

Быстрый старт в изучении C++ для относительно опытных программистов Basic

18.04.2020, 16:11. Показов 14873. Ответов 253

Студворк — интернет-сервис помощи студентам
В этой ветке предлагаю обсуждать сходства и различия между C++ и Visual Basic.
Ну хотя бы для упрощения процесса изучения параллельного (дополнительного) языка для тех, кто уже относительно неплохо знаком с Visual Basic.
Ну просто как-то "не вкусно" начинать изучение совсем уж с нуля, когда, в принципе, уже и без того много знаешь (циклы, ветвления, указатели, видимость переменных ... ).

На самом деле, начал сейчас просмортр на ютубе курса по C++. Дядька очень толково и понятно всё объясняет, явно есть у него талант хорошего преподавателя.

Самые первые отличия, которые бросились в глаза, это:
- комменты обозначают двумя косыми чертами вместо апострофа,
- в конце каждой строки точка с запятой,
- все процедуры, функции, "тела" циклов ... в фигурных скобках,
- вложенные циклы можно описывать одной строкой,
- если переменная объявлена, но ей не присвоено значение, то она содержит случайный "мусор" из памяти, а не как у нас в бейсике, где сразу получает значение ноль или пустую строку,
- массивы с квадратными скобками вместо круглых,
- область видимости переменных ограничена фигурными скобками и причём неважно функция это, цикл или "тело" функции IF, а не как у нас область видимости переменных ограничена только функциями и процедурами.

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

Сказать по правде, лично мне сейчас C++ и его младший брат нужны, главным образом, для удобства изучения материалов MSDN.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.04.2020, 16:11
Ответы с готовыми решениями:

предложение для опытных программистов
добрый день уважаемые госпда программисты - необходима помощь по выполнению лабораторных по предмету Операционные Системы. Ищу человека...

Быстрый старт и софт для Modicon TM251MESE (Schneider Electric)
Так сложилась ситуация, что в скором времени предстоит познакомиться с ПЛК TM251MESE от Sneider Electric. Начал интересоваться как...

Книги или справочники для опытных(или проффесиональных) программистов!
Пожалуйста, Подскажите книги или справочники для опытных и проффесиональных программистов! Особенно хотелось бы найти: 1) полный...

253
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
28.04.2020, 00:18
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Это ошибка программиста. Если он напишет кривой код - это означает только одно, что он лоханулся
и не формализовал задачу заранее(потому что мне не понятно как можно сделать всё по науке и
криво вбить потом в код, это редкая халатность). По той же самой причине(по криворукости) неверный
алгоритм может также не дать сбой и на обычных структурах языка, а потом выдать себя на важных данных.
В указатели просто так не лезут, это всегда кастомная структура данных и всегда какие-либо
требования к оптимизации кода. Поэтому вся эта "безопасность" - человеческий фактор.
Конечно человеческий, и чтобы облегчить жизнь человеку, как раз и придумывают концепции безопасного программирования. Не бывает такого что программист или команда сделали сразу сложную программу без ошибок. Такого просто не бывает. Что касается ручного управления памятью, решая задачу написания какого-нибудь парсера RTF/DOCX ты просто утонешь в куче разных кусочков, в которых тысячи зависимостей, и за каждой ты или команда просто не сможете уследить. Различные вещи вроде умных указателей/ссылок как в VB6 намного упрощают данную задачу поскольку компилятор сам следит за жизнью объектов, а запрет на прямое манипулирование памятью защищает данные.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
28.04.2020, 03:32
Цитата Сообщение от The trick Посмотреть сообщение
Не бывает такого что программист или команда сделали сразу сложную программу без ошибок.
В идеале когда работа идёт на качество, а не на дедлайн - так и должно быть. Как раз за это всегда и выступал,
чтобы люди всё разрабатывали и тщательно обдумывали в документации и уже потом спокойно перебивали в код
100% формализованные решения с полностью просчитанными зависимостями, либо последовательно отсекали их.
Для этого и существует, модульность и декомпозиция. Багом называю не невнимательность программиста,
а недочёт в аналитике задачи. Если первое человек видит, исправляет и он чист, то второе это реальный косяк.

Давно в миру пытаются пропихнуть такие вещи как "быстрая разработка", когда сначала разрабатываешь
какой-то чёрти пойми как работающий костыль, а потом уже дико бешено начинаешь нашпиговывать его функционалом,
не взирая на то, рассчитана ли уже внедрённая архитектура на такие манипуляции. Это уже лажа концептуально.
В итоге обычно это заканчивается тем, что продукт на пути всего своего жизненного цикла содержит
баги(в т.ч критические) и их количество не уменьшается. Я о том, что это нифига не нормально кто бы
чего не говорил и чем бы не мотивировал. В реальности фраза "поспешишь - людей насмешишь" работает
всегда, причём безотказно.
Человеческий фактор решает существенно больше, чем какие-то резолюции. А для профи же по идее
разницы нет использовать указатели или нет, это новичёк может где-то там в bound контроле лохануться.
нормальный профи вообще всё тестирует всегда, ежели недоглядел. Модульная разработка тем
и хороша, возможностью оттестировать каждую функцию. К этому моменту в теории уже должно
всё работать
, это просто формальность по контролю точности забитого в код механизма.

Цитата Сообщение от The trick Посмотреть сообщение
решая задачу написания какого-нибудь парсера RTF/DOCX ты просто утонешь в
куче разных кусочков, в которых тысячи зависимостей, и за каждой ты или команда просто не сможете уследить.
Для таких вещей нужно хорошо писать документацию. Грамотная документация значит очень много.
Какая бы толстая задача не была. Понятно что один человек всё не уследит, особенно если он пытается
уследить за тем, что разрабатывало не один десяток людей. С другой же стороны если уследить сложно
значит это знак, что не всё сделано концептуально хорошо.
У меня например по UI/UX полно идей как можно улучшить текущие концепции, многие текущие концепции
- это вообще полный слив. Считаю нужно критически подходить ко всему, что "гуляет" в IT.
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
28.04.2020, 10:32
Цитата Сообщение от Quiet Snow Посмотреть сообщение
В идеале когда работа идёт на качество, а не на дедлайн - так и должно быть.
Это в идеале. Назови мне хоть одного программиста кто может написать сложную систему без единого бага с первого раза. Такого не бывает.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Человеческий фактор решает существенно больше, чем какие-то резолюции. А для профи же по идее
разницы нет использовать указатели или нет, это новичёк может где-то там в bound контроле лохануться.
нормальный профи вообще всё тестирует всегда, ежели недоглядел. Модульная разработка тем
и хороша, возможностью оттестировать каждую функцию. К этому моменту в теории уже должно
всё работать, это просто формальность по контролю точности забитого в код механизма.
Ты все идеализируешь. Как ты описываешь так не бывает. К примеру записи за пределы буферов могут себя вообще не проявлять на тестах до поры до времени. Гораздо проще использовать мощь языка который в таких случаях тебе поможет.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Для таких вещей нужно хорошо писать документацию. Грамотная документация значит очень много.
Какая бы толстая задача не была. Понятно что один человек всё не уследит, особенно если он пытается
уследить за тем, что разрабатывало не один десяток людей. С другой же стороны если уследить сложно
значит это знак, что не всё сделано концептуально хорошо.
Документация чего? Формата? И как она поможет? Ты посмотри сколько дыр в том же офисе, там их латают и латают в течение многих лет. Хочешь сказать что офис написан бездарями?
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
28.04.2020, 11:22
Цитата Сообщение от The trick Посмотреть сообщение
Хочешь сказать что офис написан бездарями?
Могу говорить только за себя. Для меня это работает железобетонно. Проги пишу не сложные, но ёмкие
и не каждый профи из нынешних даже так напишет, поставь его в такие же условия.

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

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

Цитата Сообщение от The trick Посмотреть сообщение
Это в идеале. Назови мне хоть одного программиста кто может написать сложную систему без единого бага с первого раза. Такого не бывает.
Именно поэтому и написал про то, что считаю багом. Мой подход предполагает сборку программы
из уже оттестированных модулей. Я допускаю невнимательность программиста при переводе документации
в код, но не допускаю перевода сырых, необдуманных решений.
Уже называл хороших прогеров, locm и ты кстати в их числе. И баги у всех них были исключительно
из-за чужих уродских решений, например Стас когда писал свою шахматную оболочку заколебался
парсить нестандартные "высеры" готовых движков, он рассказывал что там вообще все движки выдавали
разные фокусы и под каждый приходилось хардкодить. Тогда ему помогал в тестировании.
Т.е. которые либо работают нестандартно, либо не имеют нормальной документации. А всё из-за банальной
вещи - отсутствия жёсткой стандартизации тех или иных вопросов. А стандартизация это в первую очередь
ограничительный документ.

Добавлено через 25 минут
Цитата Сообщение от The trick Посмотреть сообщение
Ты все идеализируешь. Как ты описываешь так не бывает.
Не веду речь про науку с кучей недетерминировщины и про те случаи, когда нужно работать в дедлайн.
Если твоя программа от чего то зависит, она уже может быть с багами. Больше зависимостей,
больше вероятности их появления. Потому что ты не знаешь формализованы ли те задачи до конца
или нет, более того ты даже не знаешь сделаны ли они по твоей концепции безопасности, про это
тебе кстати намекнул locm.
Просто хочу сказать о том, что не стоит заранее метить багом то, что является лишь способом действия.
Эта концепция безопасности - лишь заслонка от совсем банальщины, это не гарант отсутствия багов
на который можно уповать. Базовые принципы ведения разработки каждому прогеру хорошо известны
их не обхитрить. А объёмы задачи это лишь ноша аналитика и программиста, если он к ней не готов - смысла
лезть туда не вижу. Никто как бы не говорил, что любое решение делается быстро и безболезненно.
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
28.04.2020, 11:23
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Могу говорить только за себя. Для меня это работает железобетонно. Проги пишу не сложные, но ёмкие и не каждый профи из нынешних даже так напишет, поставь его в такие же условия.
Уверен что в твоих программах нет багов? Скинь пару емких примеров.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
2003-й офис был офигенно написан, как сейчас дела обстоят не знаю, видел новые, от их уродского новоиспечённого интерфейса для лохов можно проблеваться. От супер продуманного эргономичного
интерфейса было принято решение отказаться в сторону какой-то дичи.
https://www.cvedetails.com/vul... -2003.html

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Формата, структуры данных программы и схематика всех механизмов. Плюс полная логич. формализация, что в переводе на русский означает - меньшим числом шагов сделать отдельный конкретный
механизм уже нельзя, т.к. его логика полностью проанализирована и меньшего по детализации
уровня там просто не существует.
Но это не поможет избежать всех багов. На практике чтобы уменьшить количество багов нужно тестировать и лучше каким-нибудь специально разработанным фаззером.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Именно поэтому и написал про то, что считаю багом. Мой подход предполагает сборку программы
из уже оттестированных модулей. Я допускаю невнимательность программиста при переводе документации
в код, но не допускаю перевода сырых, необдуманных решений.
Уже называл хороших прогеров, locm и ты кстати в их числе. И баги у всех них были исключительно
из-за чужих уродских решений, например Стас когда писал свою шахматную оболочку заколебался
парсить нестандартные "высеры" готовых движков, он рассказывал что там вообще все движки выдавали
разные фокусы и под каждый приходилось хардкодить. Тогда ему помогал в тестировании.
Т.е. которые либо работают нестандартно, либо не имеют нормальной документации. А всё из-за банальной
вещи - отсутствия жёсткой стандартизации тех или иных вопросов. А стандартизация это в первую очередь
ограничительный документ.
Как раз использование концепции ЯП это и есть сбор проекта из оттестированных модулей. Не нужно (если специально не оговорено) лезть в сырую память, а нужно использовать средства языка. Ну согласись, глупо вместо массивов к примеру выделять память через LocalAlloc и освобождать через LocalFree, контролировать доступ за пределы когда есть более безопасные массивы которые делают это автоматом. Тоже самое с указателями. Проще и безопаснее иметь умную ссылку и не заботится что где-то что-то ты освободил/не освободил чем вручную все тоже самое реализовывать и следить за этим. Заметь я не против всех этих низкоуровневых штук как указатели и сырая память, я просто говорю что это небезопасно и по возможности нужно пользоваться более высокоуровневыми и безопасными вещами.
0
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,018
Записей в блоге: 7
28.04.2020, 11:34
Цитата Сообщение от The trick Посмотреть сообщение
Ты все идеализируешь. Как ты описываешь так не бывает. К примеру записи за пределы буферов могут себя вообще не проявлять на тестах до поры до времени.
Для этого в ЯП должны быть средства поиска, типа такого. Быстрый старт в изучении C++ для относительно опытных программистов Basic
Как раз следит за наличием записи за пределами буфера. Причем следит не только за памятью, но и за глобальными и локальными переменными включая строковые. В большинстве случаев находит проблему на этапе отладки.

Цитата Сообщение от The trick Посмотреть сообщение
Хочешь сказать что офис написан бездарями?
А что же они не используют предлагаемую вами концепцию безопасного программирования?
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
28.04.2020, 11:41
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Если твоя программа от чего то зависит, она уже может быть с багами. Больше зависимостей,
больше вероятности их появления.
Я не пойму про какие именно ты баги говоришь? Я говорю о багах возникающих из-за нарушения концепции безопасного программирования. Я не говорю о логических багах в программе которые могут возникнуть из-за неправильной архитектуры. Логические баги - это другая тема. Логический баг с использованием концепции безопасного программирования почти никогда не приведет к тем ошибкам которые могут быть допущены с нарушением этой концепции. Я не говорю о том когда сам инструмент (зависимость) сама имеет какой-то баг в следствии того что она была написана с нарушением концепции и не была протестирована должным образом. Логический баг в общем случае закончит твою программу детерменировано и никакие данные не будут испорчены/скомпроментированы.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Потому что ты не знаешь формализованы ли те задачи до конца
или нет, более того ты даже не знаешь сделаны ли они по твоей концепции безопасности, про это
тебе кстати намекнул locm.
locm не понял что я имел в виду, поскольку предоставляя задачу на замену указателям он сразу же начал нарушать концепцию.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Просто хочу сказать о том, что не стоит заранее метить багом то, что является лишь способом действия.
Эта концепция безопасности - лишь заслонка от совсем банальщины, это не гарант отсутствия багов
на который можно уповать. Базовые принципы ведения разработки каждому прогеру хорошо известны
их не обхитрить. А объёмы задачи это лишь ноша аналитика и программиста, если он к ней не готов - смысла
лезть туда не вижу. Никто как бы не говорил, что любое решение делается быстро и безболезненно.
Я опять повторюсь что имею в виду баги из-за нарушения концепции безопасного программирования, а не логические баги. Разницу выше описал.
0
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,018
Записей в блоге: 7
28.04.2020, 11:54
Цитата Сообщение от The trick Посмотреть сообщение
Ну согласись, глупо вместо массивов к примеру выделять память через LocalAlloc и освобождать через LocalFree, контролировать доступ за пределы когда есть более безопасные массивы которые делают это автоматом.
Допустим ситуацию что WinAPI функция требует указатель. Вы вместо выделения памяти создали массив требуемого размера и передали указатель функции, но допустили ошибку (люди иногда ошибаются) и в массиве выделено меньше памяти чем нужно. VB автоматом сможет отследить такую ситуацию?
Вот к примеру вот всех этих кодах включенный purifier обнаружит запись за пределами выделенной памяти.
PureBasic
1
2
3
4
PurifierGranularity(1, 1, 1, 1)
*mem = AllocateMemory(10)
GetModuleFileName_(0, *mem, 100)
Debug PeekS(*mem)
PureBasic
1
2
3
4
PurifierGranularity(1, 1, 1, 1)
s.s{10}
GetModuleFileName_(0, @s, 100)
Debug s
PureBasic
1
2
3
4
PurifierGranularity(1, 1, 1, 1)
s.s = Space(10)
GetModuleFileName_(0, @s, 100)
Debug s
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
28.04.2020, 11:56
Цитата Сообщение от locm Посмотреть сообщение
Для этого в ЯП должны быть средства поиска, типа такого. Быстрый старт в изучении C++ для относительно опытных программистов Basic
Как раз следит за наличием записи за пределами буфера. Причем следит не только за памятью, но и за глобальными и локальными переменными включая строковые. В большинстве случаев находит проблему на этапе отладки.
Я уже скинул что ничего эти средства не находят, более того я могу записать что-то и в буфер, но программа ожидает увидеть что-то другое там - это твои средства тоже не отследят, если специально не городить логику вокруг этого. Но зачем делать какую-то логику если можно делать все изначально безопасно. При использовании концепции безопасного программирования таких багов в принципе быть не может.

Цитата Сообщение от locm Посмотреть сообщение
А что же они не используют предлагаемую вами концепцию безопасного программирования?
Потому что это не всегда возможно, и баги как раз выходят в тех местах где эта концепция нарушается, а не наоборот. К примеру винда написана во многом на C, в котором нет средств предоставляющих какие-либо механизмы для этого. Чтобы переписать все с нуля нужно много сил/времени/денег, поэтому никто этим не занимается. Поэтому обычно если смотреть какую-либо уязвимость то она часто тянется еще с "бородатых времен" когда код писался таким образом как предлагаешь ты.
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
28.04.2020, 11:56
Цитата Сообщение от locm Посмотреть сообщение
Как раз следит за наличием записи за пределами буфера. Причем следит не только за памятью, но и за глобальными и локальными переменными включая строковые. В большинстве случаев находит проблему на этапе отладки.
Каким боком тут вообще PureBasic влез?
Мы вроде как тут обсуждаем C++ в плане его полезности изучения относительно VB6? Не стоит задача изучать PureBasic, тем более он вообще ни к VB6, ни к C++ даже близко.
У него свои инструменты, свой синтаксис, свои возможности. Какой смысл тут приводить аргументы, ссылаясь именно на него?

Давайте про С++ c примерами, с его отладчиками и прочими плюшками, и как эти плюшки помогут в изучении VB6.

А то настрочили 10 страниц оффтопа, по делу вообще ни чего.
ИЛИ давайте ветку перекинем в священные войны, там и бейтесь со своим PureBasic vs VB6!
0
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,018
Записей в блоге: 7
28.04.2020, 12:07
Цитата Сообщение от The trick Посмотреть сообщение
Логический баг с использованием концепции безопасного программирования почти никогда не приведет к тем ошибкам которые могут быть допущены с нарушением этой концепции.
Одно дело если программа падает. Тогда можно с большой долей вероятности отладчик укажет где именно и совсем другое если "безопасное программирование" сгладило баг не дав проге упасть, но при этом исказив работу программы что может привести к куда более серьезным последствиям и отследить баг может быть сложнее.

Цитата Сообщение от The trick Посмотреть сообщение
Логический баг в общем случае закончит твою программу детерменировано и никакие данные не будут испорчены/скомпроментированы.
Он может исказить вычисления что может испортить данные.

Цитата Сообщение от The trick Посмотреть сообщение
locm не понял что я имел в виду, поскольку предоставляя задачу на замену указателям он сразу же начал нарушать концепцию.
Я писал что речь идет о работе с WinAPI и других случаях когда нужна работа с указателями.

Цитата Сообщение от The trick Посмотреть сообщение
Я уже скинул что ничего эти средства не находят
У других находят, а у вас нет... Примеры выше запускали?

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

Цитата Сообщение от Pro_grammer Посмотреть сообщение
PureBasic, тем более он вообще ни к VB6, ни к C++ даже близко.
Работа с памятью похожа.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
28.04.2020, 12:36
Цитата Сообщение от The trick Посмотреть сообщение
Скинь пару емких примеров.
Редактор уже кидал. Крит багов там точно нет. Он тестировался на XP на нескольких машинах.
Хочешь качай тестируй:
https://docs.google.com/docume... BqNoc/edit
Реальная прога, требования к которой по UI были строго заданы проф аналитиком по UI, человек
разложил тогда всё вплоть до каждого клика мышкой. На этом редакторе он примерно 30 карт сделал.
Покажи мне человека из d2k комьюнити, кто создал столько же карт(нормальных, а не квадратных) в одно лицо.
Под 7 тоже работает, к сожалению в ~10 раз медленнее, хотя даже так вполне позволяет его
использовать с приемлемыми по юзабилити характеристиками. О чём уже писал ребятам с pb.
Это был слив железа от Microsoft и NVidia, каждый вендор подосрал.
Косяк не мой(на семёрку не метил, но был неприятно удивлён такой лажей), к сожалению такова
цена использования "чужих" технологий. Разработка была лишком объёмная, чтобы её перефигачить
под OpenGL. Сейчас мне нет резона этим заниматься. Возможно потом перебью, исходники остались.
На XP работает идеально, просто конфетка.

Цитата Сообщение от The trick Посмотреть сообщение
https://www.cvedetails.com/vulnerabi...fice-2003.html
По твоей же ссылке, посмотри сколько в других:
https://www.cvedetails.com/pro... ndor_id=26

А они ведь по супер безопасной наверное написаны концепции. То что там после 2007-го то...

Цитата Сообщение от The trick Посмотреть сообщение
Ну согласись, глупо вместо массивов к примеру выделять память через LocalAlloc и освобождать через LocalFree, контролировать доступ за пределы когда есть более безопасные массивы которые делают это автоматом.
Дело не в массивах, списках и прочих супер удобных и приятных штуках ЯП.
Для меня массив равен по безопасности голым указателям, просто потому что нет резона перебивать
туда неформализованное решение, моя прога не полезет гулять по памяти. Для меня это не вопрос
тестирования, мол только на него полагаюсь, нет, для меня это формальность, когда проверяю как работает
забитый механизм, неточность если она есть обычно всплывает сразу, потому что на этом внимание
и акцентировано(вывести необх параметры и отследить идентичность того, что на бумаге и что в коде).
Обычно есть тест кейсы, которые позволяют выявить косяк, прогер обязан их искусственно создать.

Добавлено через 27 минут
Цитата Сообщение от The trick Посмотреть сообщение
Я не пойму про какие именно ты баги говоришь?
Ты привёл в пример баг отсутствия контроля границ.
Если напишу алгоритм корректно, корректно забью его в код, выход за границы меня не ожидает.
Так? Так какие ко мне тогда вопросы?

Если же алгоритм будет кривой, программа завершится в любом случае и не факт что
не будет потери\порчи данных, это ещё нужно предусмотреть(создать соотв. механизм).
Грубо говоря цикл выдаст значение счётчика, которое превысит верхнюю границу массива,
с включённым отладчиком прога тебя просто остановит поставит брекпоинт, и будет дрючить
до тех пор, пока алгоритм не будет исправлен(при этом не факт что он будет корректен)
без отладчика же и опции контроля границ(их вырубают для скорости) будет тоже самое
небезопасное, прога полетит к чертям.

Концепция безопасности не гарантирует корректности алгоритмов, она просто принуждает
программиста использовать более высокоуровневые элементы. Но программисты обычно и так
сначала делают на ВУ, а потом уже лезут в дебри если надо быстрее. Более предусмотрительные
сразу понимают надо им оно или нет, чтобы не кодить по 10 раз, а сразу сделать хорошо.
Это вопрос выбора, это не гарант чего-то лучшего и более корректного. Если алгоритм написан
корректно, если он полностью формализован и корректно забит в код - он будет с равной
степенью безопасен, это человеческий фактор, но он так и так будет, его никуда не денешь.
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
28.04.2020, 12:38
Цитата Сообщение от locm Посмотреть сообщение
Работа с памятью похожа.
Различие в средствах контроля, отлова возможных ошибок, уборке мусора и т.п.
Или в MSDN внезапно стали печатать примеры на PureBasic?
Давайте не отходить от темы, и прекращаем мерятся крутостью ЯП (тем более, это заслуга их авторов). Иначе тема уедет в https://www.cyberforum.ru/holywars/
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
28.04.2020, 12:42
Цитата Сообщение от locm Посмотреть сообщение
Допустим ситуацию что WinAPI функция требует указатель. Вы вместо выделения памяти создали массив требуемого размера и передали указатель функции, но допустили ошибку (люди иногда ошибаются) и в массиве выделено меньше памяти чем нужно.
Я уже написал ведь - вызов WinAPI небезопасен. Ну спроектировали его таким еще очень давно, а изменять не могут в угоду обратной совместимости. Безопасные API обычно принимают либо какой-либо объект буфер, либо безопасный тип буферов типа BSTR или SAFEARRAY.

Цитата Сообщение от locm Посмотреть сообщение
Вот к примеру вот всех этих кодах включенный purifier обнаружит запись за пределами выделенной памяти.
Не обнаружит:
PureBasic
1
2
3
4
PurifierGranularity(1, 1, 1, 1)
*mem = AllocateMemory(10)
GetModuleFileName_(0, *mem + 14, 100)
Debug PeekS(*mem + 14)
Он насколько я понял проверят просто 4-байтовую сигнатуру (BADF00D) за буфером и все. Никто не мешает записать эту сигнатуру в буфер либо просто пропустить запись в эту область:


Цитата Сообщение от locm Посмотреть сообщение
VB автоматом сможет отследить такую ситуацию?
Придерживаясь концепции безопасного программирования такой ситуации в принципе быть не может.
Вложения
Тип файла: zip vnrl_pb.zip (561 байт, 0 просмотров)
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
28.04.2020, 13:06
Цитата Сообщение от locm Посмотреть сообщение
Одно дело если программа падает. Тогда можно с большой долей вероятности отладчик укажет где именно и совсем другое если "безопасное программирование" сгладило баг не дав проге упасть, но при этом исказив работу программы что может привести к куда более серьезным последствиям и отследить баг может быть сложнее.
Как раз-таки наоборот. К примеру запись за пределы буфера не всегда может себя проявить.

Цитата Сообщение от locm Посмотреть сообщение
Он может исказить вычисления что может испортить данные.
Какие? Приведи пример.

Цитата Сообщение от locm Посмотреть сообщение
Я писал что речь идет о работе с WinAPI и других случаях когда нужна работа с указателями.
А почему ты не привел тогда пример работы с WinAPI с ссылками? Я уже написал как бы задача звучала с точки зрения безопасного программирования, результат получится тот же самый.

Цитата Сообщение от locm Посмотреть сообщение
У других находят, а у вас нет... Примеры выше запускали?
Ты приводишь "удобные" для тебя примеры. Я тебе привожу примеры где это не работает. Мои примеры смотрел? Почему там не работает? Думаешь твои проги будут работать только в условиях "удобных" твоей программе?

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

Добавлено через 12 минут
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Редактор уже кидал. Крит багов там точно нет. Он тестировался на XP на нескольких машинах.
Хочешь качай тестируй:
Посмотрю.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
А они ведь по супер безопасной наверное написаны концепции. То что там после 2007-го то...
Ну вообще-то это статистика найденных уязвимостей, а она включает в себя все продукты, а не только продукты сделанные с этого года

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Дело не в массивах, списках и прочих супер удобных и приятных штуках ЯП.
Как раз в них.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Ты привёл в пример баг отсутствия контроля границ.
Если напишу алгоритм корректно, корректно забью его в код, выход за границы меня не ожидает.
Так? Так какие ко мне тогда вопросы?
Да никаких. Ты посмотри что я писал, а то наверное вы думаете что я против всех этих низкоуровневых штук? Я вообще-то писал о концепции, что придерживаясь ее почти невозможно выстрелить себе в ногу. Но это же не говорит что сырой доступ к памяти - зло. Мало-того средства ЯП которые обеспечивают такой функционал работают на этом уровне. Другой момент что почти любую задачу такого небезопасного уровня можно переписать в безопасной манере, о чем я и написал.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Концепция безопасности не гарантирует корректности алгоритмов, она просто принуждает
программиста использовать более высокоуровневые элементы. Но программисты обычно и так
сначала делают на ВУ, а потом уже лезут в дебри если надо быстрее. Более предусмотрительные
сразу понимают надо им оно или нет, чтобы не кодить по 10 раз, а сразу сделать хорошо.
Это вопрос выбора, это не гарант чего-то лучшего и более корректного. Если алгоритм написан
корректно, если он полностью формализован и корректно забит в код - он будет с равной
степенью безопасен, это человеческий фактор, но он так и так будет, его никуда не денешь.
Ну я о том же говорю! Ты же не пишешь всю программу на ассемблере, потому что так быстрее, ты абстрагируешься от железа чтобы тебе было проще, чтобы не допустить ошибок связанных с железом, но это ведь не исключает ошибок в работе твоего алгоритма. Тоже самое и тут, мы не работаем напрямую с памятью, а через высокоуровневую прослойку которая делает проще разработку и позволяет обойти проблемы с безопасностью.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
28.04.2020, 13:42
Цитата Сообщение от The trick Посмотреть сообщение
а через высокоуровневую прослойку которая делает проще разработку и позволяет обойти проблемы с безопасностью.
Про безопасность в плане вирусов как-бы вообще не говорю, это тема отдельного разговора.
Понятно что это косвенно зависит от багов, но тут наверное даже больше решает просто аналитика
в этом направлении. Скорее всего те вещи про которые ты говоришь важны, но это опять же чтобы
салаги себе карачки не отстреливали, более менее нормальные программисты этим не страдают.
Но и сути то оно не меняет, если злоумышленник поимеет доступ к бинарнику, он чё хочешь
перефигачит и указатель и функцию свою пропишет. Тут просто имеет место быть то, чтобы он
это не сделал средствами самой программы или системных сервисов, которыми программа пользуется.
И тут даже больше рулит самописное, меньше зависимостей, меньше возможности получить уязвимость
через чужой код.

Цитата Сообщение от The trick Посмотреть сообщение
ты абстрагируешься от железа чтобы тебе было проще
В большинстве случаев да. Просто разделяю логику НУ\ВУ, что-то делать бывает проще тупо на асме.
А что-то логичнее просто указателями голыми. Что-то разумеется массивами и т.п..
Для меня важна сопоставляемость(сходность) с самой идеей алгоритма.

Цитата Сообщение от The trick Посмотреть сообщение
Ты же не пишешь всю программу на ассемблере
Да я опупею, разумеется нет
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
28.04.2020, 13:48
Цитата Сообщение от Quiet Snow Посмотреть сообщение
Под 7 тоже работает, к сожалению в ~10 раз медленнее, хотя даже так вполне позволяет его
использовать с приемлемыми по юзабилити характеристиками.
Не сумел оценить тормоза на 7-ке, при первом же запуске с картой ORD10.SCN


С другими картами то же...
На XP уже не могу запустить, дома нет такой.
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
28.04.2020, 13:56
Цитата Сообщение от Quiet Snow Посмотреть сообщение
более менее нормальные программисты этим не страдают.
Ну вон сколько примеров уязвимостей я скинул, это только в одной линейке продуктов.

Цитата Сообщение от Quiet Snow Посмотреть сообщение
Но и сути то оно не меняет, если злоумышленник поимеет доступ к бинарнику, он чё хочешь
перефигачит и указатель и функцию свою пропишет.
Дело не в этом, то что пропатчить бинарник можно это понятно. Другое дело что открывая твоей программой специальный файл, злоумышленник может выполнить произвольный код не изменяя ничего в твоей программе.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
28.04.2020, 14:05

Не по теме:

Цитата Сообщение от Pro_grammer Посмотреть сообщение
Не сумел оценить тормоза на 7-ке, при первом же запуске с картой ORD10.SCN
Он работает с *.MAP картами Dune 2000 с одним тайлсетом BloxBgbs (он исп в большинстве карт).
Другого не заявлено, только с картами, не со сценариями. А ты что из старкрафта первого сценарий
открыть захотел? Так у них свой редактор официальный есть, кошернейший. Для 2k официальных не было.
Был кастрированный shai hulud, в целом неплохой, но отображение спайса там не соответствует,
редактировать спайс - боль. И тайлсетов в комплекте не было(ну знаешь все эти заморочки с правами).
Попробуй распаковать карту Open Battle из архива прям в папку с экзешником, если путь не менял
в левом списке - сразу её увидишь в правом.


...
Вложения
Тип файла: zip 8play7.zip (15.8 Кб, 2 просмотров)
0
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,018
Записей в блоге: 7
28.04.2020, 14:08
Цитата Сообщение от The trick Посмотреть сообщение
Не обнаружит
Вы умышлено изменили условия.
Задача была отследить запись за пределами буфера. Тот код что я выложил, это выполняет?

Цитата Сообщение от The trick Посмотреть сообщение
Никто не мешает записать эту сигнатуру в буфер либо просто пропустить запись в эту область:
Зачем ломать систему защиты, тем более что это не так просто? Ведь проверка выполняется сразу после вызова WinAPI. Речь о защите а не о взломе систем защиты.

Цитата Сообщение от The trick Посмотреть сообщение
Я уже написал ведь - вызов WinAPI небезопасен.
Допустим что VB задачу по другому решить не получится. Что будете делать? Отвечать необязательно. Я видел много вашего кода на VB где используется WinAPI. Видимо в этот момент про безопасное программирование не думаете.

Цитата Сообщение от The trick Посмотреть сообщение
Как раз-таки наоборот. К примеру запись за пределы буфера не всегда может себя проявить.
Я приводил код который это обнаруживает, а вы его умышлено исказили и написали что не работает.

Цитата Сообщение от The trick Посмотреть сообщение
Какие? Приведи пример.
Зависит от кода.

Цитата Сообщение от The trick Посмотреть сообщение
А почему ты не привел тогда пример работы с WinAPI с ссылками?
Что мешало вам его привести?

Цитата Сообщение от The trick Посмотреть сообщение
Ты приводишь "удобные" для тебя примеры. Я тебе привожу примеры где это не работает.
Я привожу примеры который встречаются в реальном коде, а вы их искажаете до маловероятных случаев.

Цитата Сообщение от The trick Посмотреть сообщение
Мои примеры смотрел?
Приветите пример на VB с GetModuleFileName с обнаружением записи за пределами буфера.
Только не нужно писать что это небезопасно. Представьте что по другому задачу не решить.

Цитата Сообщение от The trick Посмотреть сообщение
Я вообще-то писал о концепции, что придерживаясь ее почти невозможно выстрелить себе в ногу.
Утопия! За это приходится платить.
Почему думаете современные приложения тормознутые и раздутые?

Цитата Сообщение от The trick Посмотреть сообщение
Другой момент что почти любую задачу такого небезопасного уровня можно переписать в безопасной манере, о чем я и написал.
В VB или в управляемом коде?
Повторюсь не все возможно сделать на этом уровне. Мне часто приходится работать на низком уровне для взаимодействия с микроконтроллерами и на этом уровне управляемый код не самое лучшее решение.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.04.2020, 14:08

набор опытных C++ программистов
Большой иностранный банк проводит набор опытных C++ программистов для IT-департамента своего московского офиса. Необходимы кандидаты с...

Приглашаю На работу Опытных Программистов
Всем привет . Я ищю Хороших программистов для работы над Онлайн игрой ( в типе neverlands) От вас Требую одно хорошую ...

Нужен совет опытных программистов на C#
Всем добрый день! Я здесь абсолютно новенький! Так что прошу сразу не кидать камнями если задаю вопросы не там где нужно! :) Совсем...

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

Требуется совет опытных программистов
Основы С++ более менее изучены. Что же дальше? Что учить чтоб писать хоть какие то простенькие прикладные программы?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
200
Ответ Создать тему
Новые блоги и статьи
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru