2014 dxdy logo

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

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




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

 
 
 
 Re: Запись в паскале
Сообщение23.05.2013, 01:01 
В Паскале, помнится, нет динамических типов.

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

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

 
 
 
 Re: Запись в паскале
Сообщение23.05.2013, 13:20 
Не надо путать тип записи с типом указателя на запись.

 
 
 
 Re: Запись в паскале
Сообщение23.05.2013, 17:40 
iifat
Что вообще есть "динамический тип"? Система типов — это синтаксический метод доказательства отсутствия определенного поведения в программах через классификацию фраз согласно видам значений, которые они вычисляют. То есть назначаются типы перед выполнением программы.

 
 
 
 Re: Запись в паскале
Сообщение25.05.2013, 19:15 
Аватара пользователя
Joker_vD в сообщении #727501 писал(а):
Что вообще есть "динамический тип"? Система типов — это синтаксический метод доказательства отсутствия определенного поведения в программах через классификацию фраз согласно видам значений, которые они вычисляют. То есть назначаются типы перед выполнением программы.

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

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

 
 
 
 Re: Запись в паскале
Сообщение25.05.2013, 22:55 
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 
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 
Аватара пользователя
Joker_vD в сообщении #728550 писал(а):
Не-а, нету там системы типов. Вся соль типов, что они назначаются до выполнения, так что нам не надо выполнять программу, чтобы узнать, будут ли в ней ошибки выполнения. Ну вот смотрите, простенький язык:
То, о чем Вы говорите, называется "статическая типизация". А если у каждой переменной в каждый момент времени выполнения есть тип, но на этапе компиляции его, вообще говоря, узнать нельзя - это динамическая типизация. Она в Javascript есть.

 
 
 
 Re: Запись в паскале
Сообщение26.05.2013, 15:44 
Xaositect
Т.е. вон тот язык, что я привел выше, он с динамической типизацией? Потому что добавить в него mutable cells — не очень сложно.

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

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

 
 
 
 Re: Запись в паскале
Сообщение27.05.2013, 15:28 
Аватара пользователя
Joker_vD в сообщении #728576 писал(а):
Т.е. вон тот язык, что я привел выше, он с динамической типизацией? Потому что добавить в него mutable cells — не очень сложно.
Это нетипизированный язык, в нем нет понятия типа ни в синтаксисе ни в семантике. Вообще, когда нет возможности объявлять пользовательские типы, говорить о системе типов как-то бессмысленно.

 
 
 
 Re: Запись в паскале
Сообщение27.05.2013, 19:29 
Когда я в последний раз трогал JavaScript (а было это полтора часа назад), там были числа, строки, массивы, объекты, функции, регулярки и null. Пользовательских типов не помню.

 
 
 
 Re: Запись в паскале
Сообщение28.05.2013, 01:45 
А кто такой, по-вашему, объект?

 
 
 [ Сообщений: 18 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group