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

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


Сообщения - igor

Страницы: 1 ... 3 4 [5] 6 7 ... 30
61
Общий раздел / Re: Юмор
« : Июль 16, 2013, 03:32:10 pm »
Цитировать
И да, самое главное — новому ядру Линусом было присвоено кодовое имя «Linux for Workgroups», по аналогии с Windows 3.11 for Workgroups.
Это он зря провёл такую аналогию. Теперь получается, что Linux отстаёт в своём развитии от Венды лет так на ...дцать.  :)

62
Ну ведь двигали же науку и технологии зеки, так почему бы солдатам не двигать?
Вы про так называемые Шарашки? Так там же работали настоящие учёные, инженеры, конструкторы (Туполев, например)... Элита. А зеками их сделали искуственно.

63
Шойгу недавно ведь назначили на этот пост, и ему нужно как-то проявить себя. Вот он и.. Эдакая PR-акция конкретно Шойгу, чтобы его запомнили.
Если это действительно так, то цели изначально ложные.
От того, что всадник начнёт энергичнее подпрыгивать в седле, лошадь быстрее не поскачет.

64
Под многопроходностью я понимаю несколько проходов по одному и тому же представлению программы. Проходы по другому представлению программы - это следующий этап обработки. Front-end и back-end обычно разделены в коде. Это же не означает, что компилятор стал двухпроходным? Или означает? Вопрос терминологии.
Угу, означает. Это и есть классический многопроходный компилятор. С созданием промежуточного представления и так далее.
Вот, и Geniepro то же самое говорит. Хорошо, буду знать (не зря всё-таки я этот разговор затеял).
Кстати, Свердлов в своей книге упоминает о 16-проходном компиляторе (один из ранних). Неужели там использовалось 16 различных представлений одной и той же программы?  :)  Хотя, нет конечно. Вот там действительно по каждому из представлений делалось по несколько проходов. Памяти не хватало даже на то, чтобы хранить код самого компилятора, загружался и выполнялся по частям.

65
Вот у меня процедура Foo, которая использует другую процедуру которая определена где-то далеко внизу. Вопрос - как за один проход такое компилировать?
Никак. Просто потому, что в общем случае нельзя "угадать" сигнатуру - оберон допускает неявные преобразования типов аргументов. Например f('A') может быть как вызовом "PROCEDURE f(c: CHAR)" так и "PROCEDURE(s: ARRAY OF CHAR)".

В моём компиляторе переднего плана часть необходимых проверок производится отложенно, после того, как в исходном тексте встретится объявление неизвестного идентификатора. Конечно, при таком подходе генерировать машинный код на лету было бы проблематично, но такой задачи я себе и не ставил.

66
Под многопроходностью я понимаю несколько проходов по одному и тому же представлению программы. Проходы по другому представлению программы - это следующий этап обработки. Front-end и back-end обычно разделены в коде. Это же не означает, что компилятор стал двухпроходным? Или означает? Вопрос терминологии.

67
Утверждение, что в этом случае "компилятор железно перестаёт быть однопроходным" не верно.
Для сомневающихся хочу дать некоторые пояснения. Я использовал специальную структуру данных, которую назвал "буфер отложенных объявлений". Основная идея в упрощенном виде выглядит так. Парсер делает один проход по исходному тексту. Если парсер в операторной последовательности встречает неизвестный идентификатор, то он панику не разводит, а помещает этот идентификатор в буфер отложенных объявлений. Затем, если далее по тексту встречается объявление этого идентификатора, то парсер переносит его из буфера в таблицу имён. К тому моменту, когда будет достигнут конец модуля, буфер должен быть пуст, иначе ошибка. На самом деле всё несколько сложнее из-за вложенности областей видимости, но в моём случае (обероноподобный язык, но не Оберон) задача алгоритмически вполне решабельна (проверено на практике).

68
Ну, на самом деле, если ослабить вот это требование: "The scope extends textually from the point of the declaration to the end of the block (procedure or module) to which the declaration belongs and hence to which the object is local." до "whole block (procedure or module)", то получится язык поприятнее для кодописателя (и чуть менее приятный для компилятороклепателя, хотя и тут выигрыш таки в итоге будет, ибо компилятор железно перестает быть однопроходным).
Утверждение, что в этом случае "компилятор железно перестаёт быть однопроходным" не верно.

69
Общий раздел / Re: Sublime Text 2
« : Июль 01, 2013, 07:10:05 am »
Действительно программистский редактор должен понимать код, который пишет программист, что бы уметь помогать программисту работать с этим кодом.
Мощно сказано. Спасибо, посмеялсо. Вы хоть бы брали в кавычки слово "понимать".  :)

70
Общий раздел / Re: Sublime Text 2
« : Июль 01, 2013, 07:04:59 am »
Короче, редактор сделан красноглазиками для красноглазиков, и за него ещё и деньги смеют требовать... Жесть...
Угу. Потому и покупают. Редактор для программистов.
Да нет. Просто этот редактор сделан, видимо, в соответствии с философией UNIX: всё настраивается из консоли при помощи команд и скриптов.

71
Общий раздел / Re: Online компилятор Oberon-07/11.
« : Июнь 19, 2013, 02:10:16 pm »
(кроме того, название Oberon-07/11 по факту придумано сообществом, сам Вирт его называет просто Oberon - просто это самая свежая ревизия яп. оберона - полная, не урезанная версия)

Самая свежая, пожалуй, Oberon-12 (по моим данным от 01.07.2012).

72
Общий раздел / Re: Online компилятор Oberon-07/11.
« : Июнь 19, 2013, 08:14:45 am »
То есть эдакая мина, вроде область передвижения свободная, но где то может рвануть.

А не лучше ли использовать namespace, который автоматом даётся в модуле.

Пример
В самом модуле Math
CONST
  Pi = 3.14+100500
IMPORT Math;

A := Math.Pi;
Я правильно Вас понял (?), что Вы предпочли бы писать так:
VAR a: Types.INTEGER;

Непонятно, Вы против предопределённых идентификаторов вообще, или Вам не понравился мой пример с идентификатором Pi?
Полезность предопределённых идентификаторов у меня не вызывает сомнения. Но FALSE, TRUE, INTEGER и пр. должны быть ключевыми словами (ИМХО).

73
Общий раздел / Re: Online компилятор Oberon-07/11.
« : Июнь 18, 2013, 07:28:32 pm »
Хорошо. Давайте зайдем с другой стороны. Какой практический смысл в перекрытии предопределенных идентификаторов (помимо конфуза читающего потом этот код)?
Допустим, в языке введён предопределённый идентификатор Pi, который означает константу "число пи". А некий программист Вася вообще не знаком с тригонометрией  :), но ему позарез нужен этот идентификатор для чего-то своего. Он пишет своё объявление Pi, которое автоматически перекрывает предопределённое, и никаких проблем не возникает (по крайней мере до тех пор, пока ему не понадобится число пи).

Что касается идентификатора INTEGER, то я бы его сделал ключевым словом. Возможно, Н.Вирт не хотел портить численные характеристики своего языка (раздувать список ключевых слов)  :)

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

74
Общий раздел / Re: Online компилятор Oberon-07/11.
« : Июнь 18, 2013, 07:06:33 pm »
кроме того , оберон 07 не имеет блочной структуры
Забавно...  :)
Наверно стОит пояснить, что именно забавно. Как так, блоки есть, правила видимости есть, а язык фдрук "не имеет блочной структуры"?

75
Общий раздел / Re: Online компилятор Oberon-07/11.
« : Июнь 18, 2013, 07:00:19 pm »
Предопределённые идентификаторы можно представлять себе как идентификаторы, объявленные в неком гипотетическом протомодуле, в который вложены все остальные модули.

Объясняю. Когда я реализовывал предопределенные идентификаторы я их "представил" как включенные в каждую новую область видиморсти (scope). Еще можно себе представить, что каждый scope наследуется от базового scope, в котором есть эти идентификаторы. А перекрываться могут только идентификаторы из родительского scope (впрочем даже этого у Вирта не описано, хе-хе). Почему мое "представление" противоречит определению и какому?
При компиляции модуля в процессе инициализации создаётся новая область видимости, затем туда добавляются все предопределённые идентификаторы, и потом уже выполняется всё остальное. То есть предопределённые идентификаторы обычно включают не в "каждую новую область видимости", а в область видимости каждого модуля. Это не одно и то же, потому что свои scope есть и у процедур и функций (у блоков). Так как все блоки могут находиться только в модулях, то получается, что предопределённые идентификаторы видны отовсюду, и, следовательно, могут быть перекрыты в любом блоке.

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