Inferno Programmer's Guide / Руководство программиста по ОС Inferno: Chapter 5 - The Limbo Language Definition

← →
Английский оригинал Перевод на русский

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

Типы данных

wuffur 19.06.09 в 12:04

0

Синтаксис типов данных таков:

wuffur 19.06.09 в 12:04

0

data-type: byte int big real string tuple-type
array of data-type list of data-type chan of data-type adt-type ref adt-type module-type module-qualified-type type-name
data-type-list: data-type data-type-list, data-type

rapidfx 21.06.09 в 11:48

0

Объектов большинства типов данных имеют семантику значений; когда они присваиваются или передаются функциям, то место куда они назначаются принимает копию объекта. Последний изменяет себя на присвоенный объект и не воздейтсвует на исходный объект. Типы данных - byte, int, big, real, strng, tuple и абстрактные типы данных (adt). Остальные имеют семантику ссылок. Когда они присваиваются, число уже присвоеное - ссылка(указатель) на объект, на который указывается не копируется; эти изменения и операции над присвоенным объектом изменяют оригинальный объект. Ссылочные типы включают типы списков, массивов, каналов, модулей и ref adt.

wuffur 19.06.09 в 13:11

0

Основные типы

wuffur 19.06.09 в 13:12

0

Пять основных типов данных - byte, int, big, real и string.
Таблица A-1 Основные типы данных в Limbo

wuffur 19.06.09 в 13:13

0

byte unsigned - беззнаковое целое, 8-bit
int signed - знаков целое, 32-bit
big signed - знаковое целое, 64-bit
real - число с плавающей точкой двойной точности стандарта IEEE , 64-bit

wuffur 19.06.09 в 13:20

0

byte, int, big и real все вместе называются арифметическими типами. Строки - векторы символов Unicode. Они могут соединяться и расширяться символ-за-символом. Когда строка проиндексирована с помощью одного нижнего индекса, она содержит целое с Unicode расшифровкой символа; когда она индексируется по диапазону, она содержит другую строку. Строки индексируются начиная с 0.

wuffur 19.06.09 в 13:23

0

Кортеж(фиксированный список, тьюпл)

wuffur 19.06.09 в 13:23

0

Тип кортежа, обозначенный
(список-типов-данных)

wuffur 20.06.09 в 11:04

0

- это тип состоящий из упорядоченной коллекции двух или более объектов, у каждого из которых свой собственный тип данных. Для каждого типа кортежа, тип его члена фиксирован, но они не должны быть идентичными; Например, функций может вернуть кортеж содержащий целое и строку. Каждый тип кортежа характеризуется исключительно порядком и идентичностью типов, которые он содержит. Объекты типа кортежа могут быть объявлены списку идентификаторов (чтобы подобрать остальные компоненты), и заключенный в скобки, разделенный запятыми список выражений обозначает сам кортеж.

wuffur 20.06.09 в 11:13

0
+1

Тип массива

wuffur 20.06.09 в 11:13

0

Тип массива описывает вектор объектов с динамической размерностью, которые все имеют один тип; они индексируются начиная с 0. Тип массива обозначается с помощью массива определенного типа данных(array of data-type)

wuffur 20.06.09 в 11:15

0

Размер массива - это та часть, которая не является частью типа его данных; в отличие от этого - это часть значения. Тип данных сам по себе может быть массивом, для того, чтобы представлять многомерные массивы.

wuffur 20.06.09 в 11:17

0

Тип списка

wuffur 20.06.09 в 11:17

0

Список это последовательность однотипных объектов; задаваемый как
list of data-type
Список это объект похожий на стек который оптимизирован для следующих операций: получение головы списка (первый объект), получение хвоста списка (остатка списка), и генерировании нового списка на основе существующего путем помещения указанного объекта в начало.

rapidfx 20.06.09 в 18:38

0

Тип канала

rapidfx 20.06.09 в 18:30

0

Канал, чей тип записывается
chan of data-type
это механизм синхронного сообщения способный посылать и принимать объекты указанного типа другому объекту в системе. Каналы могут использоваться для свзяи между локальными процессами, используя библиотечные процедуры, они могут соединяться с именованными адресатами (местом назначения). В любом случае операции отправки и получения могут ориентироваться на них. Например:
chan of (int, string)
это тип канала передающего тьюплы (кортежи) содержащие челое число и строку. Один экземпляр такого канала (к примеру - c) будет объявлен и инициализирован следующим выражением:
c <-= (123, "Hello");
отправляющим тьюпл через него.

rapidfx 20.06.09 в 18:53

0

Именованные типы

rapidfx 20.06.09 в 18:38

0

Типы данных могут быть названы при помощи объявления типа; это будет рассмотрено в разделе "Объявление Типов".
type-name: identifier

rapidfx 21.06.09 в 07:59

0

Тип модуля

rapidfx 20.06.09 в 18:39

0

Тип модуля это имя идентификатора:
module-type: identifier
Идентификатор объявлянный идентификатором модуля как module-definition, как описано в "Объявлении Модуля".
Объект типа модуль служит для манипулирования модулем, и используется для доступа к его фугкциям и данным.

rapidfx 21.06.09 в 11:47

0

Тип квалифицированный модулем

wuffur 25.06.09 в 05:11

0

Когда тип объявили внутри модули объявления модуля, его название в основном не видно для большинства программ, до тех пор пока не дано специальное слово import(смотрите разделы Объявления с импортированием и Ссылки на модуля ).
Без такого запроса, когда объекты типа объявлены в модуле клиента, название типа квалифировано.
Модуль - имя типа квалифицировано
квалифицированный-модулем-тип:
идентификатор -> идентификатор
Здесь должен быть идентификатор - либо название модуля, либо переменной типа модуля. Второй - это название типа в объявлении модуля.

wuffur 25.06.09 в 05:17

0

Абстрактный тип данных

rapidfx 20.06.09 в 18:39

0

Абстрактный тип данных или adt - это объект, который может содержать объекты данных нескольких разных типов и объявление функции, которые работают ими. Абстрактный тип данных обозначает:
тип-adt:
модулем-квалифицированый-тип идентификатор

wuffur 25.06.09 в 05:19

0

Здесь модуль ref adt предостовляется как ссылка на объект(указатель) типа adt. Он обозначает:
ref тип-adt
Где идентификатор - это имя типа adt.
Тогда, когда объявлен, идентификатор ассоциированный с ним становится именем типа-данных.

wuffur 25.06.09 в 05:23

0

Тип функции

rapidfx 20.06.09 в 18:39

0

Тип функции характерезует передаваемыми ей аргументами и возвращаемым значением. Синтаксис таков:
тип-функции:
fn возвращаемые-аргументы-функции
возвращаемые-аргументы-функции:
(опциисписка-формал-арг^)(список-формал-арг^):тип-данных
список-формал-арг: формал-арг список-формал-арг,формал-арг
формал-арг:
nil-или-D-list : тип
nil-или-D-список : self ref t идентификатор
nil-или-D-список: nil-или-D nil-или-D, nil-или-D
nil-или-D:
идентификатор nil

wuffur 26.06.09 в 15:24

0

У обозначения типа функции есть ключевое слово fn, следующее за разделенным запятыми списком его аргументом, заключенных в скобки и, возможно, сопровождающееся типом значения, которое функция возвращает. Отсутствие возвращаемого значения означает, что функция его не возвращает - она является процедурой. Имена и типы аргументов определяются. Однако, имя аргумента заменяется на nil, делая его безымянным. Например:
fn (nil : int, nil : int) : int
fn (radius : int, angle : int) : int
fn (radius, angle : int) : int
все они обозначают в точности один и тот же тип, функция с двумя целыми значениями, которая возвращает целое.

wuffur 29.06.09 в 19:10

0

В следующий пример иллюстрирует пример функции, который берет аргумент строки и не возвращает никакого значения:
fn (nil : string)
Ключевое слово self имеет специализированную область использования внутри объявления adt. Она может быть использована толко для первого аргумента функции объявленной внутри adt, ее значение обсуждается в секции "Объявления ADT".

wuffur 01.07.09 в 20:17

0

Символ звездочка * может передаваться как последний аргумент в типе функции.
Он объявляет, что функция с переменным числом аргументов, во время вызова, текущий аргумент на его позиции и последующий передаются неопределенным для языка образом. Например, тип функции print модуля Sys такой:
fn (s : string, *) : int

wuffur 01.07.09 в 20:29

0

Это означает, что первый аргумент функции print - строка и остальные могут быть переданы, когда функция вызывается. Сам по себе язык Limbo не имеет доступа к этим аргументам, используется искусственное обозначение для описания конструкций встроенных в runtime-систему поддержки исполнения программ, такую как модуль Sys.

wuffur 01.07.09 в 20:33

0

Программы Limbo

rapidfx 20.06.09 в 18:40

0

Исходный код программ на Limbo, в которым подключаемые модули хранятся в файлах, по соглашению заканчивается суффиксом .b. Каждый исходный файл, начинающийся директивы подключения имен модуля типа, продолжается последовательностью объявлений.

wuffur 06.07.09 в 07:36

0

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

wuffur 06.07.09 в 07:39

0

Верхний уровень

wuffur 06.07.09 в 07:39

0

На верхнем уровне, в программе есть последовательность объявлений. Синтаксис таков:
программа:
implement identifier ; top-declaration-sequence
top-declaration-sequence: top-declaration top-declaration-sequence top-declaration
top-declaration: declaration
identifier-list : = expression; identifier-list = expression; ( identifier-list ) : = expression; module-declaration function-definition adt-declaration

wuffur 06.07.09 в 07:41

0

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

wuffur 10.07.09 в 10:22

0

Оба объявления используются на верхнем уровне(вне функций) и внутри функций и объявлений модулей. Некоторый стили объявлений разрешены только точно на каком-то из этих месте, но обсуждены они будут вместе.

wuffur 11.07.09 в 18:12

0

Объявления

rapidfx 20.06.09 в 18:40

0

Объявления принимают несколько форм:

wuffur 27.07.09 в 22:41

0

Объявления
список-идентификаторов: тип, список-идентификаторов: тип = оператор, идентификатор = оператор; ( id-or-nil-list ) : = оператор; список-идентификаторов : con expression; список-идентификаторов : import идентификатор; список-идентификаторов : тип тип; include строковая-константа;
список-идентификаторов: идентификатор список-идентификаторов, идентификатор список-выражений: выражение список-выражений, выражение

wuffur 27.07.09 в 22:42

0

Объявления типов данных

wuffur 31.07.09 в 13:21

0

Эти формы составляют основной путь для объявления и инициализации данных:
список-идентификаторов : тип; список идентификаторов : тип = выражение;

wuffur 31.07.09 в 13:23

0

Последовательность идентификаторов разделенная запятыми сопровождается двоеточием и затем именем типа. Каждый идентификатор объявлен имеющим этот тип и обозначает определенный объект для оставшейся части его области видимости (смотрите Видимость). Если объявление содержит = и выражение, все объекты инициализированы из значения выражения. В объявлении на верхнем уровне (вне функции), выражение должно быть константой или массивом инициализированным константными выражениями; граница массива должна быть константным выражением.

wuffur 31.07.09 в 13:25

0
Минутку...

← Предыдущая страница

Следующая страница →