OberonCore

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

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




Начать новую тему Ответить на тему  [ Сообщений: 89 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: Вторник, 13 Ноябрь, 2018 06:39 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Тут важно не то, что чайниками, а другое.
С самого начала они ориентировались на Delphi + NET Framework.
То есть, делали среду НЕ для обучения начинающих, а просто более удобную (с их точки зрения) для программирования.
И , конечно, стали использовать ее у себя.
Распространилась она после того, как сделан был сайт, на котором можно было писать проги.
И там же документация.
Для школ - удобно. Просто имей выход в инет - и все у тебя есть.

Добавлю, что Абрамян делал задачник.
На мой взгляд, путь он выбрал тупиковый, но это единственный автоматизированный задачник по программированию.
Наш пацан мгновенно продемонстрировал, как его легко обмануть.
Да и новую задачу подключить - не для рядового учителя.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: Вторник, 13 Ноябрь, 2018 14:35 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 717
Откуда: Барнаул
PSV100 писал(а):
Бросается в глаза использование операции ":=" вместо "=" в декларациях элементов, прежде всего, при объявлении начальных значений переменных (если таковы предусматриваются) в виде:
var переменная: тип := значение;
.....
В PascalABC c использованием ":=" при новых определениях, вроде как, нет криминала (хотя, может быть, возникает некое "масло масляное"). Но, всё-таки, не понятно, почему всё же нет единой универсальной формы, и константы с типами декларируются по-прежнему через "=" как обычно аля:
"const c = <значение>;"
Потому что это и есть присваивание, только совмещенное с объявлением. Так в Модуле-3, Активном Обероне ... А вот форма "=" концептуально не верна. Там, где переменная, там ":=", там, где константа, там "=" - потому что мы не можем значению присвоить другое значение, именованная константа простой алиас для значения.
Так что, в этом плане там всё верно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: Вторник, 13 Ноябрь, 2018 14:38 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 717
Откуда: Барнаул
Info21 писал(а):
Большое спасибо. Паскаль.АБС лепится чайниками -- знать детали важно.
ну что за бред


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: Вторник, 13 Ноябрь, 2018 16:11 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 248
Откуда: г. Рига, Латвийская ССР
Товарищи, это венец мировой дилетантской мысли!
Цитата:
Поскольку присваивание в типовой программе встречается примерно в два раза чаще, чем сравнение на равенство, уместно было сделать оператор присваивания вполовину короче.

(из статьи о том, почему присваивание пишется знаком равенства)

Я позволю себе продолжить:
«...Поскольку INTEGER встречается в программе в два раза чаще, чем FOR, давайте взде писать вместо FOR — INTEGER, а вместо INTEGER — FOR. Мы сэкономим несколько десятков символов на модуль! Кто берётся внести изменение в компилятор?»

* * *

Цитата:
А операция "присваивание" (которой, как таковой, нет в математике) выглядит как некое новое "определение" через ":=", при этом нет каких-то сопровождающих ключевых слов и т.п.

В математике операцию присваивания ввёл Эдсгер Дейкстра в брошюре «Дисциплина программирования», так что можно сказать, что он в математике есть.

Цитата:
Но, всё-таки, не понятно, почему всё же нет единой универсальной формы, и константы с типами декларируются по-прежнему через "=" как обычно аля: "const c = <значение>;"

Значения констант указываются через знак равенства, потому что константа всегда «равна» своему значению, присваивание тут не при чём. Это не блок памяти ЭВМ, в который вписывается значение, а условное обозначение, которое всякий раз подставляется в соответствующее место в коде. (Как написано выше, «именованная константа — простой алиас для значения».)

* * *

Код:
function f(i: integer; s: string): string := <some_expression>;

А зачем это нужно?
Это для образования что-то даёт? или для понятности программ? или в деле упрощения языка и компилятора?

Код:
procedure p := Write(1);
var a1 := p + p;
a1;
[ссылка]
А зачем это нужно? Они издеваются?
Их задача в том, чтобы запутать или удивить?

* * *

Насчёт развития Free Oberon: помимо нового компилятора будет создан и более современный редактор кода. Может быть, у вас есть какие-то предложения по поводу того, что бы вы хотели видеть в таком редакторе.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: Вторник, 13 Ноябрь, 2018 18:47 

Зарегистрирован: Пятница, 13 Март, 2015 16:40
Сообщения: 597
kekc_leader писал(а):
* * *

Насчёт развития Free Oberon: помимо нового компилятора будет создан и более современный редактор кода. Может быть, у вас есть какие-то предложения по поводу того, что бы вы хотели видеть в таком редакторе.

Есть полезная особенность редактора, которую не встречал со времён uVAX-а (обнаружил недавно в IDE Geany: "Stop scrolling at last line" и "Lines visible around the cursor")- скроллинг текста (вниз\вверх) начинается, когда курсор находится не на верхней\нижней строке экрана, а, скажем, в 5 (настраиваемо) строках от границы. При просмотре исходников всегда видны несколько строк выше или ниже курсора. Естественно, когда верхние\последние строки на экране, скроллинг прекращается и курсор перемещается естественным образом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: Вторник, 13 Ноябрь, 2018 19:25 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: Вторник, 13 Ноябрь, 2018 21:24 

Зарегистрирован: Понедельник, 25 Июнь, 2012 17:26
Сообщения: 473
kekc_leader писал(а):
PSV100 писал(а):
А операция "присваивание" (которой, как таковой, нет в математике) выглядит как некое новое "определение" через ":=", при этом нет каких-то сопровождающих ключевых слов и т.п.

В математике операцию присваивания ввёл Эдсгер Дейкстра в брошюре «Дисциплина программирования», так что можно сказать, что он в математике есть.

Изложения Дейкстры есть прикладные с введенным предметным тезаурусом. А, в целом, у математических объектов нет "деструктивного присваивания", они лишь определяются или порождаются.
Kemet писал(а):
PSV100 писал(а):
Бросается в глаза использование операции ":=" вместо "=" в декларациях элементов, прежде всего, при объявлении начальных значений переменных (если таковы предусматриваются) в виде:
var переменная: тип := значение;
.....
В PascalABC c использованием ":=" при новых определениях, вроде как, нет криминала (хотя, может быть, возникает некое "масло масляное"). Но, всё-таки, не понятно, почему всё же нет единой универсальной формы, и константы с типами декларируются по-прежнему через "=" как обычно аля:
"const c = <значение>;"

Потому что это и есть присваивание, только совмещенное с объявлением.
...
Там, где переменная, там ":=", там, где константа, там "=" - потому что мы не можем значению присвоить другое значение, именованная константа простой алиас для значения.
Так что, в этом плане там всё верно.

Там как минимум функциональная форма в виде:
function f(i: integer): integer := expression

Здесь f не переменная, не "изменяемая ячейка памяти". В общем, не в курсе, как там именно интерпретируют символ ":=" (как "присваивание" или "инициализация", "дефиниция" или ещё как-то).
Kemet писал(а):
Так в Модуле-3, Активном Обероне ...

Всё же, в Modula хотя бы тело процедур отделяется от заголовков через '='.
Kemet писал(а):
А вот форма "=" концептуально не верна

Видимо, у авторов языков сказываются вкусовые предпочтения или особенности концептов. Во всяком случае Борландовский и ML-диалекты такие же, как и в математических текстах. И как у Дейкстры -- символ ":=" есть отдельный оператор, "x := ..." понимается как "x (существующий) становится ...". В целом, в математике символ ":=" сам по себе означает дефиницию (а не просто равно), если перед ним (или где-то рядом) по контексту уже есть некая определяющая конструкция, то может возникнуть "абра-кадабра". К примеру, если бы в таком языке как Scala (производный от ML), где имеется ключевое слово "def", вместо равно при дефинициях использовался бы символ ":=", то получалось бы такое "масло масляное" (во втором случае на рисунке применяется альтернативная стандартная форма операции ":=", с надписью "def"):
Вложение:
func.png
func.png [ 1.84 КБ | Просмотров: 6382 ]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: Среда, 14 Ноябрь, 2018 06:37 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 717
Откуда: Барнаул
PSV100 писал(а):
Там как минимум функциональная форма в виде:
function f(i: integer): integer := expression

Здесь f не переменная, не "изменяемая ячейка памяти". В общем, не в курсе, как там именно интерпретируют символ ":=" (как "присваивание" или "инициализация", "дефиниция" или ещё как-то).

Данная конструкция может быть спорная, да. Но разработчики её рассматривают как более короткий эквивалент громоздкой записи, в которой лишь один оператор присваивания результата, который в Обжект Паскаль записывается как-то так:
Код:
function f(i: integer): integer;
begin
  f := expression;
или
  result := expression;
end;

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: Среда, 14 Ноябрь, 2018 18:13 
Аватара пользователя

Зарегистрирован: Среда, 22 Апрель, 2015 23:51
Сообщения: 248
Откуда: г. Рига, Латвийская ССР
Kemet писал(а):
Код:
function f(i: integer): integer;
begin
  f := expression;
или
  result := expression;
end;

Недавно у нас курсанты притащили откуда-то третий вариант:
Код:
function f(i: integer): integer;
begin
  exit(expression);
end;
А про присваивание в название функции они даже не слышали.

Валерий Лаптев писал(а):
Хотелось бы, чтобы в редакторе с текстом было работы поменьше, а с кодом - побольше.
То есть, пока неясно как, но сделать редактор более языково-ориентированным, а не текстовым.

Имеются в виду какие-то автодополнения? В голову лезет ещё автоматически составляемый список объявленных процедур. Автоматические отступы — само собой.

Ещё у нас есть идея насчёт раскраски кода произвольными цветами. Таких редакторов кода сейчас мало, есть, пожалуй, только Blackbox, Native Oberon и, может быть, A2, но последние два — операционные системы.

Artyemov писал(а):
..."Stop scrolling at last line" и "Lines visible around the cursor"...

«Lines visible around the cursor» — это настройка в виде числа, а что такое «Stop scrolling at last line»?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: Среда, 14 Ноябрь, 2018 20:58 

Зарегистрирован: Понедельник, 25 Июнь, 2012 17:26
Сообщения: 473
Kemet писал(а):
...
Данная конструкция может быть спорная, да. Но разработчики её рассматривают как более короткий эквивалент громоздкой записи, в которой лишь один оператор присваивания результата, который в Обжект Паскаль записывается как-то так:
...
то есть присваивание здесь явно просматривается.

Выше в теме была цитата кода:
Код:
procedure p := Write(1);
var a1 := p + p;
a1;

Здесь p есть процедура, не функция, нет возвращаемых значений, как и аргументов, и внутри тела процедуры нет никаких присваиваний. Для a1 тип выводится аналогично как "var a1: ()->()", т.е. функциональный тип без аргументов и результата (или они определены как unit или void).
Всё-таки, нет какой-то фундаментальной завязки на ":=" как именно "присваивание значения".
Kemet писал(а):
символ "равно", здесь вроде как не уместен, так как происходят некие изменения неких переменных.
символ "присвоить" может и сомнительный, именно в такой конструкции, но заводить дополнительный оператор ради одного единственного случая тоже не айс.

Кстати, функции, как таковые, ничего не изменяют, а отображают одни элементы множества на другие. И традиционно задаются с символом "равно" в форме "y=f(x)".

Символ ":=" в математике есть дефиниция, определение. Указывая "x := y" подразумевается, что задается некий x, который есть другое обозначение для y. Теперь при обращении к x будет осуществляться редукция, подстановка и т.п. К примеру, могу объявить отношение и далее им пользоваться:
A xor B := (A \/ B) /\ !(A /\ B)

Или вот загуглил для более-менее содержательно-показательного примерчика, и ниже первое попавшееся (из некоего pdf-документа "Функциональные уравнения"), где g(x) определяется над уравнением и далее используется в "синтезе" иных уравнений, по тексту g(x) можно переопределять:
https://www.turgor.ru/lktg/2006/3/3-3ru.pdf
Вложение:
define.png
define.png [ 145.73 КБ | Просмотров: 6305 ]

Ранее была ссылка на вики-страничку с цитатой Вирта, почему начали использовать ":=" для "присваивания" в языках программирования (ну... в некоторых, и согласно статейке про "равно", приведенной ранее, Вирт не был пионером в этом вопросе, но оказался популяризатором, на некоторое время):
Цитата:
Общеизвестным плохим примером является выбор знака равенства для обозначения присваивания, восходящий к языку Fortran в 1957 году и слепо повторяемый до сих пор массой разработчиков языков. Эта плохая идея низвергает вековую традицию использования знака «=» для обозначения сравнения на равенство, предиката, принимающего значения «истина» или «ложь». Но в Fortran этот символ стал обозначать присваивание, принуждение к равенству. В этом случае операнды находятся в неравном положении: левый операнд, переменная, должен быть сделан равным правому операнду, выражению. Поэтому x = y не означает то же самое, что y = x.

Однако, диалекты языков, которые придерживаются ранних принципов ALGOL-а (согласно статейки про "равно"), сохранили (или хотя бы постарались) исходное "математическое лицо", что ли, у операции ":=". Эта операция, как бы, содержит у себя внутри "ключевое слово" define (или по сути им является, аля синоним), о чём было отмечено выше в теме. Поэтому в технологическом языке программирования/моделирования объявление такого вида приемлемое:
f(i: int): int := expression

А вот:
function f(i: int): int := expression

содержит некое семантическое дублирование. Ведь слово "function" само означает определение, это скорее нечто вроде "functiondef" по аналогии с известным "typedef". Оттого "true-ALGOL-подобные" все дефиниции задают через "равно" (в смысле те, которые его предусматривают), в т.ч. и начальные инициализации переменных/параметров, поскольку декларации возникают, как бы, вне императива, т.е. содержательного блока с последовательностью предметных действий, здесь "равенство", отмеченное Виртом, выдерживается. И даже аля ML-подобные, с декларациями переменных по месту, "маскируют" императив в виде упреждающих определений в виде конструкций "let ... in ..." и им подобные, продолжая использовать "равно". И таким образом ":=" используется как самостоятельная форма нового определения (или переопределения), как и в математике. В некотором смысле и внутри композитных конструкций, как при объявления цикла for:
for i := 0 to 10 do ...

Здесь ключевое слово "for" определяет понятие "цикла", а не самой переменной i.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: Среда, 14 Ноябрь, 2018 21:04 

Зарегистрирован: Понедельник, 25 Июнь, 2012 17:26
Сообщения: 473
А в PascalABC, вероятно, ничего там не теоретизировали, а возникла банальщина. Поскольку ввели возможность определений и по месту, то подогнали и однообразие в виде повсеместного использования ":=", как при манипулировании переменными. Если и для декларирования значений по умолчанию для параметров процедур/функций предполагается также ":=", то для констант и типов остаётся '=', по-видимому, просто потому, что эти понятия как-то отдалены, несколько в стороне, что-ли, от проблематики императивной изменчивости. А для деклараций функциональных типов задействована операция ":=", вероятно, из-за однообразия с функциональными переменными (возникающими и внутри императивных блоков, естественно и как "замыкания" с захватами объектов) аля:
var f: integer -> integer := x -> x*x;

В общем, "тру-сишников" от обилия нелюбимого ":=", видимо, будет колбасить капитально (а многим ":=" не нравиться банально из-за неудобства набирать, мол лишний раз shift жать (особенно, если всё сплошь в snake_case), чтобы ввести ":". В самом деле, проще набрать ";=" и редактор сделает автозамену на ":=". Это к вопросу насчёт редактора, был выше в теме).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: Четверг, 15 Ноябрь, 2018 06:43 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 717
Откуда: Барнаул
kekc_leader писал(а):
Недавно у нас курсанты притащили откуда-то третий вариант:
Код:
function f(i: integer): integer;
begin
  exit(expression);
end;

"FreePascal" явно прослеживается
Цитата:
А про присваивание в название функции они даже не слышали.

А это как раз изначальный вариант в Паскале, потом добавили форму result := expression;


Последний раз редактировалось Kemet Четверг, 15 Ноябрь, 2018 09:01, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: Четверг, 15 Ноябрь, 2018 07:57 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
По поводу редактора кода.
Хотелось бы, чтобы на выходе редактора помимо "голого" текста программы имелось бы и внутренняя модель программы.
То есть редактор берет на себя, хотя бы частично, функции фронт-енд-компилятора по лексическому-синтаксическому контролю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: Четверг, 15 Ноябрь, 2018 18:04 

Зарегистрирован: Пятница, 13 Март, 2015 16:40
Сообщения: 597
kekc_leader писал(а):
Artyemov писал(а):
..."Stop scrolling at last line" и "Lines visible around the cursor"...

«Lines visible around the cursor» — это настройка в виде числа, а что такое «Stop scrolling at last line»?

Последняя строка текста и движок линейки прокрутки всегда будут у нижней границы экрана. За движок нельзя прокрутить текст так, что б последняя строка текста ушла к верхней границе экрана.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: Пятница, 16 Ноябрь, 2018 20:51 

Зарегистрирован: Понедельник, 25 Июнь, 2012 17:26
Сообщения: 473
Цитата:
А про присваивание в название функции они даже не слышали.
[...]
А это как раз изначальный вариант в Паскале, потом добавили форму result := expression;

Когда-то смотрел на проект MSEide/MSEgui под FreePascal, где есть какой-то свой экспериментальный вариант Паскаля (с попыткой реализовать и минималистичное runtime-ядро/платформу). Там предлагают самую короткую форму: "function results are returned by mandatory assignment before 'end'", return также имеется в дополнение, нет стандартной переменной result:
https://gitlab.com/mseide-msegui/mselang/wikis/home
Код:
procedure abcfunc(par1: int32, par2: int32): int32;
begin
 if par2 > 10 then
  return 42;
 end;
 abcproc(1,2);
 := 123;
end;

procedure abcfunc2(par1: int32, par2: int32): int32;
var
 result: int32;
begin
 result:= 123;
 if par1 > 10 then
  result:= -1;
 end;
 := result
end;

Обращает на себя внимание любопытная форма альтернативного варианта оператора with для определения "алиасов":
Код:
type
 rec1ty = object
  a,b: int32;
 end;

 recty = object
  a,b: int32;
  c: rec1ty;
 end;

var
 r1,r2: recty;
begin
 with r1:d, r2:e, d.c:f do
  d.a:= 70;
  d.b:= 20;
  e.b:= 3;
  f.b:= 30;
[...]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: Пятница, 16 Ноябрь, 2018 20:54 

Зарегистрирован: Понедельник, 25 Июнь, 2012 17:26
Сообщения: 473
Цитата:
Потому что это и есть присваивание, только совмещенное с объявлением. Так в Модуле-3, Активном Обероне ... А вот форма "=" концептуально не верна. Там, где переменная, там ":=", там, где константа, там "=" - потому что мы не можем значению присвоить другое значение, именованная константа простой алиас для значения.

Заглянул и в Ada, там также везде ":=". Всё-таки, этот символ условно сложносоставной (к примеру, "двойное" равно "==" однородно), он примерно такой же "агрессивный" как и "::=" в БНФ. И когда внутри одной декларации он встречается неоднократно, особенно на одной текстовой строке, как при объявлении значений по умолчанию для параметров процедур, то как-то не милы такие формы для глаза.

Вспомнился проектик Trankvila -- некий функциональный язык под впечатлением Оберона (и такое в природе встречается):
http://trankvila.org/

В нём дефиниции, фактически, без ключевых слов, задаются через "=" для условно compile-time определений -- типы, а через ":=" -- run-time определения -- переменные (там это "одноразовые" value) и функции.
Фактически, в языках программирования определения типов, констант и прочие идентичные метаданные задают существующие факты. Т.е. в этом случае "равно" можно интерпретировать как равенство в уравнениях, мол возникает система уравнений, описывающая систему. А ":=" задаёт тогда определения, связанные с run-time, в т.ч. и возникающие "принуждения к равенству".

Подобный подход можно примерить и для такого языка, как PascalABC, о чём далее.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: Пятница, 16 Ноябрь, 2018 21:02 

Зарегистрирован: Понедельник, 25 Июнь, 2012 17:26
Сообщения: 473
Ну, то, что рядом с ":=" есть и ключевые слова для дефиниции -- "выкрутиться" несложно. Мол, некое "let a := expression" выглядит как и в математических текстах в виде частого употребления "пусть a := expression", это слово "пусть" (с разновидностью аля "var"/"function", или совместно в стиле "let fn f(x: int) := ...") становится частью технологического языка. Пожалуй, лишь "def" рядом будет смотреться коряво, на чём акцентировалось выше в теме.

Тогда есть возможность задать тот же функциональный тип (именно определение типа) и через "равно". Сейчас, к примеру, функции в PascalABC могут возвращать и кортежи, какая может быть форма декларации типа в таком случае -- на примере функции вычисления площади и периметра прямоугольника по ссылке ниже, где в док-ции тип результата (выводимый автоматически), всё-таки, не указан:
http://pascalabc.net/downloads/pabcnethelp/index.htm#page=LangGuide/Types/tuples.html
Код:
// Реализация функции:
function SP(a,b: real) := (a*b, 2*(a+b));

// Возможные формы объявления её типа:
function SP(a,b: real): (real, real);
function SP(a,b: real): (real*real);
function SP(a,b: real): real*real;
function SP: (real, real) -> (real, real);
function SP: (real*real) -> (real*real);
function SP: real*real -> real*real;

В PascalABC не уверен, что поддерживается логическая форма записей кортежей через "*", как и типов-сумм через "+". Однако эти формы, как и классические математические формы определения функции в виде "f: t -> t" удобны в рамках соответствующих математических предметок. Традиционный "паскалевский" вид "f(t): t" в случае результата-кортежа не очень-то приглядный из-за возникающего сочетания скобок и ":", особенно если рядом указана и реализация:
Код:
function SP(a,b: real): (real, real) := (a*b, 2*(a+b));

Мне понравился способ в Lustre (ML-диалект, здесь на форуме есть тема про Esterel и смежные технологии), где для инженеров, занимающихся прикладной рутиной, предлагают все декларации типов через "=", включая и функциональные (в дополнение к обычным формам, приведенным выше), в стиле:
Код:
// Объявление типа и реализации:
function SP(real, real) = (real, real);
function SP(a, b) := (a*b, 2*(a+b));

// Традиционная, не краткая, форма реализации, совмещенная с объявлением типа,
// с использованием именованных и результатов:
function SP(a,b: real) = (s,p: real)
begin
  s := a*b;
  p := 2*(a+b);
end;

В самом Lustre нет кратких форм реализации, здесь как раз ":=" к месту. Вместо "равно" можно использовать слово "return" (как и в Ada) для длинных определений, если необходимо разбивать текст на множество строк.
Использование именования для всех параметров и результатов, фактически, вырисовывается таким же, как и в Go (что есть и в Lustre, но там иная "императивщина").

Значения по умолчанию для параметров процедур необходимо задавать через "=", поскольку это внутренняя декларация типа, т.е. внутри комплексной структуры (значение по умолчанию задает характеристики типа параметра):
Код:
// Определение типа:
function f(s: string; pos: integer = 0; len: integer = 1000) = integer;

// Несколько реализаций:
function f(s, _, 0) := expression;
function f(s, 0, l) := expression;
function f(s, p, l) := expression;

Выше в примерчике предполагается перегрузка процедур/функций и по константам (некий упрощённый "pattern matching", уместный при наличии кратких форм определений).

Переменные определяются через ":=" как обычно, как внутри кода, так и в секции объявлений перед блоком действий (инициализирующие значения).
То, что есть дефиниции переменных и по месту -- очень даже норм. Главное, чтобы было наличие ключевого слова, выделяющее объявление. В том же Go получилась жесть с допустимостью краткой формы в виде оператора ":=", который без слова "var" вводит новые переменные. Когда присваивания в форме "=" и ":=" возникают однородно вперемешку, между ними едва уловима разница, можно что-то не заметить и не так понять или непреднамеренно ввести новую переменную в текущей синтаксической области вместо изменения значения у существующей переменной, определенной выше уровнем.
Здесь в смежной теме отмечена проблематика объявлений по месту, но такова связана в большей степени именно с формой декларации (в общем, отдельная тема).
Кстати, наткнулся на сопоставление различных форм объявлений переменных в языках программирования, м.б. полезно:
- Why does the type go after the variable name in modern programming languages?
- What's the rationale behind the ordering of Scala's value/variable declaration when including a type identifier?

В общем, такие вот соображения, м.б. будут полезными для какого-нибудь здешнего "Семантика".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: Пятница, 16 Ноябрь, 2018 21:08 

Зарегистрирован: Понедельник, 25 Июнь, 2012 17:26
Сообщения: 473
Валерий Лаптев писал(а):
Хотелось бы, чтобы в редакторе с текстом было работы поменьше, а с кодом - побольше.
То есть, пока неясно как, но сделать редактор более языково-ориентированным, а не текстовым.
...
Хотелось бы, чтобы на выходе редактора помимо "голого" текста программы имелось бы и внутренняя модель программы.
То есть редактор берет на себя, хотя бы частично, функции фронт-енд-компилятора по лексическому-синтаксическому контролю.

При подходе "умная IDE" может возникнуть несостыковка с позицией (активно здесь обсуждаемой), мол отладчик вреден для обучения. Когда в IDE много всего умного, лепится само собой, автокомпликт аж опережает (а то и мешает) и т.д., то и мозги меньше напрягаются. М.б. для образования если нужен hardcore, то это должен быть полный hardcore?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: Пятница, 16 Ноябрь, 2018 21:12 

Зарегистрирован: Понедельник, 25 Июнь, 2012 17:26
Сообщения: 473
kekc_leader писал(а):
Насчёт развития Free Oberon: помимо нового компилятора будет создан и более современный редактор кода. Может быть, у вас есть какие-то предложения по поводу того, что бы вы хотели видеть в таком редакторе.

Я не знаком с Free Oberon, не в курсе характеристик редактора и конкретики планов, с ним связанных. Ниже всего лишь общие соображения по поводу.

Мне кажется, кроме современных редакторов не следует забывать о старых, там местами удобства, отсутствующие в "мэйнстриме". К примеру, везде сейчас мода на "множественные" курсоры, видимо, распространилась от Sublime Text. Не то, чтобы прямо уж супер-фича, но если она есть, то не помешает. Но в тех же Vim и Emacs в виде всяких плагинов, а в jEdit -- некий "эмакс" на java, мало кому уже известный и слабо развиваемый -- из коробки есть "множественное" выделение, в чём-то проще и удобнее. К сожалению, очень кратко в двух словах сложно описать, при потребности (вдруг) всё легко устанавливается и можно посмотреть/пощупать. Прежде всего, имею ввиду Sublime и jEdit -- как раз представители современного взгляда о редакторах со всеми модными фишками. Однако jEdit -- это некая проекция старого функционала из Emacs-a при современных, более привычных, раскладках клавиш, как минимум (насчёт множественных курсоров, может быть даже есть смысл две техники объединить -- когда курсор находится внутри выделения, одного из множества, включаются "множественные" курсоры, но это отдельная тема).

А вот такие вот быстрые (без мыши) перемещения по коду и элементам интерфейса (а также запуск определенных команд) вообще мало где реализуются:
https://github.com/easymotion/vim-easymotion
https://github.com/abo-abo/avy

Выше плагины для Vim и Emacs для удобного управления через клавиатуру (на страничках есть и картинки, опять же кратко проблематично описать). Я, к примеру, среди броузеров предпочитаю FireFox, фактически, лишь из-за наличия плагинов vimperator или pentadactyl со схожим функционалом (управление броузером без мыши).

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Free Oberon официально выпущен
СообщениеДобавлено: Суббота, 17 Ноябрь, 2018 10:06 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
PSV100 писал(а):
При подходе "умная IDE" может возникнуть несостыковка с позицией (активно здесь обсуждаемой), мол отладчик вреден для обучения. Когда в IDE много всего умного, лепится само собой, автокомпликт аж опережает (а то и мешает) и т.д., то и мозги меньше напрягаются. М.б. для образования если нужен hardcore, то это должен быть полный hardcore?

Не знаю.
Нас вот учили писать чернильной ручкой до конца 2-го класса.
А в 3-м перешли на "разреженные" тетради.
Только в 5-м перешли на обычную линейку.
Это хардкорд ?
А сейчас чернильными ручками вообще не учат.
Держать правильно ручку тоже не учат.
Это - правильно?


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

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


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

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


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

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