HLFX.Ru Forum Страницы (13): « 1 [2] 3 4 5 6 » ... Последняя »
Показать все 188 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Флуд (https://hlfx.ru/forum/forumdisplay.php?forumid=11)
-- Заметки на полях (https://hlfx.ru/forum/showthread.php?threadid=5815)


Отправлено Дядя Миша 19-04-2022 в 09:05:

Немного поменял концепцию. Во первых убрал модификатор 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'


Отправлено nemyax 19-04-2022 в 09:35:

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

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


Отправлено Дядя Миша 19-04-2022 в 09:41:

Цитата:
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'


Отправлено Дядя Миша 19-04-2022 в 14:15:

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

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено AntiPlayer 20-04-2022 в 14:31:

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

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

__________________
I tell you to enjoy life


Отправлено Дядя Миша 04-05-2022 в 13:27:

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'


Отправлено Дядя Миша 07-05-2022 в 08:04:

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

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'


Отправлено nemyax 07-05-2022 в 13:39:

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

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


Отправлено XaeroX 07-05-2022 в 14:43:

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

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

__________________

xaerox on Vivino


Отправлено Дядя Миша 07-05-2022 в 17:14:

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

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 16-05-2022 в 09:28:

В делфях оказывается есть указатель на функцию абстрактного класса.
Ну т.е. этот тайпдеф необязательно объявлять внутри класса, можно в глобальном пространстве, а вместо имени класса написать 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'


Отправлено Дядя Миша 22-05-2022 в 09:12:

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

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'


Отправлено XaeroX 22-05-2022 в 09:16:

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

__________________

xaerox on Vivino


Отправлено Дядя Миша 22-05-2022 в 11:10:

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

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'


Отправлено XaeroX 22-05-2022 в 18:14:

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

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

__________________

xaerox on Vivino


Временная зона GMT. Текущее время 09:34. Страницы (13): « 1 [2] 3 4 5 6 » ... Последняя »
Показать все 188 сообщений этой темы на одной странице

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