User Tag List

Страница 19 из 32 ПерваяПервая ... 151617181920212223 ... ПоследняяПоследняя
Показано с 181 по 190 из 320

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

  1. #181

    Регистрация
    14.01.2005
    Адрес
    N.Novgorod
    Сообщений
    803
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от captain cobalt
    Предполагается, что автор memcpy изменив интерфейс (или внеся иную несовместимость) изменит сигнатуру. Несовместимые модули не будут компоноваться. Если автор забудет изменить сигнатуру, то вспомнит когда у него что-нибудь сломается. Если у него ничего не сломается, ему сообщит кто-нибудь, у кого сломается. Если автор забил на спек, проблема может быть опубликована.
    если у библиотеки/библиотечной функции изменяется интерфейс, то у библиотеки меняется номер версии и линкер на основании требовании программы к ВЕРСИИ библиотеки с новой версией линковать не будет.

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

  3. #182

    Регистрация
    14.01.2005
    Адрес
    N.Novgorod
    Сообщений
    803
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vitamin
    __EXTERN "onefunc@B(DD)",func_ver_1
    __EXTERN "onefunc@B(WW)",func_ver_2
    ...
    ;гдето в коде
    CALL_ func_ver_1 ;зовем первую функцию
    ...
    CALL_ func_ver_2 ;зовем вторую функцию
    причем здесь перегрузка? ты руками назначаешь алиас для фукнкии и по нему ее вызываешь.

    при настоящей перегрузке, ассемблер должен "магическим" образом проанализировать твой код перед CALL_ и понять какой из вариантов onefunc ты имел в виду и вызвать его

  4. #183

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

    По умолчанию

    Цитата Сообщение от Vitamin
    Давай вернемся к простому примеру- та абстрактная библиотека GUI, поддерживающая расширение за счет единого интерфейса разных виджетов.
    Пусть имеется функция "нарисовать окно с виджетами". Ей аргументом передаётся множество всех виджетов, она пробегается по нему и для каждого виджета вызывает виртуальную функцию "нарисовать".

    Пусть имеется программа которая использует эту функцию.

    Программа порисовала виджеты.

    Теперь мы вышли из программы, и запустили другую программу, которая использует новые виджеты. Модули с этими виджетами загрузились при запуске программы. Программа передаёт этой функции новые виджеты, и, о чудо, функция "научилась" рисовать только что загруженные виджеты.

  5. #184

    Регистрация
    14.01.2005
    Адрес
    N.Novgorod
    Сообщений
    803
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vitamin
    Я уже давно все придумал и написал. Теперь вот пытаюсь с помощью присутствующих улучшить и применить несколько шире, чем только в моих проектах.
    тогда надо было начинать с рассказа о том что уже есть и как это работает. и обязательно объяснить чем это лучше/удобнее других методов.

  6. #185

    Регистрация
    05.05.2005
    Адрес
    Германия
    Сообщений
    1,614
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от captain cobalt
    Сигнатура - это часть документации.
    Т.е. CLSID - это часть доки по винапи?

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

  7. #186

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

    По умолчанию

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

    Цитата Сообщение от captain cobalt
    Теперь мы вышли из программы, и запустили другую программу, которая использует новые виджеты. Модули с этими виджетами загрузились при запуске программы. Программа передаёт этой функции новые виджеты, и, о чудо, функция "научилась" рисовать только что загруженные виджеты.
    Все так, но ты сам себе противоречишь. Невозможно добавлять новые виджеты (сиречь расширять функционал) уже готовой программы! Она использует только те понятия (библиотеки), о которых знает на момент компиляции. Так что расширение функционала готовых программ прямо так в лоб невозможно.

    Цитата Сообщение от elf/2
    тогда надо было начинать с рассказа о том что уже есть и как это работает. и обязательно объяснить чем это лучше/удобнее других методов.
    Ссылка на документацию есть. Рассказывал я про нее неоднократно в разных местах. Библиотека в течение трех лет уже разрабатывается, так что кое-какие наработки есть и мне очень и очень понравились получаемые возможности- один и тот же контейнер для хранения кода может служить и готовым приложением (для некой ОС) и статической библиотекой и динамической библиотекой. Для любителей керналя можно реализовать и его без каких бы то ни было проблем! Вот скажите, спецы по амиге, можно ли (если да, то как) экспортировать из модуля данные? Функции экспортируются через керналь по индексу, а вот если мне надо, например, использовать шрифт или текст, зашитый в библиотеке, я смогу это сделать без использования специальных методов получения адреса?

  8. #187

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

    По умолчанию

    Цитата Сообщение от elf/2
    ребятушки это уже не смешно... мангленые имена функций с сигнатуруй появились в компиляторах C++ как workaround: необходимо было как-то разрешать перегруженные функции, а формат obj файлов не содержал типов аргументов. пришлось делать уникальные имена для перегруженных функций. соответсвенно в момент компиляции когда компилятор знает типы всех аргументов при вызове функции он создает это хитрое имя а линкер просто сравнивает две строчки...
    Это правильно.
    Цитата Сообщение от elf/2
    вы хотите делать перегруженные функции на асме? это не возможно, поскольку синтаксис ассемблера не содержит комманды вызова функции с агрументами.
    Это тоже правильно.
    Я не хочу перегруженные функции на ассемблере.
    Цитата Сообщение от elf/2
    вот именно, попробуйте написать функцию которая имея в регистре A номер экранной линии возвращает адрес в HL и ее вызов в терминах вашего мифического компилятора. и объясните кто и как будет формировать мангленое имя _при вызове_
    Пусть есть уже написанная функция. У неё есть вручную прописанная сигнатура. При компиляции хэш сигнатуры попадает в таблицу экспорта.

    Теперь мы хотим воспользоваться этой функцией из другого модуля. Делаем мы это только по имени. При компиляции хэш сигнатуры из упомянутой таблицы экспорта просто копируется в таблицу импорта этого нового модуля. Чтобы компоновщик проверял на равенство. Вот и всё.
    Цитата Сообщение от Vitamin
    Не совсем. Утилита берет исходник, генерит на базе него другой исходник, в котором внутри прописаны все таблицы релокации, вся сигнатура функций и прочая, а вот этот второй исходник уже используется для компиляции в обычный объектный код, списываемый на диск в виде модуля.
    Это уже компилятор.
    Зачем из исходника в исходник, если можно прямо в объектный файл?
    Цитата Сообщение от Vitamin
    И таблицы символов из файла выкидывать нельзя. Нужно оставить хотя бы хеши сигнатур, иначе ничего не получится.
    Их можно положить в отдельный файл. Это неважно.
    Всё равно без них компоновщик ничего не будет компоновать.
    Цитата Сообщение от elf/2
    если у библиотеки/библиотечной функции изменяется интерфейс, то у библиотеки меняется номер версии и линкер на основании требовании программы к ВЕРСИИ библиотеки с новой версией линковать не будет.
    Версия это слишком грубо.
    Линуксоиды это знают. Когда есть совместимая библиотека, но другой версии, с которой новый софт не собирается.

    Сигнатура - это проверка именно по совместимости, а не по версии.

    Причём каждого символа отдельно. Если та часть модуля, которая используется - совместима, то модуль компонуется.

  9. #188

    Регистрация
    14.01.2005
    Адрес
    N.Novgorod
    Сообщений
    803
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vitamin
    Ссылка на документацию есть. Рассказывал я про нее неоднократно в разных местах.
    документация это modules.txt внутри modules.zip? такой подход не прокатит

    нужны примеры: зачем это, чем это лучше... ну и как минимум группа товарищей которая это использует. а большинство посетителей форума (включая меня) это теоретики

  10. #189

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

    По умолчанию

    Цитата Сообщение от captain cobalt
    Это тоже правильно.
    Я не хочу перегруженные функции на ассемблере.
    "-Святой отец! Моя жена жуткая стерва, она меня постоянно оскорбляет!
    -Разводитесь
    -Но я ее люблю!
    -Не разводитесь"
    Это я к тому что есть возможность реализовать перегруженые функции (для этого никаких усилий даже не потребуется), а вот использовать или нет их- это уже личное дело программиста.

    Цитата Сообщение от captain cobalt
    Это уже компилятор.
    Зачем из исходника в исходник, если можно прямо в объектный файл?
    Да? А таблицы релокации ты как будешь делать? Если ассемблер не поддерживает макросов, то необходимо будет создание дополнительных промежуточных таблиц с адресами адресозависимых точек.

    Цитата Сообщение от captain cobalt
    Их можно положить в отдельный файл. Это неважно.
    Всё равно без них компоновщик ничего не будет компоновать.
    Зачем множить сущности? Разбивка на два файла имеет смысл разве что для отладки...
    Эт я так, к сведению, не споря %)

  11. #190

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

    По умолчанию

    Цитата Сообщение от elf/2
    документация это modules.txt внутри modules.zip? такой подход не прокатит

    нужны примеры: зачем это, чем это лучше... ну и как минимум группа товарищей которая это использует. а большинство посетителей форума (включая меня) это теоретики
    А какой подход покатит? А то просили "хоть чтото". Дал все что есть- "не прокатит"...
    Могу подкинуть ряд готовых модулей, простенький настройщик и исходник линкера (неоптимальный).

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

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

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

Эту тему просматривают: 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

Ваши права

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