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

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

Рейтинг



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

Я, как вы, должно быть знаете, в данный момент работаю над собственной виртуальной машиной для 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'

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

Старое сообщение 27-03-2022 14:02
-
SNMetamorph
Житель форума

Дата регистрации: Jun 2018
Проживает: Ижевск
Сообщений: 560

Рейтинг



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

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

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

Старое сообщение 28-03-2022 09:31
- За что?
 Дядя Миша
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: Записан
Сообщение: 207930

Старое сообщение 28-03-2022 10:58
-
a1batross
Житель форума

Дата регистрации: May 2016
Проживает: Москва
Сообщений: 516
Возраст: 26

Рейтинг



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

__________________
Xash3D FWGS форк

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

Старое сообщение 28-03-2022 11:18
- За что?
 Дядя Миша
racing for fish

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

Рейтинг



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

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

Старое сообщение 28-03-2022 11:42
-
 Дядя Миша
racing for fish

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

Рейтинг



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

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'

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

Старое сообщение 29-03-2022 09:14
-
SNMetamorph
Житель форума

Дата регистрации: Jun 2018
Проживает: Ижевск
Сообщений: 560

Рейтинг



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

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

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

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

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

Рейтинг



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

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 29-03-2022 09:32
-
SNMetamorph
Житель форума

Дата регистрации: Jun 2018
Проживает: Ижевск
Сообщений: 560

Рейтинг



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

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

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

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

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

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

Рейтинг



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

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'

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

Старое сообщение 18-04-2022 12:08
-
 Дядя Миша
racing for fish

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

Рейтинг



Сегодня выяснил совершенно удивительную вещь. Оказывается в таких языках как 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'

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

Старое сообщение 18-04-2022 18:37
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12882
Возраст: 32

Рейтинг



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

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

Отредактировано FiEctro 18-04-2022 в 19:35

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

Старое сообщение 18-04-2022 19:22
- За что?
nemyax
Нёмыч

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

Рейтинг



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

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
};


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

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

Старое сообщение 18-04-2022 19:23
- За что?
 XaeroX
Crystice Softworks

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

Рейтинг



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


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

public static final void!

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

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

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

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

Рейтинг



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

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

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



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


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

Временная зона GMT. Текущее время 08:57. Новая тема    Ответить
Страницы (11): [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 - 2024