OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 20:03

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: 50 лет Паскаля
СообщениеДобавлено: Четверг, 06 Февраль, 2020 12:39 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
30 октября 1970 г. в журнал Acta Informatica поступила рукопись статьи Н.Вирта с первым официальным описанием языка Паскаль.

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 50 лет Паскаля
СообщениеДобавлено: Среда, 24 Февраль, 2021 22:25 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
Вирт дополнил этот текст и отправил его в Communications of the ACM.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 50 лет Паскаля
СообщениеДобавлено: Четверг, 25 Февраль, 2021 04:43 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Помимо некоторых небольших правок в этой публикации добавилось два абзаца относительно предыдущей версии текста.

<...>

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.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 50 лет Паскаля
СообщениеДобавлено: Четверг, 25 Февраль, 2021 22:56 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
50 лет на переднем краю борьбы с фигурными скобками.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 50 лет Паскаля
СообщениеДобавлено: Пятница, 26 Февраль, 2021 11:09 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
Какой-то товарищ на Хабре перевод сделал: https://habr.com/ru/company/vdsina/blog/544006/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 50 лет Паскаля
СообщениеДобавлено: Пятница, 26 Февраль, 2021 17:12 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Пётр Кушнир писал(а):
50 лет на переднем краю борьбы с фигурными скобками.
И символом подчёркивания.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 50 лет Паскаля
СообщениеДобавлено: Суббота, 27 Февраль, 2021 01:33 

Зарегистрирован: Пятница, 13 Март, 2015 16:40
Сообщения: 597
осталось только "{}" уведомить - с ними борются ;-)
Александр Ильин писал(а):
Пётр Кушнир писал(а):
50 лет на переднем краю борьбы с фигурными скобками.
И символом подчёркивания.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 50 лет Паскаля
СообщениеДобавлено: Суббота, 27 Февраль, 2021 19:37 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
ТР и BB это же оппортунизм, а в O7
Цитата:
Identifiers are sequences of letters and digits. The first character must be a letter.
ident = letter {letter | digit}.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 50 лет Паскаля
СообщениеДобавлено: Суббота, 27 Февраль, 2021 21:54 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Я тоже за удаление подчёркивания, если что, в пользу 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;
Это просто отвратительная замена структурному представлению данных.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 50 лет Паскаля
СообщениеДобавлено: Воскресенье, 28 Февраль, 2021 01:30 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 987
Откуда: Казань
Подчеркивание очень часто используется в константах в WinApi. Без подчеркивания использовать нормально WinApi не получится.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 50 лет Паскаля
СообщениеДобавлено: Воскресенье, 28 Февраль, 2021 01:56 

Зарегистрирован: Пятница, 13 Март, 2015 16:40
Сообщения: 597
Цитата:
Я тоже за удаление подчёркивания, если что, в пользу 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'


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 50 лет Паскаля
СообщениеДобавлено: Воскресенье, 28 Февраль, 2021 05:04 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Artyemov писал(а):
А я за "_" с СамэцCase: по опыту с микроконтроллерами отлично отделяется НазваниеБлока_ОтНазванияРегистраВНём.

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

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


Последний раз редактировалось Александр Ильин Воскресенье, 28 Февраль, 2021 05:28, всего редактировалось 3 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 50 лет Паскаля
СообщениеДобавлено: Воскресенье, 28 Февраль, 2021 05:12 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Rifat писал(а):
Подчеркивание очень часто используется в константах в WinApi. Без подчеркивания использовать нормально WinApi не получится.

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 50 лет Паскаля
СообщениеДобавлено: Воскресенье, 28 Февраль, 2021 05:26 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Отдельной строкой скажу вот что: рано или поздно идентификаторы с подчёркиванием оказываются в пользовательском интерфейсе, где они никогда и ни при каких обстоятельствах категорически не должны оказываться. Вообще.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 50 лет Паскаля
СообщениеДобавлено: Воскресенье, 28 Февраль, 2021 13:22 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Artyemov писал(а):
Всех-то "делов": letter = '_', 'A'..'Z', 'a'..'z'

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 50 лет Паскаля
СообщениеДобавлено: Воскресенье, 28 Февраль, 2021 17:36 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Я использую иногда и 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;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 50 лет Паскаля
СообщениеДобавлено: Воскресенье, 28 Февраль, 2021 21:41 
Аватара пользователя

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 50 лет Паскаля
СообщениеДобавлено: Понедельник, 01 Март, 2021 02:06 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Так в том случае, когда нельзя сделать связанными процедурами.

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 50 лет Паскаля
СообщениеДобавлено: Среда, 03 Март, 2021 23:57 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 660
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: Вы предлагаете назвать лежачую палку БУКВОЙ?!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 50 лет Паскаля
СообщениеДобавлено: Четверг, 04 Март, 2021 01:44 

Зарегистрирован: Пятница, 13 Март, 2015 16:40
Сообщения: 597
Ну не ЦИФРОЙ же... ей-ей "детский сад - штаны на лямках" ;-)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB