Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизТип void в Delphi. Найти похожие ветки
← →
Дмитрий Белькевич (2010-04-12 10:32) [80]
> А вот для этого пришлось еще одну допольнительную сущность
> придумывать, это скобки после.
Не плодите сущности сверх необходимого.
Один костыль породил другой.
← →
asail © (2010-04-12 11:18) [81]
> Anatoly Podgoretsky © (12.04.10 08:55) [77]
> допольнительную сущность придумывать, это скобки после
Дык, а я про что? Со скобками одно, а без скобок саааавсем другое...
← →
euru © (2010-04-12 11:39) [82]
> Григорьев Антон © (11.04.10 19:51) [53]
> Чтобы больше не говорить такой ерунды, рекомендую познакомиться с языком Оберон (автор
> - тот самый Вирт, который придумал Паскаль). В нём нет слова
> function, есть только procedure, причём процедура может
> возвращать, а может не возвращать значение.
Хорошо, рассмотрим, какие варианты использовал Вирт в своих языках для определения процедур и функций.
Алгол-68
Функция:proc F = (int i) int:
Процедура:proc P = (int i) void:
Паскаль
Функция:function F(i: Integer): Integer;
Процедура:procedure P(i: Integer);
Оберон
Функция:PROCEDURE F(i: INTEGER): INTEGER;
Процедура:PROCEDURE P(i: INTEGER);
С учётом высказанного мною в [47] получаем:
- в Алголе-68 используется специальный тип void;
- в Паскале используется специальное обозначение подпрограмм (procedure/function);
- в Обероне используется специальное обозначение возвращаемого параметра.
При этом только в Алголе определение подпрограмм одинаково как для процедур, так и для функций. В Паскале и Обероне отказ от типа void приводит к необходимости введения дополнительных языковых средств.
> "Типа" void там, естественно, тоже нет, зато система типов является
> замкнутой
Да я вроде бы не про замкнутость, а про полноту говорил.
P.S. Тема C/C++ мной в очередной раз не затронута.
← →
Anatoly Podgoretsky © (2010-04-12 11:48) [83]> Virgo_Style (12.04.2010 10:14:18) [78]
Читается как ФУ
← →
Anatoly Podgoretsky © (2010-04-12 11:51) [84]> euru (12.04.2010 11:39:22) [82]
Вирт нам не показатель, на удивление ветренный мужик.
← →
Anatoly Podgoretsky © (2010-04-12 11:51) [85]> euru (12.04.2010 11:39:22) [82]
Кстати а где другие языки? Например Модула, Эйфель
← →
Virgo_Style © (2010-04-12 11:59) [86]
> Войд ФУУ.
Войд Фуу.
Процедура Фуу.
Кажется, второе мне нравится больше :)
← →
имя (2010-04-12 12:25) [87]Удалено модератором
← →
Дмитрий Белькевич (2010-04-12 12:31) [88]
> В Паскале и Обероне отказ от типа void приводит к необходимости
> введения дополнительных языковых средств.
procedure/function = () в сях. Какие дополнительные средства?
← →
@!!ex © (2010-04-12 13:10) [89]> В Паскале и Обероне отказ от типа void приводит к необходимости
> введения дополнительных языковых средств.
Какое дополнительное средство в Обероне?
← →
grammar-nazi (2010-04-12 13:15) [90]> Григорьев Антон © (11.04.10 20:07) [55]
> Если совсем коротко - то о том, что явного приведения типов в Обероне просто
> нет. Есть только неявное в тех случаях, когда это в принципе не может
> исказить значение - например, при присваивании 8-битного целого 32-битному.
хм... интересно, чем же является конструкция вида <expression>"("<typename>")"?
← →
Anatoly Podgoretsky © (2010-04-12 13:21) [91]> Куку (12.04.2010 12:25:27) [87]
Фас
← →
monoid (2010-04-12 14:34) [92]Давайте попробуем порассуждать над таким утверждением: "Язык программирования имеет больше шансов получить широкую поддержку в индустрии, если, среди прочего, он обеспечивает возможность широкой свободы выражения мысли".
Если рассматривать в этом свете творения Вирта, то можно легко объяснить их провал в плане популярности в индустрии - Вирт пытался ограничить программиста, дабы помочь ему не делать глупых ошибок, ограничивая язык в выразительных средствах. Более того, большинство языков Вирта были ориентированы на какие-либо побочные проекты/специфические применения (образование, Lilith, Oberon OS). В этих областях подобные ограничения в функциональности, может быть, были и оправданы - ведь если при обучении ты привыкаешь делать так-то, чтобы не вышло то-то, то высока вероятность того, что ты будешь избегать ошибок и в практической деятельности.
Но индустрия отвергла эту ограничительную практику (видимо, осознав это, Вирт досадно съехидничал, что "Написание надежных и простых программ, как правило, не является целью разработчика"). Почему же это произошло?
На мой взгляд потому, что программы, написанные на простом в своей основе языке не могут быть простыми и выразительными - вспомните, например такой непременный атрибут Java, как code bloat. Однако, не смотря на это, Java является одним из самых популярных языков, намного превосходя по популярности Oberon и Дельфи. На мой взгляд, это произошло потому, что в отличие от творений Вирта, Java содержит инструменты для создания мощных абстракций, при симуляции которых, например на Delphi код будет еще более распухшим.
Мощные абстракции (например, практически бесплатный с точки зрения написания кода ad-hoc полиморфизм, перечисления, генерализация в Java), хотя и делают программу менее надежной и простой для непосредственного понимания "в лоб", делают, при этом, процесс разработки более удобным, что по-видимому, является решающим критерием для индустрии.
При понимании всего этого, мне кажется странным стремление цепляться за нежизнеспособное наследие Алгола и Паскаля, которое рано или поздно скончается в муках. Более важным, мне видится разработка критериев и практик безопасного программирования, которыми программист должен сознательно руководствоваться, при использовании языков, допускающих высокую степень абстракций и выразительности.
Интересно, знают ли пользователи Дельфи и Оберона о таких критериях (мне бы самому было интересно узнать), или они всецело полагаются на ограничения своих языков?
← →
ФаФаЛяЛя (2010-04-12 14:48) [93]Интересно, знают ли пользователи Дельфи и Оберона о таких критериях (мне бы самому было интересно узнать), или они всецело полагаются на ограничения своих языков?
Нет, куда уж нам? Мы тупо полагаемся на то, что, если повезет, компилятор носом тыкнет. А если не повезет - будут warning"и, на которые мы, как водится, внимания не обращаем. Фигня, короче. Лишь бы работало. Ты вообще, тут про абстракции не ругайся. Слышь, да? Тоже мне, абстрактное javление! Гы...
← →
Дмитрий Белькевич (2010-04-12 15:07) [94]>Давайте попробуем порассуждать над таким утверждением: "Язык программирования имеет больше шансов получить широкую поддержку в индустрии, если, среди прочего, он обеспечивает возможность широкой свободы выражения мысли".
Ты живёшь в светлых, детских, иллюзиях. Миром, увы, правят деньги. Свобода выражения - дело вторичное. В одни языки было вкачано больше денег. В другие - меньше. Результат мы видим.
BASIC - тот вообще чуть ли не самым простым языком считался, и ничего - стоило начать MS"у его продвигать, как вся свобода выражения пошла боком и появилась куча приложений на нём.
Не говоря уже про дотнет с отсутствующими указателями - какая уж тут свобода... И ничего.
← →
monoid (2010-04-12 15:28) [95]>Миром, увы, правят деньги. Свобода выражения - дело вторичное.
Но, не забывайте о том, что глобальная экономика, все же, преимущественно рыночная и в ней есть место конкуренции. Чтобы быть успешными в коммерческом отношении, инструменты разработки должны подстраиваться под запросы индустрии, что можно видеть на примере той же Дельфи - хоть и с большим запозданием она стремится обрастать той же функциональностью, что давно уже существует, например в C++. Еесли свобода выражения дело вторичное, то почему, собственно, она это делает?.
Ну а то, насколько передовым и экспрессивным является .NET в его нынешнем состоянии, по сравнению с Дельфи и даже C++, пожалуй слишком очевидно. Дельфи безнадежно отстала от поезда.
>BASIC - тот вообще чуть ли не самым простым языком считался, и ничего - стоило начать MS"у его продвигать, как вся свобода выражения пошла боком и появилась куча приложений на нём.
Какова была его доля в индустрии и какова она сейчас? Она была не слишком велика, и это был такой точно такой же провал.
← →
TUser © (2010-04-12 15:49) [96]> Не говоря уже про дотнет с отсутствующими указателями
эээ ... http://www.vestace.ru/Default.aspx?tabid=64&ctl=Details&mid=380&ItemID=20
← →
test © (2010-04-12 15:50) [97]monoid (12.04.10 15:28) [95]
.Net и прочие Java удобно продавать используя птичий язык, мода пройдет окажутся там же где остальные модные вещи, а Delphi опять будет догонять какой нибудь модный язык))
← →
Anatoly Podgoretsky © (2010-04-12 16:01) [98]> monoid (12.04.2010 15:28:35) [95]
> Какова была его доля в индустрии и какова она сейчас? Она была не слишком велика, и это был такой точно такой же провал.
Ты цифрами то обладаешь, или так от булды говоришь?
← →
Григорьев Антон © (2010-04-12 17:49) [99]
> euru © (12.04.10 11:39) [82]
> Да я вроде бы не про замкнутость, а про полноту говорил.
void не делает систему типов полной, потому что нарушает ортогональность. Появляется некая сущность, которая в одних случаях может использоваться там, где используются типы, а в других - не может. Тут уже много раз говорили, что void не является типом, так как нельзя объявлять такие переменные и т.п.
← →
Дмитрий Белькевич (2010-04-12 17:57) [100]
> Ну а то, насколько передовым и экспрессивным является .NET
> в его нынешнем состоянии, по сравнению с Дельфи и даже C++,
> пожалуй слишком очевидно.
Экстенсивным, хотел сказать? Настолько, что его нужно в связке с плюсами пользовать.
> .Net и прочие Java удобно продавать используя птичий язык,
> мода пройдет окажутся там же где остальные модные вещи,
> а Delphi опять будет догонять какой нибудь модный язык))
Ничего, зато плюсовики-дотнетчики не останутся без работы - будут переносить свои проекты на очередное "гениальное" творение. Творчески онанизм и генерация энтропии - ничего более.
Вообще - можете старую ветку поднять, если сильно интересен холивар дотнет vs delphi&other:
http://delphimaster.net/view/15-1268760103/
[281], например. Иначе очередная ветка в помойку превратиться.
← →
Дмитрий Белькевич (2010-04-12 18:00) [101]>Творчески
Читать: Творческий.
>превратиться
Читать: превратится
Сделайте, пожалуйста, редактирование в форуме.
← →
han_malign (2010-04-12 18:45) [102]
> Сделайте, пожалуйста, редактирование в форуме.
OFFTOP - Джоел Спольски доказал вредность редактирования в форуме: пока ищешь орфографические ошибки, найдешь заодно стилистические и вообще целесообразность поста...
← →
asail © (2010-04-12 18:56) [103]
> monoid (12.04.10 15:28) [95]
Мне вот что интересно... C++ был от МС и был от Борланда, например. Но второй чагой-то не прижился, зато первый живет и процветает... Может, все ж не в языке дело, а?
> Какова была его доля в индустрии и какова она сейчас? Она
> была не слишком велика, и это был такой точно такой же провал.
Это включая VBA или нет?
← →
Игорь Шевченко © (2010-04-12 19:01) [104]asail © (12.04.10 18:56) [103]
> C++ был от МС и был от Борланда
Jт кого только не был. и от Symantec и от Watcom и от Zortech и от GNU
← →
@!!ex © (2010-04-12 20:15) [105]> [103] asail © (12.04.10 18:56)
> Может, все ж не в языке дело, а?
Builder создает ощущение убогой поделки. Не удивительно что не прижилась.
← →
asail © (2010-04-12 21:40) [106]
> @!!ex © (12.04.10 20:15) [105]
> Builder создает ощущение убогой поделки. Не удивительно
> что не прижилась.
Возможно. А другие? Смотри
> Игорь Шевченко © (12.04.10 19:01) [104]
Я от борланда именно как пример приводил, чтоб было два языка от одной компании разработчика. К сожалению у МС дельфи нет, чтоб сравнить его судьбу с судьбой Visual C++. А иначе нечестно.
← →
Игорь Шевченко © (2010-04-12 22:10) [107]asail © (12.04.10 21:40) [106]
> К сожалению у МС дельфи нет, чтоб сравнить его судьбу с
> судьбой Visual C++. А иначе нечестно.
у MS есть много всего другого, например Visual Basic. Вполне можно сравнить с Delphi
а у Borlandа был и Turbo basic. Кстате.
а у IBM были Visual Age - C++, Smalltalk, Java и т.п.
Я к чему - сред разработки для разных языков было как звезд на небе. Кто-то выиграл, кто-то проиграл - империализм, понимаете ли. Девальвация, пауперизм.
← →
Дмитрий Белькевич (2010-04-13 01:16) [108]
> Я к чему - сред разработки для разных языков было как звезд
> на небе. Кто-то выиграл, кто-то проиграл - империализм,
> понимаете ли. Девальвация, пауперизм.
И, что самое главное, от качества/гибкости языка это никак не зависит.
Поддержи в своё время MS и другие Pascal, был бы он, как минимум, там, где сейчас плюсы. И паскалисты бы с гордостью говорили, что только они молятся правильному богу, и поэтому их язык является единственно верным и потому наиболее распространённым. И, естественно, были бы не правы.
← →
Германн © (2010-04-13 01:27) [109]
> у MS есть много всего другого, например Visual Basic. Вполне
> можно сравнить с Delphi
>
Угу. Сравнение не в пользу МС.
> а у Borlandа был и Turbo basic. Кстате.
>
Помню. КстатЕ тоже минус в пользу МС.
← →
asail © (2010-04-13 05:28) [110]
> Дмитрий Белькевич (13.04.10 01:16) [108]
> И, что самое главное, от качества/гибкости языка это никак
> не зависит.
Вот! Об чем и речь, собстна...
← →
test © (2010-04-13 05:46) [111]Германн © (13.04.10 01:27) [109]
QBasic
GWasic
← →
Вариант (2010-04-13 06:55) [112]
> Дмитрий Белькевич (12.04.10 15:07) [94]
> Дмитрий Белькевич (12.04.10 17:57) [100]
Кстати для информации - в C#, который является одним из языков программирования для платформы .NET есть указатели, пользоваться ими рекомендуют конечно в том случае, если вы знаете что делаете.
И второе - в каких случаях надо использовать связку С++ и C#? Далеко не во всех. Скажем так для обычных задач, которые я решал на дельфи и которые наверное решают в большой части многие - а именно приложения для работы с БД мне и C# хватало за глаза. Для работы с GIS системами - аналогично, для работы с локальной сетью -аналогично, для работы с COM портами и железом подключенным через них -т о же самое.... Для работы на мобильтных платформах - вполне. Для работы с быстрой графикой, писать игры - вот тут может быть, не знаю - ибо игрулек не пишу и не писал - не мой профиль. Так что про энтропию ты зря.
Впрочем в пылу борьбы за чистоту языка и некоторые мастера отказывают в праве на жизнь языку, который позволяет сделать конструкцию типа#deifine TRUE FALSE;
, забывая что вполне можно сделать и на другом языкеconst TRUE=FLASE;
:-)
PS: Кстати заметил Chrome неправильно отображает надписи на линейке кнопок выбора стиля текста (жирный подчеркнутый, код.....), не по центру, а смещено вправо - если это кому-то интересно....
← →
Anatoly Podgoretsky © (2010-04-13 09:09) [113]> Игорь Шевченко (12.04.2010 22:10:47) [107]
У Микрософта был Quick Pascal, вполне пригодный для системного программирования.
Это намек на БЫЛ
← →
Anatoly Podgoretsky © (2010-04-13 09:11) [114]> Германн (13.04.2010 01:27:49) [109]
Особенно если учесть, что в примерах одна и таже задача для ASP.NET на двух языках VB и C#
Так что более чем в пользу МС, а не в пользу Борланда. А ведь открыто для рассширения.
← →
test © (2010-04-13 09:34) [115]Вариант (13.04.10 06:55) [112]
Это можно про любой язык написать, в чем уникальность?
← →
Вариант (2010-04-13 09:46) [116]
> test © (13.04.10 09:34) [115]
Я где-то писал про уникальность? Я просто хотел обратить внимание на то, что не надо придумывать недостатки другим языкам, чтобы оправдать то, что я пишу на "этом своем любимом языке" (название подставить). Для меня C# не многим хуже или лучше дельфи и наоборот. Что-то ближе и роднее там, а что-то нравится тут. А пишу на том, на чем скажут или что подходит на мой взгляд лучше (ну или на том, что мне в данный момент интересней, когда есть такая возможность)
test
> t © (13.04.10 09:34) [115]
> Это можно про любой язык написать
Кстати с этим согласен и это высказывание не противоречит тому, что я хотел сказать в [112] ;-)
← →
euru © (2010-04-13 10:08) [117]
> Дмитрий Белькевич (12.04.10 12:31) [88]
> procedure/function = () в сях. Какие дополнительные средства?
В Си определение любой подпрограммы выглядит следующим образом:<тип> <имя подпрограммы>(<список параметров>);
Поведение подпрограммы (в частности, возможность возврата значения) определяется типом.
В Паскале для этой цели используются конструкции языка для подпрограмм, возвращающих значения (function), и подпрограмм без возврата значений (procedure).
> @!!ex © (12.04.10 13:10) [89]
> Какое дополнительное средство в Обероне?PROCEDURE <имя подпрограммы>(<список параметров>)[: <тип>];
Конструкция: <тип>
и есть дополнительное языковое средство, позволяющее различать в Обероне процедуры и функции.
> Григорьев Антон © (12.04.10 17:49) [99]
> void не делает систему типов полной
Да я вроде бы и про это не говорил.
потому что нарушает ортогональность.
Честно, не понял. Почему нарушает-то?
> Появляется некая сущность, которая в одних случаях может
> использоваться там, где используются типы, а в других - не может. Тут
> уже много раз говорили, что void не является типом, так как
> нельзя объявлять такие переменные и т.п.
Есть в Паскале типfile
. Он не может использоваться в качестве типа возвращаемого значения.
В Обероне процедуры не могут возвращать массивы и записи.
Над нескалярными типами нельзя проводить арифметические операции.
В Дельфи классы тоже разительно отличаются от остальных типов: это единственный тип, для которого предусмотрено только динамическое выделение памяти.
Так что у любого типа имеются свои ограничения, регламентирующие возможность его использования.
Типvoid
означает отсутствие типа, его неопределённость. Естественно, если тип невозможно определить, то и переменную такого нельзя создать. В Паскале несколько похожими свойствами обладает типPointer
: со значением, на которое ссылается указатель, нельзя будте работать до тех пор, пока не будет определён тип указателяtype
a: Integer;
pi: PInteger;
p: Pointer;
. . .
a := pi^; // Ошибок нет
a := p^; // Ошибка
a := Integer(p^); // Ошибок нет
← →
oxffff © (2010-04-13 10:29) [118]The type Void is the type of zero tuples. It will be used as
the return type of commands or statements and as the parameter type for
parameterless functions.
In order to avoid having to distinguish between functions and procedures
in the semantics, the expanded language will represent procedures as functions which
return a value nop of type Command, the type of commands. The
expression nop stands for a command which does nothing. In the abbreviated
language, we will allow return nop to be omitted.
Because of this convention, the return type of procedures will also be given
as Command, the type of all other statements, rather than the Void we have
been using in the abbreviated language. While this differs from the conven
tions used in C-style syntax, it is helpful to distinguish between a function
which takes a default value () of type Void, and a procedure whose return
type indicates that it is executed to change the state of the computer.
Invoking a parameterless method involves applying it to (). In order
to make method definitions and invocations more uniform, parameterless
methods will be considered to be abbreviations for methods which take a
new (and unused) parameter of type Void. Because () has type Void, this
will work smoothly with our type-checking rules.
Other differences between the original and the non-abbreviated version
of the notation for class definitions are that names of classes and methods
are separated from the expressions that define them, and method names are
provided with their types. One reason for specifying this somewhat more
verbose version of the language is that it will allow us to have anonymous
class and function expressions.
← →
TUser © (2010-04-13 10:30) [119]
> Впрочем в пылу борьбы за чистоту языка и некоторые мастера
> отказывают в праве на жизнь языку, который позволяет сделать
> конструкцию типа #deifine TRUE FALSE;, забывая что вполне
> можно сделать и на другом языке const TRUE=FLASE;:-)
fpc -Mdelphi ругается, молодец.
← →
oxffff © (2010-04-13 10:33) [120]
> oxffff © (13.04.10 10:29) [118]
Это к тому что тип void существует в том или ином виде.
Однако действительно объявлять переменные запрещено(поскольку лишено смысла) Но некое выражение может являться в итоге типом void, что не запрещено.
Страницы: 1 2 3 4 вся ветка
Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.72 MB
Время: 0.068 c