User Tag List

Показано с 1 по 10 из 48

Тема: Паскаль о котором не знали...

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    26.02.2011
    Адрес
    Москва
    Сообщений
    258
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    25
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вообще говоря, чем дальше я забираюсь в Паскаль, тем мне больше нравится Никлаус Вирт.
    Не зря он Нобелевский лауреат и автор Модулы2 и Ады, кроме Паскаля, разумеется.

    Просто, прежде чем писать языки он последовательно трудился над философией языка.
    ДА! Можно в какой-то степени говорить и о философии Си, но так вышло, что Ритчи и Керниган, всё же не Вирт и не швейцарцы.

    Значит так, в саге о двусвязных списках я упустил важнейшую и единую для Паскаля вещь.
    Попытаюсь сейчас исправить ситуацию...

    Прежде всего мы со списками работаем только На Куче.
    Однако, работа с ЛЮБОЙ динамической переменной ЕДИНООБРАЗНА для всего Паскаля!!!

    1. Создаём ТИП УКАЗАТЕЛЯ, чтобы ссылаться не ещё неописанный объект.
    2. Описываем ТИП объекта любой сложности, на имя которого и ссылается указатель.
    3. Создаём данный объект на куче, выделяя для него память и инициализируя компоненты
    4. ЗАТО обращаемся к объекту С ПОМОШЬЮ ПЕРЕМЕННОЙ, создаваемой в статической области программы и имеющей наш описанный ранее указательный тип.
    5. Кроме этого мы всегда должны адресоваться к ТИПУ. Системный тип pointer не даст нам никакого доступа к зфпрашиваемому объекту.
    Только к начальному адресу.

    Давайте пройдёмся вдоль алгоритма:

    Код:
    const
      maxC = 40; maxR = 24;
    
    type
      SAVMSC = ^scrT;
      scrT = array[1..maxR] of array[1..maxC] of byte;
    
    var
      scr: SAVMSC absolute $58;
    То есть, получается некое разделение труда.
    - Сам указатель нетипизирован никак, лишь обозначен как указатель.
    - Типизация объекта добавляет указателю тип этого объекта
    - Создав переменную такого же типа мы из Паскаля с полным правом работаем с этой переменной как с типизированным объектом.

    Из-за строгой типизации данных в Паскале совсем не тривиально создать такой объект, как байтовый буфер.

    Сделаем это на Куче, и сделаем это с массивом байт.

    Однако придётся вспомнить, что массив байт в Паскале всегда должен иметь РАЗМЕРНОСТЬ, как же быть, если массив наш динамический и размерности его мы не знаем?

    Тогда вдумайтесь о чём я пытался сказать ранее: Мы создаём void указатель и типизируем его типом наших данных. ПРИ ЭТОМ ОБЪЕКТ НА КУЧЕ НЕ СОЗДАН! Просто компилятору уже известны НЕКОТОРЫЕ его атрибуты.

    Переменная для доступа к объекту уже будет иметь эти атрибуты, а также те, которые мы дополнительно придадим при создании объекта.

    Код:
    const
    (* Пусть это от балды будет размером нашего буфера *)
    (* Или Width*Heigth без разницы это определяется динамически в рантайме*)
      bytes = 960;
    type
      arrP = ^arrT; (* Тип Указателя на массив *)
    (* Тип Статического массива из одного байта *)
      arrT = array[1..1] of byte;
    var
    (* Переменная, пригодная для работы с одноразмерными массивами *)
    (* Размерность здесь существенна, а размер в байтах нет, так как массив на Куче НЕ СОЗДАН. *)
      A: arrP;
    begin
    (* Создаём на Куче массив байтов нужного размера *)
      getmem(A, sizeof(byte)*bytes);
      ... (* Работаем с ним *)
    (* Освобождаем память *)
      freemem(A, sizeof(byte)*bytes;
    end.
    zen
    Последний раз редактировалось ezswift; 15.07.2018 в 13:54.
    MAC и PC - это всего лишь периферия для Атари...
    130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,681
    Спасибо Благодарностей отдано 
    2,716
    Спасибо Благодарностей получено 
    170
    Поблагодарили
    130 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ezswift Посмотреть сообщение
    Вообще говоря, чем дальше я забираюсь в Паскаль, тем мне больше нравится Никлаус Вирт.
    Не зря он Нобелевский лауреат и автор Модулы2 и Ады, кроме Паскаля, разумеется.
    Ещё и автор языка Оберон, который породил Оберон-2 и Компонентный Паскаль, а потом Оберон-07. Тоже очень интересные языки, я сейчас с ними плотно работаю. А Модула-2 породила Модулу-3 и Modula-2 R10, а также Objective Modula-2.

    Поправлю: Вирт лауреат премии Тьюринга, а не Нобелевской, что не уменьшает его заслуг. Также он не участвовал в разработке Ады (это язык, разработанный Жаном Ишбиа и большим комитетом, но без Вирта). В основу разработки Оберона лёг девиз Эйнштейна: «Делай просто, насколько возможно, но не проще этого». Ишбиа же сказал: «Вирт верит в простые решения сложных проблем. Я не верю в такие чудеса. Сложные проблемы требуют сложных решений».

  4. #3

    Регистрация
    26.02.2011
    Адрес
    Москва
    Сообщений
    258
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    25
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Олег,
    Я, просто, столкнулся по настоящему с ТЕОРЕТИКАМИ языков программирования начиная с языка Лиспа.

    МакКарти занимался ЧИСТО теоретическими проблемами и даже ПРЕДСТАВИТЬ не мог, что он на острие Оккама. Это его френд запрограммировал ЛИСП (На чём - не важно. Может на Ассемблере, может просто в машкодах)
    Цитата из Оккама - "Не плоди сущности сверх необходимости". (Получше, Айнстайна, правда?)

    Я почувствовал, что теория Языков важна!, но не понимал смысла...
    ...

    И теперь я вижу, что Вы отметили существенные вещи:

    - PL65 не попрёт из-за эклектичности. Нужно быть ЯВУ! Слишком низкоуровневый. Библиотеки не спасут.
    - Си не догонит никогда даже ACTION! По скорости, по очевидности, для тех кто знает Атари.
    - LISP не использует возможности машин, сделанных после него.

    Ну, в общем, нам мало остаётся. Паскаль. Он УЧИТ учить, но САМ ЯЗЫК СЛОЖНО учить!

    Так как он ОРГАНИЗОВАН Правильно для ВСЕХ машин, а не Си (Я, кстати, Си люлю!)
    Си правильно ВЗАИМОДЕЙСТВУЕТ со всеми машинами. И шо це нам дало?

    Всё взаимодействие идёт по законам Си.

    Но, здесь о Паскале. Тем более, не об уродливом. (А их в Атарьском мире таких, даже, много!)

    Я даже рад, кстати, что Вирт лауреат Тьюринговой премии. Оба думали об одном и том же...
    Как организовать нам машину!

    Сделали же... А УРОД Нобель, промёрзши во льдах, убил даже понятие ПРЕМИЯ!
    Теперь Нобелевка - это проституирование на ... далее по списку.
    zen
    MAC и PC - это всего лишь периферия для Атари...
    130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|

  5. #4

    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,456
    Записей в дневнике
    42
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    173
    Поблагодарили
    121 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ezswift Посмотреть сообщение
    Си не догонит никогда даже ACTION! По скорости, по очевидности, для тех кто знает Атари.
    ACTION! по простоте гораздо удобнее. Хотя, его линковка оставляет желать лучшего.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Компилятор языка Паскаль - планы на будущее
    от Bolt в разделе Программирование
    Ответов: 212
    Последнее: 13.10.2019, 17:12

Ваши права

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