OberonCore
https://forum.oberoncore.ru/

50 лет Паскаля
https://forum.oberoncore.ru/viewtopic.php?f=7&t=6549
Страница 1 из 2

Автор:  Info21 [ Четверг, 06 Февраль, 2020 12:39 ]
Заголовок сообщения:  50 лет Паскаля

30 октября 1970 г. в журнал Acta Informatica поступила рукопись статьи Н.Вирта с первым официальным описанием языка Паскаль.

Слова Вирта по этому поводу:

http://www.inr.ac.ru/~info21/wirth/pascal50.htm

Автор:  Борис Рюмшин [ Среда, 24 Февраль, 2021 22:25 ]
Заголовок сообщения:  Re: 50 лет Паскаля

Вирт дополнил этот текст и отправил его в Communications of the ACM.

https://cacm.acm.org/magazines/2021/3/2 ... l/fulltext

Автор:  Иван Денисов [ Четверг, 25 Февраль, 2021 04:43 ]
Заголовок сообщения:  Re: 50 лет Паскаля

Помимо некоторых небольших правок в этой публикации добавилось два абзаца относительно предыдущей версии текста.

<...>

Just as important as addition of features were deletions (with respect to Algol). As C.A.R. Hoare once remarked: A language is characterized not only by what it permits programmers to specify, but even more so by what it does not allow. In this vein, Algol's name parameter was omitted. It was rarely used, and caused considerable complications for a compiler. Also, Algol's own concept was deleted, which allowed local variables to be global, to "survive" the activation of the procedure to which it was declared local. Algol's for statement was drastically simplified, eliminating complex and hard to understand constructs. But the while and repeat statements were added for simple and transparent situations of repetition. Nevertheless, the controversial goto statement remained. I considered it too early for the programming community to swallow its absense. It would have been too detrimental for a general acceptance of Pascal.

<...>

The principal purpose of a higher-level language is to raise the level of abstraction from that of machine instructions. Examples are data structures vs. word arrays in memory, or conditional and repetitive statements vs. jump instructions. A perfect language should be defined in terms of mathematical logic, of axioms and rules of inference. No reference to any computer or mechanism should be necessary to understand it. This is the basis of portability. Algol's designers saw this goal; but it is most difficult to achieve without sacrificing power of expression. Yet, any new language must be measured on the degree to which it comes close to this goal. The sequence Pascal—Modula—Oberon is witness to my attempts to achieve it. Oberon is close to it. Yet, nothing is perfect.

Автор:  Пётр Кушнир [ Четверг, 25 Февраль, 2021 22:56 ]
Заголовок сообщения:  Re: 50 лет Паскаля

50 лет на переднем краю борьбы с фигурными скобками.

Автор:  Борис Рюмшин [ Пятница, 26 Февраль, 2021 11:09 ]
Заголовок сообщения:  Re: 50 лет Паскаля

Какой-то товарищ на Хабре перевод сделал: https://habr.com/ru/company/vdsina/blog/544006/

Автор:  Александр Ильин [ Пятница, 26 Февраль, 2021 17:12 ]
Заголовок сообщения:  Re: 50 лет Паскаля

Пётр Кушнир писал(а):
50 лет на переднем краю борьбы с фигурными скобками.
И символом подчёркивания.

Автор:  Artyemov [ Суббота, 27 Февраль, 2021 01:33 ]
Заголовок сообщения:  Re: 50 лет Паскаля

осталось только "{}" уведомить - с ними борются ;-)
Александр Ильин писал(а):
Пётр Кушнир писал(а):
50 лет на переднем краю борьбы с фигурными скобками.
И символом подчёркивания.

В смысле? В ТР6/7 "_" без "побочек" в идентификаторах использовалось, и в ББ, и в О7 - полезная буковка.

Автор:  Trurl [ Суббота, 27 Февраль, 2021 19:37 ]
Заголовок сообщения:  Re: 50 лет Паскаля

ТР и BB это же оппортунизм, а в O7
Цитата:
Identifiers are sequences of letters and digits. The first character must be a letter.
ident = letter {letter | digit}.

Автор:  Александр Ильин [ Суббота, 27 Февраль, 2021 21:54 ]
Заголовок сообщения:  Re: 50 лет Паскаля

Я тоже за удаление подчёркивания, если что, в пользу CamelCase. Просто гораздо удобнее набирать с клавиатуры.
Особенно вымораживают товарищи, которые рандомно смешивают то и другое в одном идентификаторе.
Очень часто вижу, что подчёркивание используют вместо того, чтобы объединить группу переменных в record:
Код:
  Global_LastResult_TS          : T_TransferSysX_LastResult;
  Global_LastResult_CP          : T_SAE_Operation_Buffer_CP;
  Global_LastResult_FR          : T_Refrigerator_Operation_CmdReply;

  Global_Physical_Boundaries_AS : T_RobotX_AxesMovementBoundaries_AS;
  Global_Custom_Boundaries_AS   : T_RobotX_AxesMovementBoundaries_AS;
  Global_Physical_Boundaries_GR : T_RobotX_AxesMovementBoundaries_GR;
  Global_Custom_Boundaries_GR   : T_RobotX_AxesMovementBoundaries_GR;
  Global_Physical_Boundaries_TS : T_TransferSysX_AxesMovementBoundaries;
  Global_Custom_Boundaries_TS   : T_TransferSysX_AxesMovementBoundaries;
  Global_Physical_Boundaries_CP : T_ConveyancePusher_AxesMovementBoundaries;
  Global_Custom_Boundaries_CP   : T_ConveyancePusher_AxesMovementBoundaries;
  Global_Physical_Boundaries_FR : T_Refrigerator_Operation_CmdReply;
  Global_Custom_Boundaries_FR   : T_Refrigerator_Operation_CmdReply;

  Global_SoftwareVersions_AS    : T_RobotX_SoftwareVersions_AS;
  Global_SoftwareVersions_GR    : T_RobotX_SoftwareVersions_GR;
  Global_SoftwareVersions_TS    : T_TransferSysX_SoftwareVersions;
  Global_SoftwareVersions_CP    : T_ConveyancePusher_SoftwareVersions;
  Global_SoftwareVersions_FR    : T_Refrigerator_Operation_CmdReply;

  // up-to-date flags for all kind of data syncronized between app and machine/database
  Global_bUpdated_DB_CONFIGDATA  : Boolean;
  Global_iUpdated_BOUNDARIES     : T_RobotX_Int32;
  Global_bUpdated_SW_VERSIONS_AS : T_RobotX_Boolean;
  Global_bUpdated_SW_VERSIONS_GR : T_RobotX_Boolean;
  Global_iUpdated_BOUNDARIES_FR  : Int32;
  Global_bUpdated_SW_VERSIONS_FR : Boolean;

  // robot related globals managed by enumerated arrays of the former primitive type
  Global_ConnectState_RobotX              : T_RobotX_ConnectionState;
  Global_ConnectState_BarCode             : T_LoadBayX_Int32;  // Barcode scan station (certain kind of 1D/2D-code reader)
  Global_ConnectState_Beamer_LoadingArea  : T_LoadBayX_Int32;
  Global_ConnectState_Leuze_LoadingArea   : T_LoadBayX_Int32;
  Global_ConnectState_TCPAlive            : array of Int32;
  Global_ConnectState_TransferSystem      : T_TransferSysX_Int32;
  Global_ConnectState_ConveyancePusher    : Int32;
  Global_ConnectState_Refrigerator        : Int32;
  Global_ConnectState_Separator           : array[T_Enum_Separator] of Int32;
  Global_ConnectState_Database_Conn0      : Int32;    // database connection 0 (main thread)
  Global_ConnectState_Database_Conn2      : Int32;    // database connection 1 (SAE auslagerung thread)

  //  Loading
  Global_PackLoading_ColorPack : TColor;
  Global_PackLoading_ColorBelt : TColor;
  Global_PackLoading_ColorArrow: TColor;
  Global_PackLoading_ColorFrame: TColor;

  Global_DispAndLabel_CustEntryActive      : Boolean;
  Global_DispAndLabel_OrderActive          : Boolean;
  Global_DispAndLabel_ReloadActive         : Boolean;
  Global_DispAndLabel_PackActive           : Boolean;
  Global_DispAndLabel_PacksTotal           : Int32;
  Global_DispAndLabel_NeededLength         : Single;
  Global_DispAndLabel_OrderBufferLength    : Single;
  Global_DispAndLabel_PBA                  : Int32;
Это просто отвратительная замена структурному представлению данных.

Автор:  Rifat [ Воскресенье, 28 Февраль, 2021 01:30 ]
Заголовок сообщения:  Re: 50 лет Паскаля

Подчеркивание очень часто используется в константах в WinApi. Без подчеркивания использовать нормально WinApi не получится.

Автор:  Artyemov [ Воскресенье, 28 Февраль, 2021 01:56 ]
Заголовок сообщения:  Re: 50 лет Паскаля

Цитата:
Я тоже за удаление подчёркивания, если что, в пользу CamelCase.

А я за "_" с СамэцCase: по опыту с микроконтроллерами отлично отделяется НазваниеБлока_ОтНазванияРегистраВНём.

Цитата:
ТР и BB это же оппортунизм, а в O7
Цитата:
Identifiers are sequences of letters and digits. The first character must be a letter.
ident = letter {letter | digit}.

Всех-то "делов": letter = '_', 'A'..'Z', 'a'..'z'

Автор:  Александр Ильин [ Воскресенье, 28 Февраль, 2021 05:04 ]
Заголовок сообщения:  Re: 50 лет Паскаля

Artyemov писал(а):
А я за "_" с СамэцCase: по опыту с микроконтроллерами отлично отделяется НазваниеБлока_ОтНазванияРегистраВНём.

Вот-вот, я и говорю: вместо модульности и структурности - соглашения о префиксах идентификаторов.
Так же можно быть за венгерские префиксы (lpcszName) вместо нормальной типизации.
Простое правило: в 90% случаев подчёркивание следует заменить на точку, в остальных - просто удалить. Или наоборот.

Чем хуже НазваниеБлока.НазваниеРегистра? Ответ - всем лучше. Как правило, начиная с того, что уходим из глобального плоского пространства имён, и заканчивая радикальным сокращением количества глобальных переменных.

Автор:  Александр Ильин [ Воскресенье, 28 Февраль, 2021 05:12 ]
Заголовок сообщения:  Re: 50 лет Паскаля

Rifat писал(а):
Подчеркивание очень часто используется в константах в WinApi. Без подчеркивания использовать нормально WinApi не получится.

В интерфейсных модулях можно, но поверх WinApi всё равно должна быть обёртка на целевом языке, желательно с дополнительными фишками для исправления косяков WinApi, устранения разнобоя версий и несовместимостей и т.п. Свой слой абстракции, который уже можно написать с нормальными идентификаторами.

Так обычно и проходит водораздел: видишь подчёркивания - значит какая-то низкоуровневая хрень, протёкшая абстракция или прочий кастомный код для сопряжения с чем-то сторонним.

Автор:  Александр Ильин [ Воскресенье, 28 Февраль, 2021 05:26 ]
Заголовок сообщения:  Re: 50 лет Паскаля

Отдельной строкой скажу вот что: рано или поздно идентификаторы с подчёркиванием оказываются в пользовательском интерфейсе, где они никогда и ни при каких обстоятельствах категорически не должны оказываться. Вообще.

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

Автор:  Trurl [ Воскресенье, 28 Февраль, 2021 13:22 ]
Заголовок сообщения:  Re: 50 лет Паскаля

Artyemov писал(а):
Всех-то "делов": letter = '_', 'A'..'Z', 'a'..'z'

Niklaus Wirth писал(а):
letter = "A", "B", … , "Z", "a", "b", … , "z".

Вот я говорю: оппортунизм и ревизионизм.

Автор:  Илья Ермаков [ Воскресенье, 28 Февраль, 2021 17:36 ]
Заголовок сообщения:  Re: 50 лет Паскаля

Я использую иногда и CamelStyle, и _. Когда делается процедурное API, но объектной семантики (операция над первым операндом).
Тогда первым словом до префикса указываю, к какому типу сущностей относится.

Пример:

Код:

DEFINITION L1Meta;

   PROCEDURE Mod_GetName (m: L1Mem.Module; OUT name: ARRAY OF CHAR);
   PROCEDURE Mod_InitByName (OUT mod: L1Mem.Module; IN name: ARRAY OF CHAR);
   PROCEDURE Mod_InitLoaded (OUT mod: L1Mem.Module; IN name: ARRAY OF CHAR);
   PROCEDURE Mod_IsUnloaded (m: L1Mem.Module): BOOLEAN;
   PROCEDURE Mod_ToItem (mod: L1Mem.Module; OUT it: Meta.Item);
   PROCEDURE Type_Basic (IN type: L1Mem.Type): INTEGER;
   PROCEDURE Type_Fprint (IN type: L1Mem.Type): LONGINT;
   PROCEDURE Type_GetMod (t: L1Mem.Type; OUT m: L1Mem.Module);
   PROCEDURE Type_GetName (t: L1Mem.Type; OUT name: ARRAY OF CHAR);
   PROCEDURE Type_GetOfRec (OUT t: L1Mem.RecType; IN rec: ANYREC);
   PROCEDURE Type_IS (type: L1Mem.Type; IN rec: ANYREC): BOOLEAN;
   PROCEDURE Type_InitDescByName (OUT type: L1Mem.Type; IN name: ARRAY OF CHAR; load: BOOLEAN);

END L1Meta.

где в L1Mem:
      Addr* = RECORD x: POINTER TO RECORD [untagged] END END;
      Type* = RECORD addr-: Addr END;
      RecType* = RECORD type-: Type END;
      Module* = RECORD addr-: Addr END;

Автор:  Александр Ильин [ Воскресенье, 28 Февраль, 2021 21:41 ]
Заголовок сообщения:  Re: 50 лет Паскаля

Илья Ермаков писал(а):
Я использую иногда и CamelStyle, и _. Когда делается процедурное API, но объектной семантики (операция над первым операндом).
Тогда первым словом до префикса указываю, к какому типу сущностей относится.

То есть, в клиентском коде вы пишете
Код:
L1Meta.Mod_GetName(m, s);
вместо
Код:
m.GetName(s);
или (более читабельно)
Код:
s := m.GetName;
А чем на ваш взгляд первый вариант лучше второго или третьего?
Какие-то особые требования заставляют делать API именно процедурным?

Другими словами, какая польза от маскировки объектной семантики необъектным синтаксисом? Кого обмануть хотите?

Автор:  Илья Ермаков [ Понедельник, 01 Март, 2021 02:06 ]
Заголовок сообщения:  Re: 50 лет Паскаля

Так в том случае, когда нельзя сделать связанными процедурами.

Приведённый пример ровно из этой оперы.

Есть системного назначения тип (для безопасности инкапсулированный в RECORD дескриптор).
И разные библиотеки в разных модулях вокруг него. Которые вообще делают через SYSTEM преобразование к Kernel.Type и Kernel.Module.

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

Автор:  adimetrius [ Среда, 03 Март, 2021 23:57 ]
Заголовок сообщения:  Re: 50 лет Паскаля

Trurl писал(а):
ТР и BB это же оппортунизм, а в O7
Цитата:
Identifiers are sequences of letters and digits. The first character must be a letter.
ident = letter {letter | digit}.


Да! Долой подчеркивание! Режет глаз! На мой вкус оно гармонично смотрелось только в Прологе, но там оно обозначает анонимную переменную.

Rifat писал(а):
Подчеркивание очень часто используется в константах в WinApi. Без подчеркивания использовать нормально WinApi не получится.


Константы для WinApi определяются в модуле КП, равно как и все остальные сущности. Никто не обязывает тащить подчеркивания в КП. Хотя они там, конечно, настолько повсеместно, что это просто бедствие какое-то. Согласен с Александром Ильиным: можно ограничить подчеркивание идентификаторами в интерфейсных модулях.

Artyemov писал(а):
Всех-то "делов": letter = '_', 'A'..'Z', 'a'..'z'

:shock: :shock: :shock: Написать-то, конечно, так можно: бумага все стерпит. Но как вы после этого будете спать, коллега? Или смотреть в глаза потомкам? :oops: Вы предлагаете назвать лежачую палку БУКВОЙ?!!

Автор:  Artyemov [ Четверг, 04 Март, 2021 01:44 ]
Заголовок сообщения:  Re: 50 лет Паскаля

Ну не ЦИФРОЙ же... ей-ей "детский сад - штаны на лямках" ;-)

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/