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

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

Рейтинг



Немного поменял концепцию. Во первых убрал модификатор predictable, поскольку нет нужды это делать выборочно. Всё что попало на клиент нуждается в предиктинге, если включен соответствующий квар.
Т.е. там можно сделать некоторые режимы, типа предиктить всё, предиктить только игроков, а внутри VM это будет только запутывать. Поскольку нам надо предсказывать поведение объектов, а не отдельных переменных.

Вместо этого ввёл модификатор unsigned, который влияет только на сейв-рестор и передачу по сети. Так же важный момент, после объявления переменной через двоеточие объявляется сколько бит использует эта переменная. В VM эта настройка не будет влиять на непосредственно размер переменной (по крайней мере на текущий момент). Вместо этого она будет использоваться как хинт - сколько бит используется в данной переменной для сохранения в сейв и передачи на клиент по сети. Т.е. такой очень удобный и наглядный аналог delta.lst. Безо всяких идиотских таблиц и прочего. Кол-во бит будет работать и на флоатах тоже. Никаких множителей не понадобится, этот способ гораздо точнее и надёжнее. Т.е. по сети можно будет передавать даже восьмибитные флоаты или что-то вроде этого.

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

__________________
My Projects: download page

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

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

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

Старое сообщение 19-04-2022 09:05
-
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4133

Рейтинг



Цитата:
Дядя Миша писал:
ввёл модификатор unsigned, который влияет только на сейв-рестор и передачу по сети

При чём тут знаковость?

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

Старое сообщение 19-04-2022 09:35
- За что?
 Дядя Миша
racing for fish

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

Рейтинг



Цитата:
nemyax писал:
При чём тут знаковость?

При передаче по сети - очень даже при чём! Я больше скажу - в обычной программе народ мешает signed\unsigned и это почти никогда ни к каким проблемам не приводит. Всё дерьмо начинается как раз при передаче по сети.
Ты просто не сталкивался.

Добавлено 19-04-2022 в 12:41:

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

__________________
My Projects: download page

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

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

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

Старое сообщение 19-04-2022 09:41
-
 Дядя Миша
racing for fish

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

Рейтинг



На мой взгляд, две самые стрёмные операции, которые абсолютно не нужны в скриптовом языке - это взятие адреса и разыменование указателей.
Не берусь предположить, можно ли было без них обойтись в С++, но ведь он вырос из Си, значит следовало обеспечить полную совместимость.
Но поскольку в С++ есть ссылки, потребность во взятии адреса, на мой взгляд отпадает полностью. Обычно адрес берут, чтобы передать в функцию указатель на аргумент, который будет модифицироваться. Ссылка делает тоже самое, только безопасным образом.
Тут идея в чём. Если указатель не был получен легальным образом, значит он использует какие-то объекты, на которые он не нужен. Глобальные или стековые. Здесь ссылка прекрасно годится.

Но конечно я не исключаю, что не учёл чего-то, по мере развития языка будет видно.

__________________
My Projects: download page

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

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

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

Старое сообщение 19-04-2022 14:15
-
AntiPlayer
Highway to Hell

Дата регистрации: May 2006
Проживает: Смоленск
Сообщений: 1015
Возраст: 33

Рейтинг



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

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

__________________
I tell you to enjoy life

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

Старое сообщение 20-04-2022 14:31
- За что?
 Дядя Миша
racing for fish

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

Рейтинг



C++ Source Code:
typedef const void	foo;


А ну, вот такую бяку опробуйте

__________________
My Projects: download page

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

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

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

Старое сообщение 04-05-2022 13:27
-
 Дядя Миша
racing for fish

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

Рейтинг



Делаю свитч-кейсы и встал интересный вопрос. Вот конструкция:

C++ Source Code:
1
void test( int i )
2
{
3
  switch( i )
4
  {
5
  case '1':
6
      break;
7
  case 2:
8
      break;
9
  case "foo":
10
      break;
11
  }
12
}

Шестёрка на последний кейс почему-то ругается case expression not constant. Что за бред? А какая же это строка? Не константная штоле?
Она должна ругаться case expression of type 'const char' is illegal
или что-то вроде этого. Проверьте как ругаются другие компиляторы.

__________________
My Projects: download page

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

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

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

Старое сообщение 07-05-2022 08:04
-
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4133

Рейтинг



Цитата:
Дядя Миша писал:
case expression of type 'const char' is illegal
или что-то вроде этого

Ho "foo" имеет тип const char*.

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

Старое сообщение 07-05-2022 13:39
- За что?
 XaeroX
Crystice Softworks

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

Рейтинг



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


Цитата:
Дядя Миша писал:
А какая же это строка? Не константная штоле?

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

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

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

Старое сообщение 07-05-2022 14:43
-
 Дядя Миша
racing for fish

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

Рейтинг



Цитата:
XaeroX писал:
ты при желании можешь её изменить в рантайме

и покоцать образ в памяти?

__________________
My Projects: download page

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

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

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

Старое сообщение 07-05-2022 17:14
-
 Дядя Миша
racing for fish

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

Рейтинг



В делфях оказывается есть указатель на функцию абстрактного класса.
Ну т.е. этот тайпдеф необязательно объявлять внутри класса, можно в глобальном пространстве, а вместо имени класса написать object.
Я ради прикола попробовал объявить нечто подобное в С++

C++ Source Code:
void (class::*foo)( void );

В шестерке сразу получилась INTERNAL_COMPILER_ERROR.
Попробуйте на других компиляторах

__________________
My Projects: download page

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

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

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

Старое сообщение 16-05-2022 09:28
-
 Дядя Миша
racing for fish

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

Рейтинг



Вот такую конструкцию попробуйте

C++ Source Code:
int foo[2][2] = { 1, 2 };

Я не могу понять, то ли это UB шестёрки, то ли штатная ситуация.

__________________
My Projects: download page

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

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

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

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

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

Рейтинг



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


Не знаю, что там в шестёрке, но в нормальном компиляторе это инициализирует первый ряд 1 и 2, а второй ряд - нулями.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

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

Старое сообщение 22-05-2022 09:16
-
 Дядя Миша
racing for fish

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

Рейтинг



Дошло. Тут неинтуитивное поведение на самом деле.
Если мы пишем

C++ Source Code:
int foo[8] = { 0 };

У нас массив заполняется нулями. После чего мы вправе(?) ожидать что вот такая конструкция
C++ Source Code:
int foo[8] = { -1 };

Запишет везде -1, однако этого естественно не происходит.
Сама операция присовоения вызывает установку всех элементов массива в 0, кроме тех, для которых значения указаны явно. В первом случае явно указано значение для первого элемента, оно равно нулю, остальные равны нулю по дефолту, из-за чего и формируется ложный стереотип, будто задание еденичного значения забьёт все элементы этим числом. Но в реальности этого конечно не происходит. Аналогичная фигня, кстати и с мемсетом.
Мы задаем ему -1 и ждём, что будет забивать массив наших значений этим числом. Хотя по факту он работает с байтами, т.е. каждый байт 32-битного числа будет забит -1. Что опять-таки явно не то поведение, которое нам бы требовалось. Но в подавляющем большинстве случаев мемсет используется чтобы обнулить память, и это проходит незамеченным. Вполне вероятно, что сам мемсет не стали трогать ради совместимости, сделали еще функцию ZeroMemory, а так же вероятно есть какой-то продвинутый std::memset (но я просто предполагаю), который забивает память вот как раз с учётом типа входного массива.

__________________
My Projects: download page

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

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

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

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

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

Рейтинг



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


Цитата:
Дядя Миша писал:
После чего мы вправе(?) ожидать что вот такая конструкция

Это очень странная логика: считать, что если инициализатор не указан, то используется значение предыдущего. Она очень человеческая, но не математическая.
С точки зрения математической логики, кмк, стоит ожидать, что если инициализатор не указан - то используется 0. Ну сам посуди, когда мы видим запись десятичной дроби: 1.2, что логичнее предположить, что она на самом деле "1.222222222222222222..." или "1.2000000000000000..."?

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

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

Старое сообщение 22-05-2022 18:14
-
Тема: (Опционально)
Ваш ответ:



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


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

Временная зона GMT. Текущее время 14:37. Новая тема    Ответить
Страницы (11): « 1 [2] 3 4 5 6 » ... Последняя »   Предыдущая тема   Следующая тема
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 - 2024