2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Запись в паскале
Сообщение23.05.2013, 00:29 
Аватара пользователя


21/02/13
125
Санкт-Петербург
Запись в языке Pascal является статическим типом данных или динамическим?

 Профиль  
                  
 
 Re: Запись в паскале
Сообщение23.05.2013, 01:01 
Заслуженный участник


16/02/13
4214
Владивосток
В Паскале, помнится, нет динамических типов.

 Профиль  
                  
 
 Re: Запись в паскале
Сообщение23.05.2013, 10:16 
Заморожен


14/09/10
72
Переменная типа запись может быть статической или динамической. Статические переменные размещаются в области глобальных переменных, DSeg (DATA SEGMENT), а динамические в «куче» (heap). Динамическими типами в народе называют типы, которые предназначены для создания размещаемых в куче переменных . Например, типы создаваемые программистом для построения списков в TP, или динамические массивы в Delphi. Как-то так.

О чем вопрос в начальном сообщении я не понял.

 Профиль  
                  
 
 Re: Запись в паскале
Сообщение23.05.2013, 13:20 
Заслуженный участник


27/04/09
28128
Не надо путать тип записи с типом указателя на запись.

 Профиль  
                  
 
 Re: Запись в паскале
Сообщение23.05.2013, 17:40 
Заслуженный участник


09/09/10
3729
iifat
Что вообще есть "динамический тип"? Система типов — это синтаксический метод доказательства отсутствия определенного поведения в программах через классификацию фраз согласно видам значений, которые они вычисляют. То есть назначаются типы перед выполнением программы.

 Профиль  
                  
 
 Re: Запись в паскале
Сообщение25.05.2013, 19:15 
Аватара пользователя


29/05/11
227
Красноармейск, Донецкая обл.
Joker_vD в сообщении #727501 писал(а):
Что вообще есть "динамический тип"? Система типов — это синтаксический метод доказательства отсутствия определенного поведения в программах через классификацию фраз согласно видам значений, которые они вычисляют. То есть назначаются типы перед выполнением программы.

Назначаются всегда? Есть ещё приведение типов, которое как раз-таки обозначает, что один объект может рассматриваться как объект двух разных типов. Возражение о том, что до приведения и после приведения типы определены однозначно, отклоняется, потому что бывают неявные приведения.
Взять JavaScript: система типов есть, но динамическая. И типы не назначены до выполнения.
Из Паскаля (несколько надуманный пример): типы ^Integer, ^record ... end и Pointer являются разными или одинаковыми? Если разные, то какой тип имеет p в следующем фрагменте:
Код:
var p:^Integer; p1:Pointer;
...
p1:=p;

 Профиль  
                  
 
 Re: Запись в паскале
Сообщение25.05.2013, 19:54 
Заслуженный участник


16/02/13
4214
Владивосток
Mysterious Light в сообщении #728356 писал(а):
Назначаются всегда?
Мы таки про Паскаль, помните? В нём — строго говоря, всегда. В реальных диалектах — есть, конечно, дыры по типу Цэ, ибо иначе тяжко. Но даже и там локально — да, типы известны на этапе компиляции. И никакие приведения ничего тут не меняют: и сами они, и результаты их известны на этапе компиляции.
В динамических языках — да, всё совсем по-другому.

 Профиль  
                  
 
 Re: Запись в паскале
Сообщение25.05.2013, 22:55 
Заслуженный участник


27/04/09
28128
Mysterious Light в сообщении #728356 писал(а):
Взять JavaScript: система типов есть, но динамическая. И типы не назначены до выполнения.
Из Паскаля (несколько надуманный пример): типы ^Integer, ^record ... end и Pointer являются разными или одинаковыми? Если разные, то какой тип имеет p в следующем фрагменте:
Код:
var p:^Integer; p1:Pointer;
...
p1:=p;
(2) Какой объявлен, такой и имеет: ^Integer.
(1) Да, ^Integer, ^record … end и Pointer — разные типы. Операция разыменования от них даёт результат разных типов (а к последнему типу неприменима).

 Профиль  
                  
 
 Re: Запись в паскале
Сообщение26.05.2013, 14:34 
Заслуженный участник


09/09/10
3729
Mysterious Light в сообщении #728356 писал(а):
Взять JavaScript: система типов есть, но динамическая. И типы не назначены до выполнения.

Не-а, нету там системы типов. Вся соль типов, что они назначаются до выполнения, так что нам не надо выполнять программу, чтобы узнать, будут ли в ней ошибки выполнения. Ну вот смотрите, простенький язык:

t ::= TRUE | FALSE | IF t THEN t ELSE t | 0 | SUCC t | PRED t | ISZERO t
v ::= TRUE | FALSE | nv
nv ::= 0 | SUCC nv


А вот его семантика:

$$\text{IF TRUE THEN } t_2 \text{ ELSE } t_3 \to t_2 \eqno{(\text{E-IfTrue})}$$$$\text{IF FALSE THEN } t_2 \text{ ELSE } t_3 \to t_3 \eqno{(\text{E-IfFalse})}$$$$\frac{t_1\to t'_1}{\begin{array}{c}\text{IF } t_1 \text{ THEN } t_2 \text{ ELSE } t3 \\ \to\text{IF } t'_1 \text{ THEN } t_2 \text{ ELSE } t3\end{array}} \eqno{(\text{E-If})}$$$$\frac{t_1\to t'_1}{\text{SUCC }t_1 \to \text{SUCC }t'_1 } \eqno{(\text{E-Succ})}$$$$\text{PRED }0\to 0 \eqno{(\text{E-PredZero})}$$$$\text{PRED }(\text{SUCC } nv_1)\to nv_1 \eqno{(\text{E-PredSucc})}$$$$\frac{t_1\to t'_1}{\text{PRED }t_1 \to \text{PRED }t'_1 } \eqno{(\text{E-Pred})}$$$$\text{ISZERO }0 \to \text{TRUE} \eqno{(\text{E-IszeroZero})}$$$$\text{ISZERO } ( \text{SUCC }nv_1) \to \text{FALSE} \eqno{(\text{E-IszeroSucc})}$$$$\frac{t_1\to t'_1}{\text{ISZERO }t_1 \to \text{ISZERO }t'_1} \eqno{(\text{E-Iszero})}$$

(Оффтоп)

Мда, что-то \text{} уродливо работает...


Правило E-PredZero можете при желании выбросить. Так вот, как вы видите, succ false или if 0 then ... else ... являются несводимыми выражениями — к ним неприменимо ни одно правило вычисления, но эти выражения не являются значениями (продукциями символа v), они "застряли". Это — обычный способ выражения семантики ошибки времени выполнения. Но этот язык является нетипизированным. В нем нету системы типов, просто не все выражения имеют нормальную форму.

 Профиль  
                  
 
 Re: Запись в паскале
Сообщение26.05.2013, 14:52 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Joker_vD в сообщении #728550 писал(а):
Не-а, нету там системы типов. Вся соль типов, что они назначаются до выполнения, так что нам не надо выполнять программу, чтобы узнать, будут ли в ней ошибки выполнения. Ну вот смотрите, простенький язык:
То, о чем Вы говорите, называется "статическая типизация". А если у каждой переменной в каждый момент времени выполнения есть тип, но на этапе компиляции его, вообще говоря, узнать нельзя - это динамическая типизация. Она в Javascript есть.

 Профиль  
                  
 
 Re: Запись в паскале
Сообщение26.05.2013, 15:44 
Заслуженный участник


09/09/10
3729
Xaositect
Т.е. вон тот язык, что я привел выше, он с динамической типизацией? Потому что добавить в него mutable cells — не очень сложно.

Это, конечно, спор больше терминологический: называть ли это статически/динамически типизированными языками или типизированными/нетипизированными языками (нетипизированные языки вынуждены быть проверяемыми динамически, dynamically checked). Но все-таки это изменение изначальной терминологии — на практике динамическая типизация сводится к приклеиванию ярлычков к значениям и постоянным проверкам этих ярлычков.

 Профиль  
                  
 
 Re: Запись в паскале
Сообщение27.05.2013, 02:31 
Заслуженный участник


16/02/13
4214
Владивосток
Joker_vD в сообщении #728576 писал(а):
на практике динамическая типизация сводится к приклеиванию ярлычков к значениям и постоянным проверкам этих ярлычков
Вы, похоже, считаете, что с кем-то спорите? Окажите милость, ткните носом (моим, моим носом), кто этот странный человек и какой ещё способ он приводит для реализации динамических языков?
И, таки ж да — при чём тут Паскаль?

 Профиль  
                  
 
 Re: Запись в паскале
Сообщение27.05.2013, 15:28 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Joker_vD в сообщении #728576 писал(а):
Т.е. вон тот язык, что я привел выше, он с динамической типизацией? Потому что добавить в него mutable cells — не очень сложно.
Это нетипизированный язык, в нем нет понятия типа ни в синтаксисе ни в семантике. Вообще, когда нет возможности объявлять пользовательские типы, говорить о системе типов как-то бессмысленно.

 Профиль  
                  
 
 Re: Запись в паскале
Сообщение27.05.2013, 19:29 
Заслуженный участник


09/09/10
3729
Когда я в последний раз трогал JavaScript (а было это полтора часа назад), там были числа, строки, массивы, объекты, функции, регулярки и null. Пользовательских типов не помню.

 Профиль  
                  
 
 Re: Запись в паскале
Сообщение28.05.2013, 01:45 
Заслуженный участник


16/02/13
4214
Владивосток
А кто такой, по-вашему, объект?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group