OberonCore
https://forum.oberoncore.ru/

Массив
https://forum.oberoncore.ru/viewtopic.php?f=35&t=5991
Страница 4 из 4

Автор:  Kemet [ Понедельник, 05 Ноябрь, 2018 16:40 ]
Заголовок сообщения:  Re: Массив

Валерий Лаптев писал(а):
Kemet писал(а):
Всё уже украдено до нас - в Модуле-3 можно писать так:
...
То есть любая секция BEGIN END может иметь предшествующую секцию VAR.

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

Автор:  Валерий Лаптев [ Понедельник, 05 Ноябрь, 2018 17:08 ]
Заголовок сообщения:  Re: Массив

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

Автор:  PSV100 [ Понедельник, 12 Ноябрь, 2018 21:03 ]
Заголовок сообщения:  Re: Массив

Недавно рассматривал любопытный проект 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, как раз с математическом направлением, не уделяют внимание подобной эргономике и безопасности).

Автор:  Rifat [ Среда, 14 Ноябрь, 2018 09:59 ]
Заголовок сообщения:  Re: Массив

Валерий Лаптев писал(а):
...
Тем не менее, я сделаю диалект с возможностью объявления переменных по месту.
А там - посмотрим.

Сейчас только столкнулся с вредом объявления по месту в 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...

Автор:  Comdiv [ Среда, 14 Ноябрь, 2018 14:47 ]
Заголовок сообщения:  Re: Массив

Вроде бы, на пример вреда не тянет.

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