KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » W Cat - Язык программирования Euphoria. Справочное руководство

W Cat - Язык программирования Euphoria. Справочное руководство

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн W Cat, "Язык программирования Euphoria. Справочное руководство" бесплатно, без регистрации.
Перейти на страницу:

Эти прерывания обычно поступают с частотой 18.2 раза в секунду, но если вы вызвали подпрограмму tick_rate(), вы можете выбрать намного более высокую частоту прерываний и, таким образом, получить более точный профиль по времени, так как он будет базироваться на большем числе выборок. По умолчанию, если вы не вызвали tick_rate(), автоматически будет вызвано tick_rate(100), как только вы начали профилирование. Вы можете установить частоту ещё более высокой (скажем, до 1000), но тогда не исключено, что производительность вашей программы снизится.

Каждая выборка требует 4-х байтов в памяти и буфер организуется обычно под 25000 выборок. Если вам необходимо больше, чем 25000 выборок, вы можете затребовать необходимый объём буфера:


with profile_time 100000


В этом случае зарезервируется пространство под 100000 выборок (к примеру). Если буфер переполняется, выдаётся предупреждение (в начале файла ex.pro). На частоте 100 выборок в секунду ваша программа может исполняться 250 секунд, пока не будет израсходован стандартный буфер на 25000 выборок. В Euphoria нет возможности динамического увеличения объёма буфера во время обработки прерывания. Именно поэтому вы должны задавать увеличение буфера сверх стандартного объёма в своей программе. Но после завершения каждой исполняемой команды высшего уровня Euphoria будет обрабатывать накопленные выборки, освобождая буфер для других выборок. Таким образом, профиль может базироваться на большем числе выборок, чем то, под которое вы фактически зарезервировали пространство.

Процент, показанный на левом поле в файле ex.pro, расчитывается путём отнесения числа выборок, пришедшихся на каждую данную команду, к общему числу взятых выборок, следовательно, если на команду пришлось 50 выборок из общего числа 500 выборок, то в поле, относящемся к этой команде, появится величина 10.0 (10 процентов). Когда профилирование остановлено командой profile(0), прерывания игнорируются, выборки не берутся, и общее число выборок не нарастает.

Увеличивая число выборок, вы можете повысить точность результатов. Тем не менее, необходимо отслеживать отсутствие ситуации, когда программа синхронизирует сама себя с прерываниями от таймера, ожидая отсчёта time(), чтобы продолжить исполнение. Команды, выполняемые сразу после точки, где проверяются часы, могут никогда не дать ни одной выборки, что могло бы дать вам весьма искажённую общую картину, то есть,


while time() do

end while

x += 1 -- эта команда не будет давать выборок


Иногда вы можете встретить значительный процент времени, уходящий на команду return. Такое обычно случается из-за освобождения большого объёма памяти, выделенного под временные и частные переменные, используемые внутри подпрограммы. Значительное время может занимать также процесс высвобождения памяти, когда присваивается новая величина большому ряду.

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

...


Часть II - Библиотека подпрограмм


1. Введение


В этом документе вы найдёте описание множества подпрограмм. Некоторые из них встроены непосредственно в интерпретаторы ex.exe, exw.exe и exu. Другие написаны на Euphoria и, чтобы воспользоваться ими, вы должны будете включать в свою программу стандартные библиотечные .e-файлы, расположенные в каталоге euphoriainclude. В этих случаях необходимый библиотечный файла указывается в графе "Синтаксис" описания подпрограммы. Конечно, библиотечный файл требует только однократного включения в вашу программу. Встроенные подпрограммы, не требующие библиотечных файлов, отображаются редактором в малиновом цвете. Вы можете переопределять эти встроенные подпрограммы, создавая свои собственные подпрограммы под теми же самыми именами. Интерпретатор предупредит вас о переопределении сообщением, вывод которого может быть вами отменён.

Чтобы показать, какой тип объекта должен быть подан в подпрограмму или выдаётся ею, в описаниях используются следующие обозначения, непосредственно к синтаксису не относящиеся:


x

- общий объект (object) (атом или ряд)

s

- ряд (sequence)

a

- атом (atom)

i

- целое (integer)

fn

- целое (integer), используемое как номер файла

st

- символьный ряд, строка (sequence), или односимвольный атом


Некоторые подпрограммы доступны только на одной или двух из четырёх платформ. В описаниях такие подпрограммы обозначены как "Платформа: DOS32" или "Платформа: WIN32" или "Платформа: Linux". В некоторых других местах вы можете встретить пометки (DOS32) или (WIN32) или (Linux). Подпрограммы, работающие на Linux, в общем случае работают и на FreeBSD. Единственное исключение относится к управлению мышью.

Если в подпрограмму будет подан аргумент с недопустимой величиной, работа вашей программы прервётся с сообщением об ошибке.


2. Предназначение подпрограмм


2.1 Стандартные типы

Предопределённые стандартные типы служат не только для объявления с ними переменных, но вы можете также вызывать их подобно обычным функциям, чтобы проверить, что переменная принадлежит к данному типу.


integer (целое)

- проверяет, что объект имеет тип integer

atom (число)

- проверяет, что объект имеет тип atom

sequence (ряд)

- проверяет, что объект имеет тип sequence

object (объект)

- проверяет, что объект имеет тип object (всегда истина)


2.2 Манипулирование рядами


length (длина)


- выдаёт длину ряда

repeat (повторить)


- повторяет элемент n раз и выдаёт ряд длины n

reverse (повернуть)


- поворачивает ряд так, что первые элементы занимают место последних

append (добавить)


- добавляет новый элемент после конца ряда

prepend (прибавить)


- прибавляет новый элемент перед началом ряда


2.3 Сравнение, поиск и сортировка


compare (сравнить)


- сравнивает два объекта

equal (равно)


- проверяет два объекта на идентичность

find (найти)


- ищет объект в ряде - начало поиска с первого элемента

find_from (найти_от)


- ищет объект в ряде - начало поиска с заданного элемента

match (сопоставить)


- ищет ряд как отрезок другого ряда - начало поиска с первого элемента

match_from (сопоставить_от)


- ищет ряд как отрезок другого ряда - начало поиска с заданного элемента

sort (сортировать)


- сортирует элементы ряда в порядке возрастания

custom_sort (сортировать_как)

- сортирует элементы ряда, основываясь на заданной вами функции сравнения


2.4 Преобразование и сопоставление образцов

lower (нижний_регистр)


- преобразует атом или ряд к нижнему регистру

upper (верхний_регистр)


- преобразует атом или ряд к верхнему регистру

wildcard_match (искать_в_строке_с_догадками)


- сопоставляет строку с заданным образцом, содержащим символы догадок ? и *

wildcard_file (искать_имя_файла_с_догадками)


- сопоставляет имя файла с заданным образцом, содержащим символы догадок


2.5 Математика

Эти подпрограммы работают с отдельными атомами или рядами величин. См. Часть I - Ядро языка - Операции на рядах.


sqrt (корень)


- вычисляет квадратный корень объекта

rand (случайные_числа)


- выдаёт случайные числа

sin (синус)


- вычисляет синус угла

arcsin (арксинус)


- вычисляет угол для данного синуса

cos (косинус)


- вычисляет косинус угла

arccos (арккосинус)


- вычисляет угол для данного косинуса

tan (тангенс)


- вычисляет тангенс угла

arctan (арктангенс)


- вычисляет угол для данного тангенса

log (логарифм)


- вычисляет натуральный логарифм

floor (целая_часть)


- округляет вниз до ближайшего целого

remainder (остаток)


- вычисляет остаток от деления двух чисел

power (степень)


- вычисляет число, возведённое в степень

PI (Пи)


- число PI (Пи) (3.14159...)


2.6 Битовые логические операции

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

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*