powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / О служебных словах в Делфи
28 сообщений из 28, показаны все 2 страниц
О служебных словах в Делфи
    #34531897
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нравится мне делфи, но вот непонятно мне с их политикой служебных слов языка.
1. break, continue, exit являются названиями процедур! а не ключевыми словами. Но позвольте это никакие не подпрограммы! Я даже могу создать свою break и она перетрет стандартную, для вызова стандартной придется писать system.break . Правда есть особенность: нельзя писать break() для этой системной "процедуры".
2. название типа string ключевое слово, а, например, integer нет. Зачем? где логика?
...
Рейтинг: 0 / 0
О служебных словах в Делфи
    #34532079
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЯ даже могу создать свою break и она перетрет стандартную, для вызова стандартной придется писать system.break.

F1->Scope, Qualified identifiers
...
Рейтинг: 0 / 0
О служебных словах в Делфи
    #34532122
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NafНравится мне делфи, но вот непонятно мне с их политикой служебных слов языка.
Есть такое. Из поганой серии "так исторически сложилось".

NafНо позвольте это никакие не подпрограммы! Я даже могу создать свою break

2. название типа string ключевое слово, а, например, integer нет. Зачем? где логика?
Точно так же Вы можете создать свою WriteLn.

Если говорить о теории, есть два разных термина: служебные слова (keywords) и зарезервированные слова (reserved words). Первое - это слова, которые в определенном контексте несут некий особый смысл. Второе - слова, которые не могут быть использованы в качестве идентификаторов.

Эти два множества не совпадают, и в случае Турбо-Паскаля с наследниками довольно сильно различаются. Дело в том, что Паскаль, каким его написал Вирт, использует очень много того, что называется "магией компилятора" - то есть неких особых фокусов, недоступных для повторения использующему компилятор программисту. В Борланде когда-то взяли курс на уменьшение этой магии (и курс, в общем, правильный). Так, в частности, integer перестал быть чем-то особенным, а стал самым обычным

Код: plaintext
1.
 type 
  integer = - 32768 .. 32767  ;

объявленным в модуле System. В результате он не является ни ключевым, ни зарезервированным словом - обычный тип, ничем не отличающийся от аналогичного пользовательского. Со string такой фокус не пройдет, на него завязана куча особенностей - во-первых, типы string[N], во-вторых, бодяга с ShortString/AnsiString.

break/continue/exit пострадали в результате этой же компании - точнее, если мне не изменяет память, они были сразу добавлены как "магические процедуры", ключевые, но не зарезервированные слова. Другие примеры non-reserved keywords - ну например on, index, message, read, write, store, default.
...
Рейтинг: 0 / 0
О служебных словах в Делфи
    #34532124
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklin авторЯ даже могу создать свою break и она перетрет стандартную, для вызова стандартной придется писать system.break.

F1->Scope, Qualified identifiers

Я знаю что такое идентификатор, но философски почему это не служебные слова?
...
Рейтинг: 0 / 0
О служебных словах в Делфи
    #34532151
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
 type 
  integer = - 32768 .. 32767  ;
не нашел там такого (Delphi 7)
...
Рейтинг: 0 / 0
О служебных словах в Делфи
    #34532186
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
break/continue/exit пострадали в результате этой же компании - точнее, если мне не изменяет память, они были сразу добавлены как "магические процедуры", ключевые, но не зарезервированные слова.

они были добавлены в turbopascal 6 или 7 версии (кроме exit кажется)
ну и почему бы не сделать их зарезервированными, все равно это не процедуры, а в help именно так написано
...
Рейтинг: 0 / 0
О служебных словах в Делфи
    #34532199
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторвсе равно это не процедуры

С чего бы это?
...
Рейтинг: 0 / 0
О служебных словах в Делфи
    #34532288
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklin авторвсе равно это не процедуры

С чего бы это?
Потому что процедура это подпрограмма, имеет точку входа и точку выхода, а это оператор, позволяющий производить безусловный переход в точку определенную контекстом программы
...
Рейтинг: 0 / 0
О служебных словах в Делфи
    #34532338
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гм... exit - процедура, которая передает управление вне текущей процедуры. Т.е. точка выхода у нее "не там же, где точка входа".
...
Рейтинг: 0 / 0
О служебных словах в Делфи
    #34532423
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nafне нашел там такого (Delphi 7)
Ну, с тех пор много воды утекло. Сейчас глянул в turbo.tpl от пятерки - integer там лежит среди всего остального.

Nafони были добавлены в turbopascal 6 или 7 версии (кроме exit кажется)
break и continue в шестерке, exit по-моему в тройке.

Nafну и почему бы не сделать их зарезервированными
Потому что всеми силами сокращали список зарезервированного. Тогда и Write/WriteLn стали процедурами, хотя всегда считались операторами.
...
Рейтинг: 0 / 0
О служебных словах в Делфи
    #34532668
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinГм... exit - процедура, которая передает управление вне текущей процедуры. Т.е. точка выхода у нее "не там же, где точка входа".
если не там же значит не процедура а управляющий оператор

>>Тогда и Write/WriteLn стали процедурами, хотя всегда считались операторами.
Вот они то как раз процедуры а не операторы
...
Рейтинг: 0 / 0
О служебных словах в Делфи
    #34532752
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NafВот они то как раз процедуры а не операторы
Как только Вы напишите процедуру, способную быть вызванной следующим образом:

Код: plaintext
1.
2.
3.
4.
 begin 
  WriteLn ;
  WriteLn ( 'Some string': 20  ) ;
  WriteLn (  1 . 1 : 10 : 4 , ' 2',  3 : 2  ) ;
 end .

я соглашусь с этим мнением.
...
Рейтинг: 0 / 0
О служебных словах в Делфи
    #34532822
Sk(A)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот они то как раз процедуры а не операторы
Тогда уж, WriteLn, скорее фунция...)
System.pas

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 function  _WriteLn( var  t: TTextRec): Pointer;
 var 
  Buf:  array  [ 0 .. 1 ]  of  Char;
 begin 
   if  (t.flags  and  tfCRLF) <>  0   then 
   begin 
    Buf[ 0 ] := # 13 ;
    Buf[ 1 ] := # 10 ;
    Result := _WriteBytes(t, Buf,  2 );
   end 
   else 
   begin 
    Buf[ 0 ] := # 10 ;
    Result := _WriteBytes(t, Buf,  1 );
   end ;
  _Flush(t);
 end ;
...
Рейтинг: 0 / 0
О служебных словах в Делфи
    #34532853
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer NafВот они то как раз процедуры а не операторы
Как только Вы напишите процедуру, способную быть вызванной следующим образом:

Код: plaintext
1.
2.
3.
4.
 begin 
  WriteLn ;
  WriteLn ( 'Some string': 20  ) ;
  WriteLn (  1 . 1 : 10 : 4 , ' 2',  3 : 2  ) ;
 end .

я соглашусь с этим мнением.

согласен: "магический" синтаксис!
...
Рейтинг: 0 / 0
О служебных словах в Делфи
    #34533392
Андрей Спильный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Naf
Код: plaintext
1.
 type 
  integer = - 32768 .. 32767  ;
не нашел там такого (Delphi 7)
вобщем то не могли найти, хотя бы потому что integer != word
...
Рейтинг: 0 / 0
О служебных словах в Делфи
    #34533460
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если это очередной флейм - тогда и я скажу.
Все эти writeln - да фиг с ними, всё равно я ими практически не пользуюсь.
break - процедура или подпрограмма - не всё ли равно?
ОЧЕНЬ плохо, что break и т.д. - незарезервированные слова.
Я как-то наткнулся - один программист назвал SpeeButton чем-то вроде exit - так я чуть с ума не сошёл, пока нашёл, в чём дело.
Но за то, что придумали begin - поубивал бы нафиг!!! взорвал бы вместе со всем подъездом!
а теперь народ умудряется обычный elseif в 5 строк рисовать...
...
Рейтинг: 0 / 0
О служебных словах в Делфи
    #34533605
безмозга
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Спильный Naf
Код: plaintext
1.
 type 
  integer = - 32768 .. 32767  ;
не нашел там такого (Delphi 7)
вобщем то не могли найти, хотя бы потому что integer != word
Очень странный аргумент :)
...
Рейтинг: 0 / 0
О служебных словах в Делфи
    #34535265
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот, кстати, еще прелестный фрагмент кода из VCL:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
   protected 
     procedure  InitFormat( var  Format: TCharFormat);
     procedure  AssignTo(Dest: TPersistent); override;
   public 
     constructor  Create(AOwner: TCustomRichEdit; AttributeType: TAttributeType);
     procedure  Assign(Source: TPersistent); override;
     property  Charset: TFontCharset read GetCharset write SetCharset;
     property  Color: TColor read GetColor write SetColor;
     property  ConsistentAttributes: TConsistentAttributes read GetConsistentAttributes;
     property  Name: TFontName read GetName write SetName;
     property  Pitch: TFontPitch read GetPitch write SetPitch;
     property   Protected : Boolean read GetProtected write SetProtected;
...
Рейтинг: 0 / 0
О служебных словах в Делфи
    #34536386
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторIn addition to the words above, private, protected, public, published, and automated act as reserved words within object type declarations, but are otherwise treated as directives. The words at and on also have special meanings.
...
Рейтинг: 0 / 0
О служебных словах в Делфи
    #34536409
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Угу. Такое впечатление, что идеологи Борланда заботились в первую очередь о том, как бы половчее осложнить жизнь разработчикам лексических и синтаксических анализаторов Паскаля. Вполне уверенно идут по пути классического

Код: plaintext
if then = else then else = if; else if = then;
...
Рейтинг: 0 / 0
О служебных словах в Делфи
    #34536547
Pu4koff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerВот, кстати, еще прелестный фрагмент кода из VCL:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
   protected 
     procedure  InitFormat( var  Format: TCharFormat);
     procedure  AssignTo(Dest: TPersistent); override;
   public 
     constructor  Create(AOwner: TCustomRichEdit; AttributeType: TAttributeType);
     procedure  Assign(Source: TPersistent); override;
     property  Charset: TFontCharset read GetCharset write SetCharset;
     property  Color: TColor read GetColor write SetColor;
     property  ConsistentAttributes: TConsistentAttributes read GetConsistentAttributes;
     property  Name: TFontName read GetName write SetName;
     property  Pitch: TFontPitch read GetPitch write SetPitch;
     property   Protected : Boolean read GetProtected write SetProtected;

Да уж... странный компилятор... Даже тот, который я все никак не допишу на курсовой, такое бы не пропустил, если бы классы поддерживал :)
...
Рейтинг: 0 / 0
О служебных словах в Делфи
    #34536665
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pu4koffДаже тот, который я все никак не допишу на курсовой, такое бы не пропустил
Это не критерий. Проблема в обратном - дополнительные усилия нужны как раз при написании компилятора, который такое разрешает и правильно обрабатывает (хотя это тоже несложно).
...
Рейтинг: 0 / 0
О служебных словах в Делфи
    #34536823
Pu4koff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Это не критерий. Проблема в обратном - дополнительные усилия нужны как раз при написании компилятора, который такое разрешает и правильно обрабатывает (хотя это тоже несложно).
Это понятно, но зачем было прилагать эти усилия - вот в чем вопрос
...
Рейтинг: 0 / 0
О служебных словах в Делфи
    #34536943
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer Pu4koffДаже тот, который я все никак не допишу на курсовой, такое бы не пропустил
Это не критерий. Проблема в обратном - дополнительные усилия нужны как раз при написании компилятора, который такое разрешает и правильно обрабатывает (хотя это тоже несложно).
Мне кажется, что здесь побочный эффект лени, чтобы не разбираться с резервированым именем они просто почти все идентификаторы в середине выражения считают не резервироваными словами. Вариант, который ты привел с Protected навевает на это.
Так было проще писать компилятор.

Чистое ИМНО, так дикая идея.
...
Рейтинг: 0 / 0
О служебных словах в Делфи
    #34536968
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Процетирую себя на эту же тему :)

Удачи,
Дмитрий

--
AnyDAC ( www.da-soft.com ) - быстрый прямой доступ к Oracle, MySQL, MSSQL,
MSAccess, IBM DB2, Advantage DS, Sybase ASA, DbExpress, ODBC.http://]
...
Рейтинг: 0 / 0
О служебных словах в Делфи
    #34536982
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly PodgoretskyТак было проще писать компилятор.
Так сложнее писать компилятор. Я не готов к пространному рассказу - в конце концов, есть The Dragon Book, где это все подробно изложено - а в качестве простого примера прикиньте насколько усложняется реализация компилятора, если потребовать от него разобрать вот такой фрагмент кода:

Код: plaintext
1.
2.
3.
 type  A =  class 
 private 
   protected   {$ifdef a}  a  {$endif}  : integer ; 
 end  ;
...
Рейтинг: 0 / 0
О служебных словах в Делфи
    #34537038
Фотография Anatoly Podgoretsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раскопал же ветку, приятно было перечитать.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
О служебных словах в Делфи
    #39456714
hippocamus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerесли потребовать от него разобрать вот такой фрагмент кода:
Код: pascal
1.
2.
3.
4.
type A = class
private
  protected {$ifdef a} a {$endif} : integer ; 
end ;

Ну а что тут такого? Почему класс "A" не может содержать защищённого целочисленного поля "а" или приватного целочисленного "protected" в зависимости от условной переменной?

А я эту тему раскопал в связи с появившимися новыми служебными словами, которые уже и служебными не считаются, что ли...
Например "reference", которое вообще не подсвечивается.
Есть более-менее умное подсвечивание "index" и "read" (хотя порой оставляет желать лучшего).
Так вот - есть ли возможность отредактировать синтаксическую подсветку под себя? Или может это уже сделано?

А допустимость переопредения многих служебных слов, имхо, обеспечена необходимостью обратной совместимости.
...
Рейтинг: 0 / 0
28 сообщений из 28, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / О служебных словах в Делфи
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]