OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 26 Апрель, 2024 08:19

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




Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу Пред.  1, 2
Автор Сообщение
СообщениеДобавлено: Воскресенье, 12 Сентябрь, 2010 18:14 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
Скажу все-таки про KOL, пожалуй...

Не портируете Вы его никогда. Можно сделать нечто с похожим интерфейсом, типа сымитировать... Но это уж точно дикость - сам KOL в какой-то степени имитирует VCL. Более точно (не по буковкам, а по смыслу), словами Кладова: "я вовсе не пытаюсь изобрести новые рюшечки для визуальной библиотеки, но излагаю то, как бы я писал VCL". И Дельфи был выбран не из-за каких-то там привычек (Кладов - это не того уровня разработчик, привязанный намертво к неким буковкам). А из-за конкретных характеристик компилятора, позволяющих реализовать конкретные идеи. И такими характеристиками Oberon не обладает.

А не портируете по двум причинам: smart-linking, и активное использование procedure of object
И "мудрит" вовсе не компилятор, а просто линкер. Smart - это просто красивая упаковка для очень простой конфетки: результаты единицы компиляции (модуль) может быть использованы и частями, а не только целиком.

В общем, KOL - это не просто визуальная библиотечка, как и ве остальные, с навороченной иерархией классов, взаимозависимостью модулей, и т.п..
Но определенная концепция проектирования, исключающая вышеупомянутое. И такую концепцию можно реализовать в Дельфи (хоть и с напрягом), но не в других компиляторах. В т.ч. и в Oberon-е, к сожалению.

btw: Обратите внимание: в природе нет порта даже для Бормановского С++. К этому есть объективные причины, а не только ленивость разработчиков.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Сентябрь, 2010 15:26 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 521
Откуда: Украина, Днепропетровская обл.
Galkov писал(а):
Не портируете Вы его никогда.

Я всё-таки попробую, не возражаете? :)
Цитата:
А из-за конкретных характеристик компилятора, позволяющих реализовать конкретные идеи. И такими характеристиками Oberon не обладает.

Мы уже он в соседней ветке договорились до того, что XDS-Оберон умеет делать смартлинк. КП в реализации BlackBox пока не умеет (БлэкБоксовцам и самим Oberon microsystems эта возможность не нужна), однако почему бы не реализовать такую возможность: наряду с DevLink ещё и DevSmartLink.

Цитата:
А не портируете по двум причинам: smart-linking, и активное использование procedure of object

И это решаемо. И даже очень элегантно.

Заметьте, я никогда не говорил, что KOL можно переписать на Обероне один-в-один как оно реализовано на Дельфи. Наоборот, в документации к KolBB я утверждаю, что при портировании архитектуру KOL придётся пересмотреть в связи с особенностями Оберон-языков. Просто базис очень хороший.

Цитата:
И такую концепцию можно реализовать в Дельфи (хоть и с напрягом), но не в других компиляторах. В т.ч. и в Oberon-е, к сожалению.

Та ладно?

Цитата:
btw: Обратите внимание: в природе нет порта даже для Бормановского С++. К этому есть объективные причины, а не только ленивость разработчиков.

Этому есть хорошее объяснение. Во-первых, Борланд Си не имеет возможности отбросить лишний код, во-вторых, Кладов использует Дельфи, и Си ему не нужен, и в-третьих, есть возможность использовать KOL под Borland C++ Builder, просто в силу того, что онный Builder понимает и Паскаль.

P.S. Кстати, с появлением порта KOL под XDS-Оберон появится вкусная возможность обработать KOL XDS-C и собрать любым компилятором Си для Windows.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 13 Сентябрь, 2010 20:22 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 516
Откуда: Бердск
Oleg N. Cher писал(а):
Мы уже он в соседней ветке договорились до того, что XDS-Оберон умеет делать смартлинк
Договорились - далеко не всегда означает, что умеет. Буду благадарен за конкретную ссылку, чтобы можно было проверить. У меня пока минимальный импорт какого-нибудь "Input" прилепляет ~100К... Совсем не KOL-овские размеры.

Oleg N. Cher писал(а):
однако почему бы не реализовать такую возможность: наряду с DevLink ещё и DevSmartLink.
Дык покажите...
Однако есть у меня смутные сомнения, что дело только в линкере. Ибо, чтобы смартануть - надо иметь исходную информацию, на какие части можно кромсать, а на какие нельзя. И если эту информацию компилятор в объектном коде не предоставил, то будет Вам "болт с гайкию", а не smart-linking

Про "однако почему бы не реализовать" - так я обеими руками ЗА.
Вы могли бы обратить внимание, что я сам про procedure of object говорил то же самое. Да и системы линкинга мне встречались (скажем, у IAR для embeded) более "смартаней", чем в Дельфи - отпала бы потеря эффективности на "отложеных конструкторах".
Но тут такая фигня: про KOL я разбираюсь значительно лучше, чем в ББ
Ну и открытым вопрос остается: то, чего предположительно получится, это будет еще Oberon, или уже нечто более продвинутое ???

Oleg N. Cher писал(а):
И это решаемо. И даже очень элегантно
Элегантность - в студию

Oleg N. Cher писал(а):
Просто базис очень хороший.
Знаю, что хороший.
Коллектива разработчиков, улучшающих базис - не вижу пока. В смысле, задавать вопрос "однако почему бы не реализовать" - просто некому.
А KOL как раз и построен на самых низкоуровневых средствах компилятора: встроенная система классов с их ref-counting-ом и (главное!!!) таблицами vmt - изгнана поганой метлой.

Oleg N. Cher писал(а):
Та ладно?
Не та ладно, а нарушение концепции - это уже совсем не KOL.
А творчество "рационализатора", про которых и сказано: "встретил рационализатора - убей его"
А про концепцию KOL мне известно довольно много... Не, ну как минимум - Вы можете обнаружить мой логин в исходнике.

Oleg N. Cher писал(а):
Во-первых, Борланд Си не имеет возможности отбросить лишний код
Не подскажите, а кто еще имеет, кроме Дельфи ??? (fpc - не называть)

Oleg N. Cher писал(а):
во-вторых, Кладов использует Дельфи, и Си ему не нужен
Все наоборот - именно потому он и использует Дельфи. Кладов давно вырос из детских штанишек ограниченности языковым барьером. Тем более, что в Универе у математиков в основном плюшники сидят.
Кажется... Тут возможна погрешность на разнице возрастов....

Oleg N. Cher писал(а):
в-третьих, есть возможность использовать KOL под Borland C++ Builder, просто в силу того, что онный Builder понимает и Паскаль
А Вы пробовали ??? Глядя на размеры результата, естественно.
Целиком пристегнутый KOL - это просто плохой VCL. И на хрена же такая возможность, если есть хороший VCL, да еще и на "нужном" языке ???


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 14 Сентябрь, 2010 16:37 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 521
Откуда: Украина, Днепропетровская обл.
Galkov писал(а):
Договорились - далеко не всегда означает, что умеет. Буду благадарен за конкретную ссылку, чтобы можно было проверить. У меня пока минимальный импорт какого-нибудь "Input" прилепляет ~100К... Совсем не KOL-овские размеры.

Вы правы. Это мне тоже при первом знакомстве в XDS не понравилось. Однако, полагаю, что в этих 100 Кб помещается сборка мусора и поддержка Модуловской многозадачности и обработки исключений (поскольку XDS - двухъязычная система). И с этим придётся мириться. Я пользовал XDS мало, поэтому вопрос можно ли уменьшить размер EXE сильнее установкой опций компилятора остаётся открытым.
Гораздо хуже для наших целей то, что в XDS не реализована поддержка юникодовских строк. Поэтому надо их эмулировать и вместо IF str1 = str2 ... писать что-то вроде IF StrCmp(str1, str2) ... Что выглядит тяжеловеснее. Впрочем, всё равно: лучшего компилятора, чем XDS, на сегодня просто нет.

Цитата:
Однако есть у меня смутные сомнения, что дело только в линкере. Ибо, чтобы смартануть - надо иметь исходную информацию, на какие части можно кромсать, а на какие нельзя. И если эту информацию компилятор в объектном коде не предоставил, то будет Вам "болт с гайкию", а не smart-linking

У меня есть хорошая идея на этот счёт, для этого позже заведу отдельную тему. Вчера я, однако, собрал первый тестовый пример на KolBB, работающий с Ini-файлом. Линкер ББ дал независимый от системы целевой EXE-шник размером 56,5 Кб (после упаковки UPX-ом = 25,5 Кб). С учётом того, что туда запихнуто ядро со сборкой мусора и поддержкой динамической модульности с разбором формата .OCF, который легковеснее DLL, выглядит неплохо. Это без смартлинкования.

Цитата:
Элегантность - в студию

Код:
{$IFDEF FPC}{$MODE DELPHI}{$SMARTLINK ON}{$ENDIF}
UNIT EcoParser; (* portable *)
(* Copyright (C) 1995-2007, Oleg N. Cher *)
(* Vedanta software *)
INTERFACE
TYPE
  COMPARER  = FUNCTION: BOOLEAN OF OBJECT;
  METHOD  = PROCEDURE OF OBJECT;

  ...
 
MODULE EcoParser; (* portable *)
(* Copyright (C) 1997-2008, Oleg N. Cher *)

TYPE
    Parser* = POINTER TO EXTENSIBLE RECORD
    (*...*)
    END;

    COMPARER* = PROCEDURE (prs: Parser): BOOLEAN;
    METHOD* = PROCEDURE (prs: Parser);


Код:
PROCEDURE Context.AddContextByPtr(
  CONST ctx : CtxPtr;  CONST cmp: COMPARER;
  CONST name: SString; CONST notfound: METHOD);
TYPE
  TMethod = PACKED RECORD Code, Data: POINTER END;
VAR
  TProc: TMethod;
  newCtx: CtxPtr;
BEGIN
  NEW(newCtx);
  IF ctx <> NIL THEN BEGIN { Add a node context }
    newCtx.nextNode := ctx.chldNode;
    ctx.chldNode := NodePtr(newCtx)
  END ELSE { Add a root context }
    newCtx.nextNode := NIL;
  TProc.Code := @Parser.CTXT; { Attribute of a context }
  TProc.Data := TMethod(notfound).Data;
  newCtx.Comparer   := cmp;
  newCtx.nameLen  := LENGTH(name); { Add length }
  newCtx.name     := name;         {  and name of the context }
  newCtx.Method   := METHOD(TProc);
  newCtx.chldNode := NIL;          { Pointer to child node }
  newCtx.NotFound := notfound;     { Method 'Context not found' }
  IF this = NIL THEN root := newCtx;
  this := newCtx
END {AddContextByPtr};

  ...

PROCEDURE (VAR Ctx: CONTEXT) AddContextByPtr* (
      cmp: COMPARER; name: STRING; notfound: METHOD), NEW;
VAR
   newCtx: CtxPtr;
BEGIN
   NEW(newCtx);
   IF Ctx.addTo # NIL THEN (* Add a node context *)
      newCtx.nextNode := Ctx.addTo.chldNode;
      Ctx.addTo.chldNode := newCtx
   ELSE (* Add a root context *)
      newCtx.nextNode := NIL
   END;
   newCtx.Comparer := cmp;
   newCtx.nameLen  := Length(name); (* Add length                 *)
   NEW(newCtx.name, LEN(name));
   newCtx.name^    := name$;        (*  and name of the context   *)
   newCtx.Method   := CTXT;
   newCtx.chldNode := NIL;          (* Pointer to child node      *)
   newCtx.NotFound := notfound;     (* Method 'Context not found' *)
   IF Ctx.this = NIL THEN
      Ctx.root := newCtx
   END;
   Ctx.this := newCtx
END AddContextByPtr;

Вот ещё обсуждение: http://forum.oberoncore.ru/viewtopic.php?f=29&t=2125&start=0.
Цитата:
Не подскажите, а кто еще имеет, кроме Дельфи ??? (fpc - не называть)

Много кто, например, JPI Modula-2 и Microsoft Visual C ;)

Цитата:
Целиком пристегнутый KOL - это просто плохой VCL. И на хрена же такая возможность, если есть хороший VCL, да еще и на "нужном" языке ???

"Нужные" языки - это Оберон-2 и КП. Си++ пора забыть как страшный сон. Про достоинства же KOL vs VCL, помимо маленьких EXE, Вы, как разработчик, знаете. Мне абстракции и функциональность KOL больше нравятся.


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

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


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

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


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

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