Стажировка (информатика)
В информатике интернирование — это повторное использование объектов равной ценности по требованию вместо создания новых объектов. Этот образец творения [1] часто используется для чисел и строк в разных языках программирования. Во многих объектно-ориентированных языках, таких как Python , даже примитивные типы , такие как целые числа, являются объектами. Чтобы избежать накладных расходов на создание большого количества целочисленных объектов, эти объекты повторно используются посредством интернирования. [2]
Чтобы интернирование работало, интернированные объекты должны быть неизменяемыми, поскольку состояние распределяется между несколькими переменными. Интернирование строк — это распространенное применение интернирования, когда в одной программе требуется множество строк с одинаковыми значениями.
История
[ редактировать ]Лисп ввел понятие интернированных строк для своих символов . Руководство программиста LISP 1.5 [3] описывает функцию под названием intern
который либо оценивается как существующий символ с указанным именем, либо, если таковой не существует, создает новый символ с этим именем. Эта идея интернированных символов сохраняется в более поздних диалектах Лиспа, таких как Clojure, в особых формах, таких как (def symbol)
которые выполняют создание и интернирование символов. [4]
В парадигме объектно-ориентированного программирования интернирование является важным механизмом в шаблоне-приспособленце , где метод интернирования вызывается для хранения внутреннего состояния объекта, чтобы его можно было использовать совместно с различными объектами, которые имеют разные внешние состояния, избегая ненужного дублирования. [5]
Интернирование продолжает оставаться важным методом управления использованием памяти в реализациях языков программирования; например, Спецификация языка Java требует, чтобы идентичные строковые литералы (то есть литералы, содержащие одну и ту же последовательность кодовых точек) ссылались на один и тот же экземпляр класса String, поскольку строковые литералы «внутрены», чтобы иметь общие уникальные экземпляры. [6] В языке программирования Python интернируются небольшие целые числа, [7] хотя подробности зависят от языковой версии.
Мотивация
[ редактировать ]Интернирование экономит память и, таким образом, может улучшить производительность и объем памяти программы. [8] Обратной стороной является время, необходимое для поиска существующих значений объектов, которые необходимо интернировать.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Шаблоны проектирования» (PDF) . Университет Вашингтона .
- ^ Яворский, Михал (2019). Эксперт по программированию на Python: станьте мастером Python, изучив лучшие практики кодирования и передовые концепции программирования на Python 3.7 . Тарек Зиаде (Третье изд.). Бирмингем, ISBN Великобритании 978-1-78980-677-9 . OCLC 1125343555 .
{{cite book}}
: CS1 maint: отсутствует местоположение издателя ( ссылка ) - ^ Левин, Майкл И. (1965). Руководство программиста LISP 1.5: Вычислительный центр и исследовательская лаборатория электроники Массачусетского технологического института . Джон Маккарти, Массачусетский технологический институт. Вычислительный центр Массачусетского технологического института. Научно-исследовательская лаборатория электроники (2-е изд.). Кембридж: MIT Press. ISBN 0-262-13011-4 . OCLC 1841373 .
- ^ «Clojure — специальные формы» . Clojure.org . Проверено 4 ноября 2021 г.
- ^ Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения . Эрих Гамма, Ричард Хелм, Ральф Э. Джонсон, Джон Влиссидес. Ридинг, Массачусетс: Аддисон-Уэсли. 1995. ISBN 0-201-63361-2 . ОСЛК 31171684 .
{{cite book}}
: CS1 maint: другие ( ссылка ) - ^ «Спецификация языка Java. Глава 3. Лексическая структура» . docs.oracle.com . Проверено 4 ноября 2021 г.
- ^ «PEP 237 — Объединение длинных и целых чисел» . Python.org . Проверено 4 ноября 2021 г.
- ^ Оукс, Скотт (2014). Производительность Java: полное руководство . Севастополь, Калифорния: O'Reilly Media. ISBN 978-1-4493-6354-3 . OCLC 878059649 .