Гостевая книга

Здесь вы можете оставить сообщение для владельца сайта, отзыв о функционировании, оформлении, содержании и вообще написать всё, что думаете по этому поводу. Просьба придерживаться темы ("по этому" — это ещё не "по любому") и соблюдать приличия :-)

Обратите внимание, что связаться с автором сайта можно также и через страницу обратной связи, которая позволяет отправить автору email.

Учтите, что комментарии на этом сайте премодерируются.

[Все старые комментарии перемещены в архив >>>]

Посимвольный ввод информации. Паскаль.

Очень непонятно как работает read c типом char в программе char2num.pas

Странный вопрос

Read работает точно так же, как и всегда: считывает из потока стандартного ввода (в просторечии -- с клавиатуры) значение заданного типа (того типа, переменная которого передана параметром) и считанное значение помещает в переменную. В данном случае переменная имеет тип char, поэтому считывается значение именно этого типа — то есть ровно один символ. Он же и помещается в переменную.

Мне довольно сложно понять, что конкретно вам оказалось непонятно. Могу посоветовать взять вот такую программу:

program CharInput;
var
    c: char;
begin
    while not eof do
    begin
        read(c);
        if c = #10 then
            writeln
        else
            write('[', c, ']')
    end
end.

и посмотреть, как она будет работать, ну там погонять её и так и эдак. Возможно, это вам поможет. Если нет — попробуйте всё-таки сформулировать, в чём состоит проблема.

Исполнение кода, сформированного динамически

В первом томе на страницах 190-191 утверждается, что невозможно сформировать машинный код в памяти, а затем его выполнить. Кроме того, это утверждается в этом комментарии. Насколько я понимаю, это не совсем верно, поскольку именно так работает Just-In-Time компиляция. Конечно, если защиту от исполнения данных таки включить, то JIT работать не будет, но, насколько я понимаю, на практике её включают разве что на серверах, где требуется усиленная безопасность. Во всяком случае, по умолчанию это вроде как выключено.

Про сервера и

Про сервера и усиленную безопасность -- это вы путаете с исполнением в стеке. Что касается исполнения в секции данных, то оно запрещено ВСЕГДА, в любой мультизадачной системе, и, кстати, точно так же, как модификация секции кода.

Чтобы сделать возможным JIT, нужно затребовать у системы новую секцию памяти с соответствующими флагами (одновременно доступную на чтение, запись и исполнение). В *nix-системах это делается с помощью системного вызова mmap. И да, это возможно сделать, в книге утверждение слишком категоричное. Во втором издании поправлю.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <ins> <del> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <pre>
  • Строки и параграфы переносятся автоматически.

Подробнее о форматировании

CAPTCHA
Проверка на бота
Image CAPTCHA
Copy the characters (respecting upper/lower case) from the image.