OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 19 Сентябрь, 2019 14:31

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




Начать новую тему Ответить на тему  [ Сообщений: 65 ]  На страницу Пред.  1, 2, 3, 4
Автор Сообщение
 Заголовок сообщения: Re: Массив
СообщениеДобавлено: Понедельник, 05 Ноябрь, 2018 16:40 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 714
Откуда: Барнаул
Валерий Лаптев писал(а):
Kemet писал(а):
Всё уже украдено до нас - в Модуле-3 можно писать так:
...
То есть любая секция BEGIN END может иметь предшествующую секцию VAR.

Ну, у нас не Модула-3, а ББ+КП.
Так если заниматься изобретением велосипедов и курощать компилятор, то вполне можно использовать конструкции, не рвущие синтаксис и логику. И в М3 именно такое решение - любой блок может начаться с секции определений. Всё понятно и привычно, а всякие отдельные VAR, в произвольном месте делают программу плохочитаемой и не понятно, как определять область видимости - в М3 всё интуитивно понятно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массив
СообщениеДобавлено: Понедельник, 05 Ноябрь, 2018 17:08 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3064
Откуда: Астрахань
Ну, М3 - не единственный язык, где все понятно.
Собственно в Семантике мы ужесточили указатели,
но ослабили объявления, разрешив их по мере необходимости.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массив
СообщениеДобавлено: Понедельник, 12 Ноябрь, 2018 21:03 

Зарегистрирован: Понедельник, 25 Июнь, 2012 17:26
Сообщения: 368
Недавно рассматривал любопытный проект CPAL (Cyber-Physical Action Language):
https://www.designcps.com/

Это система разработки и имитационного моделирования для embedded, академический проект (с некоторой практикой), но фактически это развитие платформы от Westingshouse, переданной академическому сообществу. В основе для моделей Си-подобный язык (хотя с непривычки есть некая ломка мозга при виде объявлений как "const uint8: threshold = 30", где используется двоеточие, но порядок указания типов Си-шный (перед идентификатором переменной/константы) вместо привычного Pascal/ML-порядка в случае использования ":"). Как минимум соблюдается MISRA, а в целом платформа когда-то прошла процедуры сертификации по стандартам безопасности. Обращает на себя внимание декларирование переменных, что как раз отмечено выше в теме. Переменные вводятся по месту, как и в Си, но только в начале синтаксической области (внутри {}-блоков).

И чтобы два раза не вставать, дополню. Где-то здесь на форуме рассматривались и прочие языковые вопросы в контексте возможного развития/модификации Оберонов/КП, и в частности насчёт введения композитных операций сравнения вида "a < x < b". В CPAL имеются такие операции, но в отличие от Питон и пр. есть ограничения. Не допустимы:
0 != 1 == 1
0 < 1 == 1
0 >= -1 != 2

Такие операции крайне нежелательны (формируется warning, но фактически введён запрет, его не было изначально и warning выдается из-за совместимости):
0 < 3 > 2
0 >= -1 < 2
2 >= 2 < 4

Т.е. допускаются лишь однородные операции:
0 < 1 < 2
0 <= 0 < 1
3 < 2 <= 1
2 == 2 == 2
3 != 1 != 3

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массив
СообщениеДобавлено: Среда, 14 Ноябрь, 2018 09:59 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 812
Откуда: Казань
Валерий Лаптев писал(а):
...
Тем не менее, я сделаю диалект с возможностью объявления переменных по месту.
А там - посмотрим.

Сейчас только столкнулся с вредом объявления по месту в C#.
Был такого вида код:
Код:
SomeType Variable = SomeFunction();
... SomeCode...

Variable = SomeFunction();
... SomeCode...


Возникла необходимость добавить условия проверки параметров перед каждым из блоков:
Код:
if (Parameter1 == true)
{
  SomeType Variable = SomeFunction();
  ... SomeCode...
}

if (Parameter2 == true)
{
  Variable = SomeFunction();
  ... SomeCode...
}

И соответственно данная (казалось бы безобидная операция добавления условий) приводит к ошибке, что во втором блоке переменная не определена.
А если бы переменная была определена в начале функции, то проблемы бы не возникло:
Код:
SomeType Variable;

Variable = SomeFunction();
... SomeCode...

Variable = SomeFunction();
... SomeCode...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массив
СообщениеДобавлено: Среда, 14 Ноябрь, 2018 14:47 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 888
Откуда: Киев
Вроде бы, на пример вреда не тянет.


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

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


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

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


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

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