OberonCore
https://forum.oberoncore.ru/

Linux+BlackBox=?
https://forum.oberoncore.ru/viewtopic.php?f=34&t=58
Страница 4 из 7

Автор:  hothing [ Пятница, 02 Ноябрь, 2007 10:45 ]
Заголовок сообщения:  Re: Linux+BlackBox=?

2Vlad ИМХО Ваша позиция странна.

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

Код:
void *memory = kernel_alloc(sizeof(some_object));


Улыбнуло :) Может загляните в исходники ядра, а? Повторюсь, смотрите книгу Кернигана и Риси "Язык С", раздел 5.4. http://www.lib.ru/CTOTOR/kernigan.txt. Принцип изложенный в этой книги лежит в основе большинства манагеров памяти ОС.

Думая никто не будет тратить время на написание БЕСПОЛЕЗНОГО кода в виде манагера памяти на Обероне.

Считаете, что этот язык - brainfake? Вас никто не заставляет писать на Обероне. А тем людям, которые поняли его элегантность и простоту, Ваши доводы, по меньшей мере, покажутся наивными.

Автор:  Vlad [ Пятница, 02 Ноябрь, 2007 18:37 ]
Заголовок сообщения:  Re: Linux+BlackBox=?

hothing писал(а):
пытаетесь вести дискусию, о применимости инструмента (Оберон) для системных задач (написание кода ОС, и не важно дополнение кода уже существующего или вообще новой ОС).


Я видел доводы Линуса. И этим доводам я доверяю больше, нежели вашим или даже Вирта. Потому что этот человек имеет реальный опыт создания реальной ОС, в отличие от...

hothing писал(а):
Код:
void *memory = kernel_alloc(sizeof(some_object));

Улыбнуло :) Может загляните в исходники ядра, а? Повторюсь, смотрите книгу Кернигана и Риси "Язык С", раздел 5.4.


Я видел исходники ядра линукса. Я представляю как работают менеджеры памяти (и я их сам писал). Если хочется меня куда-то послать или уличить в незнании чего-то, то давайте ссылки на конкретные вещи, а не на описание примитивного менеджера памяти.

hothing писал(а):
Считаете, что этот язык - brainfake? Вас никто не заставляет писать на Обероне. А тем людям, которые поняли его элегантность и простоту, Ваши доводы, по меньшей мере, покажутся наивными.


Я считаю (всего лишь), что этот язык не подходит для написания ядреного кода в линуксе. А люди, которые поняли его элегантность и простоту, до сих не написали ничего такого ядреного для линукса (дайте конкретную ссылку, если я не прав). Да что там ядреного, даже линуксового компилятора КП (о котором здесь говорят уже столько лет) до сих пор не написали.

Автор:  Штирлиц [ Пятница, 02 Ноябрь, 2007 20:49 ]
Заголовок сообщения:  Re: Linux+BlackBox=?

Vlad писал(а):
Да что там ядреного, даже линуксового компилятора КП (о котором здесь говорят уже столько лет) до сих пор не написали.


Дайте ссылку на ваш компилятор!!!
Вы то уж наверное написали его.

Автор:  Geniepro [ Пятница, 02 Ноябрь, 2007 21:17 ]
Заголовок сообщения:  Re: Linux+BlackBox=?

Vlad писал(а):
Я видел доводы Линуса. И этим доводам я доверяю больше, нежели вашим или даже Вирта. Потому что этот человек имеет реальный опыт создания реальной ОС, в отличие от...
А что, Вирт уже никогда не делал двух своих операционок?
Цитата:
Я считаю (всего лишь), что этот язык не подходит для написания ядреного кода в линуксе. А люди, которые поняли его элегантность и простоту, до сих не написали ничего такого ядреного для линукса (дайте конкретную ссылку, если я не прав). Да что там ядреного, даже линуксового компилятора КП (о котором здесь говорят уже столько лет) до сих пор не написали.
А кому он нужен, этот ваш линукс? :о))

Автор:  AVC [ Пятница, 02 Ноябрь, 2007 22:46 ]
Заголовок сообщения:  Re: Linux+BlackBox=?

Я что-то не понимаю, о чем с таким жаром спорят в этой ветке.

Во-первых, кто сказал, что для системного программирования на Обероне не должен применяться псевдомодуль SYSTEM со всеми его возможностями?
Оберон помогает максимально ограничить потребность в низкоуровневом программировании и ограничить его низкоуровневыми (системными) модулями.
Никто и не ставит невозможную задачу вообще обойтись на системном уровне без низкоуровневого программирования.
Низкоуровневое программирование на Обероне вполне возможно. (Или с этим кто-то спорит?)
Просто Оберон проводит "политику апартеида" по отношению к "туземному" низкоуровневому программированию. :)

Распределение памяти из отдельных статических или динамических массивов памяти порой используется на Си именно для организации примитивной сборки мусора (по окончании какого-то этапа работы массив просто очищается полностью, вот и "собрали мусор" :) ), используя специально написанные для этого альтернативы malloc.

Что касается нежелательности в отдельных случаях GC, то его можно предотвратить, создав простенький модуль вроде:
Код:
MODULE SimpleMemAllocator;

   TYPE
      Object* = POINTER TO RECORD
         data*: INTEGER; (* здесь должны быть реальные данные *)
      END;
   
      MemBlock* = POINTER TO RECORD
         count: INTEGER;
         stack: POINTER TO ARRAY OF Object;
      END;
      
   PROCEDURE (me: MemBlock) Alloc* (): Object, NEW;
      VAR p: Object;
   BEGIN
      IF me.count > 0 THEN
         DEC(me.count);
         p := me.stack[me.count];
      END;
      (* если p = NIL, то здесь можно увеличить размер me.stack *)
      RETURN p
   END Alloc;
   
   PROCEDURE (me: MemBlock) Free* (p: Object), NEW;
   BEGIN
      IF me.count < LEN(me.stack) THEN
         me.stack[me.count] := p;
         INC(me.count)
      END
   END Free;
   
   PROCEDURE NewMemBlock* (size: INTEGER): MemBlock;
      VAR mem: MemBlock; i: INTEGER;
   BEGIN
      ASSERT(size > 0);
      NEW(mem); NEW(mem.stack, size);
      mem.count := 0;
      FOR i := 0 TO size-1 DO NEW(mem.stack[i]) END;
      RETURN mem;
   END NewMemBlock;
      
END SimpleMemAllocator.

Идея в том, что Free сохраняет указатель на блок памяти в специальном пуле таких указателей (реализация его в виде стека, думается, наиболее эффективна), избегая сборки мусора и позволяя использовать этот блок повторно через Alloc.

Автор:  AVC [ Суббота, 03 Ноябрь, 2007 00:12 ]
Заголовок сообщения:  Re: Linux+BlackBox=?

Vlad писал(а):
Я видел доводы Линуса. И этим доводам я доверяю больше, нежели вашим или даже Вирта. Потому что этот человек имеет реальный опыт создания реальной ОС, в отличие от...

И в чем принципиальный прорыв по сравнению с UNIX?

Автор:  Vlad [ Суббота, 03 Ноябрь, 2007 00:44 ]
Заголовок сообщения:  Re: Linux+BlackBox=?

Geniepro писал(а):
А что, Вирт уже никогда не делал двух своих операционок?


Реальных? Которые можно пойти, скачать, установить? Нет, не делал. А "специализированных" только ленивый не делал. Вон, даже на хаскеле чего-то есть.

Цитата:
А кому он нужен, этот ваш линукс? :о))


Это уже другой вопрос. Не будем отвлекаться :)

Автор:  Борис Рюмшин [ Суббота, 03 Ноябрь, 2007 01:47 ]
Заголовок сообщения:  Re: Linux+BlackBox=?

Vlad писал(а):
Geniepro писал(а):
А что, Вирт уже никогда не делал двух своих операционок?

Реальных? Которые можно пойти, скачать, установить? Нет, не делал. А "специализированных" только ленивый не делал.

И Вы в том числе? :)

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

Автор:  Vlad [ Суббота, 03 Ноябрь, 2007 04:13 ]
Заголовок сообщения:  Re: Linux+BlackBox=?

AVC писал(а):
Я что-то не понимаю, о чем с таким жаром спорят в этой ветке.


О применимости оберона в программировании линуксового ядра.

AVC писал(а):
Во-первых, кто сказал, что для системного программирования на Обероне не должен применяться псевдомодуль SYSTEM со всеми его возможностями?
Оберон помогает максимально ограничить потребность в низкоуровневом программировании и ограничить его низкоуровневыми (системными) модулями.
Никто и не ставит невозможную задачу вообще обойтись на системном уровне без низкоуровневого программирования.
Низкоуровневое программирование на Обероне вполне возможно. (Или с этим кто-то спорит?)


То, что низкоуровневое программирование на обероне возможно с помощью SYSTEM никто не спорит. С помощью SYSTEM можно хоть машинными кодами забить кусок памяти и запустить на выполнение. Спорят с осмысленностью такого низкоуровнего программирования, учитывая то, что другие языки (C, например) дают делать тоже самое намного удобнее.

AVC писал(а):
Что касается нежелательности в отдельных случаях GC, то его можно предотвратить, создав простенький модуль вроде:


Из этого примера не видно, как будет распределяться память под другие типы объектов (не Object). Если для каждого типа объекта придется городить подобный аллокатор, то это несерьезно.

Автор:  Штирлиц [ Суббота, 03 Ноябрь, 2007 09:08 ]
Заголовок сообщения:  Re: Linux+BlackBox=?

Штирлиц писал(а):
Vlad писал(а):
Да что там ядреного, даже линуксового компилятора КП (о котором здесь говорят уже столько лет) до сих пор не написали.


Дайте ссылку на ваш компилятор!!!
Вы то уж наверное написали его.


Да, ссылки пока не видно.
А я так надеялся на мастер-класс, компилятор КП написанный на С, чтоб у всех оберонщиков дух перехватило.


P.S. "И что ты смотришь нас сучек в глазе брата твоего, а бревна в твоем глазу не чувствуешь?" Евангелие от Матфея

Автор:  AVC [ Суббота, 03 Ноябрь, 2007 18:48 ]
Заголовок сообщения:  Re: Linux+BlackBox=?

Vlad писал(а):
AVC писал(а):
Я что-то не понимаю, о чем с таким жаром спорят в этой ветке.


О применимости оберона в программировании линуксового ядра.


Какая-то экзотическая тема. :)

Vlad писал(а):
То, что низкоуровневое программирование на обероне возможно с помощью SYSTEM никто не спорит. С помощью SYSTEM можно хоть машинными кодами забить кусок памяти и запустить на выполнение. Спорят с осмысленностью такого низкоуровнего программирования, учитывая то, что другие языки (C, например) дают делать тоже самое намного удобнее.


Если бы речь шла исключительно о низкоуровневом программировании, я бы согласился.
Но здесь есть и другая сторона. Си не позволяет обособить низкоуровневое программирование, "запереть" его в отдельных модулях.
В Обероне есть возможность контролировать сложность, инкапсулировать ее "по частям" в разных модулях.

Vlad писал(а):
AVC писал(а):
Что касается нежелательности в отдельных случаях GC, то его можно предотвратить, создав простенький модуль вроде:


Из этого примера не видно, как будет распределяться память под другие типы объектов (не Object). Если для каждого типа объекта придется городить подобный аллокатор, то это несерьезно.


Это только схема. IMHO, ее нетрудно усовершенствовать для поддержки произвольных объектов.

Автор:  Vlad [ Суббота, 03 Ноябрь, 2007 19:15 ]
Заголовок сообщения:  Re: Linux+BlackBox=?

AVC писал(а):
Vlad писал(а):
Я видел доводы Линуса. И этим доводам я доверяю больше, нежели вашим или даже Вирта. Потому что этот человек имеет реальный опыт создания реальной ОС, в отличие от...

И в чем принципиальный прорыв по сравнению с UNIX?


Принципиально - наверное никакого. А что?

Автор:  Vlad [ Суббота, 03 Ноябрь, 2007 19:21 ]
Заголовок сообщения:  Re: Linux+BlackBox=?

Борис Рюмшин писал(а):
Vlad писал(а):
Реальных? Которые можно пойти, скачать, установить? Нет, не делал. А "специализированных" только ленивый не делал.

И Вы в том числе? :)


Нет. А вы?

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


И к чему эти попытка перевести стрелки на какое-то "сообщество"? Чтобы никто лично (тем более такой сишник как Линус) не стоял бросал тень на авторитет Вирта в написании ОС?

Автор:  Vlad [ Суббота, 03 Ноябрь, 2007 19:46 ]
Заголовок сообщения:  Re: Linux+BlackBox=?

AVC писал(а):
Vlad писал(а):
О применимости оберона в программировании линуксового ядра.

Какая-то экзотическая тема. :)


Ага. Вот и я о том же. Экзотическая :) Тем не менее, уже не первый раз затрагивается.

AVC писал(а):
Но здесь есть и другая сторона. Си не позволяет обособить низкоуровневое программирование, "запереть" его в отдельных модулях.


Хорошо. Давайте вернемся к нашему ядру и представим, что все самое низкоуровневое уже написано (на C или обероне, пока не важно). Тем не менее, код будет исполняться в ядре и на него будет накладываться определенные ограничения. GC нам по-прежнему не доступен. Даже если сделать специализированный рантайм, который будет аллоцировать память нужным образом, все равно останется потребность ее явного освобождения. Какие преимущества дает оберон без GC?

AVC писал(а):
Это только схема. IMHO, ее нетрудно усовершенствовать для поддержки произвольных объектов.


Возможно это тривиально, но я не представляю как это сделать не дублируя кода. Можно намекнуть - как? И еще, все таки хотелось бы увидеть конкретный пример (на ББ) размещения обероновского объекта в произвольном куске памяти (взятого, например, через GlobalAlloc).

Автор:  AVC [ Суббота, 03 Ноябрь, 2007 20:52 ]
Заголовок сообщения:  Re: Linux+BlackBox=?

Vlad писал(а):
AVC писал(а):
Vlad писал(а):
Я видел доводы Линуса. И этим доводам я доверяю больше, нежели вашим или даже Вирта. Потому что этот человек имеет реальный опыт создания реальной ОС, в отличие от...

И в чем принципиальный прорыв по сравнению с UNIX?


Принципиально - наверное никакого. А что?


В моем представлении это не столько создание ОС, сколько какая-то разновидность ее переноса.
(Т.е. не хватает оригинальности.)
Это, конечно, IMHO.

Автор:  Борис Рюмшин [ Воскресенье, 04 Ноябрь, 2007 00:22 ]
Заголовок сообщения:  Re: Linux+BlackBox=?

Vlad писал(а):
И к чему эти попытка перевести стрелки на какое-то "сообщество"? Чтобы никто лично (тем более такой сишник как Линус) не стоял бросал тень на авторитет Вирта в написании ОС?

При чём тут сишник Торвальдс? :)
Я вполне уважаю мнение другого сишника - Таненбаума, по отношению к первому... :)

Автор:  Борис Рюмшин [ Воскресенье, 04 Ноябрь, 2007 00:36 ]
Заголовок сообщения:  Re: Linux+BlackBox=?

Одного я не пойму: какое отношение имеет GC Оберона (КП/BlackBox) к ядру ОС?

Во-первых, Оберон не требует обязательного наличия GC, это частность.
Во-вторых, в ядре ОС вполне можно использовать GC, но не в стандартных ядрах типа юниксовых и не стандартный GC Оберона. Для этого всё оно должно быть соответствующим образом спроектировано.

И с чего вообще такое мнение, что для написания ОС будет использоваться стандартный рантайм языка? Это нонсенс, ибо ядро (микроядро с серверами и драйверами, скажем) само себе рантайм.

Вообще, если говорить об ОС (не современных существующих, а о новых), то нужно говорить не о GC, как о частном случае, а об автоматическом централизованном управлении памятью.


Да и к вопросу об Обероне для ядра Линукса: достаточно сделать фронт-энд к GCC. Это сделать можно и достаточно быстро при наличии соответствующих ресурсов и, как скажет info21, насущной для этого необходимости.

Автор:  AVC [ Воскресенье, 04 Ноябрь, 2007 00:37 ]
Заголовок сообщения:  Re: Linux+BlackBox=?

Vlad писал(а):
AVC писал(а):
Это только схема. IMHO, ее нетрудно усовершенствовать для поддержки произвольных объектов.


Возможно это тривиально, но я не представляю как это сделать не дублируя кода. Можно намекнуть - как?


Например, используя метапрограммирование. (Это пока просто идея.)
По крайней мере, так работает NEW: компилятор передает кроме переменной-указателя также дескриптор типа.

Vlad писал(а):
И еще, все таки хотелось бы увидеть конкретный пример (на ББ) размещения обероновского объекта в произвольном куске памяти (взятого, например, через GlobalAlloc).

"Да пожалуйста!" (c) :)
В ББ атрибут untagged наследуется, untagged записи не собираются сборщиком мусора.
Пишем примерно такой модуль (я опустил механизмы рационального распределения и возврата памяти, т.к. не о них сейчас речь).
Код:
MODULE Heap;

   IMPORT S := SYSTEM, Log;
   
   CONST memsize = 1024;
   
   TYPE
      REC* = EXTENSIBLE RECORD [untagged] END;
      
   VAR mem: ARRAY 1024 OF BYTE;
      allocated: INTEGER;
   
   PROCEDURE Alloc* (size: INTEGER): S.PTR;
      VAR ptr: S.PTR;
   BEGIN
      IF allocated + size > memsize THEN RETURN NIL END;
      ptr := S.VAL(S.PTR, S.ADR(mem[allocated]));
      allocated := allocated + size;
      RETURN ptr
   END Alloc;
   
   PROCEDURE PrintPtr* (p: S.PTR);
   BEGIN
      Log.IntForm(S.VAL(INTEGER, p), 16, 8, '0', FALSE);
      Log.String(" from byte array ");
      Log.IntForm(S.ADR(mem[0]), 16, 8, '0', FALSE);
      Log.Ln
   END PrintPtr;

BEGIN
   allocated := 0;
END Heap.

А затем используем его из другого модуля.
Код:
MODULE HeapTest;

   IMPORT Heap;
   
   TYPE
      Point = RECORD (Heap.REC)
         x, y: REAL;
      END;
      
      PROCEDURE Do* ; (* (!) HeapTest.Do *)
         VAR p, q: POINTER TO Point;
      BEGIN
         p := Heap.Alloc(SIZE(Point));
         q := Heap.Alloc(SIZE(Point));
         Heap.PrintPtr(p);
         Heap.PrintPtr(q);
         p.x := 0; p.y := 0;
         q.x := 0; q.y := 0;
      END Do;

END HeapTest.

Автор:  AVC [ Воскресенье, 04 Ноябрь, 2007 02:43 ]
Заголовок сообщения:  Re: Linux+BlackBox=?

Vlad писал(а):
Хорошо. Давайте вернемся к нашему ядру и представим, что все самое низкоуровневое уже написано (на C или обероне, пока не важно). Тем не менее, код будет исполняться в ядре и на него будет накладываться определенные ограничения. GC нам по-прежнему не доступен. Даже если сделать специализированный рантайм, который будет аллоцировать память нужным образом, все равно останется потребность ее явного освобождения. Какие преимущества дает оберон без GC?


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

Автор:  Илья Ермаков [ Понедельник, 05 Ноябрь, 2007 17:32 ]
Заголовок сообщения:  Re: Linux+BlackBox=?

Именно сейчас в новом рантайме занимались решением этой задачи - как безопасно управлять памятью на уровне до GC. И способы организовать явное освобождение, не нарушая безопасности (т.е. гарантируя целостность памяти даже в случае досрочного освобождения), есть.

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