aka Video Kompany, SpyDev14, _b.VV();, etc.
Привет! Меня зовут Влад, я студент колледжа на третьем курсе по IT направлению. В свободное от работы и учёбы время я люблю писать программы, люблю изучать программирование, компьютерные науки: люблю разбираться как работает какая-то "магия". Сети, например, или процессор. Также иногда принимаю участие в разработке билдов Space Station 14. Ещё нравится изучать языки программирования: недавно попробовал язык "Rust" - мне очень понравился, но не до конца понял времена жизни в плане их аннотаций.
Далее я делился своим мнением о других языках, включая: Lua, Python, Js (чуть-чуть), C# и косвенно Java в контексте подхода к ООП.
Помимо него хочу попробовать Lua, в частности ООП в Lua (ооочень легкий язык, там его нужно реализовывать вручную, потому и хочу попробовать), а так я уже неплохо разбираюсь в C# и хорошо знаю Python. Касательно Python, мне больше всего в нём нравится реализация ООП. Выглядит примерно также, как мы бы реализовали его в Lua, но уже реализованное на уровне интерпертатора, но как минус - нет возможности изменять работу ООП как нам нужно. Например, не переопределить стандартную делегацию необработанных вызовов нашему объекту, в нём захардкоженна только стандартная последовательность: экземпляр -> объект типа -> родительский тип -> ... -> object -> raise AttributeError. Можно сделать это через переопределение __getattr__, но это не то что бы чистый способ, некоторые моменты могут сломаться. Если конкретнее, мне нравится, что в Python всё действительно объект: функция, переменная, класс (тип), модуль / пакет, и т.д, понятная реализация наследования (делегации вызовов, которые исходный объект не знает как обработать, т.е в нашем случае доступ к атрибутам, которых нет в __dict__ объекта с которым мы работаем, например __dict__ экземпляра; я уже описал последовательность выше). А полиморфизм реализован через утиную типизацию и, что не мало важно, в языке есть аннотация типов, позволяющая нативно описать, что мы ожидаем на входе и выходе из функций, чего нет в том же Lua или в JavaScript. Хотя не хватает фишки из Rust - нельзя указать тип "A и B", (в Rust: A + B), нужно создавать класс, наследующийся от всех необходимых. Возвращаясь ко "всё - объект" также нравится, что типы - это объекты-фабрики экземпляров, и сами эти типы создаются мета-типами (метаклассами) - объектами-фабриками фабрик. Чума! В том же C# (и в Java) ООП кривое, мне не нравится как оно там реализовано, всё захардкоженно и скрыто от наших глаз - вот где настоящая "магия", а не в Python! Более магического языка чем C# я и не вспомню! Если в Python всё понятно, то в C# функционал на уровне хардкода внутри компилятора, кодогенерации и т.д. Например, если как работают ORM в Python в целом понятно - то то, как работает в Entity Framework в C# - это для меня какая-то загадка. Ну как пример: указание на поля модели там реализовано через анонимные лямбда функции вида x => x.MyProperty! И как указано в документации - это не компилируется в выполняемый код, а просто сохраняется как-то в таком виде. Правды ради, с EF я и не работал, только видел чужой код. В любом случае, в C# настоящая магия, то же ООП: классы как структуры языка, неявная делегация вызовов, неявная передача this и доступ к полям this внутри методов, конструкторы как часть языка, в общем много магии. В том же Python всё как на ладони, можно проследить создание объекта от вызова __call__ у объекта-типа, до __init__ на экземпляре для его инициализации (это принято считать конструктором в Python).
Уфф, как-то я разошёлся. В общем, приятно познакомится)
Ps: и помимо работы ООП в языках, я могу примерно также, и даже больше, про сотню других тем, будь то как выглядит и работает программа на низком (машинном) уровне (функции / процедуры (и ещё чем они отличаются! (концептуально)), к примеру), от куда берётся код выхода из программы (значение регистра rax / eax в момент выхода (кстати выход тоже момент интересный: на низком уровне мы должны самостоятельно вернуть управление операционной системе, особенно если у нас не Windows и 25 год, а DOS и 90й год, иначе процессор пойдёт выполнять память, без шуток, разделение выполняемого кода программы и памяти лишь концептуальное); про память: ссылочные / значимые типы, стек, статическая память, куча, аллокация / деаллокация в куче, что за висячие указатели, утечка памяти, двойное освобождение; про работу терминала (консоли; stdin / ..out / ..err, отличия последних двух (интересный факт: input(">>> ") в Python выведет префикс >>> в stderr, а не в stdout)) и так далее.
PPs: ))))), хотя обычно мне это не с кем обсуждать, ИРЛ друзья пошли в автомеханники :/
- Телеграм (приоритетный способ): @bViewVariables
- Рабочая почта (редко смотрю): zombiefight1408@gmail.com (создавал давно для игровой студии ZF Games, думал делать игры для Play Market)
- Discrod (пускай будет):
spy.3082
- Улучшение UI меню факса (pr на основе моей работы)
- Исправил серьёзный косяк с адаптивом (к измененик размера) окна ускорителя частиц
- Исправил адаптив окна консоли связи
- Исправил локализацию в окне консоли шаттла
- Улучшил адаптив окна объекта с зарядом (с компонентом заряда)
- Ps: Некоторые PR-ы были переоткрыты людьми из сообщества по моему согласию, т.к мои не успели рассмотреть и закрыли из-за особых обстоятельств, с обстоятельствами которых я не согласен, но у меня, увы, нет времени на разбирательства.
- Значительное улучшение локализации названий и описаний внутриигровых ролей (RU форк)
- Добавил множество новых рецептов одежды, оружия, щитов и прочего для ранее неиспользуемых, но повсеместно встречающихся, верстаков (бронный, оружейный, и т.д), добавил новый материал - кожу, способы её получения, возможность рвать одежду на кожу.


