User Tag List

Страница 20 из 32 ПерваяПервая ... 161718192021222324 ... ПоследняяПоследняя
Показано с 191 по 200 из 320

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

  1. #191

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

    По умолчанию

    Цитата Сообщение от Vitamin
    ЗЫ. Доки получил?
    Да, сенкс. Вот подумал будет не лишним, ведь АОС развивается и теперь есть бета-АОС 4 для ППЦ процов. Некоторая инфа, касательно либ и не только http://www.totalamiga.org/pdf/totalamiga_19.pdf
    остальные номера, но не все можно почитать тут: http://www.totalamiga.org/backissues2.html
    http://amigasc.nm.ru

    Free coder and hardwareman
    Amiga addicted

  2. #192

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

    По умолчанию

    Цитата Сообщение от captain cobalt
    Пусть есть уже написанная функция. У неё есть вручную прописанная сигнатура. При компиляции хэш сигнатуры попадает в таблицу экспорта.

    Теперь мы хотим воспользоваться этой функцией из другого модуля. Делаем мы это только по имени. При компиляции хэш сигнатуры из упомянутой таблицы экспорта просто копируется в таблицу импорта этого нового модуля. Чтобы компоновщик проверял на равенство. Вот и всё.
    с этого момента поподробнее:
    1. у нас есть библиотека xyz.lib
    2. у нее в таблице экспорта есть функция get_scr_addr@r_v_q

    3. пишем программу которая эту функцию должна звать:
    ----------
    require 'xyz.lib'

    ld a, 5
    call xyz.get_scr_addr
    ----------
    если мифический компилятор просто будет искать в таблице экспорта библиотеки функцию начинающуюся с get_scr_addr@ и прописывать ее полное имя в таблице импорта программы то это ничего не дает кроме тех случаев когда мы сильно поменяли интерфейс данной конкретной функции. а интерфейс - это святое! если мы начинаем его постояноо менять то это уже нельзя назвать библиотекой.

    причем если мы добавили в новую версию библиотеки функцию инициализации которая ДОЛЖНА вызываться первой, и пользователь об этом не знал/забыл то все эти сигнатуры не помогут. и линкер без ошибок все слинкует
    Цитата Сообщение от captain cobalt
    Версия это слишком грубо.
    Линуксоиды это знают. Когда есть совместимая библиотека, но другой версии, с которой новый софт не собирается
    однако и на винде (activex, .net) и на линуксе используются именно версии библиотеки. обычно есть minor и major версии. и софт не будет собираться если поменялась major версия, но смена мажорной версии как-раз и говорит о том что совместимости нет. если поменялась минорная версия, то как правило все собирается

  3. #193

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

    По умолчанию

    Цитата Сообщение от Vitamin
    А какой подход покатит? А то просили "хоть чтото". Дал все что есть- "не прокатит"...
    честно? боюсь что никакой. при наличии одного-двух активных разработчиков на платформе...

    но если будет getting started guide с простыми примерами и объяснением как данный подход позволяет экономить время/ресурсы, то есть маленькая надежда что кто-нибудь и попробует

  4. #194

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

    По умолчанию

    Цитата Сообщение от elf/2
    честно? боюсь что никакой. при наличии одного-двух активных разработчиков на платформе...
    Значит в Бобруйск тогда. Буду делать как мне удобно и применять чисто в своих проектах. Прощай, мечта...

  5. #195

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

    По умолчанию

    Цитата Сообщение от icebear
    Т.е. CLSID - это часть доки по винапи?
    Это "закулисный механизм", который из клиентского кода не виден.
    Сигнатура так и работает.
    Цитата Сообщение от icebear
    Ты писал на С? На разных компиляторах? Если писал, то знаешь, что разные компиляторы по-разному ведут себе с неиницализироваными переменными. Ничем не отличается от твоего примера. К чему я это сказал? К тому, что с этой проблемой не стоит заморачиваться.
    На Ц можно поставить "хороший стиль".
    А в ассемблере до сих пор иногда случается проблема.
    Цитата Сообщение от Vitamin
    Все так, но ты сам себе противоречишь. Невозможно добавлять новые виджеты (сиречь расширять функционал) уже готовой программы! Она использует только те понятия (библиотеки), о которых знает на момент компиляции. Так что расширение функционала готовых программ прямо так в лоб невозможно.
    Модули, расширяющие функционал - это плагины.

    Чтобы программа могла пользоваться функционалом плагинов, где-то должен быть список плагинов.

    Чтобы плагины можно было добавлять во время работы, нужно чтобы в этот список можно было добавлять элементы.

    Где может располагаться этот список? Есть два основных способа:

    1. В программе. Программа сама делает LoadLibrary и сама добавляет элемент себе в список.

    2. В общеизвестном месте. Пользователь составляет нужный список и размещает в этом месте. Общеизвестное место загружает эти модули при запуске программы. Программа использует уже готовый список и не напрягается на LoadLibrary.

    Что это за общеизвестное место? Это просто модуль. Точнее, список плагинов хранится не в модуле, а на диске. То есть сохраняется между выключениями машины. А модуль это просто интерфейс к этому дисковому хранилищу.

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

    И название этому дисковому хранилищу - реестр.

  6. #196

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

    По умолчанию

    Цитата Сообщение от captain cobalt
    Это "закулисный механизм", который из клиентского кода не виден.
    Сигнатура так и работает.
    Как это "закулисный"? Доступ к COM именно по CLSID происходит. Т.е. это и есть сигнатура.

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

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

  8. #197

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

    По умолчанию

    Цитата Сообщение от elf/2
    с этого момента поподробнее:
    1. у нас есть библиотека xyz.lib
    2. у нее в таблице экспорта есть функция get_scr_addr@r_v_q

    3. пишем программу которая эту функцию должна звать:
    ----------
    require 'xyz.lib'

    ld a, 5
    call xyz.get_scr_addr
    ----------
    если мифический компилятор просто будет искать в таблице экспорта библиотеки функцию начинающуюся с get_scr_addr@ и прописывать ее полное имя в таблице импорта программы то это ничего не дает кроме тех случаев когда мы сильно поменяли интерфейс данной конкретной функции. а интерфейс - это святое! если мы начинаем его постояноо менять то это уже нельзя назвать библиотекой.
    Всё правильно.

    На спеке "весь код уже написан".
    На продолжающих развитие платформах есть такие штуки как obsolete и deprecated.
    Цитата Сообщение от elf/2
    причем если мы добавили в новую версию библиотеки функцию инициализации которая ДОЛЖНА вызываться первой, и пользователь об этом не знал/забыл то все эти сигнатуры не помогут. и линкер без ошибок все слинкует
    Инициализация - это важно.
    Функцию инициализации модуля должен вызывать линкер.
    Цитата Сообщение от elf/2
    однако и на винде (activex, .net) и на линуксе используются именно версии библиотеки. обычно есть minor и major версии. и софт не будет собираться если поменялась major версия, но смена мажорной версии как-раз и говорит о том что совместимости нет. если поменялась минорная версия, то как правило все собирается
    1. Если совместимость осталась, то линкеру не должно быть дела до minor номера?

    2. Что если в данной версии совместимость нарушилась, а в следующей опять восстановилась?

    3. Что если часть модуля осталась совместимой, а часть нет? Сигнатура для каждого символа модуля разруливает именно это.

  9. #198

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

    По умолчанию

    Цитата Сообщение от icebear
    Как это "закулисный"? Доступ к COM именно по CLSID происходит. Т.е. это и есть сигнатура.
    Хорошо.
    Осталось только выяснить связь между COM и WinAPI.

  10. #199

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

    По умолчанию

    Цитата Сообщение от captain cobalt
    1. Если совместимость осталась, то линкеру не должно быть дела до minor номера?
    2. Что если в данной версии совместимость нарушилась, а в следующей опять восстановилась?
    3. Что если часть модуля осталась совместимой, а часть нет? Сигнатура для каждого символа модуля разруливает именно это.
    1. чаще всего да, но если очень надо то можно указывать зависимость с точностью до минорной версии. например при минорном update могла добавиться новая функци, это совместимости не вредит (при правильном использовании конечно)
    2. значит не судьба или указывать указывать список возможных версий при импорте
    3. значит это новая версия и звать функции с неизменившимися сигнатурами скорее всего опасно. т.к. они могут иметь side effects

    Цитата Сообщение от captain cobalt
    Инициализация - это важно. Функцию инициализации модуля должен вызывать линкер.
    инициализацию модуля я привел в качестве примера, что делать если сигнатура функции (т.е. распределение аргументов по регистрам) не поменялась, но поменялись значения кодов возврата, т.е. раньше 0 означал успех, а в новой версии - ошибку. линкер это проглотит, но программа работать не будет... можно придумать и другие варианты.

    Цитата Сообщение от captain cobalt
    Где может располагаться этот список? Есть два основных способа:
    1. В программе. Программа сама делает LoadLibrary и сама добавляет элемент себе в список.
    зачем список? почему не искать все файлы удовлетворяющие маске и лежащие в определенном месте (каталоге?)

  11. #200

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

    По умолчанию

    Цитата Сообщение от Vitamin
    У меня по этому поводу одна идея- проводить вырезание только нужных функций. Но это требует ресурсов и может быть применено только при окончательной сборке бинарника (не runtime).
    А про CP/M (точнее, реализацию) поподробнее можно?
    Такое я видел в Pascal MT+, т.е. в его библиотеках. При линковке проги со стадартной библиотекой PASLIB.ERL от туда дергались только нужные функции. Как оно там внутри работало - не знаю. Это же закрытые коммерческие продукты. Кроме того, формат ERL - это, по словам разработчиков MT+, улучшенный формат REL, который являлся де-факто стандартом для перемещаемых объектных модулей под CP/M. REL могли генерить некоторые ассемблеры и компиляторы.

    Сам формат REL кажется даже документирован, т.е. где-то описание я встречал, но где - не помню. Скорее всего в документации к dev-средствам от Digital Research.

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

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

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

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

Ваши права

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