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

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


Сообщения - kkkk

Страницы: 1 ... 7 8 [9]
121
Общий раздел / Re: Делаем строку на O7
« : Ноябрь 08, 2013, 08:56:31 am »
Цитировать
Убирание лишь одной разновидности NEW никак не избавляет от кучи. И не упрощает работу менеджера памяти.
Не могу судить однозначно, зависит от реализации, но по-моему упрощает, ибо все динамически выделенные штуки имеют постоянный размер, их можно проще складировать/замещать друг другом.

122
Общий раздел / Re: Делаем строку на O7
« : Ноябрь 08, 2013, 08:18:18 am »
Ну я и пошел от конкретного контекста - что в компиляторе уже сейчас можно переписать на O7. И сразу уперся в строки, потому что они везде :)
Для компилятора, особенно Оберона, не нужны строки с произвольным доступом. Да и учитывая контекст задачи, её можно реализовать с такими накладными расходами по памяти, которые  недостижимы при использовании отдельных динамических строк. Просто не нужно пытаться делать обобщённое решение, в данном случае Оберон 07 к этому не располагает.

123
Общий раздел / Re: Делаем строку на O7
« : Ноябрь 08, 2013, 08:09:47 am »
Стоп. А как отсутствие массивов с размером неизвестным на этапе компиляции облегчает влезабельность в микроконтроллер?
Если почитать всякие рекомендации по написанию программ для встраиваемых устройств, например, промышленный стандарт MISRA C, то там Вы можете обнаружить (обязательное/рекомендационное) требование - не использовать динамическое выделение памяти, а значит прощай и динамические массивы. Оберон не настолько суров, но очевидно сделал шаг в этом направлении.

124
Общий раздел / Re: [Oberon rev 2013] operator =,<,>,<=,>=
« : Ноябрь 08, 2013, 07:53:09 am »
скажем вот у нас два этих char array'я, оба разной длины, но в них содержится до терминирующего нуля одни и те же буковки - что должно выдать сравнение?).
С учётом того, что строки заканчиваются именно нулём - минимальным значением, ответ вполне закономерен и однозначен

125
Общий раздел / Re: [Oberon rev 2013] CASE
« : Ноябрь 08, 2013, 07:44:56 am »
То были просто размышления. И если для многоветочного он ещё и может иметь смысл, то для одноветочного - это точно перебор, а разное поведение для одной и той же конструкции, в зависимости от конфигурации ясности программе не даст.

126
Понял. Наверно единого приемлемого решения здесь нет, в каких-то случаях - две функции, в каких-то - внешняя переменная (все равно с параллельностью Оберон не дружит), в каких-то - таки обязательное возвращаемое значение.

127
Общий раздел / Re: Раскручиваем компилятор O7
« : Ноябрь 07, 2013, 09:54:25 pm »
    RETURN s = "ARRAY" OR s = "IMPORT" OR s = "THEN" OR s = "BEGIN" OR s = "IN" OR s = "TO" OR s = "BY"

Гы! И здесь тоже скобочки нужны! :)
Проглядел, хотя так:
    RETURN (s = "ARRAY") OR (s = "IMPORT") OR (s = "THEN") OR (s = "BEGIN") OR (s = "IN") OR (s = "TO") OR (s = "BY")
по-моему, читаемость только выше

128
Также можно считать, что биндинги относятся к расширизмами (а как иначе они включены в язык?), и для них действуют несколько иные правила

129
Если для импорта чужеродных функций, то действительно неважно зачем это было сделано Виртом.
Как насчет SYSTEM.EVAL() ?

130
Общий раздел / Re: Раскручиваем компилятор O7
« : Ноябрь 07, 2013, 08:52:50 pm »
PROCEDURE IsReservedOberonWord(s: ARRAY OF CHAR): BOOLEAN;
BEGIN
    RETURN s = "ARRAY" OR s = "IMPORT" OR s = "THEN" OR s = "BEGIN" OR s = "IN" OR s = "TO" OR s = "BY" OR
                s = "IS" OR s = "TRUE" OR s = "CASE" OR s = "MOD" OR s = "TYPE" OR s = "CONST" OR s = "MODULE" OR
                s = "UNTIL" OR s = "DIV" OR s = "NIL" OR s = "VAR" OR s = "DO" OR s = "OF" OR s = "WHILE" OR s = "ELSE" OR
                s = "OR" OR s = "ELSIF" OR s = "POINTER" OR s = "END" OR s = "PROCEDURE" OR s = "FALSE" OR
                s = "RECORD" OR s = "FOR" OR s = "REPEAT" OR s = "IF" OR s = "RETURN"
END IsReservedOberonWord;
Проще некуда. "Таблица" зарезервированных слов немного разбавлена кодом, но в в целом простота составления приблизительно на том же уровне. Не тестировал.

131
Общий раздел / Re: [Oberon rev 2013] CASE
« : Ноябрь 07, 2013, 08:33:41 pm »
Не на пустом месте да, но невнимательность при редактировании это не отменяет. У меня в документации коллеги такие же дыры находят, хотя я ее сам по горячим следам дописываю.

Цитировать
А что делать если ELSE нет, также не сказано. Может трап должен быть, а может и нет.
Если с такой позиции смотреть, то да - и в CASE не должно происходить останова. Поскольку в IF его точно не должно быть. Хотя кто знает :)

132
Для начала надо бы выяснить, для чего это сделано. Есть идеи?

133
Общий раздел / Re: [Oberon rev 2013] CASE
« : Ноябрь 07, 2013, 08:03:52 pm »
Ничего удивительного, что эта недосказанность существует давно. При редактировании "Алгоритмов и структур данных" для Модулы-2 у него были похожие проблемы, о чем можно прочитать в предисловии переводчика.

Возможно я чего-то недопонимаю, но в отчете сказано, что должен быть выполнен список операторов, помеченный меткой, содержащей значение выражения. Что делать, если нужной метки нет, ничего не сказано, что для меня означает неопределенное поведение. При чем буквально - это поведение нигде не определено, значит и полагаться на него нельзя.

134
Общий раздел / Re: Раскручиваем компилятор O7
« : Ноябрь 07, 2013, 07:50:00 pm »
Решение мне не понятно. Мало узнать, является слово ключевым или нет, нужно знать какое это ключевое слово. Повторно сравнивать строки в дальнейшем будет излишеством. А если так, то таблица вместе с линейным поиском по ней, немногим лучше таблицы, встроенной в развернутый линейный поиск, которые легко реализуется на Обероне.
А вообще-то тут должна быть расстановочная таблица (хэш-массив)

135
Общий раздел / Re: [Oberon rev 2013] CASE
« : Ноябрь 07, 2013, 07:38:51 pm »
В отчете о языке не сказано об обработке ситуации, когда значение выражения не соответствует ни одной из меток, следовательно поведение в таком случае не определено в прямом смысле этого слова, и там вполне может быть и аварийный останов. Другое дело, что это осложняет обработку случаев, когда другие варианты возможны. Также в отчете не сказано о том, что метки не могут пересекаться. Возможно, Никлаус Вирт действительно невнимательно отредактировал отчет, такое с ним случалось и прежде.

Страницы: 1 ... 7 8 [9]