Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 28 мар 2024, 16:24

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




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
СообщениеДобавлено: 14 июл 2013, 14:04 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Пока что ни о какой сборке мусора конечно не может быть и речи. Я с ней не разобрался, а кучу метаинформации, которую норовит построить Ofront, просто вырезаю, так что IS не будет работать точно. Но какие-то шаги в направлении работы с указателями приходится делать. Начнём мы с обычного резервирования и ручного освобождения памяти как в Си/Паскале. Для этого в модуль Platform я добавил процедуру DISPOSE. Рабочий пример кода пока только для Win32 (должен без изменений собираться и работать в MS DOS и на Спектруме):
Код: "OBERON"
  1. MODULE DemoDynMem; (*$MAIN*)
  2. IMPORT
  3. IO := Console, Platform;
  4.  
  5. TYPE
  6. PersonPtr = POINTER TO Person;
  7. Person = RECORD
  8. name: ARRAY 20 OF CHAR;
  9. age: INTEGER;
  10. sex: CHAR; (*"M" OR "F"*)
  11. next: PersonPtr;
  12. END;
  13.  
  14. VAR
  15. john, mike, lisa, bob, iren, person: PersonPtr;
  16. list: POINTER TO ARRAY 5 OF PersonPtr;
  17. n: INTEGER;
  18.  
  19. BEGIN
  20. NEW(john); NEW(mike); NEW(lisa); NEW(bob); NEW(iren);
  21. john.name := "John Smith" ; john.sex := "M"; john.age := 32;
  22. john.next := bob;
  23. mike.name := "Michael Bison"; mike.sex := "M"; mike.age := 12;
  24. mike.next := lisa;
  25. lisa.name := "Elisabeth Bow"; lisa.sex := "F"; lisa.age := 21;
  26. lisa.next := NIL;
  27. bob.name := "Boris Fellow" ; bob.sex := "M"; bob.age := 39;
  28. bob.next := iren;
  29. iren.name := "Iren Summer" ; iren.sex := "F"; iren.age := 43;
  30. iren.next := mike;
  31.  
  32. person := john; IO.WriteStrLn("Female:");
  33. WHILE person # NIL DO
  34. IF person.sex = "F" THEN IO.WriteStrLn(person.name) END;
  35. person := person.next;
  36. END; IO.WriteLn;
  37.  
  38. NEW(list);
  39. list[0] := john; list[1] := mike; list[2] := lisa;
  40. list[3] := bob; list[4] := iren;
  41.  
  42. FOR n := LEN(list^) - 1 TO 0 BY -1 DO
  43. IO.WriteStrLn(list[n].name);
  44. IO.WriteCh(list[n].sex); IO.WriteLn;
  45. IO.WriteInt(list[n].age); IO.WriteLn; IO.WriteLn;
  46. Platform.DISPOSE(list[n]);
  47. END;
  48. Platform.DISPOSE(list);
  49. END DemoDynMem.
Обратите отдельное внимание на размер исполняемого файла. В лучших традициях XDev!


Вложения:
Комментарий к файлу: Программа консольная, чтобы увидеть вывод запускаю её в Total Commander комбинацией Shift+Enter.
DemoDynMem.exe.zip [1.35 КБ]
Скачиваний: 553
Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 14 июл 2013, 18:20 
Не в сети

Сообщения: 104
1kb :shock:

It works under wine

Цитата:
# wine DemoDynMem.exe
Female:
Iren Summer
Elisabeth Bow

Iren Summer
F
43

Boris Fellow
M
39

Elisabeth Bow
F
21

Michael Bison
M
12

John Smith
M
32


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 17 июл 2013, 00:10 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
slenkar, specially for you - XDev's cross-platform in action. Now under DOS and Linux. :) I've started a new subsystem LinDev - for development native Linux applications in Oberon-2. I hope you will like this idea!

https://github.com/Oleg-N-Cher/BB-XDev/blob/master/DosDev/DYNMEM.EXE - for MS DOS
https://github.com/Oleg-N-Cher/BB-XDev/blob/master/LinDev/DemoDynMem - for Linux (i386)

P.S. Building the DynMem module for DOS needs the modified Ofront, because old Turbo C does not support identifiers concatenation ##


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 18 июл 2013, 07:18 
Не в сети

Сообщения: 53
Откуда: Россия, Самара
Уже неплохо. Но как мы знаем минимальная программа = операционная система, но приятно, что занимает 1 кб.

Возможно ли в ofront, внедрить подобие шаблонов? Не в ручную приводить каждый тип. А именно генерировать АТД. Естественно, что совместимость теряется, но каждый раз писать велосипед 2013 году, как то ...


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 18 июл 2013, 07:22 
Не в сети

Сообщения: 53
Откуда: Россия, Самара
Надеюсь, вы не будете оспаривать преимущества, атд?


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 18 июл 2013, 08:26 
Не в сети

Сообщения: 203
Jordan писал(а):
Возможно ли в ofront, внедрить подобие шаблонов? Не в ручную приводить каждый тип. А именно генерировать АТД. Естественно, что совместимость теряется, но каждый раз писать велосипед 2013 году, как то ...

Надеюсь, вы не будете оспаривать преимущества, атд?

Боюсь, Вы не вполне правильно понимаете, что такое АТД (Абстрактные Типы Данных). АТД на самом деле были в оберонах с самого начала, ещё когда Вирт сделал свою первую Модулу.
АТД по сути -- это модуль, в котором сокрыты внутреннее представление и реализация операций над неким типом данных.

То, о чём говорите Вы -- это на самом деле родовые типы данных по терминологии языка Ада. Шаблонные типы, дженерики...

Был эксперимент по созданию варианта Оберона с дженериками, но почему-то этот проект забросили...

ЗЫ. Сам я считаю, что дженерики весьма важны...


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 18 июл 2013, 12:35 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Полагаю, Оберон тем и ценен, что является минимумом, ядром (по определению Андреаса Хейлсберга — до 90% семантики у императивных языков — общие, так вот Оберон и реализует те самые 90%), и добавить в Ofront дженерики можно и нужно. Проблема только в том, что заниматься этим практически некому. Но если начинать эту работу, хорошо сначала посмотреть что уже сделано в этом направлении.

Стану ли я заниматься внедрением в Ofront дженериков? Может быть, но неизвестно когда. Сначала надо сборку мусора осилить, ИМХО это важнее.

Jordan писал(а):
Надеюсь, вы не будете оспаривать преимущества, атд?
Не буду конечно. Даже Вирт заметил, что язык Оберон был продуктом, соответствующим поставленным задачам. А про параллельность сказал, что она не поддержана в Обероне-1 не потому, что он её отрицает, а потому что ОС Оберон была задумана как однопользовательская и однопоточная. Здесь ответ в том, что безусловно надо Оберон превратить в современный промышленный язык, но желательно чтобы он при этом на слишком распух.

Так что я был бы рад видеть инициативу по доработке Оберона/Ofront'а в нужных по Вашему мнению направлениях. Это можно делать с помощью компактных расширений языка Оберон (типа OberonX или Component Pascal), тогда можно позиционировать компилятор Оберона с поддержкой расширений X и Y, например. Это позволит оставить ядро Оберона простым, а расширения будут рассматриваться отдельно от конкретных реализаций.


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 19 июл 2013, 01:11 
Не в сети

Сообщения: 104
The linux demos work great :mrgreen:


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

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


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

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


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

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
© VEDAsoft Oberon Club