PDA

Просмотр полной версии : [Вопрос] Тонкости языка Pawn



cezocybe
03.11.2015, 23:19
Здравствуйте дорогие форумчане. Вот в интернете полно информации по языку Pawn. С одной стороны это хорошо, но практически 90% из этого - вранье. В Wikipedia твердят что Pawn - не типизированный язык. Но большая часть программистов Pawn (русскоязычные) твердят что существует 4 типа данных. У меня возникает вопрос - есть ли средство или подход к тонкостям изучения Pawn как языка? Как доказать что Pawn не имеет типов. Где сказано что он не имеет типа (в интернете я не нашел информации). Если есть кто может дать информацию - дайте. Книжку по Pawn от CompuPhase я пока не читал, ибо хочу узнать информацию от обычных программистов.

Желательно написать как узнать правдивую информацию об языках программирования.

Desulaid
03.11.2015, 23:52
Как раз в той книжке и сказано, что павн - нетипизированный язык

LLIapuk
03.11.2015, 23:55
http://habrahabr.ru/post/161205/

cezocybe
04.11.2015, 00:21
Как раз в той книжке и сказано, что павн - нетипизированный язык

Я это знаю уже давно, мне нужны факты доказывающие это. Если Float не тип - где написано верное указание об этом?

cezocybe
04.11.2015, 14:04
Неужели нету человека который-бы предъявил факты об достоверности отсутствия типизации в языке Pawn.

Daniel_Cortez
04.11.2015, 21:05
Я это знаю уже давно, мне нужны факты доказывающие это. Если Float не тип - где написано верное указание об этом?
Это не тип данных, а тег, и означает он, что над переменной с таким тегом нельзя совершать целочисленные операции.
Соль в том, что в интерпретаторе (AMX) не предусмотрено инструкций для работы с вещественными числами - есть только простые арифметические операции (сложение, вычитание, умножение, деление, побитовые сдвиги, инверсия битов, etc.), логические операции (and, or, xor, not, etc.) операции пересылки данных и инструкции для контроля за выполнением кода (jump, jzer, call, sysreq.c, etc.)
Касаемо данных вещественного типа, они обрабатываются только с помощью нативных функций (float, floatadd, floatsub, floatdiv, floatcmp).
Мало того, все типы данных имеют фиксированный размер, равный размеру одной ячейки (кроме массивов, но и у них размер кратен размеру ячейки). В версии Pawn, используемой в SA:MP, этот размер равен 4 байтам.

Tl;dr: В Pawn на уровне языка поддерживаются лишь простейшие операции над целыми числами, работа над другими типами данных - только через нативные функции. Именно поэтому сам автор Pawn называет этот язык бестиповым. Пруфы - в pawn-lang.pdf, просто вбейте в поиске по документу слово "typeless".

cezocybe
05.11.2015, 17:01
Это не тип данных, а тег, и означает он, что над переменной с таким тегом нельзя совершать целочисленные операции.
Соль в том, что в интерпретаторе (AMX) не предусмотрено инструкций для работы с вещественными числами - есть только простые арифметические операции (сложение, вычитание, умножение, деление, побитовые сдвиги, инверсия битов, etc.), логические операции (and, or, xor, not, etc.) операции пересылки данных и инструкции для контроля за выполнением кода (jump, jzer, call, sysreq.c, etc.)
Касаемо данных вещественного типа, они обрабатываются только с помощью нативных функций (float, floatadd, floatsub, floatdiv, floatcmp).
Мало того, все типы данных имеют фиксированный размер, равный размеру одной ячейки (кроме массивов, но и у них размер кратен размеру ячейки). В версии Pawn, используемой в SA:MP, этот размер равен 4 байтам.

Tl;dr: В Pawn на уровне языка поддерживаются лишь простейшие операции над целыми числами, работа над другими типами данных - только через нативные функции. Именно поэтому сам автор Pawn называет этот язык бестиповым. Пруфы - в pawn-lang.pdf, просто вбейте в поиске по документу слово "typeless".

Теперь всё понятно. Можете сказать где вы нашли такую подробную информацию?

Daniel_Cortez
05.11.2015, 20:01
Теперь всё понятно. Можете сказать где вы нашли такую подробную информацию?
В основном в документации от CompuPhase - принцип работы интерпретатора вместе со списком опкодов AMX приведён в Pawn Implementer's Guide.
Ещё кое-чего полезного можно найти в Pawn Language Guide. Например, размер ячеек в байтах узнаётся следующим образом: в Pawn есть константы cellbits и charbits, в которых указано количество бит в ячейке и в байте соответственно. Разделив одно на другое (cellbits / charbits) можно получить кол-во байт на 1 ячейку (как я уже говорил ранее, в SA:MP это значение равно четырём).

cezocybe
05.11.2015, 21:32
В основном в документации от CompuPhase - принцип работы интерпретатора вместе со списком опкодов AMX приведён в Pawn Implementer's Guide.
Ещё кое-чего полезного можно найти в Pawn Language Guide. Например, размер ячеек в байтах узнаётся следующим образом: в Pawn есть константы cellbits и charbits, в которых указано количество бит в ячейке и в байте соответственно. Разделив одно на другое (cellbits / charbits) можно получить кол-во байт на 1 ячейку (как я уже говорил ранее, в SA:MP это значение равно четырём).

Следующий вопрос слегка некорректен и не разумен, но думаю стоит задать.

Как ты читаешь англоязычную документацию? Пользуешься переводчиком или словарем, или уже в голове имеешь базу?

Как ты считаешь, если человек имеет базу английских слов (допустим 10.000) - то этот результат скажется на прочтении той-же документации по Pawn? Как ты считаешь?

Sp1ke
05.11.2015, 22:41
Следующий вопрос слегка некорректен и не разумен, но думаю стоит задать.

Как ты читаешь англоязычную документацию? Пользуешься переводчиком или словарем, или уже в голове имеешь базу?

Как ты считаешь, если человек имеет базу английских слов (допустим 10.000) - то этот результат скажется на прочтении той-же документации по Pawn? Как ты считаешь?

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

wAx
06.11.2015, 07:16
Не думаю что DC пользуется переводчиком, насколько я понимаю такой легендарный кодер должен это знать и всегда хранить в памяти, и он очень хорошо знает английский.

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

Что на счет "базы слов", в документациях немного другие слова, нежели в твоей "базе"... Как я понимаю базу ты выучил по определенному курсу, который скорее всего рассчитан на развитие разговорного навыка. Можно конечно будет понять общий смысл имея базу, но конкретные термины и слова, дадутся тебе либо с опытом, либо с прочтением какого нибудь издания а-ля "словарь программистов для чайников".