Перейти к контенту

Курилка программистов


Рекомендуемые сообщения

"Чтобы не плодить функций IsXXX()?"

 

Как бы, типа того. Не то, что они объявляются совсем прямо вредными, но сначала понять их смысл: какие и сколько надо, и почему именно функции (и еще хуже - "методы", со всеми накладными расходами).

 

Вообще, так вот подумав, что реально надо в повседневной жизни - это чтобы любой объект, имеющий конфиг, имел свойства, прописанные в конфиге. То есть, если мы в конфиге пишем

"[неведомая фигня]\nтраляля = блаблабла" - то obj.траляля должно быть == блаблабла.

 

кстати, еще неплохо таки сделать дефайны с инклудами, универсальные и для конфигов, и для скрипов.

 

Это закроет весть вопрос с IsXXX() и прочими _g.ammo = [тыща строк] раз и навсегда.

Ссылка на комментарий

Короче - рассуждения.

А была уже идея сделать одну функцию "проверить тип" с двумя аргументами? Первый - объект, второй - нужный тип. Все типы хранятся в хеш-таблице (аля енум). Не ну а чо. А непосредственно тип вещи пишем в св-во объекта. Хотяяя, как то не логично, вид вещи должен представлять класс.

Я бы конечно сделал по ООП, абстракция -> базовый класс -> дочерние классы. В абстрактном классе говорим, что есть метод для проверки объекта, в базовом классе тупая реализация на РАВНО, ну и виртуальным на всякий случай сделать в базовом, чтобы дочерние в случае чего могли переопределить. Дальше по логике это все должно приводиться к уровню абстракции и там вызывается метод. По крайне мере я так ООП представляю :)

PS: а что за негатив к "методам"?

ТЧ 1.0004. SAP и Trans mod

github

Ссылка на комментарий

 

 

PS: а что за негатив к "методам"?

Ходят слухи что они неприлично много жрут, всего на свете...

Хотя мне думается надо проверить. Насколько существенна разница.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

Задача в чем заключается? Чтобы не плодить функций IsXXX()?

Насколько я понял, тут еще не все в курсе про smart_cast в движке и что его 3 года назад вытащили в скрипты в проекте Xray Extensions. Все простыни "isWeapon" разом отпали.

 

http://www.amk-team.ru/forum/index.php?showtopic=10339&p=910319

game_object -> Методы для проверки типа объекта -> Регистрация функций в движке

Изменено пользователем Shadows
Ссылка на комментарий

@Zander_driver, начем с того, что в Луа нет методов. На этом можно было бы и закончить, но я проверил тут код ниже.

local wpn = { base = "Call me like a " }

function wpn:magic(ctype)
  local call_type = self.base..ctype
end

local cl = 3000000
local timer = 0

timer = os.clock()
for i = 1, cl do
  wpn:magic("method")
end
print(os.clock() - timer)

timer = os.clock()
for i = 1, cl do
  wpn.magic(wpn, "static method")
end
print(os.clock() - timer)

function magic(self, ctype)
  local call_type = self.base..ctype
end

timer = os.clock()
for i = 1, cl do
  magic(wpn, "function")
end
print(os.clock() - timer)
--[[
first time
0.28
0.29
0.27

second time
0.27
0.31
0.28

third time
0.28
0.32
0.3
]]

 

Не ну функции определенно быстрее. Лол.

Изменено пользователем Desertir
  • Спасибо 1
  • Полезно 1

ТЧ 1.0004. SAP и Trans mod

github

Ссылка на комментарий

Кстати про ООП. Интересно и даже по-русски.

Хватит уже изображать ворчливого старика)

Что ты, я за слово "метод", оно мне нравится, я так сказал потому, что существенной разницы нет. Изменено пользователем Desertir
  • Спасибо 1

ТЧ 1.0004. SAP и Trans mod

github

Ссылка на комментарий

 

 

Zander_driver, начем с того, что в Луа нет методов

Хватит уже изображать ворчливого старика) Знаю я про своеобразие "Луа-ООП" который как бы не совсем ООП, от слова совсем не. Но это не мешает нам его так называть.

 

 

 

Насколько я понял, тут еще не все в курсе про . . . Xray Extensions

Вот кстати. Я когда заглядываю в тему X-Ray Ext, то вижу там много вроде бы вкусного, но требующего хитрых танцев с бубном при определенных совпадениях фазы луны, нигде не указанных.

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

 

 

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

Ну а мой пост что, не подходит под эти условия?

Ссылка на комментарий

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

@Zander_driverhttp://rghost.ru/private/7RK6xBwXb/648fb32a73b3e30b2879a8630f0886dc

 

Дефолтная конфигурация, не требующая никаких скриптовых добавок (вроде все отключил).

Изменено пользователем Shadows
  • Спасибо 1
Ссылка на комментарий

2 Desertir: а теперь то же самое, например, со string.* vs. :*строковыми.

И, видимо, имеет значение, сколько и каких аргументов передается, а также использование переменных "внутри" (сколько и откуда).

Изменено пользователем Dennis_Chikin
Ссылка на комментарий

 

 

2 Desertir: а теперь то же самое, например, со string.* vs. :*строковыми. И, видимо, имеет значение, сколько и каких аргументов передается, а также использование переменных "внутри" (сколько и откуда).

Давайте мы при прочих равных факторах, обозначим список "подозреваемых причин"

А затем проведем исчерпывающий тест. А то эти страшные мифы про то что ООП-код работает в 80 раз медленнее чем состоящий только из прямого вызова функций, уже конкретно достали.


,

GBpEjeq.jpg

Я так понимаю, с расширением Луа от RvP - не совместимо?

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

@Dennis_Chikin, тот же сайт, тот же код, жмакал кнопку Run 3 раза.

local cl = 3000000
local timer = 0

timer = os.clock()
for i = 1, cl do
  local wpn = "wpn123"
  local s = wpn:gsub("123", "ABC")
end
print("method "..(os.clock() - timer))

timer = os.clock()
for i = 1, cl do
  local wpn = "wpn123"
  local s = string.gsub(wpn, "123", "ABC")
end
print("function "..(os.clock() - timer))
method 0.4
function 0.45

method 0.41
function 0.44

method 0.4
function 0.43

На движке Сталкера не измеряю принципиально, т.к. там может быть всё, что угодно. Привык использовать то, что доступно сейчас, а не 10 лет назад.

Еще не надоело думать о наносекундах?

Давайте мы при прочих равных факторах, обозначим список "подозреваемых причин"

Нужный спецы по компилятору Луа, я не в курсе, как он точно разворачивает конструкции obj:method(...) и obj.method(obj, ...). Я вижу два отличия, первое - явно передаваемых аргументов больше на один (как передается неявный self ?) и обращение к глобальному string. Возможно это сказывается на производительности... только не в ту сторону и не на те величины, чтобы на это обращать внимание.
Изменено пользователем Desertir

ТЧ 1.0004. SAP и Trans mod

github

Ссылка на комментарий

 

 

На движке Сталкера не измеряю принципиально, т.к. там может быть всё, что угодно. Привык использовать то, что доступно сейчас, а не 10 лет назад.

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

@Zander_driver, а я нет, ибо исходники в доступе, актуальные версии чего либо подключить возможно. Правда никто не говорит, что это просто.

Под шумок дополню. Я предоставил несколько кода и чуть чуть цифр, я не агитирую никого использовать методы или функции. Мне это без разницы, но ради спортивного интереса сделал. Я не считаю, что это обсуждение вообще достойно внимания, разница незначительна. По мне так есть более интересные задачи, вон в ковырялке двигла с транспортом разбираются, занятная вещь.

Изменено пользователем Desertir

ТЧ 1.0004. SAP и Trans mod

github

Ссылка на комментарий

ладно убедил :)

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...