Size: a a a

RU Rust GameDev — русскоговорящее сообщество

2020 March 20

is

ilya sheprut @optozorax in RU Rust GameDev — русскоговорящее сообщество
Lain-dono
Для их реализации да, не напишешь быстро и просто. Но тут как всегда выбор между мощью и простотой.

Алсо попробуй, если не видел: https://github.com/dtolnay/proc-macro-workshop
интересно, спасибо
источник

is

ilya sheprut @optozorax in RU Rust GameDev — русскоговорящее сообщество
Lain-dono
Для их реализации да, не напишешь быстро и просто. Но тут как всегда выбор между мощью и простотой.

Алсо попробуй, если не видел: https://github.com/dtolnay/proc-macro-workshop
Быстрый вопрос: возможно ли процедурным макросом сгенерировать процедурный макрос?
источник

L

Lain-dono in RU Rust GameDev — русскоговорящее сообщество
ilya sheprut @optozorax
Быстрый вопрос: возможно ли процедурным макросом сгенерировать процедурный макрос?
Надеюсь, что нет.
источник

AT

Anton TrionProg in RU Rust GameDev — русскоговорящее сообщество
ilya sheprut @optozorax
интересно, спасибо
Наверно нет, т.к. изготовление макросов это один шаг компилятора, внутренние он вряд ли рекурсивно сделает. Ну я предполагаю..
источник

L

Lain-dono in RU Rust GameDev — русскоговорящее сообщество
Anton TrionProg
Наверно нет, т.к. изготовление макросов это один шаг компилятора, внутренние он вряд ли рекурсивно сделает. Ну я предполагаю..
По идее если вставить пару хаков через build.rs, то можно запилить метапрограммирование сверхвысшего порядка.
источник

is

ilya sheprut @optozorax in RU Rust GameDev — русскоговорящее сообщество
Lain-dono
Надеюсь, что нет.
А ещё такой вопрос: можно ли объявить процедурный макрос в main.rs и там же его использовать, или обязательно надо выносить куда-то типо build.rs, lib.rs?
источник

L

Lain-dono in RU Rust GameDev — русскоговорящее сообщество
ilya sheprut @optozorax
А ещё такой вопрос: можно ли объявить процедурный макрос в main.rs и там же его использовать, или обязательно надо выносить куда-то типо build.rs, lib.rs?
На все вопросы, что это и зачем оно вообще, ты получишь ответы, когда попробуешь почитать об этом подробнее. Вон выше туториал интерактивный.
источник

L

Lain-dono in RU Rust GameDev — русскоговорящее сообщество
ilya sheprut @optozorax
А ещё такой вопрос: можно ли объявить процедурный макрос в main.rs и там же его использовать, или обязательно надо выносить куда-то типо build.rs, lib.rs?
Процедурные макры живут как отдельные крейты.
источник

is

ilya sheprut @optozorax in RU Rust GameDev — русскоговорящее сообщество
Lain-dono
Процедурные макры живут как отдельные крейты.
окей, спасибо
источник

L

Lain-dono in RU Rust GameDev — русскоговорящее сообщество
Anton TrionProg
Да в крестах тупо макросы долбанутые, что там нет подобия * в регулярных выражениях. И вот видишь в анриале макро:
DERIVE_..._FIVE_VALUES(...), DERIVE_..._NINE_VALUES(...)

Убожество..
Полноценных макр в крестах тупо нет. M4 за макры можно лишь условно считать.

Вообще то, что у меня на картинке - это не окончательный вариант. Я далеко не всё сделал на текущий момент. Мне сейчас эти макры нужны, чтоб меньше путаться. Но так-то условные 80% либы я портанул. Мб через несколько дней выкачу.
источник

AT

Anton TrionProg in RU Rust GameDev — русскоговорящее сообщество
Lain-dono
Полноценных макр в крестах тупо нет. M4 за макры можно лишь условно считать.

Вообще то, что у меня на картинке - это не окончательный вариант. Я далеко не всё сделал на текущий момент. Мне сейчас эти макры нужны, чтоб меньше путаться. Но так-то условные 80% либы я портанул. Мб через несколько дней выкачу.
ты молодец!
источник

L

Lain-dono in RU Rust GameDev — русскоговорящее сообщество
Anton TrionProg
ты молодец!
Та не. Я просто хочу разобраться в PGA. Поскольку с математикой у меня не очень, то остаётся только что-то подобное.
источник

AK

Anton Kholetsky in RU Rust GameDev — русскоговорящее сообщество
А можете подкинуть ссылку на бесплатные тайлы, чтобы накидать прототипчик?
источник

AL

Andrey @ozkriff Lesnikov in RU Rust GameDev — русскоговорящее сообщество
Кого рода тайлы?
источник

L

Lain-dono in RU Rust GameDev — русскоговорящее сообщество
Anton Kholetsky
А можете подкинуть ссылку на бесплатные тайлы, чтобы накидать прототипчик?
https://opengameart.org/ там много чего есть
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
Количество космических сай-фай тайлов там крайне мало :(
источник

MS

Mikola Summer Duck in RU Rust GameDev — русскоговорящее сообщество
https://opengameart.org/content/modular-spaceships
Стоило только сказать, нашёл это. Окей.
источник

BD

Berkus Decker in RU Rust GameDev — русскоговорящее сообщество
Anton TrionProg
Трудно сказать, что лучше учить раньше. Имхо, раст. Ибо раст это как бы правильный С++, каким был бы С++ если Страуструп забил на совместимость с уродским С, а комитет по-настоящему развивал язык, а не добавлял новые фичи на кривой фундамент.

С++ это помойка парадигм, старых и новых подходов. Там у всех свои стандартные библиотеки, математические библиотеки, уйма кривых решений. Например, есть автовывод типов, но EpicGames предлагают его не юзать, т.к. в С++ неявные приведения типов по всюду и разделив 10.0 на 20 ты можешь внезапно получить 0(из-за интов и флотов). Или там нельзя вернуть из функции несколько вариантов значения(алгебраический тип данных, enum в расте), или несколько занчений(кортеж), поэтому там везде кривые  и опасные методы реализации этого. А ещё там копи-семантика, в отличие от move-семантики раста, поэтому он там копирует всё без конца и без конца вызывает деструкторы. Да и вообще там можно спокойно создать класс с неинициализованными полями, или обратиться к несуществующему элементу массива, а компилятор скажет "всё ок". Ещё там заюзаешь тип char, и надо будет открыть файла с русскоязычным именем.. и в рантайме он будет говорить, что такого файла нет, потому что чар поддерживает ANSI, но не юникод, и вообще там типы уродские вроде unsigned short int, длина которых разная на разных платформах. В общем, там полный бардак. И блуждая в этом бардаке, не научишься правильно программировать. Там везде нулевые указатели и указатели, а EpicGames вообще GarbageCollector прямо во внутрь классов встроили. Вообще не все понимают, зачем нужны ссылки, ведь от них особого профита нет, или скучно писать без конца const, (это подобно let mut в расте, но в расте по дефолту перменные иммутабельны, а в крестах мутабельны и для иммутабельности нужен конст). В С++ нет нормальных модулей, там приходится делать дубликаты сигнатур функций в .cpp файле, и там нужно так называемо предъобъявление, потому что компилятор долбанутый. Да что там, там даже вложенных  многострочных комментариев делать нельзя, и приходится удалять комментарии-документацию или иначе мучиться:

/*

некий код

/** Из документации: эта функция делает то-то *//
void MyFunction(..) {}

*/

А enum в крестах такой, что он толком как константа, ты его объявляешь:

enum State {
A,
B
}

а потом везде в коде можешь юзать напрямую A, а не State::A. И вообще там нет системы модулей, там нет use math::{PI, abs, sqrt}; Там тупо икнлюдил файл и получай уйму функций, которые имеют те же имена, как другие функции, например, твои.. Поэтому там везде префиксы и суффиксы вроде fabs. Правда поверх этого есть система namespace, но она тоже кривовата и все ею пренебрегают, например, Epic Games. Ты инклюдил хедер двига, и получаешь все типы двига, а не ue4::network::Packet. Правда появились более нормальные енумы — enum class.

Модели памяти у них общие, ниша одна.

Сейчас переходный момент и нужны оба языка. Причем часто фирмы тупо переучивают набивших шишки ++ков на раст. Сейчас как бы хотим раста — поддерживаем древний код на крестах, или иначе: думаем на расте, но пишем древний код на крестах.

С++ ничему хорошему не научит. Там и вообще не ясно, как писать то надо, там есть сотни рекомендаций, и все они друг-другу противоречат. А библиотеки.. будь добр качать как zip с какого-то сайта — никаких там пакетных менеджеров нет, а если и есть, то их тысяча и не все библиотеки доступны. И библиотеки все кривые.

Думаю, лучше научиться программировать на расте. А вот ООП(классы) придётся изучить из ++ -ов. А затем будет тошнить от этих старперов, которые пишут криво и твердят(придумали какой-то там раст зачем-то), от всяких уродский Code-стайлов, вида всё CamelCase как у Microsoft и Epic, от всего этого бардака и повседневных кривых решений, потому что никто не знает, что такое алгебраические типы данных.
давайте не будем таки бабушкины страшилки тащить? https://godbolt.org/z/yAfrD3
источник

BD

Berkus Decker in RU Rust GameDev — русскоговорящее сообщество
Crush_my_love
Спасибо за такой развёрнутый ответ)
ответ развернутый, но в основном состоит из страшилок и слухов, про enum class ни слова, хотя он как раз тебе дает States::A вместо А, и т.д.

короче ответ длинный но плохой
источник

C

Crush_my_love in RU Rust GameDev — русскоговорящее сообщество
Berkus Decker
ответ развернутый, но в основном состоит из страшилок и слухов, про enum class ни слова, хотя он как раз тебе дает States::A вместо А, и т.д.

короче ответ длинный но плохой
Ну я всегда делю выводы всех людей на 2
источник