Всем привет. Недавно в чате, пользователь Profyan задал вопрос:
Далее вроде-бы собирался создать тему в этом разделе, но так-и не решился.Сообщение от Profyan
В общем, пишите сюда![]()
Всем привет. Недавно в чате, пользователь Profyan задал вопрос:
Далее вроде-бы собирался создать тему в этом разделе, но так-и не решился.Сообщение от Profyan
В общем, пишите сюда![]()
Люди делятся на два лагеря. Одни люди учат язык программирования с целью научиться владеть им до уровня частиц, другие-же изучают его чтобы что-то сделать и оно работало. Я отношу себя к первой категории и для меня интересно изучать программирование используя этот язык. Дело в том что он не слишком огромен, и область применения меня удовлетворяет. Кроме использования каких-нибудь готовых библиотек для разработки игровых модификаций можно создавать собственные модули и радовать других свой разработкой.
А я то это ну это самое в общем то да все понятно же
Да хватит сравнивать несравнимое! Да-да, я про Pawn и C++
Мне понравился ответ Gecriq, но я отношу себя ко второму лагерю. Мне мне не особо интересно, что сколько кушает, какая затрата ресурсов идет на выполнение различных сценариев и т.д. Не всегда. Но все же для меня как такого непрофессионала привлекает в Pawn то, что не нужно устанавливать какой-либо софт, чтобы начинать программировать, все что тебе понадобится - лежит в папке pawno. Антипример - Java, чтобы начать там кодить, ты должен скачать JDK, а он весит 180 Мб с копейками, вроде бы и все, но там тебе понадобится хорошая IDE, ведь гадать с расположением элементов на GUI никому не хочется, а это еще примерно столько же Мб (Intellij IDEA 230... урезанная к тому же). А еще всякая настройка самой JDK, что очень укорачивается рвение начать кодить.
Язык же сам по себе в основном простой, по сравнению с другими ЯП, нет ничего лишнего, так и нет важного (динамика отсутствует, отсутствуют и типы данных, есть только синтаксический сахар - теги; ООП вам не видать, хотя, говорят, что в новой версии Pawn оно есть. Эти минусы для многих абсурдны, так как все это не очень обязательно).
Некоторые ограничения языка или "плюхи" от Куя могут заставить подумать на каким-нибудь алгоритмом, например - ZCMD.
Есть еще интересная статья на "Типичном скриптере", советую почитать (тычь по ссылке), мне понравилась :3
Еще можно добавить, что школьники могут повыпендриваться, что те программируют на Pawn
А кто сказал, что Pawn сравним с C++?
Абсурд, не более. Действительно, в SourcePawn, похоже, что то на ООП есть.
Больше, скажу - там даже похоже, что динамическое выделение памяти - есть. Pawn можно сравнивать: Python/Lua/Squirrel - и везде (ну или почти везде, привет синтаксису Python), Pawn проигрывает. На счёт того, что можно сразу начать писать программный код, ну и что? (Я про установку дополнительного софта), как там Linux, GCC, Atom, текстовые редакторы от DE, нормально живут?
Я к тому, что в C++ можно тоже так же программировать, ПОЧТИ, без дополнительных скачиваний софта.
Что, касается создания GUI - есть много софта для этого дела. Примером тому является Glade
А теперь по теме:
Учился я в 6 (ну или 7, уже точно не помню) классе, в то время с другом искали во что можно по играть совместно, наткнулись на SA-MP ну и начали играть на Advance. Где то через 5 месяцев - я узнал, что можно создавать свой сервера с помощью языка - Pawn. Тогда я не читал литературу по языкам программирования. Учился по урокам (если, честно, не многому и научился), где то около года, а то и больше сидел на ГИ - инфо, там я многому не научился. В то время я часто задавал вопросы в Skype. В частности это был Dron_Turbo(нынешней bredvix). Как то раз я его попросил, мне помочь - он сказал, что больше не помогает пользователям ГИ - инфо и что бы я регистрировался за помощью на Pro-Pawn.ru. Тут то и началась целая история, очень много вопрос я задавал, почти по всем система (даже по самым простым). Учился писать код - как мог. Честно говоря держал 2 сервера: Liberty Gang War (80+ онлайн) и Inspire Death Match (50+ онлайн). Если сейчас открыть тот код - я понимаю, что там говнокод. Сейчас я уже не пишу на Pawn - нет перспективы да и зачем? Куда лучше писать на Lua под MTA (Функционал больше, язык лучше, частые обновления, багофиксы), это совет начинающим скриптерам в SA-MP. Программирования меня затянуло, настолько глубоко, что не представляю, чем бы я сейчас занимался. На данный момент изучаю С++, учусь на программиста, честно говоря, ожидал большего от техникума, зачем мне Ваша Delphi/Visual Basic?. Нет, смысла изучать Pawn, переходя на тот же C++, придется переучиваться.
Я очень благодарен: DeimoS (ну ты это давай *********), Londlem, Daniel Cortez, cпасибо за то, что Вы помогали при обучении.
Воооооооооооооооооооооооооооооооооооооооооооооооот
Последний раз редактировалось $continue$; 14.02.2016 в 23:20.
Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman
Никога еще не читал такого текста с перескоками на темы :))
Не по теме:
- Если брать пингвинукс, то тебе качать ничего не надо, Python2 и 3, Java и GCC там есть в комплекте. Но это не относится к Window-юзерам, там изволь скачать сам.
- Гораздо удобнее, чтобы все было в одном месте, не так ли?
![]()
По теме:
Тебе дали удочку, но ты ее променял на динамит, улова же больше ... Можно же взять как пример RakNet, они вполне пилили годные обновы, отличное применение TD было, чего только стоит их инвентарь. Но тебе не хватит скилла, чтобы сделать подобное, рили же сложно.Что я и говорил, все это заставит тебя думать над алгоритмом.
![]()
Скажи это гейбену с его Steam Machines.
По теме: пожалуй, тоже отвечу, поскольку никакого проекта на Pawn, приносящего доход, у меня нет.
Я начал изучение Pawn 3 года назад и у меня до сих пор нет однозначного впечатления об этом языке, поскольку у него и плюсов, и минусов примерно поровну.
Можно отметить следующие достоинства:
- Простота языка (он с самого начала был ориентирован на нубов).
- Сравнительно небольшое потребление ресурсов.
- Язык весьма хакабелен (не совсем уверен, но надеюсь, что адекватно перевёл слово "hackable").
Многие проблемы, которые нельзя решить стандартными средствами языка, решаются с помощью #emit. Тот же вызов функций по указателям, например.- Интерпретатор написан на C (причём на диалекте 89-го года) и может быть портирован практически на любую платформу.
- Простота встраивания интерпретатора в свои проекты.
Тем не менее, в Pawn почти во всех аспектах можно встретиться с теми или иными ограничениями:
- Язык просто не создан для больших проектов, в нём нет никакой модульности.
Весь проект компилируется только в одну программную единицу, нельзя разбить проект на несколько отдельных единиц, как в C/C++. Лучшее, что можно сделать - разве что разбить проект на инклуды.
Но тогда если изменить содержимое только одного из этих инклудов, придётся ждать, пока заново скомпилируется весь проект.
Мало того, из-за такого подхода глобальное пространство имён будет засоряться названиями функций, переменных, констант и макросов, которые кроме одного инклуда больше нигде не пригодятся, да ещё и могут привести к конфликту имён, если имена в нескольких инклудах совпадают (чтобы предотвратить такие конфликты, придётся напичкивать все имена в инклудах уникальными префиксами).- Нельзя сделать даже хоть что-то похожее на объектно-ориентированное программирование. Всё упирается в процедурный подход.
Разве что есть возможность сделать перечисление (enum), на его основе создать массив, в нужные поля структуры записать адреса функций и вызывать получившиеся "методы" по их адресам с помощью трюка с #emit sctrl 6.
Причём делать это каждый раз через #emit не иначе, как извращение, придётся использовать отдельные функции... для вызова других функций.
В общем, получается один большой костыль, и не факт, что он будет правильно работать на всех платформах.
И это ещё цветочки по сравнению с костылями для наследования и полиморфизма.- Нет никакой возможности для динамической аллокации памяти.
Чтобы добавить в Pawn эту возможность, придётся делать своё дополнение, из которого регистрировать свои нативные функции для аллокации и высвобождения участков памяти.
Но данные из этих участков нельзя будет читать или записывать напрямую из скриптов на Pawn, для доступа к ним нужно будет делать ещё несколько функций (Get/Set), да ещё и для нескольких типов данных (если для целых и вещественных чисел ещё можно сделать одну общую функцию, то для массивов придётся делать отдельную).
К тому же, такой подход с нативными функциями будет заметно медленнее, чем при "прямом" доступе к данным в стеке или в секции данных экземпляра AMX.
Ещё можно модифицировать код самой виртуальной машины, добавив свои инструкции и/или изменив уже существующие, но поддерживать свой форк ради пары фич... вряд ли оно того стоит.- Все типы данных ограничены по размеру в 1 ячейку. В случае с SA:MP размер ячейки - 4 байта, что соответствует типу int32_t из C/C++.
Нельзя сделать что-то похожее на int64_t (только костылями, используя отдельные функции вместо арифметических операций - перегрузка операторов здесь не прокатит), можно разве что сделать массив и обращаться к отдельным его байтам вместо ячеек.- Язык очень медленно развивается (если развивается вообще).
В SA:MP и вовсе используется устаревшая версия Pawn (для компилятора это 3.2.3664, но в сервере используется более старая версия 3.2.3367, из-за чего не поддерживаются скрипты, скомпилированные с ключом -O2).
Кроме того, старые ветки разработчиком Pawn не поддерживаются, разве что некоторые добровольцы, такие как Zeex, время от времени фиксят в них баги.
Для таких проектов, как SA:MP, с этими минусами ещё можно смириться (всё равно проект стагнирующий, раз сам Kalcor не хочет вносить в него ничего нового), но в других случаях этот язык мало где подойдёт.
Недавно пришлось рассматривать EiC и AngelScript.
EiC на первый взгляд выглядит очень хорошо (ещё бы, это ж чуть ли не полноценный скриптовый Си), но не поддерживается сохранение байткода в файл для его дальнейшего использования, да и кодовая база старая (последние изменения разработчик вносил в 2000-2005 гг., потом до 2009 года только энтузиасты вносили небольшие улучшения, попутно выкинув поддержку для SUNOS и PPC).
С лицензией в EiC тоже не всё понятно. В исходных файлах написано "This code may be copied for personal, non-profit use only" ("Вы можете копировать этот код только для личного некоммерческого использования"), что по идее должно сделать интерпретатор непригодным для легального использования в закрытых коммерческих проектах. В то же время в корневой папке с исходниками есть файл LICENSE, в котором приведён текст лицензии Artistic License, разрешающей использование в коммерческих проектах, но накладывающей ещё кучу условий и обязательств.
Мало того, сейчас многие проекты делают со скриптами для CMake, из которых потом можно сделать скрипты и проекты для различных IDE и систем сборки. Естественно, в начале 2000-х, когда EiC был заброшен, никакого CMake и в помине не было, поэтому со сборкой интерпретатора тоже могут возникнуть проблемы.
Поэтому я сейчас присматриваюсь к AngelScript. В нём тоже есть Си-подобный синтаксис, да и процесс встраивания относительно простой. Более, чем уверен, что этот язык лучше подойдёт для создания движка для 2D-игр.
Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
Стол заказов:
Мои работы:
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)