Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - igor

Страницы: 1 [2] 3 4 ... 30
16
Общий раздел / Re: Раскручиваем компилятор O7
« : Ноябрь 08, 2013, 07:23:57 am »
Тогда уж можно и полное дерево построить :-)
Это будет уже перебор.
В предложенном мной варианте компилятор сгенерирует по кэйсу очень быструю таблицу переходов, и далее потребуется не более четырёх сравнений строк.
Если, например, повторить этот трюк внутри обработки случаев 'I' и 'T', то профит будет уже не столь впечатляющим, если вообще будет.

17
Общий раздел / Re: Раскручиваем компилятор O7
« : Ноябрь 08, 2013, 06:09:51 am »
А вот вариант, основанный на идее, подсмотренной в исходниках BB:
PROCEDURE IsReservedOberonWord(s: ARRAY OF CHAR): BOOLEAN;
VAR res: BOOLEAN
BEGIN
  CASE s[0] OF
  | 'A': res := s = "ARRAY";
  | 'B': res := (s = "BEGIN") OR (s = "BY");
  | 'C': res := (s = "CASE") OR (s = "CONST");
  | 'D': res := (s = "DIV") OR (s = "DO");
  | 'E': res := (s = "END") OR (s = "ELSE") OR (s = "ELSIF");
  | 'F': res := (s = "FALSE") OR (s = "FOR");
  | 'I': res := (s = "IMPORT") OR (s = "IN") OR (s = "IS") OR (s = "IF");
  | 'M': res := (s = "MOD") OR (s = "MODULE");
  | 'N': res := s = "NIL";
  | 'O': res := (s = "OF") OR (s = "OR");
  | 'P': res := (s = "POINTER") OR (s = "PROCEDURE");
  | 'R': res := (s = "RECORD") OR (s = "REPEAT") OR (s = "RETURN");
  | 'T': res := (s = "TO") OR (s = "THEN") OR (s = "TRUE") OR (s = "TYPE");
  | 'U': res := s = "UNTIL";
  | 'V': res := s = "VAR";
  | 'W': res := s = "WHILE";
  ELSE res := FALSE
  END;
  RETURN res
END IsReservedOberonWord;

18
[offtop]
Обсуждение напомнило мне одну историю о том, как Вирт, возвращаясь из Новосибирска, решил поехать до Москвы на поезде. В купе ему попался попутчик, который ни слова не знал ни по немецки, ни по английски, а Вирт не говорил по русски. Так они и ехали всю дорогу молча.
Вот жеж, блин! Как бы я хотел оказаться на месте того попутчика. И хотя я тоже не говорю по английски (а немецкий благополучно забыл), ужо  я бы нашёл способ как пообщаться. В крайнем случае, можно было бы поговорить на Паскале/Обероне.   :)  А что, чем не международный язык? Листок бумаги, ручку, - и вперёд! Уж, я бы порасспросил и про то, и про сё.  :D
[/offtop]

19
здесь случай другой (вы ему не нужны, и ничего дать не можете)
Спорный аргумент.

20
После мегобайтных экзешников helo world... Мне этот вопрос покоя не даёт. :)

Мегабайты тянутся из стандартной либы - std::cout, printf и т.д.  Исключения, dynamic_cast, new/delete - тоже часть стандартной либы и тоже требуют какого-то места в exe.

Либы - ещё ладно, куда ж без них. Но бывает кое-что и похлеще. Помню была одна статейка на Компьютерре:
Цитировать
Но однажды я заглянул внутрь EXE файла одной из моих программ и, честно говоря, ужаснулся. Сразу же после всем известной фразы <This program must be run under Win32> и названий секций находился кусок исходного кода на Паскале одного из модулей моей программы.

21
Такие вопросы, как количество переменных в одной строке списка экспорта, тоже надо рассмотреть и к какому-то соглашению прийти...

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

22
Цитировать
  TYPE
    ProcessingType * = POINTER TO RECORD END; (* dummy type *)
    CallbackType     * = PROCEDURE;
  VAR
    MouseX  * : REAL;
    MouseY  * : REAL;
    Width     * : INTEGER;
    Height    * : INTEGER;

Я голосую за этот вариант.

А если я хочу так записать:
Цитировать
  VAR
    MouseX*, MouseY* : REAL;   (* позиция курсора мыши *)
    Width*, Height* : INTEGER;  (* размеры окна *)
, то как мне отступы делать?

23
3) Не знаю, как лучше делать в таких случаях:
На мой взгляд, лучше первый вариант. Во втором варианте звёздочка выглядит как "умножить" и только сбивает с толку. Третий вариант тоже плох, потому что маркер семантически связан с идентификатором, а не с типом. Стремление представить инфу об экспорте в виде столбика понятно, - так нагляднее, - но здесь всё же лучше не перебарщивать.

24
Общий раздел / Re: [Oberon-07/11] Export non-scalar variable.
« : Сентябрь 12, 2013, 06:02:32 pm »
TYPE
  Object* = RECORD
    field*: REAL;
  END;

VAR obj-: Object;  (* не разрешённый экспорт! *)

Может, Вирту не понравилось противоречие: тип Object как бы разрешает запись в поле field, а переменная obj, в то же самое время, - запрещает. Хотя согласен, что такое объяснение выглядит несколько натянутым. Честно говоря, я тоже голову сломал :-)

25
Общий раздел / Re: [Oberon-07/11] Export non-scalar variable.
« : Сентябрь 12, 2013, 06:00:41 pm »
Вот вот. Однако начали вы с "Дело, видимо, всё же в другом."  ;)
Согласен. Не совсем удачный заход...  :-[

26
Общий раздел / Re: [Oberon-07/11] Export non-scalar variable.
« : Сентябрь 12, 2013, 04:55:36 pm »
Куфман В.Ш., "Языки программирования. Концепции и принципы", 2011, Гл.2.2.3:
Точнее, гл.2.3.3 (с. 50)

27
Общий раздел / Re: [Oberon-07/11] Export non-scalar variable.
« : Сентябрь 12, 2013, 04:51:38 pm »
Где там противоречие с вашим утверждением?
Моё утверждение не противоречит Вашему, а скорее дополняет его (или расширяет).
(Я же не утверждал, что нет никаких проблем сделать экспорт read only для переменных сложных типов.)

28
Общий раздел / Re: [Oberon-07/11] Export non-scalar variable.
« : Сентябрь 12, 2013, 04:28:22 pm »
По крайней мере на счет указателей у меня БОЛЬШИЕ сомнения.
Нашёл у Кауфмана. Правда, это не про Оберон, а вообще.
Куфман В.Ш., "Языки программирования. Концепции и принципы", 2011, Гл.2.2.3:
Цитировать
Имеются четыре категории типов: скалярные, составные, ссылочные и приватные.
... и далее по тексту разжёвано.
Так что, указатели - это и не скалярный тип, и не составной (по Кауфману).

29
Общий раздел / Re: [Oberon-07/11] Export non-scalar variable.
« : Сентябрь 12, 2013, 04:15:55 pm »
Что-то под вечер мне ребусы тяжело даются  :-)

30
Общий раздел / Re: [Oberon-07/11] Export non-scalar variable.
« : Сентябрь 12, 2013, 04:03:25 pm »
Кстати, это объясняет почему типы можно экспортировать, а переменные нет.

Страницы: 1 [2] 3 4 ... 30