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

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)


Отправлено Дядя Миша 27-03-2022 в 14:02:

Заметки на полях

Я, как вы, должно быть знаете, в данный момент работаю над собственной виртуальной машиной для XashNT, которая будет использоваться для описания игровых объектов, меню и интерфейса редактора. Ну и может еще для чего-нибудь. Чтобы не плодить сущности, я решил сделать в этой машинке слегка ограниченный С++, который будет иметь большинство возможностей настоящего, но при этом выполняться в виртуальной среде и иметь всю необходимую мета-информацию, ради которой, виртуальные машинки обычно и пишутся. Соответственно, чтобы привести синтаксис в соответствие с настоящим компилятором С++, мне иногда приходится проводить забавные эксперименты, о которых нигде не написано и которые обычно никому не приходят в голову.
Я решил собрать в верхнем посте все подобные казусы, ну по типу того, как иногда выходят статьи на Хабре про аналогичные вещи. Поехали:

C++ Source Code:
enum;

С точки зрения языка, конструкция абсолютно бессмысленная, хотя и вполне валидная. В чём секрет? Ну для enum и имя и инициализаторы являются опциональными.

C++ Source Code:
1
typedef class
2
{
3
  int foo;
4
} MyClass;

А тут уже интереснее. Как вы знаете, замута с typdef struct унаследована от Си, а в С++ опциональна. Хотя struct в C++ это тоже класс, просто область доступа у него по дефолту public. Но как видите - различие есть.
Эта конструкция (по крайней мере в MSVC 6.0) компилится, а потом выдаёт ошибку вообще из какого-то произвольного места на этапе линковки.
Попробуйте в других студия, интересно что из этого получится.

__________________
My Projects: download page

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

Цитата:

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


Отправлено SNMetamorph 28-03-2022 в 09:31:

Почему просто не взять какой-то нибудь AngelScript вместо виртуальной машины?

__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord


Отправлено Дядя Миша 28-03-2022 в 10:58:

Есть вещи, которые лично меня там не устраивают.

__________________
My Projects: download page

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

Цитата:

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


Отправлено a1batross 28-03-2022 в 11:18:

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

__________________
Xash3D FWGS форк


Отправлено Дядя Миша 28-03-2022 в 11:42:

Цитата:
a1batross писал:
Не знаю как у тебя что-то на линковке ломается

unresolved external symbol

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 29-03-2022 в 09:14:

Товарищи, нужна ваша небольшая помощь. Если у вас есть под рукой разные компиляторы, потестируйте следующую ситуацию:

C++ Source Code:
1
void TestStackFree( void )
2
{
3
  int	i;
4
 
5
  delete &i;
6
}

Шестёрка, естественно, это жрёт без вопросов даже c Warning Level 4.
Интересно, как обстоят дела на свежих MSVC или GCC или Clang.
Буду признателен.

__________________
My Projects: download page

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

Цитата:

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


Отправлено SNMetamorph 29-03-2022 в 09:30:

Цитата:
Дядя Миша писал:
Товарищи, нужна ваша небольшая помощь. Если у вас есть под рукой разные компиляторы, потестируйте следующую ситуацию:

C++ Source Code:
1
void TestStackFree( void )
2
{
3
  int	i;
4
 
5
  delete &i;
6
}

Шестёрка, естественно, это жрёт без вопросов даже c Warning Level 4.
Интересно, как обстоят дела на свежих MSVC или GCC или Clang.
Буду признателен.

Clang 13.0.1 - без ошибок, без варнингов
GCC 11.2 - без ошибок, варнинг 'void operator delete(void*, long unsigned int)' called on unallocated object 'i' [-Wfree-nonheap-object]
MSVC 19.31 - без ошибок, без варнингов
ICC 2021.5.0 - без ошибок, без варнингов

Добавлено 29-03-2022 в 13:30:

PVS Studio пишет примерно то же, что и GCC

__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord


Отправлено Дядя Миша 29-03-2022 в 09:32:

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

__________________
My Projects: download page

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

Цитата:

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


Отправлено SNMetamorph 29-03-2022 в 09:38:

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

Но с другой стороны для этого есть анализаторы кода, которые эту задачу выполняют вполне нормально

__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord


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

Никогда об этом не задумывался, но вот такая конструкция

C++ Source Code:
void Test( class *ptr )
{
}

Вполне валидная. Проверьте на GCC и на свежих студиях.
Теоретически это как void но не совсем.

__________________
My Projects: download page

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

Цитата:

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


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

Сегодня выяснил совершенно удивительную вещь. Оказывается в таких языках как Java, C#, PHP, а так же Unigine Script, Angel Script любые методы у объектов нигде не задекларированы и узнать об их наличии можно только из документации. Либо IDE выдаст подсказку выпадающим списком.
Там же по идее нет атомарных типов, ну по крайней мере в Java.
Каждый "простой" тип - это класс с кучей встроенных методов.
И вот нет никакой возможности увидеть хидер этого типа и посмотреть какие методы доступны. Либо через документацию, которая может и устареть, либо через IDE, который тоже непонятно как это показывает.
Ну надеюсь из фреймворка берёт. Если там константные таблички, то это вообще волшебно. Впрочем, для Angel Script положение еще веселее.
Там есть атомарные типы без методов и возможнось зарегистрировать пользовательские типы сравнительно простым образом (за что его многие превозносили - за простоту биндинга). Однако почему-то никому не пришло в голову, что без документации узнать, какие именно есть новые объекты и какие у них методы, попросту невозможно. IDE у AngelScript помоему вообще никакого нет. А документацию, как обычно составляют когда-нибудь потом.
И вы еще спрашиваете, за что я не люблю вот эти языки?
Причём это официально задекларированый механизм. Знающий наизусть все методы в Java может считаться миддлом. Вот так на ровном месте создаются рабочие места и растёт ВВП. Затем выходит новая версия Java и всё можно начинать сначала.

Добавлено 18-04-2022 в 21:37:

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

на данный момент я остановился на следующих ключевых словах:

shared - переменная будет передаваться по сети на клиент
persistent - переменная будет сохраняться в сейв
predictable - состояние переменной будет предиктиться на клиенте
field - разрешено записывать в эту переменную настройки из описания энтить уровня, например spawnflags.

Если у вас есть какие-то предложения по иному неймингу, я вас внимательно слушаю. Так же помните, что предложенные вами слова, должны как можно менее точно отражать суть, потому что это общее правило именования всяких вещей, которым суждено стать стандартом. Чем абстрактнее, тем лучше.

__________________
My Projects: download page

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

Цитата:

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


Отправлено FiEctro 18-04-2022 в 19:22:

Переменные для сохранения? Шта?
Вот посмотри как в юнити сделано:
https://habr.com/ru/post/549018/
https://mirror-networking.gitbook.io/docs/

Можно как то так:
public Network.Shared.Predictable<int> kekcheburek;

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!


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

То есть как-то так?

C++ Source Code:
1
class target_switch
2
{
3
public:
4
  shared persistent field string target;
5
  target_switch(string init_target) : target(init_target) {}
6
};


Модификаторы мне лично ок.


Отправлено XaeroX 18-04-2022 в 19:30:

Цитата:
nemyax писал:
shared persistent field string target;

public static final void!

__________________

xaerox on Vivino


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

Цитата:
nemyax писал:
То есть как-то так?

Необязательно. Можно и так
C++ Source Code:
typedef shared predictable persistent vec3 worldpos;
 
worldpos m_origin;

Чтобы каждый раз не прописывать.
Цитата:
FiEctro писал:
public Network.Shared.Predictable<int> kekcheburek;

Жэсть. Такое ощущение, что это не VM, а плюсы измученные шаблонами.

__________________
My Projects: download page

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

Цитата:

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


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

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