HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Флуд > Заметки на полях
Разработка С++ совместимой виртуальной машины
Страницы (5): « 1 2 [3] 4 5 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
 Дядя Миша
who said meow?

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 29620
Нанёс повреждений: 390 ед.

Рейтинг



Цитата:
XaeroX писал:
Она очень человеческая, но не математическая.

В данном случае я руководствуюсь логикой программиста.
У программиста в программе бывает два количества объектов: еденичный объект и сколько угодно объектов. Таким образом если что-то указано ОДИН РАЗ - значит это надо применить ко всему. Если больше одного, ну неважно сколько - значит имелось в виду что-то еще.
Помоему логично? Потому что в программировании есть волшебные константы 0 и 1. Любые другие числа, это уже хак.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

>> так а раньше почему падало ?
> Потому что говно ваш С++, вот почему

Сообщить модератору | | IP: Записан
Сообщение: 209352

Старое сообщение 22-05-2022 18:36
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 33146
Нанёс повреждений: 504 ед.
Возраст: 35

Рейтинг



Награды
 
[1 награда]


Цитата:
Дядя Миша писал:
я руководствуюсь логикой программиста

Впервые слышу о такой.
Цитата:
Дядя Миша писал:
Таким образом если что-то указано ОДИН РАЗ - значит это надо применить ко всему. Если больше одного, ну неважно сколько - значит имелось в виду что-то еще.

Предположим, у нас есть строка s, заранее выделенная, размером 8 символов.
Тогда, по твоей логике, присвоение:
s = "ab";
даст нам строку "ab", а вот такое присвоение:
s = "a";
даст нам строку "aaaaaaaa", я правильно понял логику программиста?

__________________
Братские могилы переполнены,
Смерть серпом косила буйны головы.
Рваную рубаху пулями латай,
Топоры да плаха по дороге в рай!

Сообщить модератору | | IP: Записан
Сообщение: 209354

Старое сообщение 22-05-2022 18:44
-
 Дядя Миша
who said meow?

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 29620
Нанёс повреждений: 390 ед.

Рейтинг



XaeroX всё что я написал выше касается только инициализации массивов, очевидно же. Здесь неинтуитивный момент.
Причём ожидаемое поведение действительно бывает нужно.
Потому что повторюсь, мемсет тоже делает не то, что нужно.
Приходится в цикле присваивать. Т.е. оба способа последовательно фейлят.

Добавлено 22-05-2022 в 21:49:

Цитата:
XaeroX писал:
Предположим, у нас есть строка s, заранее выделенная, размером 8 символов.

Ах да, совсем забыл. В моей VM строки - это не массивы
Это отдельный атомарный тип. Поэтому проблемы нет.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

>> так а раньше почему падало ?
> Потому что говно ваш С++, вот почему

Сообщить модератору | | IP: Записан
Сообщение: 209355

Старое сообщение 22-05-2022 18:49
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 33146
Нанёс повреждений: 504 ед.
Возраст: 35

Рейтинг



Награды
 
[1 награда]


Цитата:
Дядя Миша писал:
всё что я написал выше касается только инициализации массивов, очевидно же. Здесь неинтуитивный момент.

Как раз с житейской точки зрения - очень интуитивный.
Вот допустим, у тебя есть пять коробок, и тебе дали два яблока, положить их по коробкам. Что ты сделаешь? Положишь в две, а три будут пустыми ("инициализированными нулём"). А если у тебя всего одно яблоко - с какого же такого перепугу у тебя в каждой коробке появится по яблоку?
Цитата:
Дядя Миша писал:
Причём ожидаемое поведение действительно бывает нужно.

Для этого в некоторых языках придумали функции типа fill.
Ну или в том же STL, ты можешь написать:
C++ Source Code:
std::vector<int> vec(5, 6);

что создаст тебе вектор из 5 элементов, каждый из которых равен 6.
Это логично, потому что ты сначала задаёшь размер вектора, а потом - чем его инициализировать. Но это неинтуитивно, потому что заменив скобки:
C++ Source Code:
std::vector<int> vec{5,6};

мы получим вектор из двух элементов 5 и 6.
Но это скорее проблема std::initializer_list из С++11, а не логики как таковой.

__________________
Братские могилы переполнены,
Смерть серпом косила буйны головы.
Рваную рубаху пулями латай,
Топоры да плаха по дороге в рай!

Сообщить модератору | | IP: Записан
Сообщение: 209356

Старое сообщение 22-05-2022 18:55
-
 Дядя Миша
who said meow?

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 29620
Нанёс повреждений: 390 ед.

Рейтинг



XaeroX неудачный пример. Ты приводишь в пример ресурсы, которые могут дать, а могут и не дать. В данном случае, у нас яблок сколько угодно, но нам лень их раскладывать по коробкам. Мы хотим чтобы все яблоки прыгнули в коробки, по примеру первого.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

>> так а раньше почему падало ?
> Потому что говно ваш С++, вот почему

Сообщить модератору | | IP: Записан
Сообщение: 209357

Старое сообщение 22-05-2022 18:58
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 33146
Нанёс повреждений: 504 ед.
Возраст: 35

Рейтинг



Награды
 
[1 награда]


Цитата:
Дядя Миша писал:
В данном случае, у нас яблок сколько угодно, но нам лень их раскладывать по коробкам. Мы хотим чтобы все яблоки прыгнули в коробки, по примеру первого.

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

__________________
Братские могилы переполнены,
Смерть серпом косила буйны головы.
Рваную рубаху пулями латай,
Топоры да плаха по дороге в рай!

Сообщить модератору | | IP: Записан
Сообщение: 209358

Старое сообщение 22-05-2022 18:59
-
 Дядя Миша
who said meow?

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 29620
Нанёс повреждений: 390 ед.

Рейтинг



Опять же, важный момент замечу.

C++ Source Code:
char foo[32] = { 0 };

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

Добавлено 22-05-2022 в 22:03:

Цитата:
XaeroX писал:
Ок, но тогда и синтаксис должен как-то отличаться

Не. Достаточно просто того, что мы указали ОДИН РАЗ. Впрочем, можно вообще убрать нахрен все скобки. Думаю это будет самый оптимальный вариант. Инициализация без скобок вообще забьёт массив одним и тем же числом. Сохраняем совместимость и вводим новую особенность.

Добавлено 22-05-2022 в 22:04:

В крайнем случае можно вывести варнинг nonstandard extension used или что-то вродеэ того.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

>> так а раньше почему падало ?
> Потому что говно ваш С++, вот почему

Сообщить модератору | | IP: Записан
Сообщение: 209359

Старое сообщение 22-05-2022 19:04
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 33146
Нанёс повреждений: 504 ед.
Возраст: 35

Рейтинг



Награды
 
[1 награда]


Цитата:
Дядя Миша писал:
Даже если в остальные согласно какому-то стандарту запишется мусор, это будет уже неважно - главное что первый символ обнулён.

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

Добавлено 22-05-2022 в 15:11:

Цитата:
Дядя Миша писал:
Впрочем, можно вообще убрать нахрен все скобки. Думаю это будет самый оптимальный вариант. Инициализация без скобок вообще забьёт массив одним и тем же числом. Сохраняем совместимость и вводим новую особенность.

Этот вариант звучит неплохо, кстати.
Тогда логика будет такая: есть скобки - инициализируем данными из списка инициализации, нет скобок - заполняем одним значением.

__________________
Братские могилы переполнены,
Смерть серпом косила буйны головы.
Рваную рубаху пулями латай,
Топоры да плаха по дороге в рай!

Сообщить модератору | | IP: Записан
Сообщение: 209360

Старое сообщение 22-05-2022 19:11
-
 Дядя Миша
who said meow?

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 29620
Нанёс повреждений: 390 ед.

Рейтинг



Цитата:
XaeroX писал:
Тогда логика будет такая: есть скобки - инициализируем данными из списка инициализации, нет скобок - заполняем одним значением.

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

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

>> так а раньше почему падало ?
> Потому что говно ваш С++, вот почему

Сообщить модератору | | IP: Записан
Сообщение: 209361

Старое сообщение 22-05-2022 19:13
-
 Дядя Миша
who said meow?

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 29620
Нанёс повреждений: 390 ед.

Рейтинг



Расскажу вам как появился знаменитый баг компилятора MSVC 6.0, связанный с выпадением счётчика цикла за пределы видимости самого цикла.
Очень просто. Дело в том, что любая область внутри фигурных скобок считается как область подвидимости функции. Причём компилятор не различает к чему относятся эти скобки, для него это просто новая секция.
И такое поведение в принципе корректно для любых конструкций. Больше нигде никаких переменных не объявляется, ни в do ни во while, ни в switch ни в if. А чистый Си не дозволял объявлять в секции инициализации for новые переменные. Ну вот так этот баг только для одного for и приключился.
Невнимательность
Там надо было зайти в подобласть видимости уже после ключевого слова for.
Вот и вся хитрость.

Добавлено 28-05-2022 в 15:13:

Очередная чумовая проверка компиляторов на вшивость

C++ Source Code:
1
while( 0 )
2
{
3
  int	i;
4
}

В чём тут смысл:
1. условие константное
2. условие никогда не будет выполнено
Следовательно код в секции - мёртвый и его можно вообще скипнуть, не пытаясь распарсить. А как это проверить? Ну вот суём и смотрим - будет ли ругань на unreferenced local variable в разных режимах компиляции.
Если код был просто пропущен, то ессно ругани не будет.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

>> так а раньше почему падало ?
> Потому что говно ваш С++, вот почему

Сообщить модератору | | IP: Записан
Сообщение: 209501

Старое сообщение 28-05-2022 12:13
-
 Дядя Миша
who said meow?

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 29620
Нанёс повреждений: 390 ед.

Рейтинг



Очередная чумовая проверка компиляторов от дяди Мишы.
Вставьте куда-нибудь вне любой функции неименованый блок скобок

C++ Source Code:
{
}

И посмотрите как будет ругаться компилятор. Вы возможно не задумывались, но это запрещённая конструкция по сути. Неименованный блок скобок возможен только внутри тела функции, как subscope.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

>> так а раньше почему падало ?
> Потому что говно ваш С++, вот почему

Сообщить модератору | | IP: Записан
Сообщение: 209608

Старое сообщение 06-06-2022 14:24
-
 Дядя Миша
who said meow?

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 29620
Нанёс повреждений: 390 ед.

Рейтинг



Очевидное-невероятное. Шестёрка всё-таки даёт создать конструкцию вида

C++ Source Code:
typedef class *class_t;

Но при попытке что-то присвоить такому указателю выдаётся ошибка:
C++ Source Code:
'=' : cannot convert from 'class CScriptCompiler *const ' to 'class $S60 *'

Что это за класс $60?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

>> так а раньше почему падало ?
> Потому что говно ваш С++, вот почему

Сообщить модератору | | IP: Записан
Сообщение: 209647

Старое сообщение 08-06-2022 15:46
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 33146
Нанёс повреждений: 504 ед.
Возраст: 35

Рейтинг



Награды
 
[1 награда]


Цитата:
Дядя Миша писал:
Что это за класс $60?

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

__________________
Братские могилы переполнены,
Смерть серпом косила буйны головы.
Рваную рубаху пулями латай,
Топоры да плаха по дороге в рай!

Сообщить модератору | | IP: Записан
Сообщение: 209648

Старое сообщение 08-06-2022 15:47
-
 Дядя Миша
who said meow?

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 29620
Нанёс повреждений: 390 ед.

Рейтинг



ЗЫ. от константности никак не зависит, всё равно не даёт.
Чувствую себя Скаржем, у которого унреал не запустился на 8086.

Добавлено 08-06-2022 в 18:48:

Цитата:
XaeroX писал:
Это совершенно легальная конструкция в плюсах.

Так у меня она не только легальная, но и юзабельная. Я её использую как указатель на абстрактный класс.

Добавлено 08-06-2022 в 18:55:

Цитата:
XaeroX писал:
Безымянный класс, что тебя смущает?

Да гдеж он безымянный? Доллар по 60 называется.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

>> так а раньше почему падало ?
> Потому что говно ваш С++, вот почему

Сообщить модератору | | IP: Записан
Сообщение: 209649

Старое сообщение 08-06-2022 15:55
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 33146
Нанёс повреждений: 504 ед.
Возраст: 35

Рейтинг



Награды
 
[1 награда]


Цитата:
Дядя Миша писал:
Да гдеж он безымянный? Доллар по 60 называется.

Ты навсякий случай много таких классов не создавай. А то по двести будет!

__________________
Братские могилы переполнены,
Смерть серпом косила буйны головы.
Рваную рубаху пулями латай,
Топоры да плаха по дороге в рай!

Сообщить модератору | | IP: Записан
Сообщение: 209650

Старое сообщение 08-06-2022 15:56
-
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 16:53. Новая тема    Ответить
Страницы (5): « 1 2 [3] 4 5 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Флуд > Заметки на полях
Разработка С++ совместимой виртуальной машины
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2022