RU

Новая справка по QSP.

newsash #948 10.10.2013 11:04 63 comments 47810 views

Сейчас пишется новая справка по платформе QSP. Цели, как обычно:

  • Всеохватность
  • Удобство
  • Понятность

Ну и как обычно - эта тема для ваших пожеланий и т.п. :)
Ссылка на справку: http://wiki.qsp.su/
А пока - с радостью прочитаю ваши пожелания.

Edited at 10.11.2013 14:55 (12 years ago)

Nex:

И каждого новичка, который в учебнике или в обсуждении на форуме увидит слово “процедура” и спросит “что это, в справке этого нет”, я буду отправлять за разъяснениями к тебе лично.

Если я правильно пользуюсь поиском, то на форуме слово “процедура” за всю историю использовалось от силы в десятке постов четырьмя-пятью людьми включая нас с тобой. Так что я не против.

В прочем, я действительно погорячился говоря, что этот термин можно убрать (если описание статьи буду писать я, то это будет что-то типа “такое использование локации называют функцией” или “такое использование локации называют процедурой”). С другой стороны термин “подпрограмма” тоже убирать нецелесообразно, т.к. он используется не реже, чем “процедура”. И все эти термины всё равно используются авторами и потому должны упоминаться.

Тогда в локациях лучше всего сделать “локации-подпрограммы” с подпунктами “локации-процедуры”, “локации-функции” и “локации-обработчики”. А название статьи можно или “Работа с подпрограммами”, или оставить как есть. Разницы, в принципе, нет.

newsash:

Flashback:

Нужно на примере про показать что есть “возвращает значение”, чтобы стало понятно.

Везде, где они не забыты, примеры есть.

Тогда точно проблем не должно возникнуть.

newsash,
разница есть, не нужно загромождать справку высосанными из пальца понятиями.

Это только кажется что знать “что такое подпрограмма” очень нужно и полезно. Мой коллега, высокооплачиваемый программист с более чем десятилетним стажем ничего не знает о “подпрограммах” и ему это никак не мешает. Это понятие упоминается только в учебниках, чтобы объяснить и тут же забыть. Нужно ли это в справке?

Более того, многие, включая составителей учебников, путают понятия и обозначают “подпрограмма”=“процедура”, тем самым противопоставляя подпрограммы и функции. В Бейсике, по мотивам которого был создан язык QSP, и того хуже: оператор GOSUB расшифровывается как Go Subroutine, а слово “Subroutine” и есть “подпрограмма”! Что далеко ходить за примером, если даже ты путался пару сообщений назад. Да и в других темах на нашем форуме в таком ключе упоминается.

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

Nex:

Это понятие упоминается только в учебниках, чтобы объяснить и тут же забыть. Нужно ли это в справке?

Ответ <- вопрос.

Nex:

Нужна ли вся эта терминологическая каша в справке? По-моему, ответ однозначен.

На мой взгляд процедуры и функции - лишнее разделение в принципе. Попробуй найти на википедии статью про процедуры.
Диалог с коллегой - “А в каких языках есть разделение на функции и процедуры?” - “А что это такое? Это которые ничего не возвращают?” - “Ага.” - пауза - “Фиг знает. В Бейсике может.”

Ну ладно, придётся оставить. Попробую подговорить Байта объединить эти два оператора.

newsash,
википедия вообще не указ :) Её редактирует кто попало, а уж администрируют так и вовсе мудак на мудаке.

Но даже если взять эту же статью на Википедии: Процедура. Что мы там увидим?

Автор пишет:

Подпрограмма это бла-бла-бла.

В следующем примере на языке Паскаль подпрограмма subprog вызывается…

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

Пишет сначала про “подпрограмму”, потом уже говорит про то же самое “процедура”. То есть в статье “процедура” и “подпрограмма” взаимозаменяемы. До такой степени, что ни автор статьи, ни читатели не заметили и не исправили это до сих пор.

Далее, читаем

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

То есть здесь уже подпрограммы делятся на процедуры и функции, а не “подпрограмма”=“процедура”. То есть слово “подпрограмма” употребляется уже в другом значении.

Как видишь, наглядный пример той путаницы, о которой я тебе говорил.

Диалог с коллегой

Как только твой коллега освоит QSP, обратись к нему с вопросом, есть ли в QSP разделение на функции и процедуры. До тех пор пустой звук.

Попробую подговорить Байта объединить эти два оператора.

Не дай бог. Испохабить язык из-за того что ты не можешь смириться с неприятной тебе статьёй в справке…

Nex:

Как только твой коллега освоит QSP, обратись к нему с вопросом, есть ли в QSP разделение на функции и процедуры. До тех пор пустой звук.

Коллеге я задавал вопрос про языки программирования, он про QSP вообще не в курсе. Речь про то, что “процедуры” - динозавр.
В QSP есть. Эта ересь сюда из Бейсика пришла. :)

Nex:

Не дай бог. Испохабить язык из-за того что ты не можешь смириться с неприятной тебе статьёй в справке…

Мне неприятна не статья, а разделение между функциями и процедурами. И обсуждение статьи в справке выявило недостаток языка, такое бывает.
Разделение между процедурами и функциями рождает вот такие проблемы.
Если не ошибаюсь, то при отсутствии задания result и $result GS можно безболезненно подменить на FUNC(). А при задании результата использовать эту локацию через GS - дурной тон.

newsash:

Если не ошибаюсь, то при отсутствии задания result и $result GS можно безболезненно подменить на FUNC().

Если ты просто подменишь GS на FUNC (без указания в вызываемой локации RESULT):

*NL 'Начало'
func('Подпрограмма')
*P 'Конец'

то в основное окно выведется перевод строки, который разорвёт строку “НачалоКонец”.

newsash:

А при задании результата использовать эту локацию через GS - дурной тон.

С чего бы это? А если у подпрограммы двойственное значение? При одном сочетании параметров она задаёт значения, при другом — возвращает? Например:

GS 'Местоположение', 'Яблоко', 'Стол'
*NL 'Где лежит яблоко: '+func('Местоположение', 'Яблоко')

newsash,
“процедура” не динозавр, а по сути предшественник функций. Функция по механизму действия - это та же процедура, только возвращающая какое-то значение. Другими словами, только красивая обёртка для языков высокого уровня, чтобы было удобнее описывать функции. На уровне машинного кода и на уровне ассемблера, процедура и функция неразличимы.

В языках программирования от более простых структур постепенно перешли к более сложным. Сначала процедурный Бэйсик, потом “Си” с функциями, потом C++ с объектами и классами… Всё это лишь синтаксические надстройки, внутри всё те же машинные коды. Да, Бэйсик - старший брат современных языков, и он использовал не модные нынче принципы построения программ. Но раз уж по его мотивам был написан QSP, и разделение перенято из Бэйсика, какой смысл пытаться сейчас это “прикрыть” запутыванием терминологии? Нужно принять это, смириться с этим, и жить дальше.

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

Разделение между процедурами и функциями рождает вот такие проблемы.

Прочитай чуть дальше, и увидишь что исправление этой т.н. “проблемы” уже в планах на следующую версию. Мимо.

Тут не то чтобы дурной тон, скорее попытка превзойти возможности QSP. Например, я сделал функцию, которая удаляет из массива все повторяющиеся элементы, и при этом возвращает количество удалённых элементов. Иногда меня интересует результат, и тогда я пишу

deleted = FUNC('make_unique', '$arr')

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

FUNC('make_unique', '$arr')

я не могу, потому что результат будет выведен на экран. Тогда остаётся два варианта:

! Первый вариант. Записываем результат в ничего не значающую переменную.
пустышка = FUNC('make_unique', '$arr')

! Второй вариант. Вызываем через GOSUB. Этот вариант короче и наглядней!
GOSUB 'make_unique', '$arr'

И вот во втором-то как раз и всплывает различие в обработке переменной RESULT при разных вызовах.

Nex:

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

Я представляю, как это организовать. Не удивлюсь, если сейчас за GS и FUNC отвечает один и тот же кусок кода. Да и несовместимостей между старой библиотекой, на которой написаны все игры, и новой, на которой ничего нет, достаточно, чтобы себе это позволить.

Olegus t.Gl.:

то в основное окно выведется перевод строки, который разорвёт строку “НачалоКонец”.

Nex:

! Первый вариант. Записываем результат в ничего не значающую переменную.
пустышка = FUNC(’make_unique’, ‘$arr’)

! Второй вариант. Вызываем через GOSUB. Этот вариант короче и наглядней!
GOSUB ‘make_unique’, ‘$arr’

Это единственное стоящее различие между двумя операторами. Прошу прощения, забыл про этот момент.
В других языках выведенное одиночной функцией значение просто теряется. А в QSP оно выводится. Я проголосовал бы за обязательно явный вывод на экран, но, уверен, меня никто не поддержит. Придется с этим смириться и с этим жить. :)

Написал немного про анализатор.
http://wiki.qsp.su/analyzer
Но права моего аккаунта не позволяют добавить ссылку на неё в список справа под утилиты(или я не знаю как).
Стоит ли написать во вкладке Начало. Рекомендуем использовать Атладчик и ссылку на тему?

Кстати по анализатору до кучи.
Работает ли импорт в .scv для перевода мне этого сделать так и не удалось. Не возможно открытие файла, возможно он открыт другой программой?

Перенёс в соответствующее пространство имён, добавил ссылку в меню.

Черновики статей лучше создавать в “песочнице”.

Aleks Versus Moderator 19.12.2016 07:36 (9 years ago)

Вот это что за страницы? Спам?
http://wiki.qsp.su/pool_table_cove_s_fo_the_p_otection_f_om_the_p_icey_bilia_d_table
Судя по истории изменений, регистрируется пользователь - через минуту страница.

Да уж явно не любитель/разработчик интерактивных новелл. А разве наша Кусп Вики не завершена. Там конечно есть несколько статей-заглушек, но в целом инфа там можно сказать исчерпывающая. Зачем там случайные участники/редакторы…

Удалите спам-статьи пожалуйста.

Aleks Versus Moderator 20.12.2016 14:48 (9 years ago)

Nex,
снова появляются. Надо как-то перекрыть этим спамерам кислород.

Log in or Register to post comments.