На базарной площади довольно часто можно слышать высказывания об
Обероне. Мне кажется, что на базарной площади пора появиться ветке об
этой системе и языке, что-то вроде "Мысли об Обероне". Что это такое, перспективы
этой системы, что
полезного можно извлечь из него для программирования на Дельфи
(например) и др.
Ivan
Всего в теме 4531 сообщение
Ссылки по теме "Оберон" и "Компонентный паскаль"
Отслеживать это обсуждение
- Free Pascal, Oberon, BlackBox
- Разработка препроцессора gpre для delphi\freepascal.
- Component Pascal и среда разработки BlackBox
- FreePascal: реальная альтернатива или OpenSource — блажь?
№ 4481 10-02-2006 10:22 | |
Ответ на »сообщение 4480« (captain cobalt)
Дополнительно, если в текущем контексте процедурный тип недопустим, то Р также означает результат вызова через процедурную переменную. Это ещё одно воплощение правила "если разыменование указателя очевидно, то разыменование можно не писать".
В Blackbox, по крайней мере, строго нужно писать () для получения результата вызова процедуры-функции.
№ 4480 10-02-2006 10:05 | |
Правило очень простое.
Если Р - это процедурная переменная, то в тексте программы:
Р - это собственно процедурная переменная
Р() - это результат вызова через процедурную переменную.
Дополнительно, если в текущем контексте процедурный тип недопустим, то Р также означает результат вызова через процедурную переменную. Это ещё одно воплощение правила "если разыменование указателя очевидно, то разыменование можно не писать".
ИМХО.
№ 4479 10-02-2006 08:33 | |
К чему это я всё? А вот к чему. В мануале написано
ВызовПроцедуры = Обозначение [ФактическиеПараметры]
Из этого следует что "P" модет являться одновременно не только адресом, а ещё и вызовом.Я долго мучился как это можно реализовать, а потом просто придумал пример в котором определить невозможно что из двух. По моему мнению "P" - адрес, а "P()" - вызов. XDS тоже так думает. А что думает мануал? Неправду?
Язык программирования Оберон-2
Х.Мёссенбёк, Н.Вирт
Институт компьютерных систем, ETH Цюрих Март 1995
Перевод с английского С.Свердлова
...
9.2 Вызовы процедур
Вызов процедуры активирует процедуру. Он может содержать список фактических параметров, которые заменяют соответствующие формальные параметры, определенные в объявлении процедуры (см. Гл. 10). Соответствие устанавливается в порядке следования параметров в списках фактических и формальных параметров. Имеются два вида параметров: параметры-переменные и параметры-значения. Если формальный параметр — параметр-переменная, соответствующий фактический параметр должен быть обозначением переменной. Если фактический параметр обозначает элемент структурной переменной, селекторы компонент вычисляются, когда происходит замена формальных параметров фактическими, то есть перед выполнением процедуры. Если формальный параметр — параметр-значение, соответствующий фак-тический параметр должен быть выражением. Это выражение вычисляется перед вызовом процедуры, а полученное в результате значение присваивается формальному параметру (см. также 10.1).
ВызовПроцедуры = Обозначение [ФактическиеПараметры].
№ 4478 10-02-2006 08:17 | |
Ответ на »сообщение 4475« (Сергей Губанов)
___________________________
Ответ на »сообщение 4474« (Ev_genus)
какие значения переменная V должна была БЫ принимать
P := B;
V := A(B); (* V = 1 *)
V := A(P); (* V = 1 *)
V := A(B()); (* V = 2 *)
V := A(P()); (* V = 2 *)
Спасибо. А ещё вопрос можно?
V:=P;
№ 4477 10-02-2006 08:15 | |
Ответ на »сообщение 4474« (Ev_genus)
___________________________
Переформулирую вопрос яснее:
Если бы некоторый компилятор поддерживал в языке Оберон-2 перегрузку процедур по аргументам, то какие значения переменная V должна была БЫ принимать.
Если бы у бабушки...
№ 4476 10-02-2006 08:08 | |
Ответ на »сообщение 4466« (Ev_genus)
___________________________
Я думаю, что двух процедур A быть не должно.
№ 4475 10-02-2006 08:02 | |
Ответ на »сообщение 4474« (Ev_genus)
какие значения переменная V должна была БЫ принимать
P := B;
V := A(B); (* V = 1 *)
V := A(P); (* V = 1 *)
V := A(B()); (* V = 2 *)
V := A(P()); (* V = 2 *)
№ 4474 10-02-2006 07:41 | |
Ответ на »сообщение 4473« (Старик Оберон)
___________________________
Послушайте, мил человек, совет старика. Хотите писать тесты - выбирайте конкретный компилятор. Хотите писать свой компилятор - поработайте немного с существующими. Хотите потестировать аудиторию - прогоните пример хотя бы на имеющемся у Вас компиляторе.
Всем << Есть две большие разницы между научить и проучить. Похоже люди яросно пытаются сделать второе. Если у вас тут демагогический кружок цель которого производить тонны флейма, то так бы и сказали что мне не сюда. Вы уже 3й пост пытаетесь меня послать, но всё никак не решитесь. Я получу мнение, хоть какое-то?!
Переформулирую вопрос яснее:
Если бы некоторый компилятор поддерживал в языке Оберон-2 перегрузку процедур по аргументам, то какие значения переменная V должна была БЫ принимать.
Прошу прощение если смутил неправильной формулировкой вопроса или последующих ответов.
Старик Оберон << Я много чем уже попользовался. Ни в коем случае не скажу, что попользовался в достаточном объёме. XDS сказал "Identifier A already defined". Что и предполагалось в том числе мной. За исключением этой "ошибки", всё правильно.
Вот этот код я запускал в XDS
MODULE Test;
IMPORT Out;
TYPE
PROC=PROCEDURE():INTEGER;
VAR
P:PROC;
V:INTEGER;
PROCEDURE B():INTEGER;
BEGIN
RETURN 0
END B;
PROCEDURE A(T:PROC):INTEGER;
BEGIN
RETURN 1
END A;
PROCEDURE A(T:INTEGER):INTEGER;
BEGIN
RETURN 2
END A;
BEGIN
P:=B;
V:=A(B);
Out.Int(V, 0);
V:=A(P);
Out.Int(V, 0);
V:=A(B());
Out.Int(V, 0);
V:=A(P());
Out.Int(V, 0);
END Test.
№ 4473 10-02-2006 06:20 | |
Ответ на »сообщение 4471« (Ev_genus)
___________________________
RETURN - не так уж важно, пусть жалуется.
Послушайте, мил человек, совет старика. Хотите писать тесты - выбирайте конкретный компилятор. Хотите писать свой компилятор - поработайте немного с существующими. Хотите потестировать аудиторию - прогоните пример хотя бы на имеющемся у Вас компиляторе.
№ 4472 10-02-2006 06:17 | |
Borland отказывается от развития своих IDE и публично ищет покупателя. Сначала подмяла рынок Паскаль-инструментария под себя, а теперь рухнула сама.
Работали на Delphi? Наше вам с кисточкой. Экспроприация экспроприаторов...
А что Оберон? А ничего. Ничего хорошего.
Отслеживать это обсуждение
Дополнительная навигация: |
|