Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизТип void в Delphi. Найти похожие ветки
← →
xdragon (2010-04-10 16:54) [0]Предлагаю участникам форума порассуждать на тему типа void в Delphi:
- почему его нет в делфи?
- где его можно использовать?
- резонно ли вводить такой тип вообще?
- что можно предложить в качестве типа void?
(куда ещё порекомендуете запостить такую тему?)
← →
Eraser © (2010-04-10 16:56) [1]есть.
← →
Anatoly Podgoretsky © (2010-04-10 17:15) [2]> xdragon (10.04.2010 16:54:00) [0]
За ненадобностью, костыль не нужен.
← →
Дмитрий Белькевич (2010-04-10 19:18) [3]Предлагаю еще одну тему: почему у автомобилей нет пятого колеса?
← →
test © (2010-04-10 19:21) [4]xdragon (10.04.10 16:54)
смотри Pointer и справку.
← →
test © (2010-04-10 19:22) [5]Дмитрий Белькевич (10.04.10 19:18) [3]
Не правда ваша, есть сам видел, запасное ))
← →
Дмитрий Белькевич (2010-04-10 19:26) [6]
> Не правда ваша, есть сам видел, запасное ))
Тема прижилась :)
← →
@!!ex © (2010-04-10 20:24) [7]> - почему его нет в делфи?
Потому что он искуссвенный. Почему нет предмета типа "пустота"?
Есть аналоги.
> где его можно использовать?
Нигде.
> резонно ли вводить такой тип вообще?
Нет.
> что можно предложить в качестве типа void?
Эм. Для чего? В С++ - это слишком общее ключевое слово обознаюачщее сразу кучу всего: function/procedure, pointer и т.п.
← →
Dimka Maslov © (2010-04-10 20:36) [8]void в сях нужен для того чтобы сделать не него указатель или объявить функцию, не возвращающую значения. А передать в функцию параметр типа void или объявить переменную этого типа нельзя.
← →
boa_kaa © (2010-04-10 20:39) [9]
> @!!ex © (10.04.10 20:24) [7]
> > - почему его нет в делфи?
>
> Потому что он искуссвенный. Почему нет предмета типа "пустота"?
>
void - это не пустота
← →
Anatoly Podgoretsky © (2010-04-10 20:52) [10]> Dimka Maslov (10.04.2010 20:36:08) [8]
Потому что там нет процедур, вот искуственные сущности и выдумывают.
← →
KSergey © (2010-04-10 20:54) [11]> test © (10.04.10 19:21) [4]
> смотри Pointer и справку.
void и void* - сильно разные вещи в Си. Не надо путать.
← →
euru © (2010-04-10 20:54) [12]
> Anatoly Podgoretsky © (10.04.10 17:15) [2]
> За ненадобностью, костыль не нужен.
Из-за отсутствия типа void приходится для понятия "подпрограмма" использовать два слова: procedure и function. Чем не костыль?
> @!!ex © (10.04.10 20:24) [7]
> Потому что он искуссвенный. Почему нет предмета типа "пустота"?
А как же "вакуум", "нуль", "пустое множество"?
← →
Anatoly Podgoretsky © (2010-04-10 21:04) [13]> KSergey (10.04.2010 20:54:11) [11]
А это уже другая условность. Но это суверенное право разработчиков, решили на словах съекономить.
← →
Anatoly Podgoretsky © (2010-04-10 21:05) [14]> euru (10.04.2010 20:54:12) [12]
Линуксоидов ни в чем не убедить, они готовы любые извращения принимать как должное.
← →
jack128_ (2010-04-10 21:13) [15]
> Предлагаю участникам форума порассуждать на тему типа void
> в Delphi:
> - почему его нет в делфи?
Не нужен.
> - где его можно использовать?
Нигде. Подобный может был бы полезен в гибридных функционально-императивных языках. дельфя на такой не тянет.
> - резонно ли вводить такой тип вообще?
Нет.
> - что можно предложить в качестве типа void?
Ничего. тип не нужен.
> Из-за отсутствия типа void приходится для понятия "подпрограмма"
> использовать два слова: procedure и function. Чем не костыль?
>
если ты имеешь в виду void из С/С++ - то это не тип. А просто ключевое слово.
← →
Anatoly Podgoretsky © (2010-04-10 21:24) [16]> jack128_ (10.04.2010 21:13:15) [15]
Ну вот взял и открыл все тайны, особенно что это не тип, на корню ветку убил.
← →
DVM © (2010-04-10 21:29) [17]void это и тип и спецификатор типа и ключевое слово одновременно.
← →
jack128_ (2010-04-10 21:34) [18]
> void это и тип
я могу объявить переменную этого типа??
← →
Кто б сомневался © (2010-04-10 21:34) [19]товарищ видимо не знает, что void переводится с английского как пустота, вакуум, пробел.
void в функциях на С\pp\php и др просто обозначает отстутствие параметров. Если же имеются ввиду void полу-указатели, то в Delphi это обычный Pointer . Никаких преимуществ у него нету.
← →
Правильный$Вася (2010-04-10 21:36) [20]из словаря Мюллера
3. бесполезный, неэффективный
← →
Anatoly Podgoretsky © (2010-04-10 21:43) [21]
> товарищ видимо не знает, что void переводится с английского
> как пустота, вакуум, пробел.
Товарищ видимо хотел нас обидеть, нас сирых.
← →
DVM © (2010-04-10 21:48) [22]
> jack128_ (10.04.10 21:34) [18]
> я могу объявить переменную этого типа??
void* p
так не?
У Бьерна Страуструпа в "Язык программирования С++" глава в книге так и назвается: "Тип void"
← →
jack128_ (2010-04-10 21:52) [23]
> так не?
разве p - это перемнная типа void ??
> У Бьерна Страуструпа в "Язык программирования С++" глава
> в книге так и назвается: "Тип void"
ну значит в сpp понятие типа отличается от того, что принято в других языках..
← →
Dimka Maslov © (2010-04-10 21:52) [24]
> Anatoly Podgoretsky © (10.04.10 20:52) [10]
вообще все языковые фиоритуры суть искусственные сущности.
> я могу объявить переменную этого типа??
объявить можно. прога только не скомпилируется.
← →
Игорь Шевченко © (2010-04-10 22:13) [25]"Then make yourself null and void" (c) Queen, "Death on two legs"
← →
Медвежонок Пятачок © (2010-04-11 00:07) [26]необходимость в войде существует только там, где нет процедур, а только функции.
в паскале есть и функции и процедуры. посему и войд паскалю не нужен.
← →
euru © (2010-04-11 01:56) [27]
> jack128_ (10.04.10 21:13) [15]
> если ты имеешь в виду void из С/С++ - то это не тип. А просто
> ключевое слово.
Я имею в виду понятие void, означающее отсутствие типа. Без этого понятия система типов является неполной. И её приходится компенсировать другими языковыми средствами. В частности, в Паскале для обозначения подпрограмм, возвращающих значение, используется ключевое слово function, а для подпрограмм, невозвращающих значение, - ключевое слово procedure.
← →
Германн © (2010-04-11 02:02) [28]
> И её приходится компенсировать другими языковыми средствами.
Я бы не назвал это компенсацией. Понятия function и procedure всегда в Паскале были самодостаточны и понятны всем интуитивно. Вот только спутало всю интуитивную понятность разрешение в Дельфи вызывать функцию как процедуру.
← →
Юрий Зотов © (2010-04-11 02:15) [29]И снова все как обычно - рассуждаем о том, чего не понимаем. Знаем, но не понимаем. Не догоняем, если угодно.
Нет, воистину - есть Сишники, а есть ссышники. Сорри, но это так.
← →
euru © (2010-04-11 02:19) [30]
> Медвежонок Пятачок © (11.04.10 00:07) [26]
> необходимость в войде существует только там, где нет процедур,
> а только функции.в паскале есть и функции и процедуры.
> посему и войд паскалю не нужен.
Но ведь можно сказать и по-другому.
Необходимость в наличии как процедур, так и функций существует только там, где нет типа void. В Паскале нет типа void, поэтому ему нужны и процедуры, и функции.
Кстати, в Алголе 68, предшественнике Паскаля, тип void был.
← →
Германн © (2010-04-11 02:23) [31]
> Но ведь можно сказать и по-другому.
> Необходимость в наличии как процедур, так и функций существует
> только там, где нет типа void.
Сказать то можно. Но звучит это глупо.
← →
euru © (2010-04-11 02:36) [32]
> Германн © (11.04.10 02:23) [31]
А по-моему, если относиться непредвзято, то оба выражения равнозначны.
← →
Германн © (2010-04-11 02:45) [33]
> euru © (11.04.10 02:36) [32]
>
>
> > Германн © (11.04.10 02:23) [31]
> А по-моему, если относиться непредвзято, то оба выражения
> равнозначны.
>
Нет не равнозначны.
По мне лучше полная однозначность. Либо функция обязательно возвращающая результат, либо процедура. Либо есть у функции/процедуры параметры, либо их нет.
То бишь шаг влево, шаг вправо... :)
← →
Медвежонок Пятачок © (2010-04-11 03:25) [34]Но ведь можно сказать и по-другому.
Необходимость в наличии как процедур, так и функций существует только там, где нет типа void.
Я так понимаю что поднимается тема что круче, си и ли паскаль?
Если да, то я пас.
Я просто сказал, что там где есть процедуры, войд не нужен.
← →
Германн © (2010-04-11 03:28) [35]
> Медвежонок Пятачок © (11.04.10 03:25) [34]
>
> Но ведь можно сказать и по-другому.
> Необходимость в наличии как процедур, так и функций существует
> только там, где нет типа void.
>
> Я так понимаю что поднимается тема что круче, си и ли паскаль?
>
Модераторы "опустят" . Не сомневайся. :)
← →
test © (2010-04-11 06:36) [36]KSergey © (10.04.10 20:54) [11]
void тип
void* указатель на область памяти
Поскольку автор задал вопрос и ждет когда из него будут тисками тащить нормальный вопрос, я предположил что ему нужен указатель.
← →
имя (2010-04-11 08:48) [37]Удалено модератором
← →
Дмитрий С © (2010-04-11 10:39) [38]Почему нельзя было сделать
function Foobar(SomeParam:SomeType);
вместо
begin
end;procedure
?
Из описания и так понятно, что функция ничего не возвращает.
А вот еще:procedure TStream.ReadBuffer(var Buffer; Count: Longint);
Какого типа параметр Buffer ? :-) Только не надо говорить, что Pointer, это ложь.
← →
Игорь Шевченко © (2010-04-11 11:15) [39]Юрий Зотов © (11.04.10 02:15) [29]
Тема наименования ламеров, использующих другие языки, не раскрыта
← →
Anatoly Podgoretsky © (2010-04-11 11:27) [40]
> Дмитрий С © (11.04.10 10:39) [38]
Ознакомься что означает слово функция в математике.
← →
Anatoly Podgoretsky © (2010-04-11 11:28) [41]Сообственно автор провокатор и тихо катается от смеха под столом.
← →
Virgo_Style © (2010-04-11 12:32) [42]
> А по-моему, если относиться непредвзято, то оба выражения
> равнозначны.
procedure A - процедура A.
void A - ... ?
← →
я (2010-04-11 12:34) [43]
> Anatoly Podgoretsky © (11.04.10 11:28) [41]
>
> Сообственно автор провокатор и тихо катается от смеха под
> столом.
>
+
← →
SergeyIT © (2010-04-11 13:13) [44]Только что внучка кино смотрела, где спорили о конце/начале дубинок - очень похоже на обсуждение в этой теме )))
← →
Eraser © (2010-04-11 13:47) [45]> А вот еще:
> procedure TStream.ReadBuffer(var Buffer; Count: Longint)
> ;
илиprocedure Proc(const Param);
begin
end;
← →
Дмитрий С © (2010-04-11 14:48) [46]
> Ознакомься что означает слово функция в математике.
В математике функции детерминированные, поэтому их приплетать сюда нельзя. Это раз. Другим языкам нисколько не мешает использовать это слово для функций и процедур. Это два. И ...
> Anatoly Podgoretsky © (11.04.10 11:28) [41]
>
> Сообственно автор провокатор и тихо катается от смеха под
> столом.
Завидуешь, что автор не ты? :))
← →
euru © (2010-04-11 16:12) [47]
> Медвежонок Пятачок © (11.04.10 03:25) [34]
> Я так понимаю что поднимается тема что круче, си и ли паскаль?
Возможно, некоторые из участников и хотели бы это увидеть, но у меня и в мыслях такого не было.
Просто Паскаль и С++ используют разные механизмы для различения подпрограмм, возвращающих и не возвращающих результат.
В Паскале для этого используют специальные обозначения вида подпрограмм: function возвращает результат, procedure не возвращает.
В C++ для подпрограмм, не возвращающих результат, используют специальное обозначение типа: void.
Есть языки, в которых для этих целей используется специальное обозначение параметра, содержащего возвращаемое значение.
А в С изначально и не было такого типа. Зато, как я уже писал выше, он был в Алголе 68.
← →
Дмитрий Белькевич (2010-04-11 16:29) [48]Не взлетит.
← →
oxffff © (2010-04-11 19:12) [49]Java and C++ in using Void in the domain of a function to indicate a parameterless function and, as stated earlier, Void in the range is used to indicate a procedure.
← →
Anatoly Podgoretsky © (2010-04-11 19:19) [50]> oxffff (11.04.2010 19:12:49) [49]
То есть четко признают наличие процедур и собственную лень, схитрили с void
← →
oxffff © (2010-04-11 19:35) [51]
> Anatoly Podgoretsky © (11.04.10 19:19) [50]
> > oxffff (11.04.2010 19:12:49) [49]
>
> То есть четко признают наличие процедур и собственную лень,
> схитрили с void
Почему схитрили?
← →
Игорь Шевченко © (2010-04-11 19:44) [52]Anatoly Podgoretsky © (11.04.10 19:19) [50]
В C нету процедур. В C есть только функции. Некоторые из них не возвращают результата.
← →
Григорьев Антон © (2010-04-11 19:51) [53]
> euru © (11.04.10 01:56) [27]
> Я имею в виду понятие void, означающее отсутствие типа.
> Без этого понятия система типов является неполной. И её
> приходится компенсировать другими языковыми средствами.
> В частности, в Паскале для обозначения подпрограмм, возвращающих
> значение, используется ключевое слово function, а для подпрограмм,
> невозвращающих значение, - ключевое слово procedure.
Чтобы больше не говорить такой ерунды, рекомендую познакомиться с языком Оберон (автор - тот самый Вирт, который придумал Паскаль). В нём нет слова function, есть только procedure, причём процедура может возвращать, а может не возвращать значение. "Типа" void там, естественно, тоже нет, зато система типов является замкнутой, причём это не просто красивое утверждение, а математически обоснованный факт - Вирт вообще потратил много времени на строгое теоретическое обоснование тех абстракций, которые используются в Обероне. Короче, знакомство с этим языком сильно расширяет кругозор.
← →
oxffff © (2010-04-11 19:53) [54]
> система типов является замкнутой
Подробнее пожалуйста о чем речь.
← →
Григорьев Антон © (2010-04-11 20:07) [55]
> oxffff © (11.04.10 19:53) [54]
>
> > система типов является замкнутой
>
>
> Подробнее пожалуйста о чем речь.
Если совсем коротко - то о том, что явного приведения типов в Обероне просто нет. Есть только неявное в тех случаях, когда это в принципе не может исказить значение - например, при присваивании 8-битного целого 32-битному.
http://www.vspu.ac.ru/~chul/wirth/frommodula/frommodula.htm
← →
Anatoly Podgoretsky © (2010-04-11 20:07) [56]> oxffff (11.04.2010 19:35:51) [51]
Не стали использовать, известное им название, а взяли из СИ, практически весь синтаксис взят из СИ, со всеми его условностями, символами для жрецов.
А ведь знали, что это называется "процедура"
← →
Anatoly Podgoretsky © (2010-04-11 20:09) [57]> Григорьев Антон (11.04.2010 19:51:53) [53]
Что то последнии изыски Вирта вызывают у меня некоторое неприятие, например регистро зависимость. Что то с Виртом случилось на старости.
← →
oxffff © (2010-04-11 20:14) [58]
> Григорьев Антон © (11.04.10 20:07) [55]
А вот о чем речь. Я думал о другом.
← →
oxffff © (2010-04-11 20:16) [59]
> Anatoly Podgoretsky © (11.04.10 20:07) [56]
> > oxffff (11.04.2010 19:35:51) [51]
>
> Не стали использовать, известное им название, а взяли из
> СИ, практически весь синтаксис взят из СИ, со всеми его
> условностями, символами для жрецов.
>
> А ведь знали, что это называется "процедура"
Я например, чтобы избежать такой путаницы, назвал у себя - исполнимое(executable).
← →
silver © (2010-04-11 20:22) [60]
> символами для жрецов.
жжете :-D
← →
silver © (2010-04-11 20:24) [61]
> А ведь знали, что это называется "процедура"
что непонятного в
void foo();
и чем это хуже
procedure foo();
?
← →
Григорьев Антон © (2010-04-11 20:26) [62]
> Anatoly Podgoretsky © (11.04.10 20:09) [57]
> Что то последнии изыски Вирта вызывают у меня некоторое
> неприятие, например регистро зависимость. Что то с Виртом
> случилось на старости.
Мне тоже далеко не всё в Обероне нравится. Но интересные идеи в нём всё-таки есть.
← →
Anatoly Podgoretsky © (2010-04-11 20:43) [63]> silver (11.04.2010 20:24:01) [61]
Ты это лишнии скобочки то убери. Мы в Паскале так не пишем.
← →
Anatoly Podgoretsky © (2010-04-11 20:45) [64]> Григорьев Антон (11.04.2010 20:26:02) [62]
Ну идей более чем достаточно.
Вообще плодовитый дядька столько языков изобрел. На 10 профессоров хватит.
← →
@!!ex © (2010-04-11 20:47) [65]> [63] Anatoly Podgoretsky © (11.04.10 20:43)
> Мы в Паскале так не пишем.
Мы пишем.
← →
silver © (2010-04-11 20:50) [66]
> Мы пишем.
:-D
башорк не нужен, когда есть ДМ
скобочками я обозначил возможное наличие параметров
то есть, по поводу void претензий больше нет, как я понимаю?
← →
Anatoly Podgoretsky © (2010-04-11 22:29) [67]> @!!ex (11.04.2010 20:47:05) [65]
Ты не наш человек.
← →
@!!ex © (2010-04-11 22:50) [68]> [67] Anatoly Podgoretsky © (11.04.10 22:29)
> Ты не наш человек.
У меня другая дельфи? :(
← →
Anatoly Podgoretsky © (2010-04-11 23:57) [69]У меня правильная Дельфи.
← →
silver © (2010-04-12 00:29) [70]
> У меня правильная Дельфи.
уже давно пора начать пользоваться, чо
← →
Германн © (2010-04-12 01:39) [71]
> @!!ex © (11.04.10 22:50) [68]
>
> > [67] Anatoly Podgoretsky © (11.04.10 22:29)
> > Ты не наш человек.
>
> У меня другая дельфи? :(
>
У тебя другой Паскаль. :)
← →
silver © (2010-04-12 01:55) [72]
> У тебя другой Паскаль. :)
go away
не мешай void и Ц\Ц++ ругать
← →
Германн © (2010-04-12 02:31) [73]
> silver © (12.04.10 01:55) [72]
Брысь, зараза!
Так я обычно говорю кошке, которая постоянно путается под ногами. :)
← →
uw © (2010-04-12 08:12) [74]silver © (11.04.10 20:24) [61]
что непонятного в
void foo();
и чем это хуже
procedure foo();
?
Слово void не соответствует слову procedure.
В Паскале
I: Integer;
function Foo: TSomeType;
procedure Foo2;
А в С всё наоборот:
int i;
struct some_struct *foo();
void foo2();
Чувствуешь разницу?
Можно было бы, конечно, в Паскале все типы писать справа, а специальный тип void писать слева от имени процедуры. Возможно Вирт так бы и сделал, но Паскаль был придуман до С, и Вирт облажался и всё сделал единообразно.
Можно было бы писать и так:
Foo2: void;
Но как бы мы догадались, что Foo2 - это процедура?
Есть ещё вариант:
procedure Foo2: void;
Но на фиг тогда void, если и без него всё понятно, а?
← →
asail © (2010-04-12 08:17) [75]
> silver © (11.04.10 20:24) [61]
> что непонятного в
> void foo();
> и чем это хуже
> procedure foo();
Хуже? Кто-то говорил про "хуже"? По каким объективнам критериям сравнивалось?
А вот субъективно, второй вариант лично мне нравится больше. Хотя бы (и именно) наличием ключевого слова "procedure", которое явно и однозначно говорит о том, что за сущность перед нами. Независимо от контекста.
Например int Foo - это кто? Функция без параметров или переменная? Зависит от того, что напишем сразу после... Мелочь, конечно...
По той-же причине мне нравится разделение procedure/function.
Особенно это принципиально для осваивающих новый для себя язык. Проще, не более.
Хотя, принципиального отличия конечно же нет.
Имхо.
← →
Anatoly Podgoretsky © (2010-04-12 08:54) [76]> uw (12.04.2010 08:12:14) [74]
Слушай, ты всех запутал.
Про сон, что не сон
Про не сон, что сон.
← →
Anatoly Podgoretsky © (2010-04-12 08:55) [77]> asail (12.04.2010 08:17:15) [75]
А вот для этого пришлось еще одну допольнительную сущность придумывать, это скобки после.
← →
Virgo_Style © (2010-04-12 10:14) [78]Так как же все-таки читается "void Foo()" ?
← →
oxffff © (2010-04-12 10:28) [79]Войд ФУУ.
← →
Дмитрий Белькевич (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, что не запрещено.
← →
monoid (2010-04-13 11:00) [121]Дмитрий Белькевич (13.04.10 01:16) [108]
>И, что самое главное, от качества/гибкости языка это никак не зависит.
Ну если бы это было правдой, то писали бы мы сейчас всё на фортране. Однако, почему-то это не так. Не находите противоречий?
>Поддержи в своё время MS и другие Pascal, был бы он, как минимум, там, где сейчас плюсы.
Этого бы никогда не произошло, просто потому, что плюсы являются смелым экспериментом, целью которого было объединить в языке несколько парадигм программирования (структурное, объектно-ориентированное, обобщенное), чего Вирт с его консервативностью никогда бы не сделал (и таки не сделал, если посмотреть на Модулу и Оберон). Именно подобная гибкость обеспечила популярность C++, сделала его стандартом индустрии, с реализациями на множестве платформ (Microsoft конечно же не могла обойти это явление стороной, и ничего удивительного в том, что ее средства разработки для самой распространенной операционной системы так популярны, нет).
Говоря о том, что гибкость не имеет значения, вы просто пытаетесь оправдать негибкость вашего любимого средства разработки, на которое не смотрит никто кроме его производителя и горстки энтузиастов, пытающихся с горем пополам сотворить свободную реализацию.
← →
Anatoly Podgoretsky © (2010-04-13 11:45) [122]> monoid (13.04.2010 11:00:01) [121]
Между прочим МС поддерживал Фортран очень много лет и версий, может и сейчас поддерживает. Только никак не смог оказаться там где плюсы.
← →
test © (2010-04-13 11:51) [123]monoid (13.04.10 11:00) [121]
>Этого бы никогда не произошло, просто потому, что плюсы являются смелым
>экспериментом, целью которого было объединить в языке несколько парадигм
>программирования (структурное, объектно-ориентированное, обобщенное), чего Вирт
>с его консервативностью никогда бы не сделал (и таки не сделал, если посмотреть на
>Модулу и Оберон).
Вы таки не поверите Вирт приследовал примерно те же цели, на момент создания Паскаля конкурентами были Алгол, Кобол, Асемблер. Во всяком случае так писал Вирт, думаете врет?
← →
Дмитрий Белькевич (2010-04-13 13:00) [124]
> Ну если бы это было правдой, то писали бы мы сейчас всё
> на фортране. Однако, почему-то это не так. Не находите противоречий?
>
Смотри на Бэйсик. Уж какой убогий язык был...
>которые я решал на дельфи и которые наверное решают в большой части многие - а именно приложения для работы с БД мне и C# хватало за глаза
Ну и зачем перешел на шарп, если это всё и в делфи хорошо было? В чём профит? Кроме вот такого счастья:
http://delphimaster.net/view/15-1268760103/
Через какое-то время MS придумает очередную гениальную парадигму (операционки продавать-то нужно, а принципиально нового (xp vs 7) ничего уже нет), народ начнёт массово все наработки с дотнета переписывать еще на что-то.
Творческий онанизм и генерация энтропии.
>Впрочем в пылу борьбы за чистоту языка и некоторые мастера отказывают в праве на жизнь языку, который позволяет сделать конструкцию типа #deifine TRUE FALSE
По крайней мере, паскаль не даст такое, и то хлебушек:
#define true (Math.random()>0.5)
А сколько еще всего напридумать можно :) С умыслом или без...
>Конструкция : <тип> и есть дополнительное языковое средство, позволяющее различать в Обероне процедуры и функции.
Дополнительное по отношению к чему? К плюсам? Что, в плюсах не существует (не введено) средство, позволяющее различать процедуры от функций? Нет, оно введено. Это void.
>В Паскале несколько похожими свойствами обладает тип Pointer
Поинтер и есть полный аналог void. В смысле нетипизированного указателя. Аналога же "void" в смысле возвращаемого значения нет, за ненадобностью.
> вы просто пытаетесь оправдать негибкость вашего любимого
> средства разработки
Везде свои плюсы и свои минусы:
Defective C++
http://yosefk.com/c++fqa/defective.html
← →
Дмитрий Белькевич (2010-04-13 13:09) [125]>Конструкция : <тип> и есть дополнительное языковое средство, позволяющее различать в Обероне процедуры и функции.
В обероне же, уже само отсутствие возвращаемого значения подразумевает процедуру. В отличие от плюсов, где нужно явно "void" указывать.
Возвращаемые же значения в функциях описываются и в плюсах и в обероне.
← →
euru © (2010-04-13 17:19) [126]
> Дмитрий Белькевич (13.04.10 13:00) [124]
> Дополнительное по отношению к чему? К плюсам? Что, в плюсах
> не существует (не введено) средство, позволяющее различать
> процедуры от функций? Нет, оно введено. Это void.
В C++ процедуры и функции синтаксически неразличимы. Раличие определяется семантикой типов. В Паскале и Обероне различие между процедурами и функциями вводится на уровне синтакиса языка.
> Поинтер и есть полный аналог void.
Вы неправы. АналогомPointer
являетсяvoid*
.
> Аналога же "void" в смысле возвращаемого значения нет, за
> ненадобностью.
Естественно, нет. Зачем он нужен, если его можно выразить через синтаксис языка?
> В обероне же, уже само отсутствие возвращаемого значения
> подразумевает процедуру.
Такой вывод неоднозначен, а в историческом контексте, возможно, и неверен.
Сравним описание подпрограмм в двух языках Витра: Обероне и в его предшественнике Алгол-68.
Функции
Алгол-68:proc <имя процедуры> = (<список_параметров>) <тип> :
Оберон:PROCEDURE <имя процедуры>(<список параметров>): <тип>;
Процедуры
Алгол-68:proc <имя процедуры> = (<список_параметров>) void:
Оберон:PROCEDURE <имя процедуры>(<список параметров>);
Как видим, определение функций в обоих языках одинаково, а процедуры различаются только пропуском типаvoid
в Обероне. Так что отсутствие в определении возвращаемого типа может подразумевать и возврат типаvoid
.
Кстати, определение функции в Паскале с формальной точки зрения избыточно. Достаточно было принять соглашение в языке, что при определении подпрограммы какfunction
, первый (или последний) параметр из списка параметров становится возвращающимся.
← →
Игорь Шевченко © (2010-04-13 17:41) [127]euru © (13.04.10 17:19) [126]
Что еще спер Вирт из Алгола ? :)
← →
euru © (2010-04-13 17:53) [128]
> Игорь Шевченко © (13.04.10 17:41) [127]
Почему сразу "спёр"? Просто взял, что плохо лежит. :)
← →
Игорь Шевченко © (2010-04-13 18:19) [129]euru © (13.04.10 17:53) [128]
Жена Цезаря вне подозрений ? :)
← →
test © (2010-04-13 18:19) [130]Игорь Шевченко © (13.04.10 17:41) [127]
Операции +, -, алфавит!
← →
euru © (2010-04-13 18:29) [131]
> Игорь Шевченко © (13.04.10 18:19) [129]
> Жена Цезаря вне подозрений ? :)
А она плохо лежала? :)
← →
Вариант (2010-04-14 07:23) [132]
> Творческий онанизм и генерация энтропии.
Мне не нравится эта фраза.
Поэтому позволю себе некоторую эскападу
Если двойной повтор этой фразы кажется тебе хорошим аргументом - то твои аргументы о том чего ты не знал, не знаешь и узнать не пытаешься - выглядят как-то лучше и приличней.
Ибо первое вызывает сомнение в твоей культуре, а второе всего лишь говорит о том, что ты трепло.
← →
Дмитрий Белькевич (2010-04-14 12:18) [133]
> В C++ процедуры и функции синтаксически неразличимы.
Интересно, что будет, если попытаться у void функции забрать возвращаемое выражение? Как я себе представляю, она его должна отдать, если ты говоришь, что процедуры/функции синтаксически неразличимы (как я понимаю, синтаксическая неразличимость подразумевает не только синтаксис описания но и синтаксис использования)? И потом с этим void"ом что-то можно сделать? И что отдастся на уровне асма?
> Вы неправы. Аналогом Pointer является void*.
Еще раз.
> Поинтер и есть полный аналог void. В смысле нетипизированного
> указателя.
Здесь что-то неверно?
> Так что отсутствие в определении возвращаемого типа может
> подразумевать и возврат типа void.
Что значит - подразумевает? Процедура наполовину беременна? Значения на выходе процедуры нет. Как на уровне компилятора, так и на уровне ассемблера.
> Ибо первое вызывает сомнение в твоей культуре, а второе
> всего лишь говорит о том, что ты трепло.
Спасибо за обратную связь. Вижу - за живое задевает.
← →
euru © (2010-04-14 17:02) [134]
> Дмитрий Белькевич (14.04.10 12:18) [133]
> Интересно, что будет, если попытаться у void функции забрать
> возвращаемое выражение?
Компилятор во время компиляции выдаст сообщение об ошибке.
> как я понимаю, синтаксическая неразличимость подразумевает
> не только синтаксис описания но и синтаксис использования
Нет. Использование будет зависеть от контекста лексемы (в данном случае от контекста возвращаемого типа).
Вас же не удивляет, что исполнение правила<переменная> := <значение>;
будет зависеть от типа переменной и типа значения, хотя синтаксис от этих типов не зависит. Так и с функциями: если функция возвращаетvoid
, то компилятор будет выдавать сообщение об ошибке при любой попытке получить значение этой функции.
> Еще раз.
> > Поинтер и есть полный аналог void. В смысле нетипизированного
> > указателя.
> Здесь что-то неверно?Pointer
является аналогомvoid*
(void со звёздочкой) - указатель неопределённого типа.
Аналога дляvoid
в Паскале нет.
> то значит - подразумевает? Процедура наполовину беременна?
> Значения на выходе процедуры нет. Как на уровне компилятора,
> так и на уровне ассемблера.
Можно по-разному интерпретировать отсутствие у подпрограммы возвращаемого значения:
1. подразумевается, что подпрограмма является процедурой (ваша интерпретация);
2. подразумевается, что подпрограмма возвращает значение типа void (моя интерпретация).
В любом случае компилятор не будет генерировать возврат значений из таких подпрограмм.
← →
oxffff © (2010-04-14 17:10) [135]
> Аналога для void в Паскале нет.
В некотором смысле untyped var и untyped const являются void,
но только неявно ссылкой.
← →
euru © (2010-04-15 12:28) [136]
> oxffff © (14.04.10 17:10) [135]
> В некотором смысле untyped var и untyped const являются void,
> но только неявно ссылкой.
В Паскале, насколько я помню, такого безобразия не было. :)
Нет. Это разные спецификаторы.
Теоретически untyped var должен соответствовать void&. Но я не помню, поддерживается ли в С++ такая возможность использования void, а проверить не на чем.
← →
oxffff © (2010-04-15 12:40) [137]
> euru © (15.04.10 12:28) [136]
>
> > oxffff © (14.04.10 17:10) [135]
> > В некотором смысле untyped var и untyped const являются
> void,
> > но только неявно ссылкой.
> В Паскале, насколько я помню, такого безобразия не было.
> :)
>
> Нет. Это разные спецификаторы.
> Теоретически untyped var должен соответствовать void&. Но
> я не помню, поддерживается ли в С++ такая возможность использования
> void, а проверить не на чем.
Это можно в некоторой степени подтвердить от обратного. Например так.
В теории типов, Ref A является подтипом Ref B и наоборот, если А=B.
Два типа совместимы по присваиванию, если Rvalue является подтипом Lvalue.
Поскольку untyped указатель(void*) (var параметр) совместим по присваиванию с typed указателем, т.е. Void* совместим по присваиванию с A*. => что Void=A.
Это в системе типов Delphi. Но это не безопасно.
← →
euru © (2010-04-15 15:27) [138]
> oxffff © (15.04.10 12:40) [137]
Из высказывания "если A = B, то ref A = ref B", ещё не следует, что "если ref A = ref B, то A = B" (импликация некоммутативна).
В Дельфи нетипизированный параметр - это всё-таки не само значение, а ссылка на значение, которую ещё нужно будет привести к конкретному типу. В С++ ссылка обозначется символом "&".
← →
oxffff © (2010-04-15 15:55) [139]
> euru © (15.04.10 15:27) [138]
>
> > oxffff © (15.04.10 12:40) [137]
>
> Из высказывания "если A = B, то ref A = ref B", ещё не следует,
> что "если ref A = ref B, то A = B" (импликация некоммутативна).
>
Не следует цепляться за импликацию, следует рассмотреть эквивалентность.
← →
euru © (2010-04-16 00:55) [140]
> oxffff © (15.04.10 15:55) [139]
Ладно, эквивалентны так эквивалентны. Не будем углубляться в мат. логику. :)
Зайдём с другой стороны. Возьмём вместо типаvoid
типchar
. Рассмотрим следующую процедуру:procedure P(pc: PChar; c: Char; var rc: Char);
Напишем соответствующую ей функцию на Си:void P(char* pc, char c, char& rc);
Как видим, var-параметру типаChar
в Дельфи соответствует параметр типаchar&
в Си. Поэтому нетипизированному var-параметру в Дельфи будет соответствовать параметр типаvoid&
в Си.
← →
oxffff © (2010-04-16 09:24) [141]
> euru © (16.04.10 00:55) [140]
>
> > oxffff © (15.04.10 15:55) [139]
> Ладно, эквивалентны так эквивалентны. Не будем углубляться
> в мат. логику. :)
>
> Зайдём с другой стороны. Возьмём вместо типа void тип char.
> Рассмотрим следующую процедуру:
> procedure P(pc: PChar; c: Char; var rc: Char);
> Напишем соответствующую ей функцию на Си:
> void P(char* pc, char c, char& rc);
> Как видим, var-параметру типа Char в Дельфи соответствует
> параметр типа char& в Си. Поэтому нетипизированному var-
> параметру в Дельфи будет соответствовать параметр типа void&
> в Си.
Я честно не понял какую мысль преследуете.
Повторю мое утверждение, что в некотором смысле тип переменой uptyped var соответствет void, с дополнительным требованием, чтобы это было lvalue.
Действительно в С++ - это по смыслу соответствует Void&.
Страницы: 1 2 3 4 вся ветка
Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.96 MB
Время: 0.079 c