User Tag List

Страница 17 из 32 ПерваяПервая ... 131415161718192021 ... ПоследняяПоследняя
Показано с 161 по 170 из 320

Тема: Библиотеки-модули-программы...

  1. #161

    Регистрация
    04.09.2006
    Адрес
    Краснодар
    Сообщений
    58
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от elf/2
    а про ООП в этом треде надо завязывать, imho. пока нет языка с явной поддержкой по крайней мере...
    1. статическая линковка из объектников (Витамин предложил): как это сделать на спекки оптимально
    Аналогично предлагаю завязывать и с этим, пока нет компилятора с явной поддержкой этого. Ни один более-менее адекватный кодер на ZX не свяжется с этой линковкой при отсутствии её поддержки в ассемблере и загрузчике. Если уж библиотека настолько незаменимая, я бы скорее потратила время на обкусывание от неё всякой линковочной шелухи или поиск сорцов, нежели чем на издевательство над собой с целью делать линкуемые при запуске программы.

    2. динамическая линковка: изложить и сравнить существующие подходы (амми/libman/Win/Lin/etc.) и в результате выбрать/синтезировать то что для спека лучше подходит
    Был предложен вариант динамической линковки со статически распологаемой (по указанному программой адресу) таблицей входа (JP func1:JP func2:...). Данный вариант позволяет писать программы 'как обычно', с единственной проблемой - распределением памяти под разные библиотеки. Также есть вариант libman примерно с аналогичной функциональностью, за исключением принципа вызова. Но нет же, вам подавай писизм, с обязательным исправлением абсолютных адресов везде, где только можно! Ну ничего, время лечит...

  2. #162

    Регистрация
    04.09.2006
    Адрес
    Краснодар
    Сообщений
    58
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от captain cobalt
    Сейчас для сборки используются include. В однотекстовых ассемблерах при каждой сборке происходит елозенье по диску. В многотекстовых, когда всё в памяти, всё равно имеются тормоза с компиляцией. Если же всё лежит в памяти готовое к употреблению, нужно лишь при компиляции прилинковать один разрабатываемый модуль.
    А ничего, что с любой линковкой в рунтайм будут тормоза не с компиляцией, а каждый раз - с загрузкой и линковкой? Или вы во имя идеалов писизма готовы пожертвовать чем угодно, в том числе и удобством пользователей?

    Если возможна постепенная миграция, то больше программистов будет разрабатывать универсальный код. Поначалу он будет использоваться со статической компоновкой, но будет накапливать базу для динамической компоновки.
    Поверьте, никакой миграции не будет.
    Вот вы лично готовы использовать вашу эту динамическую компоновку, и в каком именно программном продукте для Спектрума? Или вы готовы лишь писать десятки сообщений про 'dll-hell' и 'ооп с динамической компоновкой рулез'?

  3. #163

    Регистрация
    04.09.2006
    Адрес
    Краснодар
    Сообщений
    58
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от captain cobalt
    Да.
    Воспользоваться чужим кодом без документации невозможно.
    Код для повторного использования должен быть документированым.
    Раз вы так в этом уверены, то вы ни разу не проводили дизассемблирование чужих программ.


    Есть два основных выхода:
    1. Подсмотреть ООП на ПЦ (в TASM и т. п.).
    2. Использовать typed assembly language, "типизированный ассемблер", сокращённо TAL. Идея в принципе прикручиваема к Z80. Но это - как раз сильно отдалённое будущее, о котором будем говорить гораздо позже. Ссылки здесь.
    Готовы ли Вы лично взяться за написание подобного ассемблера для Спектрума?

  4. #164

    Регистрация
    04.09.2006
    Адрес
    Краснодар
    Сообщений
    58
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от GriV
    И вот, я хочу написать бут, хочу написать текстовый редактор, хочу написать вьюер, хочу написать игрушку. Что из этих процедур я буду использовать? Правильно - все из них.
    Скажите, а что вы будете использовать, если вы захотите написать 50fps вьювер, игрушку с выводом спрайтов через стек и кучей 256b-aligned таблиц, мультиколорную или чанковую дему, наконец? Ваш подход - опять же отдаёт писизмом, он не позволяет на СИЛЬНО ОГРАНИЧЕННЫХ ресурсах Спектрума делать действительно быстрые и крутые вещи. Если только лишь тошнить стандартными процедурами уровня инфоркома (помните, были ещё книжки - 'как написать игру на ассемблере' или 'динамическая графика') с кучей заморочек насчёт линковки, ооп и проч. пурги - то и получатся тошные программы - медленные, неинтересные.

    Общая мысль витамина такая - за каждой из программ тянется огромный шлейф повторно написанных процедур (вот уж действительно пора покончить с изобретением велика), которые можно и нужно использовать в стандартном виде и таким образом подтягивать и увеличивать общую эффективность программо-производства.
    За каждой из программ тянется шлейф похожих (на процедуры в других программах) процедур, и если это не те программы, от которых тошнит, а реально быстрые вещи, то каждая процедура вылизана десятки раз и адаптирована именно под конкретный случай применения. Зачем тут некие стандартные библиотеки (модули - называйте, как хотите) с 'swiss-knife type'-процедурами на все случаи жизни, с обработкой всех возможных ситуаций и тонной вариантов действий?
    Последний раз редактировалось yoko_ono; 17.10.2006 в 02:19.

  5. #165

    Регистрация
    04.09.2006
    Адрес
    Краснодар
    Сообщений
    58
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от captain cobalt
    Технология использования таких аргументов хорошо отработана. Например:
    Код:
    EX (SP),HL
    LD A,(HL)
    INC HL
    LD C,(HL)
    INC HL
    LD B,(HL)
    INC HL
    EX (SP),HL
    Даже более привлекательно, чем ковыряться в стеке через индексные регистры.
    Это технология чтения аргументов, 'вшитых' в машинный код, т.е. неизменяемых. И опять же, чтения в регистры, а не использования. Для комфортного их использования (несколько раз и в нужные моменты) их придётся переложить в память, по IX/IY ли, в абсолютную ли (по адресу). Немаловажно и то, что такие аргументы (вшитые в код) затрудняют отладку программы (не ясно, сколько таких аргументов идёт после CALL и когда они кончаются и начинается дальше код, к тому же дизассемблер воспримет их как код, выдав бессмысленные команды).

  6. #166

    Регистрация
    04.09.2006
    Адрес
    Краснодар
    Сообщений
    58
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от captain cobalt
    Не надо нажимать RESET.
    Надо выйти из вьюера. Динамический компоновщик и модули останутся в памяти.
    После чего, например, запустить qc, скопировав им полностью какую-нибудь дискету на другую. Или создать рам-диск в памяти. Или запустить аласм, который всосёт в себя пару десятков исходников, разместив их в страницах, да и сам откушает страниц вдоволь.

    Загрузить текстовый редактор. Он будет использовать модули уже находящиеся в памяти.
    Если от них останутся следы. Иначе, он снова полезет на диск, и будет ёрзать башкой, как раненный (из скромности умолчу, куда именно).

    Кстати, заодно придумайте поиск модулей по страницам и проверку их целостности, и сообщите затраты машинного времени на это.
    Последний раз редактировалось yoko_ono; 17.10.2006 в 01:52.

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

  8. #167

    Регистрация
    04.09.2006
    Адрес
    Краснодар
    Сообщений
    58
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от captain cobalt
    Но если полиморфизм - это силища ого-го , то у Амиги "просто библиотеки".
    Кстати, уважаемый captain cobalt, раз уж вы замечены в бытности 'одептом ООП', зачитайте вот это:

    Код:
    Boopsi is an acronym for Basic Object Oriented Programming System for
    Intuition.  Using the Object Oriented Programming (OOP) model, Boopsi
    represents certain Intuition entities, like Gadgets and Images, as objects.
    
    There are many advantages to using Boopsi:
    
      * Boopsi makes Intuition customizable and extensible.  Boopsi
        programmers can create new types of Boopsi objects to suit the needs
        of their applications.  These new types of objects are part of
        Intuition and can be made public so other applications can use them.
        Because applications can share the new types, application writers
        don't have to waste their time duplicating each other's efforts
        writing the same objects.
    
      * New types of Boopsi objects can build on old types of Boopsi objects,
        inheriting the old object's behavior.  The result is that Boopsi
        programmers don't have to waste their time building new objects from
        scratch, they simply add to the existing object.
    
      * OOP and Boopsi apply the concept of interchangeable parts to
        Intuition programming.  A Boopsi programmer can combine different
        Boopsi objects (like gadgets and images) to create an entire
        Graphical User Interface (GUI).  The Boopsi programmer doesn't have
        take the time to understand or implement the inner workings of these
        objects.  The Boopsi programmer only needs to know how to interact
        with Boopsi objects and how to make them interact with each other.
    
      * Boopsi objects have a consistent, command-driven interface.  To the
        Boopsi programmer, there is no difference between displaying a text,
        border, or bitmap-based Boopsi image, even though they are rendered
        quite differently.  Each image object accepts a single command to
        tell it to render itself.
    
    Before reading this chapter, you should already be familiar with several
    Amiga concepts.  Boopsi is built on top of Intuition and uses many of its
    structures.  These include Intuition gadgets, images, and windows.  Boopsi
    also uses the tag concept  to pass parameters.  The "Utility Library"
    chapter of this manual discusses tags.  The "Utility Library" chapter also
    discusses callback Hooks, which are important to the later sections of
    this chapter.
    
     OOP Overview               Boopsi Gadgets 
     Creating a Boopsi Class    Function Reference
    Заметьте, и это на Амиге, на которой якобы 'просто библиотеки'. И не имеет никакого отношения к 'цэ-крест-крест', так как имеет место быть не в конструкциях языка, а на самом деле.
    И на основе этой технологии написан MUI - очень замечательный и удобный оконный-графический амижный интерфейс.

  9. #168

    Регистрация
    13.03.2005
    Адрес
    Пермь
    Сообщений
    294
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от yoko_ono
    Уважаемый captain cobalt, скажите, вы вживую видели 'подход библиотек Амиги'? Я что-то сомневаюсь...
    Выше 'подход библиотек Амиги' был проклассифицирован 'в терминах винды'.

    Никто из амижников не оспорил.
    Цитата Сообщение от yoko_ono
    Вы вон давеча ажно драйвер памяти аласма записали в ООП или куда там. Признайтесь, вы даже его в глаза не видели?!
    Конечно же видели.

    Вызов драйвера напрямую - это оптимизация, основанная на том, что в каждый момент времени существует лишь один драйвер.
    Цитата Сообщение от yoko_ono
    Вы в жизни не видели процессоры архитектуры 68к, вам мало 15 32-битных регистров? Это вам не х86, где каждый регистр на вес золота.
    Больше регистров - это хорошо.
    Для однопоточного программирования это очень хорошо.

    Но существуют ещё языки параллельного программирования, которые, при надлежащих компиляторах, могут с пользой применять хоть миллион регистров. Впрочем, это не имеет отношения к спеку.
    Цитата Сообщение от yoko_ono
    Кроме того, извольте продемонстрировать тормоза вызовов библиотек амиги, не будьте голословным!
    Например так:
    Все тормоза перечислены.
    Цитата Сообщение от yoko_ono
    А ничего, что с любой линковкой в рунтайм будут тормоза не с компиляцией, а каждый раз - с загрузкой и линковкой?
    На всякий случай повторю, что предлагаю заменить тормоза загрузки на тормоза компоновки. Модуль загружается один раз, и много раз компонуется.
    Цитата Сообщение от yoko_ono
    Поверьте, никакой миграции не будет.
    Вот вы лично готовы использовать вашу эту динамическую компоновку, и в каком именно программном продукте для Спектрума?
    Никаких новых программных продуктов сразу не будет.
    Для начала предлагается адаптировать существующий софт, как то ALASM, BGE, PT. Классические игры Exolon, Earth Shaker, добавить по вкусу.
    Цитата Сообщение от yoko_ono
    Раз вы так в этом уверены, то вы ни разу не проводили дизассемблирование чужих программ.
    Проводили.

    И даже можно провести параллель.

    Разбирая одну программу, в принципе, всё что нужно, можно держать в человеческой памяти. Но если параллельно разбирать десять программ, придётся записывать на бумажку.

    Точно так же и с библиотеками.
    Одну библиотеку ещё можно использовать без документации. Десяток библиотек - никто не будет.
    Цитата Сообщение от yoko_ono
    Есть два основных выхода:
    1. ...
    2. ...
    Готовы ли Вы лично взяться за написание подобного ассемблера для Спектрума?
    Подобный ассемблер уже пишется несколько месяцев. Вялотекущими темпами, как и всё на спеке. Здесь были изложены отдельные идеи из проектной документации. Когда (если) он выйдет, обнаружится что все знают как им пользоваться.

    Но. Сначала компиляция в динамически компонуемые модули, и только потом (необязательно) то что процитировано.
    Цитата Сообщение от yoko_ono
    Скажите, а что вы будете использовать, если вы захотите написать 50fps вьювер, игрушку с выводом спрайтов через стек и кучей 256b-aligned таблиц, мультиколорную или чанковую дему, наконец?
    В некоторой степени это возможно.
    Это всё примеры на динамическую кодогенерацию.

    Можно дать модулю побольше памяти - и пусть он в неё разворачивает процедуры и вызывает их.

    Здесь начинается гибкость против скорости. Гибкость может быть очень полезной штукой на практике. Скорость же в стиле "демо на посмотреть один раз" может имет гораздо меньшее значение. Ибо "пиксели Спектрума никого не плющат".
    Цитата Сообщение от yoko_ono
    Это технология чтения аргументов, 'вшитых' в машинный код, т.е. неизменяемых. И опять же, чтения в регистры, а не использования. Для комфортного их использования (несколько раз и в нужные моменты) их придётся переложить в память, по IX/IY ли, в абсолютную ли (по адресу). Немаловажно и то, что такие аргументы (вшитые в код) затрудняют отладку программы (не ясно, сколько таких аргументов идёт после CALL и когда они кончаются и начинается дальше код, к тому же дизассемблер воспримет их как код, выдав бессмысленные команды).
    Всё правильно.
    Речь только про то, чтобы предусмотреть для них синтаксис для объявления в сигнатуре.
    Цитата Сообщение от yoko_ono
    После чего, например, запустить qc, скопировав им полностью какую-нибудь дискету на другую. Или создать рам-диск в памяти. Или запустить аласм, который всосёт в себя пару десятков исходников, разместив их в страницах, да и сам откушает страниц вдоволь.
    Ну и в чём проблема.
    Ненужные библиотеки можно выкинуть из памяти.
    Если совсем припёрло, можно и динамический компоновщик выкинуть.
    Получится точно такой же qc\alasm, но перезагружаться опять через RESET.
    Цитата Сообщение от yoko_ono
    Если от них останутся следы. Иначе, он снова полезет на диск, и будет ёрзать башкой, как раненный (из скромности умолчу, куда именно).

    Кстати, заодно придумайте поиск модулей по страницам и проверку их целостности, и сообщите затраты машинного времени на это.
    Не предусмотрено такого механизма.

    Есть модули - программа работает. Убиты модули - программа не работает; RESET; загрузка модулей с диска.
    Цитата Сообщение от yoko_ono
    Кстати, уважаемый captain cobalt, раз уж вы замечены в бытности 'одептом ООП', зачитайте вот это:
    Хорошо.
    Я не против.

    А как насчёт ООП на спеке?

  10. #169

    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,286
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    39 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от captain cobalt
    Имеется ввиду, нужен синтаксис для сигнатуры.
    Нужен- сделаем. Ничего не теряем, в общем случае.

    Цитата Сообщение от captain cobalt
    Код с сигнатурой в комментарии можно компилировать прямо сейчас, в любом ассемблере (после токенизации). То есть сию секунду можно нарабатывать код. Параллельно можно разрабатывать спец компилятор и документатор.
    Что есть токенизация? Дополнительный проход некой утилитой? А ее нету. И пересадить программистов под новый, пока не существующий компилятор менее реально, чем пересадить всех под существующий аласм.
    Тем более, макросы можно портировать под любой более-менее серьезный ассемблер. А для прочих "игрушечных" уж ничего не получится...

    Цитата Сообщение от captain cobalt
    Надо выйти из вьюера. Динамический компоновщик и модули останутся в памяти.
    Загрузить текстовый редактор. Он будет использовать модули уже находящиеся в памяти.
    Смотри на вещи шире. Предполагаемый подход твоей хотелки не отрицает. Поясню. Предположим, есть некий суровый модуль SYSTEM, который содержит функции Exit и LoadLibrary. В простейшем случае первая функция будет выходом в дос, а вторая- просто загрузкой файла. Подменяем этот модуль на свой и _автоматически_ получаем возможность выхода в некую оболочку (от RC до ОС) и загрузку модулей с кешированием.

    Цитата Сообщение от captain cobalt
    Возможность расширения - за счёт добавления модулей.
    Как??? Как программа на этапе выполнения может расширить свой функционал за счет дополнительных модулей, если она про них ни сном ни духом???

    Цитата Сообщение от GriV
    какие уже (в настоящее время) есть вещи так или иначе связанные с модульной организацией (полный список, включая документацию). Что нужно чтобы сие стало "скорее живым, нежели мёртвым"?
    Первая стабильная версия библиотеки: http://zxdocs.fatal.ru/coding/module.zip Уже не хватает возможностей, планирую расширять.

    Цитата Сообщение от yoko_ono
    Уважаемый captain cobalt, скажите, вы вживую видели 'подход библиотек Амиги'? Я что-то сомневаюсь... Вы вон давеча ажно драйвер памяти аласма записали в ООП или куда там. Признайтесь, вы даже его в глаза не видели?!
    Я, конечно, дико извиняюсь, товарищ, но на все высказанные просьбы рассказать, в чем же есть круть несусветная амиги были получены однообразные ответы типа "смотрите libman, там все". Ну посмотрели, сделали выводы на основе неполной (уж сколько было) информации.

  11. #170

    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,286
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    39 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от yoko_ono
    Если уж библиотека настолько незаменимая, я бы скорее потратила время на обкусывание от неё всякой линковочной шелухи или поиск сорцов, нежели чем на издевательство над собой с целью делать линкуемые при запуске программы.
    Что есть линковочная шелуха? В итоге должен вместо универсального модуля получиться сухой кодовый блок, жестоко скомпилированный под определенный адрес? Да... Универсальность так и прет.

    ЗЫ. Я человек дикий, честно говорю, что не знаю всех возможностей аласма. Просвятите меня дремучего, как же так сделать чтоб невызываемые функции не компилировались?

Страница 17 из 32 ПерваяПервая ... 131415161718192021 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 9
    Последнее: 10.11.2024, 08:26
  2. Управление эмулятором из zx-программы
    от Spectre в разделе Эмуляторы
    Ответов: 42
    Последнее: 29.08.2006, 12:58
  3. Кто может помочь в создании программы
    от Лебедев в разделе Люди
    Ответов: 9
    Последнее: 22.07.2006, 09:41
  4. Программы для модемов
    от p@lex в разделе Софт
    Ответов: 21
    Последнее: 11.02.2006, 21:36

Ваши права

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