Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.06.2015, 20:37   #1
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию Организация системы юнитов

Итак, имеется некий гипотетический язык программирования. Хочется в него подключать библиотеки различной направленности (написанных на том же языке пока что). Возникает несколько вопросов:
1. Как правильно (разумно, просто, понятно и т.д.) организовать хранение/обращение/доступ к юниту.
2. Как разрешать конфликт функций (когда функция с одним и тем же именем существует в разных юнитах и происходит ее вызов).
3. Как избегать дублирование юнитов (когда разные юниты в дереве ссылаются на одну и ту же стандартную библиотеку например).
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 30.06.2015 в 20:44.
Utkin вне форума Ответить с цитированием
Старый 30.06.2015, 21:25   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

1) Не совсем понятно что значит "как хранить". Ну например в файле, а файл в папке... Или в архиве, но архив все равно содержит папки и файлы, так что сути дела это не меняет.
2) Пространством имен - например, имя юнита + имя функции. Или имя папки + имя файла.
3) А в чем дублирование, это как раз хорошо, когда разные модули пользуются одной библиотекой. Гораздо хуже, когда у каждого свои костыли.
waleri вне форума Ответить с цитированием
Старый 30.06.2015, 22:01   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Как правильно (разумно, просто, понятно и т.д.) организовать хранение/обращение/доступ к юниту.
По полному пути. Имя файла модуля, имя функции\Переменки/объекта
Цитата:
Как разрешать конфликт функций
Полный путь.
Цитата:
Как избегать дублирование юнитов
А где тут дублирование?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.06.2015, 22:21   #4
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,774
По умолчанию

Настала моя очередь троллить. А что такое юнит? Понятие не раскрыто.
  • Является ли юнит единицей компиляции? Единицей именования?
  • В случае единицы компиляции является ли юнит эвфемизмом файла внутри языка или может быть разнесен по нескольким файлам?
  • С точки зрения именования является ли юнит принудительным пространством имен? Умолчательным пространством имен? Изолированным пространством имен?
  • Допустимы ли анонимные пространства? Могут ли существовать имена вне пространств?
Скажем, в Delphi модуль является единицей компиляции, эвфемизмом файла, принудительным, умолчательным, но неизолированным пространством имен, из-за чего фактическая работа идет с локальным анонимным пространством, где имена собраны с перекрытием согласно порядку в uses.

В Канторе же класс является единицей именования и единицей компиляции, но не эвфемизмом файла, поэтому может быть разнесен на произвольное число файлов-скриптов. Также класс является принудительным, умолчательным и изолированным пространством имен.

В Delphi, Java, D, C#, Питоне есть импорт модулей, порождающий то самое умолчательное анонимное простраство имен, в котором возможны конфликты. В Канторе же все публичные классы доступны друг другу, импорт планируется как необязательная фича.
Vapaamies вне форума Ответить с цитированием
Старый 30.06.2015, 22:46   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
1) Не совсем понятно что значит "как хранить". Ну например в файле, а файл в папке... Или в архиве, но архив все равно содержит папки и файлы, так что сути дела это не меняет.
В памяти. Вот загрузилась основная программа. Нашли список юнитов, и? Как их хранить в памяти?
Цитата:
2) Пространством имен - например, имя юнита + имя функции. Или имя папки + имя файла.
Пространство имен не отменяет проблему. Я могу не знать что в каком-то еще юните есть такая же функция и чисто теоретически пространство имен может совпасть (из-за устоявшихся обозначений типа storage, main, browser и т.д.). Имя юнита + имя функции опять таки возможно в том случае, если проблема известна. Я могу не знать, что в списке есть какой-нибудь Add(), Erase(), Delete() и т.д. Что мне все юниты на предмет совпадения имени выверять?
Цитата:
3) А в чем дублирование, это как раз хорошо, когда разные модули пользуются одной библиотекой. Гораздо хуже, когда у каждого свои костыли.
В том, что нужно юнит грузить снова, ведь юнит нижнего уровня ничего не знает о юнитах и их зависимостях более высоких уровней. И вторая проблема, как можно распознать что загружаемый по другому пути юнит уже загружался ранее?
Цитата:
А что такое юнит? Понятие не раскрыто.
Совокупность функций, расположенных в одном файле. Программная единица.
Цитата:
Является ли юнит единицей компиляции? Единицей именования?
Это единица хранения функций в файле. Единица трансляции (сами там выбирайте компиляция/интерпретация).
Ну да, аналогия с Делфи мне ближе.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 30.06.2015, 22:55   #6
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,774
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
И вторая проблема, как можно распознать что загружаемый по другому пути юнит уже загружался ранее?
У вас каша в голове. Модули различаются по глобально-уникальным именам, так что такой проблемы никогда не возникает. Как в Delphi?
Vapaamies вне форума Ответить с цитированием
Старый 30.06.2015, 23:24   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Итак, имеется некий гипотетический язык программирования. Хочется в него подключать библиотеки различной направленности (написанных на том же языке пока что). Возникает несколько вопросов:
1. Как правильно (разумно, просто, понятно и т.д.) организовать хранение/обращение/доступ к юниту.
2. Как разрешать конфликт функций (когда функция с одним и тем же именем существует в разных юнитах и происходит ее вызов).
3. Как избегать дублирование юнитов (когда разные юниты в дереве ссылаются на одну и ту же стандартную библиотеку например).
1. в пространствах имен.
2. Смотреть накол-во параметров, порядок параметров, типы данных. Если функции одинаковы, брать первую из множества копий. Предусмотреть явный вызов <namesapace>.<module>.<method>.
3. Проблема ложится на программиста. Другой путь? Это другой модуль. Главное чтобы модуль из пути А нельзя было 2 раза в uses прописать. Если 2 модуля используют 1 библиотеку то компилировать библиотеку, а потом просто ссылаться на неё.

Цитата:
В том, что нужно юнит грузить снова, ведь юнит нижнего уровня ничего не знает о юнитах и их зависимостях более высоких уровней. И вторая проблема, как можно распознать что загружаемый по другому пути юнит уже загружался ранее?
Выверять проект перед сборкой. Строить зависимости, откидывать неиспользуемые модули (нигде не используются в файлах проекта).

Последний раз редактировалось Человек_Борща; 30.06.2015 в 23:28.
Человек_Борща вне форума Ответить с цитированием
Старый 30.06.2015, 23:27   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Совокупность функций, расположенных в одном файле. Программная единица.
Однозначно полный путь. Ибо он уж точно уникален в пределах ФС. А если вдруг дублирование (в двух юнитах одинаковые функи) то давать юнитам Алиас, как in в Делфи в разделе uses.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.07.2015, 07:06   #9
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
У вас каша в голове. Модули различаются по глобально-уникальным именам, так что такой проблемы никогда не возникает. Как в Delphi?
Так если имена различаются, а содержимое идентично, Вам такой вариант в голову не приходит?
Цитата:
Однозначно полный путь. Ибо он уж точно уникален в пределах ФС. А если вдруг дублирование (в двух юнитах одинаковые функи) то давать юнитам Алиас, как in в Делфи в разделе uses.
Альяс хороший вариант для момента когда проблема известна, да стоит задуматься над этим. Полный путь в пределах ФС может вести в конечным итогам к одним и тем же юнитам, находящимся в разных папках.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 01.07.2015 в 07:08.
Utkin вне форума Ответить с цитированием
Старый 01.07.2015, 09:15   #10
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,774
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Так если имена различаются, а содержимое идентично
Так это и есть каша в голове. По-умному называется "отсутствие проектирования". К языку не имеет никакого отношения, только если вы не хотите решить задачу доказательства эквивалентности кода в том или ином виде -- то есть научиться формально доказывать, что физически разные участки кода на вашем языке делают одно и то же. Это сильно выходит за рамки модульности, я бы сказал.
Vapaamies вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Организация автоматизированной системы распознавания изображений php + js Aleks47-samara Помощь студентам 7 23.02.2015 22:19
Общие модули системы. Организация WennY Общие вопросы по программированию, компьютерный форум 0 29.11.2012 20:49
Несколько юнитов в DLL Alex Cones Общие вопросы Delphi 2 09.11.2010 18:45
Правильная организация системы плагинов-расширений Alexei91 Общие вопросы Delphi 4 26.09.2010 18:10
Чем отличается подключение юнитов до implementation и после? TwiX Общие вопросы Delphi 1 07.12.2009 02:13