[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 240: Undefined array key 1
freepascal.ru форум 2013-09-02T01:31:26+03:00 https://freepascal.ru/forum/app.php/feed/topic/2754 2013-09-02T01:31:26+03:00 2013-09-02T01:31:26+03:00 https://freepascal.ru/forum/viewtopic.php?p=75696#p75696 <![CDATA[Re: типизация]]>
ev писал(а):Модульного тестирования недостаточно. Нужна статическая типизация!

Жду теперь статьи "Виртуальная машина не имеет преимуществ перед непосредственной компиляцией".

Статистика: Добавлено Vapaamies — 02.09.2013 02:31:26


]]>
2013-09-01T14:03:37+03:00 2013-09-01T14:03:37+03:00 https://freepascal.ru/forum/viewtopic.php?p=75689#p75689 <![CDATA[Re: типизация]]> Модульного тестирования недостаточно. Нужна статическая типизация!
полная версия статьи
В своём исследовании я обратил внимание на доводы сторонников динамической типизации, которые считают, что статическая типизация не нужна для выявления ошибок.

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

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

Статистика: Добавлено ev — 01.09.2013 15:03:37


]]>
2010-05-17T00:21:10+03:00 2010-05-17T00:21:10+03:00 https://freepascal.ru/forum/viewtopic.php?p=42627#p42627 <![CDATA[Re: типизация]]>
runewalsh писал(а):Меня интересует возможность заставить это не компилироваться:

Обычно это достигается объявлением tWidth, tHeight записями.

Статистика: Добавлено Максим — 17.05.2010 01:21:10


]]>
2010-05-16T21:34:12+03:00 2010-05-16T21:34:12+03:00 https://freepascal.ru/forum/viewtopic.php?p=42624#p42624 <![CDATA[Re: типизация]]> В данном коде кажись что дельфа что фрюха выдадут ворнинг и имхо этого достаточно.
основная защита от ошибок была и остаетс имхо культура программиста и качественное тестирование.

Статистика: Добавлено alexrayne — 16.05.2010 22:34:12


]]>
2010-05-16T19:37:53+03:00 2010-05-16T19:37:53+03:00 https://freepascal.ru/forum/viewtopic.php?p=42622#p42622 <![CDATA[Re: типизация]]>
Max Rusov писал(а):Описать 2 числовых типа, которые будут между собой несовместимы

Меня интересует возможность заставить это не компилироваться:

Код:

type
  tWidth = type longint;
  tHeight = type longint;

var
  w : tWidth;
  h : tHeight;

begin
  w := 5;
  h := 6;
  w := h;  // даёшь ошибку компиляции в таких случаях
end.

Статистика: Добавлено runewalsh — 16.05.2010 20:37:53


]]>
2010-04-08T17:06:21+03:00 2010-04-08T17:06:21+03:00 https://freepascal.ru/forum/viewtopic.php?p=41678#p41678 <![CDATA[Re: типизация]]> kovinik
Еще есть такая вещь, как динамическая типизация (python, например). И люди спокойно себе пишут проги.

Статистика: Добавлено Дож — 08.04.2010 18:06:21


]]>
2010-04-07T14:32:33+03:00 2010-04-07T14:32:33+03:00 https://freepascal.ru/forum/viewtopic.php?p=41629#p41629 <![CDATA[Re: типизация]]>
пример:
var
s1, s2, s3: string;
begin
s2 := '1';
s3 := '1';
s1 := s2 + s3;

вопрос: какой должен быть результат, '11' или '2' ?

типы и нужны для того что-бы правильно определить ДЕЙСТВИЕ выполняемое оператором. в данном случае '+'. иначе нужно будет плодить кучу операторов для каждого спорного случая.
в принципе можно, дело вкуса.

в принципе базовых типов немного: целый(перечислимый), плавающий(вещественный), строковой, ссылочный, структурный, процедурный.

компилятор сам определяет количество байт для типа, по дельте.
byte = 0..255; delta = 255-0+1 = 256 = 1 byte
word = 0..65535; delta = 65535-0+1 = 65536 = 2 byte
и т.д.
хотя плавающие фиксированны, но в принципе можно и сними тоже самое. зависит от компилятора.

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

Статистика: Добавлено kovinik — 07.04.2010 15:32:33


]]>
2010-02-02T09:33:38+03:00 2010-02-02T09:33:38+03:00 https://freepascal.ru/forum/viewtopic.php?p=39099#p39099 <![CDATA[Re: типизация]]>
Добавлено спустя 2 минуты 55 секунд:
кстати gettype возвратит тип полученного значения integer!

Статистика: Добавлено AbakAngelSoft — 02.02.2010 09:33:38


]]>
2010-02-01T20:12:38+03:00 2010-02-01T20:12:38+03:00 https://freepascal.ru/forum/viewtopic.php?p=39088#p39088 <![CDATA[Re: типизация]]> Brainenjii
Я имел ввиду что произойдет если я попробую перемножить две строки

Статистика: Добавлено Дож — 01.02.2010 20:12:38


]]>
2010-02-01T14:07:29+03:00 2010-02-01T14:07:29+03:00 https://freepascal.ru/forum/viewtopic.php?p=39071#p39071 <![CDATA[Re: типизация]]> Статистика: Добавлено Brainenjii — 01.02.2010 14:07:29


]]>
2010-02-01T13:45:48+03:00 2010-02-01T13:45:48+03:00 https://freepascal.ru/forum/viewtopic.php?p=39066#p39066 <![CDATA[Re: типизация]]> AbakAngelSoft
Можно, и в предыдущем от тебя посту Sergei I. Gorelkin описал как это делается.

А в php есть проверка типов по время выполнения?

Статистика: Добавлено Дож — 01.02.2010 13:45:48


]]>
2009-10-13T16:44:52+03:00 2009-10-13T16:44:52+03:00 https://freepascal.ru/forum/viewtopic.php?p=35740#p35740 <![CDATA[Re: типизация]]> Статистика: Добавлено AbakAngelSoft — 13.10.2009 17:44:52


]]>
2009-10-13T16:20:13+03:00 2009-10-13T16:20:13+03:00 https://freepascal.ru/forum/viewtopic.php?p=35738#p35738 <![CDATA[Re: типизация]]> Следующим шагом переопределяем для записей операторы присваивания и оказываемся там же, откуда пытались уйти.

Статистика: Добавлено Sergei I. Gorelkin — 13.10.2009 17:20:13


]]>
2009-10-13T15:01:51+03:00 2009-10-13T15:01:51+03:00 https://freepascal.ru/forum/viewtopic.php?p=35735#p35735 <![CDATA[Re: типизация]]>
AbakAngelSoft писал(а):Если сделать Width: TWidth и Height: THeight. Все отлично компилятор нам подскажет где мы ошиблись.


А во FreePascal так можно? Описать 2 числовых типа, которые будут между собой несовместимы?

Статистика: Добавлено Max Rusov — 13.10.2009 16:01:51


]]>
2009-10-13T12:37:44+03:00 2009-10-13T12:37:44+03:00 https://freepascal.ru/forum/viewtopic.php?p=35731#p35731 <![CDATA[Re: типизация]]> Если рассматривать исходные коды delphi и тем более лазарус видно, что многие не понимают что такое тип. тип это не только Integer!
Если у нас есть размеры прямоугольной области width и height каких они должны быть типов? Integer? нет! Иначе возможна операция width := height; Это явная ошибка!
Если сделать Width: TWidth и Height: THeight. Все отлично компилятор нам подскажет где мы ошиблись.
Когда мы поворачиваем этот прямоугольник то указываем явно что куда надо преобразовать. Мы рассчитываем по некоторой формуле и знаем что мы делаем если произойдет ошибка мы в курсе где ее искать.

Существует интересная идея применять в языках программирования для числовых данных те же правила что и в физике (2кг/см2 + 3кг/см2)*5см2 = 25кг, а 2кг+3см - недопустимая операция

Статистика: Добавлено AbakAngelSoft — 13.10.2009 13:37:44


]]>
2009-02-01T21:18:34+03:00 2009-02-01T21:18:34+03:00 https://freepascal.ru/forum/viewtopic.php?p=29926#p29926 <![CDATA[Re: типизация]]>
Так например языке caml

Статистика: Добавлено shade — 01.02.2009 21:18:34


]]>
2009-01-22T20:07:14+03:00 2009-01-22T20:07:14+03:00 https://freepascal.ru/forum/viewtopic.php?p=29807#p29807 <![CDATA[Re: типизация]]> Статистика: Добавлено utkin — 22.01.2009 20:07:14


]]>
2009-01-22T16:32:40+03:00 2009-01-22T16:32:40+03:00 https://freepascal.ru/forum/viewtopic.php?p=29800#p29800 <![CDATA[Re: типизация]]>
perlpunk писал(а):Получается вам нужно просто неявное преобразование типов.

Да не нужно нам неявного преобразования типов. :) Нам вообще не нужно преобразования типов. В принципе. Пускай процессор лучше занимается более полезными вещами. Например, моделирует эффект Марангони. :)

Статистика: Добавлено Vadim — 22.01.2009 16:32:40


]]>
2009-01-22T15:36:49+03:00 2009-01-22T15:36:49+03:00 https://freepascal.ru/forum/viewtopic.php?p=29798#p29798 <![CDATA[Re: типизация]]>
Добавлено спустя 4 минуты 50 секунд:
Проблема все равно не решенная. И дело в ни неявном преобразовании типов. Можно использовать такой тип(ы) при работе с которыми у программиста не возникло бы вообще мысли о преобразовании. Тот же Boolean и Integer. Можно же в качестве Boolean использовать Integer? Пусть False это нуль, все остальное true. Или по-другому, не важно. Смысл в том, что при компиляции преобразования типов проходить не будет.

Статистика: Добавлено utkin — 22.01.2009 15:36:49


]]>
2009-01-22T14:15:30+03:00 2009-01-22T14:15:30+03:00 https://freepascal.ru/forum/viewtopic.php?p=29795#p29795 <![CDATA[Re: типизация]]>
Vadim писал(а):
perlpunk писал(а):Хоть один пример, где это может пригодится?

Да пожалуйста. :)
Все знают про такой компонент, как TDataSet. Чтобы прибавить значение одного поля к другому, мы вынуждены писать:
DataSet.FieldByName('поле').AsInteger
А чтобы вывести значения поля в в HTML документ приходится писать так:
DataSet.FieldByName('поле').AsString
Ну и тому подобное.
А в случае концепции единого типа данных, всякие там AsТыры-Пыры писать не надо. Сколько времени экономится...


Получается вам нужно просто неявное преобразование типов. Для этого и есть Variant.
Пишете тогда что то типа DataSet.Field['поле'] и ваша проблема решена в большинстве случаев :)

Добавлено спустя 5 минут 23 секунды:
utkin писал(а):Еще пример, вывод даты на экран (я имею ввиду стандартные средства). Еще пример, Boolean и Integer. На самом деле примеров много. Возьмите свою собственную программу с большим числом строк и посмотрите, сколько раз проводилось явное преобразование типов. Почему программист должен обращать на это внимание? Для самоконтроля? Часть таких операций можно автоматизировать.


Вот пример с датой - в каком бы виде вы хотели чтоб дата выводилаcь? А если мне в разных случаях нужно выводить эту дату поразному - все равно возвращаемся к использованию процедуры форматирования даты при выводе.
тоже с булеан - когда то надо вывести в виде True : False, а когда то и в другом виде Есть/Нет, On/Off - и тут опять нужна явная проверка значения и подстановка соответствующей строки.

Статистика: Добавлено perlpunk — 22.01.2009 14:15:30


]]>
2009-01-22T08:54:53+03:00 2009-01-22T08:54:53+03:00 https://freepascal.ru/forum/viewtopic.php?p=29784#p29784 <![CDATA[Re: типизация]]>
Добавлено спустя 6 минут 8 секунд:
Если по алгоритму - это не обязательный процес - зачем вы это делаете?


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

Статистика: Добавлено utkin — 22.01.2009 08:54:53


]]>
2009-01-22T06:11:51+03:00 2009-01-22T06:11:51+03:00 https://freepascal.ru/forum/viewtopic.php?p=29782#p29782 <![CDATA[Re: типизация]]>
perlpunk писал(а):Хоть один пример, где это может пригодится?

Да пожалуйста. :)
Все знают про такой компонент, как TDataSet. Чтобы прибавить значение одного поля к другому, мы вынуждены писать:
DataSet.FieldByName('поле').AsInteger
А чтобы вывести значения поля в в HTML документ приходится писать так:
DataSet.FieldByName('поле').AsString
Ну и тому подобное.
А в случае концепции единого типа данных, всякие там AsТыры-Пыры писать не надо. Сколько времени экономится...

Статистика: Добавлено Vadim — 22.01.2009 06:11:51


]]>
2009-01-22T00:11:25+03:00 2009-01-22T00:11:25+03:00 https://freepascal.ru/forum/viewtopic.php?p=29778#p29778 <![CDATA[Re: типизация]]>
Нет, человек просто не совсем ясно выразил свою мысль. Тип на самом деле один - тип без типа. Или "один главный тип". А всё остальное - образовано от него.

Мне кажется это более удачной идеей. В Паскале же изначально типы не совместимы.

Хоть один пример, где это может пригодится? Веть обабатывать данные все равно приходится исходя из их типа.

Статистика: Добавлено perlpunk — 22.01.2009 00:11:25


]]>
2009-01-21T21:48:11+03:00 2009-01-21T21:48:11+03:00 https://freepascal.ru/forum/viewtopic.php?p=29775#p29775 <![CDATA[Re: типизация]]>
utkin писал(а):с другой стороны вечное преобразование типов, которое, обратите внимание, для алгоритма не является обязательным процессом

Если по алгоритму - это не обязательный процес - зачем вы это делаете?
на самом деле все преобразования между типами начинаются в 99% при выдаче информации пользователю. А внутри самого алгоритма - это не нужно делать. Если иначе - то скорее всего - что то при проектировании не ладно.

Статистика: Добавлено alexs — 21.01.2009 21:48:11


]]>
2009-01-21T16:25:30+03:00 2009-01-21T16:25:30+03:00 https://freepascal.ru/forum/viewtopic.php?p=29762#p29762 <![CDATA[Re: типизация]]> Статистика: Добавлено utkin — 21.01.2009 16:25:30


]]>
2009-01-21T14:04:11+03:00 2009-01-21T14:04:11+03:00 https://freepascal.ru/forum/viewtopic.php?p=29753#p29753 <![CDATA[Re: типизация]]> utkin
А может сделать два типа - числа и нечисла?

Статистика: Добавлено Vadim — 21.01.2009 14:04:11


]]>
2009-01-21T13:53:45+03:00 2009-01-21T13:53:45+03:00 https://freepascal.ru/forum/viewtopic.php?p=29751#p29751 <![CDATA[Re: типизация]]>
Можно писать на асемблере - там вобще с байтами напрямую работаеш.


Я же не имел ввиду байты. Зачем все так упрощать?

Нет, человек просто не совсем ясно выразил свою мысль. Тип на самом деле один - тип без типа. Или "один главный тип". А всё остальное - образовано от него.


Мне кажется это более удачной идеей. В Паскале же изначально типы не совместимы.

Типы придуманны специально для удобства - контроль ошибок так легче получается. Самодисциплина чистой воды. А вы с этим боретесь - как будто это зло.


Ну Вы прямо готовы порвать меня за предложенную идею (автор не я!!!) :D . Я всего лишь предлагаю, не более. С одной стороны самодисицплина - с другой стороны вечное преобразование типов, которое, обратите внимание, для алгоритма не является обязательным процессом. Числа в строки, строки в числа, байты в числа и прочее. Зачем это?

Статистика: Добавлено utkin — 21.01.2009 13:53:45


]]>
2009-01-20T04:57:13+03:00 2009-01-20T04:57:13+03:00 https://freepascal.ru/forum/viewtopic.php?p=29724#p29724 <![CDATA[Re: типизация]]> Тип на самом деле один - тип без типа. Или "один главный тип". А всё остальное - образовано от него.

Статистика: Добавлено Vadim — 20.01.2009 04:57:13


]]>
2009-01-20T02:35:56+03:00 2009-01-20T02:35:56+03:00 https://freepascal.ru/forum/viewtopic.php?p=29723#p29723 <![CDATA[Re: типизация]]>
Vadim писал(а):Не variant, а наследник TObject, как в .NET.

так TObject тоже типом является - то что все потомки от TObject это никак не избавляет от типизации, так что тут "мы работаем без типов" не получается.

Статистика: Добавлено perlpunk — 20.01.2009 02:35:56


]]>
2009-01-19T22:55:16+03:00 2009-01-19T22:55:16+03:00 https://freepascal.ru/forum/viewtopic.php?p=29708#p29708 <![CDATA[Re: типизация]]> Или вперёд в прошлое - против типов.
:)
perlpunk писал(а):Тип является объектом? Это типа Variant чтоли?

Не variant, а наследник TObject, как в .NET.

Статистика: Добавлено Vadim — 19.01.2009 22:55:16


]]>