Ин лайн


Фидерный монтаж инлайн (in-line) очень ценится продвинутыми любителями донной ловли, а в спортивной рыбалке часто является единственной разрешенной оснасткой. Прежде чем начать разговор о инлайне, сделаем одно уточнение — по сути, это не конкретный монтаж, а целое семейство, которое объединяет скользящее крепление кормушки.

Что собой представляет оснастка

Оснастка инлайн для фидера


Главная задача, которую необходимо было решить в оснастках инлайн, заключается в придании кормушке максимальной степени свободы. Иными словами, она должна беспрепятственно скользить по основной или отводной леске в момент поклевки. Занятую поглощением приманки рыбу ничего не настораживает, поэтому она клюет более уверенно.

Скольжение кормушки может быть обеспечено через вертлюжок, через петлю, при помощи карабина, через сквозное отверстие либо иным способом. Поскольку свобода не может быть бесконечной, ограничителями служат стопора, узлы или диаметр петли на которой она находится.

Крепление крючка и грузила в данных монтажах также может быть весьма разнообразным. Вариации заключаются в длине поводка, его текстуре, материале и расположении относительно основной лески (шнура).

Инлайн хорош тем, что комплектующим для его построения всегда есть место в чемоданчике любого рыбака. Перечислим основные из них:

  • кормушка;
  • плетенка или монолеска;
  • вертлюжки;
  • карабины;
  • антизакручиватель;
  • стопора;
  • фидерная резинка (фидергам);
  • крючки;
  • грузила (утяжелители).

Эффективность оснастки инлайн в фидерной ловле

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


  • леща;
  • карпа;
  • сазана;
  • карася.

Тот, кто делает ставку на инлайн получает позитив от:

  1. Контроля даже осторожных поклевок.
  2. Максимальной отдачи от рыбалки за счет эффекта самоподсекания добычи.
  3. Возможности доработки непосредственно на водоеме с учетом конкретных условий рыбалки.

Что мешает инлайну быть идеальным монтажом:

  1. Велика вероятность потери кормушки при зацепе.
  2. Нет гарантии, что запутывание не сведет на нет скольжение кормушки по поводку.
  3. Некоторые сложности при изготовлении.

Когда лучше использовать

Где и когда использовать оснастку


Как и при каких обстоятельствах был впервые смонтирован инлайн — история умалчивает. Бесспорным остается тот факт, что пионерами его применения были европейцы. А местом — пруды для спортивной ловли карпа и карася. В России данные монтажи получили развитие и здесь же появились модификации, адаптированные под естественные водоемы и реки различного типа.

Инлайн с отводом лучше всего отрабатывает на быстром течении или в заиленных прудах с обилием водорослей. Леска в такой оснастке проходит сквозь бусину или вертлюжок, на котором закреплен отвод с кормаком. Проваливаясь в мягкий ил приспособление не тянет за собой остальные элементы. По сути, это усовершенствованная оснастка патерностер.

Таблица выбора оснастки для разных условий

Рекомендации по использованию оснасток в зависимости от места и объектов ловли.


Рыба Водоем, дно Вид оснастки
карп озеро, река,

илистое дно

method, in-line
сазан река, ил, песчаник in-line,
асимметричная петля
карась озеро, река, ил, песок метод, симметричная и
ассиметричная петля,
патерностер
лещ река, озеро, ил,

глина, ракушечник

method, вертолет,

асимметричная петля

Разновидности монтажа

Суть монтажа сводится к исключению стационарного крепления кормушки к основной леске или отводу от нее. Свобода кормака ограничивается специальными стопорами или принудительно скользящими бусинками. Фидерный монтаж инлайн рекомендуют профессионалы и, несмотря на внешнюю схожесть его разновидностей, они достойны подробного изучения. При необходимости их можно адаптировать под конкретные условия лова.

Из основных групп данных монтажей выделим те, в которых:

  1. Крепление кормушки происходит через шнур или леску, напрямую проходящую через тело. Это классика отечественных кормаков, придуманная еще нашими дедами и отцами.
  2. Расположение кормушки фиксируется через кольцо и вертлюжки. Это самый популярный и доступный способ для большинства водоемов. Эффективен при ловле разных видов рыб.
  3. Третью группу составляют варианты подвижного крепления не самой кормушки, а отвода с ней. Здесь обычно подвижность обеспечивается кольцом.

Сквозная скользящая оснастка

Скользящая оснастка

Благодаря эволюции конструкций кормушек, классикой инлайн мотажей считается вариант, когда леска пронизывает кормак насквозь. Достаточно вспомнить устаревшие «пружины» и «арбузы» с отверстием по оси симметрии и всем все станет понятно. Более современные емкости для корма крепятся в основном через карабин, что не сильно влияет на суть монтажа.

Применение крупных кормаков требует обязательного присутствия стопоров. Эту сбережет узлы от разрушения (при забросе и подсечке) и, как следствие, — потерю кормушки.

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

С противозакручивателем


С антизакручивателем

При ловле с дальними забросами (и не только) частое явление — закручивания поводка и основной лески. В лучшем случае это минимизирует работу монтажа, а в худшем отнимет у рыбака время. «Лекарством» от первого и второго явления может стать конструкция с антизакручивателем. Понятно, что исключить закручивание поможет повышение жесткости монтажа.

Противоскручиватель, а по сути — кембрик одевается на основную леску от узла (стопора) перед поводком до крепления кормушки и от кормушки до петли, обозначающей начало главной лески. С двух сторон и в середине есть смысл установить стопора.


Антискучиватели должны быть гораздо меньше отрезка от петли до крепления поводка. В противном случае кормушка потеряет свою свободу перемещения.

Эта конструкция избавляет от перехлестов, но вместе с этим может насторожить тех, ради кого вы пришли на рыбалку. Впрочем, трубки под цвет дна или растительности того или иного водоема — могут стать и источником побед, а не поражений.

Инлайн с фидергамом на плетенке

Монтаж с фидерной резинкой


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

  • между основной леской и поводком;
  • в качестве направляющей для скольжения кормушки.

И все же главное предназначение эластичного шнура — это отвести крючок от лески и кормушки. Запутывание и перехлест при использовании вставки из фидергама — вам будут не страшны, а значит вероятность испортить настроение или «украсть» время от удовольствия ловить — устремятся к нулю.

Монтаж инлайн с отводом

С отводом


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

Этот элемент представляет собой отрезок лески длиной 5-8 см. Крепление кормушки с отводом к основному шнуру остается незыблемым — вертлюг, ограниченный двумя стопорками. Непосредственно кормушка к отводу — также имеет классическое крепление — через карабин или вертлюг.

Суть такой постановки кормака заключается в поддержании монтажа на поверхности (он не тонет в слое ила, ракушки или в зарослях). Кроме этого отвод дает еще большую свободу монтажа в целом и, как следствие, чувствительность лески.

Эффективность отвода может быть сведена к нулю, если после заброса придать основной леске сильное натяжение. Поэтому рекомендуем не переусердствовать и оставить хоть небольшой запас при натяжении. Результативная поклевка будет вам за это наградой.

Раннинг фидер

Раннинг


/ribolovrus.ru/wp-content/uploads/2021/06/1-13.jpg" />

Данная оснастка (иногда ее называют простым инлайном) может быть, как с отводом кормушки от основной лески так и без него. Сам отвод лучше сделать в два раза жестче основной лески и в три — поводка с крючком. Здесь практичность продемострируют скрутка, монофил толщиной 0,35-0,4 мм или жесткий шнур.

Конструкция без отвода уже упоминалась нами — к вертлюжку в границах — бусинки или стопора, кормак — крепится карабином.

Метод и флэт

Флэт

Кормушки flat появились благодаря творческой идее любителей фидерной рыбалки. Конструктивно они представляют собой площадку с дугами для пассивного удержания приманивающей смеси. Угощение для рыбы подается в кормушку, а крючок с насадкой (мелкие бойлы, опарыш, мелкий червь и др.) помещается непосредственно в объем прикормки.

Сегодня нет проблем с выбором размера флэт кормушек. Только от ваших предпочтений, возможностей удилища и условий рыбалки будет зависеть выбор кормака объемом от 15 до 100 граммов.

Для удобства многие модели таких кормушек изначально комплектуются специальным приспособлением для загрузки корма.
Крепление к основной леске может быть скользящим, полускользящим и даже глухим. Поводок с крючком (-ами) при данном монтаже может располагаться, как на поводке в продолжение основной лески, так и крепится непосредственно к кормушке.

Среди особенностей флэт монтажа выделяется минимизация крючков. Это не означает, что здесь главная цель — мелкая рыбешка. Пародоксально, но иногда трофейные экземпляры соблазняются именно на самую мелкую насадку.

Полезные рекомендации

Аккуратность в любом деле полезна. Для монтажей инлайн, сделанным своими руками, это также актуально. Назовем некоторые рыбацкие секреты, которые придадут вашей работе эстетики, добавят надежности оснасткам и скорей всего повысят уловистость:

  1. Чтобы вязанные узлы не были похожи на «ежиков» — закройте их кембриками.
  2. Работающие под нагрузкой петли можно усилить отрезками кембриков или резинового ниппеля.
  3. При хранении монтажей лучше использовать отдельные коробки, мини-контейнеры или др. Например, можно— приспособить пенополиуретановые отрезки труб. Они мягкие, пористые, а внутренний диаметр сможет принять кормушку. Такими изолируют детали сплит-систем.
  4. Возьмите за правило периодически производить ревизию своих монтажей. Заранее обнаружить в них проблему — значит не упустить улов и не испортить позитивные впечатления от рыбалки.

Поднятая в этой статье тема — сложна для начинающих, но интересна. Думаю у продвинутых любителей ловли на фидер обязательно найдется чем поделиться с другими читателями. Говорят, рыбак рыбака — видит издалека. Переиначим эту поговорку: «Сказанное рыбаком рыбаку — понятно только им и больше — никому». Можете принять это как приглашение к разговору, поэтому ждем обсуждения в комментариях!

Источник: RibolovRus.ru

Скользящие оснастки в фидере

Все фидерные монтажи можно характеризовать по степени свободы хода кормака на основной леске.

  1. Глухие. Это патерностер, петля Гарднера, вертолет и два узла, флэт метод в глухом варианте, доночные отводные поводки .
  2. Частично скользящая фидерная оснастка – симметричная или асимметричная петля. Свободный ход кормушки ограничен верхним узлом петли. Когда рыба вытягивает петлю при поклевке и кормак достигает этого узла, с большой долей вероятности происходит самозасечка.
  3. Оснастки inline – Ранинг Фидер с отводом или без (монтаж с отводом еще иногда называют скользящим патерностером), скользящий флэт (метод), доночные варианты с арбузами, пружинами и коромыслами.

Снасть инлайн фидера позволяет рыбе освободиться при обрыве основной лески – именно поэтому только такая оснастка разрешена на соревнованиях рыболовам-спортсменам. Ограничение свободного хода стопором для самозасечки запрещено. Свободное прохождение лески позволяет рыбе беспрепятственно отходить от точки – сопротивление она почувствует только когда квивертип согнется в максимальное положение.

Если же катушка на удилище поставлена на свободный ход – смотка лески рыбой будет продолжаться, пока не сработает байтраннер или кормак не дойдет до верхнего стопора (если он применяется). В карпфишинге сход лески никак не ограничивается, чтобы крупная рыба не утащила снасть в воду. Фиксация поклевки происходит при помощи специальных электронных сигнализаторов или свингеров. При коротких поводках чувствительность инлайн очень высока – поэтому такой вариант можно использовать при ловле очень осторожной и подозрительной рыбы. Статья о видах фидерных монтажей.

Ин лайн

Принцип инлайн

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

Неограниченное скольжение

Полностью скользящая оснастка для фидера ничем не ограничена – рыба будет сматывать леску, пока не дотянет слабину до фрикциона, если он выставлен (в карповой ловле). В фидере катушка во время ловли зафиксирована, поэтому рыба по достижению определенного сопротивления оснастки почувствует его и выбросит приманку. Самозасечка происходит с малой вероятностью, так как ощущение сопротивления у рыбы во время потяжки нарастает постепенно из-за гибкости квивертипа. Поэтому такая ловля должна происходить в спортивном варианте – требуется постоянный контроль снасти и подсечка, буквально с комлем удилища на коленке. Рыболову нужно правильно подобрать момент подсечки. Такой вариант инлайн наиболее безопасен для рыбы в плане возможности обрыва основной лески. Как уже говорилось, если такое случится – рыба спокойно освободиться от тяжелой кормушки, полностью вытянув из нее обрывок лески и поводок.

Ин лайн

Ограничение стопором

В любительской рыбалке оснастка инлайн часто ограничивается верхним стопором. Это удобно – вдруг возникнет необходимость отвлечься, отвести взгляд от квивертипа или отойти на некоторое время от точки ловли. Если случится поклевка – рыба выберет леску до стопора. После этого она или самоподсечется, или оставит приманку. Это такой своеобразный предохранитель от стаскивания удочки в воду. Механика работы снасти зависит от того, на каком расстоянии от кормушки установлен верхний стопор.

Такое оснащение — универсальное. Если сместить стопор прямо к кормушке, например, в варианте раннинг с отводом, получаем обычный глухой патерностер. Если отодвинем вверх на 10-15 см – инлайн будет работать по схожему принципу с несимметричной или симметричной петлей, свободный ход лески будет составлять как раз это расстояние. В случае активного клева с большой долей вероятности будет происходить самозасечка. Поэтому такой любительский вариант инлайн оснастки со стопором наиболее универсален – фидер можно подстраивать под условия ловли прямо на водоеме, не перевязывая. Далее рассмотрим, как связать оснастку инлайн своими руками для фидера.

Ин лайн

Фидерные инлайн оснастки

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

  1. Ранинг фидер (Running Feeder Rig). Основная леска, шнур или шок-лидер фидера пропускаются через ушко вертлюжка, на котором висит кормушка.
  2. Скользящие кормушки со сквозным пропуском лески по специально предусмотренному каналу – метод, флэт-метод (чаще применяется глухой вариант), арбузы и пружины с коромыслами.
  3. Оснастка с противозакручивателем.

Сквозные скользящие оснастки фидера

В традиционных инлайн монтажах леска проходит через всю кормушку – это старые добрые пружины, арбузы и им подобные. Несмотря на разнообразие специальных фидерных монтажей, эти привычные доночные оснастки также работают. Можно их применять, если в наличии просто нет специальных кормушек для фидерной ловли. Иногда в продаже можно найти и чисто фидерные кормаки со сквозным каналом для инлайн оснастки. Однако, такие модели редкость – чаще применяются обычные кормаки, которые цепляются к снасти в варианте ранинг (через вертлюжок). Флэт и метод в скользящем варианте также работают по этому принципу, однако это в принципе несколько другие способы ловли – поговорим о них отдельно далее.

Ин лайн

Изготовление такой инлайн оснастки фидера со скользящей кормушкой стандартно – леска пропускается через канал, к ней привязывается вертлюжок. Либо кормушка ограничивается внизу узлом основной лески со скруткой (коромыслом в варианте с пружиной и двумя крючками). В дальних фидерных забросах остро стоит проблема перехлестывания поводка. Поэтому на инлайн монтажах (если это не флэт метод) на отводе поводка лучше делать скрутку из флюорокарбона или жесткой лески диаметром 0.28-0.32 мм. Вся сквозная оснастка инлайн формируется также, как и в раннинг (об этом ниже), просто леска пропускается не через вертлюг, а по каналу самой кормушки. Скрутку нужно делать на монофиле или флюре. То есть, если в основе применяется леска (или на шок лидере), вязать такой монтаж можно прямо на ней.

Если же используем шнур – просто привязываем к нему кусок жесткого флюорокарбона с петелькой на конце для поводка узлом морковка. Флюр несет ту же функцию, как и скрутка – благодаря своей жесткости не допускает запутывание поводка при забросе или выматывании. Не забываем перед вязкой продеть на основу кормушку. Можно разместить между узлом и кормушкой стопор, бусину – для предохранения узла от контакта. Подробнее об этом – в видео А. Фадеева дальше в статье о монтаже ранинг фидер на шнуре.

Ин лайн

Раннинг фидер

Чаще в классическом фидере все же применяется скользящая оснастка Running Feeder Rig. Принцип этого монтажа инлайн для фидера тот же, просто используются не специальные редкие кормушки, а обычные, типа “клетка”, бигуди или пули. Леска пропускается через вертлюжок кормушки. Ушко на вертлюге поджимается плоскогубцами, чтобы кормак не соскакивал на скрутку (или ставим бусину). Свободный ход в такой фидерной оснастке инлайн внизу ограничивается узлом скрутки (можно с бусиной или стопором). Также свободный ход можно ограничить и сверху передвигающимися силиконовыми стопорами – получится универсальная настраиваемая снасть. Обязательное условие – наличие скрутки длиной чуть больше кормушки с отводом на нее (вертлюжок с карабином или специальный более длинный отвод). Скрутка с петелькой для поводка должна быть ниже свеса кормушки – это предохранит леску поводка от запутывания.

Ин лайн

Такой монтаж инлайн делается на леске и на плетенке. Правила те же. Если основная леска или шок лидер – монофил, то вяжем прямо на них. При использовании шнура привязываем кусок флюорокарбона узлом морковкой – это и будет отвод на поводок.

Основную леску можно пропускать прямо через вертлюг – получим обычный ранинг фидер. При ловле на илу или захламленном дне лучше применять фидерный монтаж инлайн с отводом под кормушку – чтобы узел шарнирного прохождения лески не застрял в донных отложениях или траве. Отвод можно сделать различной конструкции – из плетенки, лески или в виде скрутки. Подойдет и толстый флюрокарбон. Элементы отвода для фидерной кормушки можно формировать узлами или обжимными трубочками, как в поводках для спиннинга. Как шарнирный узел, через который проходит леска, применяем ушко вертлюжка, специальные застежки с пластиковой бусиной или швейный бисер. Подробнее – в статье о монтаже Ранинг Фидер Риг

Как вязать монтаж инлайн для фидера

Если вяжем ранинг на монофиле или шок лидере из флюорокарбона.

  1. Продеваем основную леску через вертлюжок, надеваем стопор отбойник либо бусину (необязательно) или обжимаем ушко вертлюжка (чтобы не проскакивало через будущий узел на скрутку). Если хотим ограничить скольжение — перед кормушкой, соответственно, также одеваем стопор.Ин лайн
  2. Складываем монофил вдвое, формируем на конце петельку для поводка (узел восьмерка или хирургический).

    Ин лайн

  3. Закручиваем скурутку, чтобы она была длиннее кормушки (вместе с отводом, если используется). Завязываем восьмеркой. Лишний конец обрезаем.Ин лайнИн лайн
  4. Получается скользящая кормушка на основе, затем узел, скрутка и петелька для поводка.Ин лайн

Принцип вязки на плетне похож — только вместо операции со скруткой привязываем узлом морковка кусок флюорокарбона диаметром 0.3 мм.  Делаем на его конце петельку под поводок. Длина отвода из флюра должна быть длиннее кормушки.

Можно сделать отвод на кормушку — это сделает ее свес и, соответственно, длину плеча поводка больше. Такой вариант лучше работает на илистом и захламленном дне.

Метод и флэт

Метод и Flat-Method предназначены для ловли в стоячей воде или на очень слабом течении (иначе с кормушки унесет корм) карпа, леща, карася и другой рыбы с донным типом питания. Метод – английский вариант нашей обычной пружины. У флэт кормушек – толстое плоское дно, что позволяет им падать на дно в одном положении, насадкой и кормом вверх. Чаще во флэте используется глухая оснастка, в которой поводок наглухо закреплен в конструкции через вертлюжок или посредством специального коннектора. Поводки используются короткие, 7-10 см. Рыба при поклевке самозасекается об груз.

Ин лайн

Однако, инлайн метод фидера во флэт оснастках также используется – для ловли малоактивной или осторожной рыбы, которая берет насадку аккуратно, не отходит быстро от кормушки (не самозасекается). В таком случае, естественно, требуется постоянное наблюдение за снастью и выявление момента подсечки. Сделать ее можно из обычной флэт или метод кормушки с фиксацией вертлюжка, просто поставив перед ним на леску бусину, чтобы он не смог въехать в гнездо. Оснастка инлайн во флэт фидере также делается полностью скользящей или с ограничением через силиконовый стопор сверху. Подробнее – о ловле на Flat-фидер.

Инлайн с противозакручивателем

Принцип инлайн работает также и в вариантах фидерных монтажей с антизакручивателем. Все работает точно также – основная леска пропускается через всю трубочку, начиная с короткого плеча. Длинное плечо – на поводок. На конце лески привязываем вертлюжок, можно через бусину или стопор, чтобы не травмировать узел противозакручивателем. Этот инлайн также можно делать полностью скользящим или ограничивать стопором. Трубочка-противозакручиватель работает также, как скрутка – отводит поводок от основной лески, обеспечивая отсутствие захлестов и перекручиваний. К тому же, такая конструкция обеспечивает и принцип инлайн в оснащении фидера. Этот вариант подходит для новичков фидера, которые не умеют вязать настоящие монтажи. На дне у кормушки лежит громоздкая пластиковая трубочка – это может отпугивать осторожную рыбу. Однако, там, где рыба ничего не боится, применение таких трубочек в фидере оправдано простотой монтажа. Подробнее – о монтаже фидера с противозакручивателем.

Ин лайн

Фидергам в инлайн

При использовании плетеного шнура как основной лески оснастка получается жесткой. Плетенка почти не растягивается. При применении тонких поводков на фидере с плетенкой велика вероятность обрыва на крупной рыбе. Монтаж инлайн с фидергамом решает эту проблему. Варианты применения фидерной резины (или штекерной) в фидерных оснастках инлайн:

  • Вставка между поводком и основной леской – на противозакручивателе, в раннинг между скруткой и поводком.
  • Цельным куском вместо скрутки в ранинг фидер.
  • Мощный фидергам, по которому бегает кормушка – как продолжение основной лески.
  • Флэт-кормушки с внутренним амортизатором из резины.

Подробнее – о применении фидергама.

Особенности применения инлайн в фидере

Как и с любыми другими фидерными оснастками, с монтажами инлайн на водоеме нужно экспериментировать, пока не будет подобран действующий вариант в конкретных условиях рыбалки. Меняем размеры крючков, толщину и длину поводков, свободу хода кормушки верхним стопором. Постоянные эксперименты – часть верной техники в фидерной рыбалке. Работоспособность инлайн оснастки фидера на течении и в спокойной воде отличается. На течении лучше использовать более длинные поводки – они будут распрямляться по направлению потока в кормовой струе. В стоячей воде длинные поводки не нужны – все равно крючок будет падать рядом с кормушкой. Работает и стандартное правило для фидера – чем осторожнее и пассивнее рыба – тем тоньше и длиннее ставим поводок.

Оснастки инлайн, как и любые другие фидерные монтажи, не являются волшебной универсальной таблеткой. В одних условиях лучше сработает несимметричная петля, в других – инлайн, а завтра – патерностер. Поэтому постепенно осваивать нужно их все и применять на водоеме в зависимости от ситуации.

Источник: rybafan.ru

Введение

Описание и примеры

Эволюция термина inline

Первоначальное назначение ключевого слова inline состояло в том, чтобы служить индикатором для оптимизатора, что встроенная подстановка функции предпочтительнее вызова функции, то есть вместо выполнения команды CPU для передачи управления в тело функции, копия тела функции выполняется без генерирования вызова. Эта оптимизация (inline expansion) основана на идее, что выполнение вызова функции является относительно дорогостоящим: оно требует перехода к новой подпрограмме, передачи аргументов функции и копирования возвращаемых значений. Inline expansion подавляет вызов функции путем копирования инструкций функции непосредственно в тело вызывающего объекта.
Последствия такой оптимизации в программе может быть очень трудно предвидеть. В дополнение к уменьшению накладных расходов на вызов функций, inline expansion позволяет выполнять широкий спектр дополнительных оптимизаций, которые в противном случае было бы очень трудно выполнить между вызовами функций. Однако не забывайте, что inline expansion создает копию тела функции для каждого вызова. Как следствие, помимо очевидного увеличения размера программы, дублирование инструкций делает программу кэш-недружественной.
Inline expansion может значительно повысить производительность, но это не точно. Производительность должна измеряться, а не предполагаться.
Т.к. программисты редко могут хорошо управлять оптимизациями, с них эта обязанность была снята, и современные компиляторы сами решают, когда применить inline expansion, а когда — не нужно.

Сегодня ключевое слово inline имеет мало общего с inline expansion. Эта оптимизация является необязательной для компилятора, компиляторы могут свободно использовать встроенную замену для любой функции, которая не помечена inline, и могут генерировать вызовы функций для любой функции, помеченной inline.
Однако ключевое слово inline затрагивает так же вопросы линковки. Подробнее про это можно почитать здесь. Поведение компилятора в вопросе оптимизаций не изменяет правила, касающиеся нескольких определений. Сегодня inline — это про one definition rule, а не про inline expansion оптимизацию. И поскольку значение ключевого слова inline для функций стало означать «разрешено несколько определений», а не» предпочтительно встроенное», это значение было распространено на переменные.

One definition rule и как его нарушить?

Функции и переменные, объявленные inline, могут быть определены в программе несколько раз.
Это, по сути, исключение из правила одного определения. ODR говорит, что вы можете определить только один раз функции, переменные, классы, перечисление и т. д.
ODR должен выполняться не только на уровне единицы трансляции, но и на уровне программы.

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

Давайте рассмотрим пару примеров: использование inline при объявлении и инициализации глобальных констант и использование inline при объявлении и инициализации статических полей класса.

Глобальные константы

Часто определенные символьные константы могут быть использованы в разных частях программы (а не только в одном месте). Это могут быть физические или математические константы, которые не изменяются (например, число Пи или число Авогадро), или специфические для приложения значения (например, коэффициенты трения или гравитации). Вместо того чтобы переопределять эти константы в каждом файле, который нуждается в них, лучше объявить их один раз в одном месте и использовать везде, где это необходимо. Тогда, если вам когда-либо понадобится изменить их, вам нужно будет изменить их только в одном месте.

Немного про линковку

В единицу трансляции включены файл реализации (.c/.cpp) и все его заголовочные файлы (.h/.hpp).
Если внутри единицы трансляции у объекта или функции есть внутреннее связывание, то этот символ виден компоновщику только внутри этой единицы трансляции. Если же у объекта или функции есть внешнее связывание, то компоновщик сможет видеть его при обработке других единиц трансляции. Использование ключевого слова static в глобальном пространстве имен дает символу внутреннее связывание. Ключевое слово extern дает внешнее связывание.
Компилятор по умолчанию дает символам следующие связывания:

  • Non-const глобальные переменные — внешнее связывание;

  • Const глобальные переменные — внутреннее связывание;

  • Функции — внешнее связывание.

Подробнее…

Глобальные константы как переменные с внутренним связыванием

Один из способов сделать это:

  1. Создайте заголовочный файл для хранения этих констант.

  2. Внутри этого заголовочного файла определите пространство имен.

  3. Добавьте все ваши константы в пространство имен (убедитесь, что они constexpr).

  4. #include вашего заголовочного файла везде, где это нужно.

Например:

// constants.h #ifndef CONSTANTS_H #define CONSTANTS_H   // define your own namespace to hold constants namespace constants {  // constants have internal linkage by default  constexpr double pi { 3.14159 };  constexpr double avogadro { 6.0221413e23 };  constexpr double my_gravity { 9.2 }; // m/s^2 -- gravity is light on this planet  // ... other related constants } #endif 

И используйте ваши константы:

// main.cpp #include "constants.h" // include a copy of each constant in this file   #include <iostream>   int main() {  std::cout << "Enter a radius: ";  int radius{};  std::cin >> radius;    std::cout << "The circumference is: " << 2.0 * radius * constants::pi << 'n';    return 0; } 

Когда этот заголовок включается (#include) в файл. cpp, каждая из переменных, определенных в заголовке, будет скопирована в этот cpp-файл в момент включения. Вы можете использовать эти константы в любом месте cpp-файла.
Поскольку эти глобальные константы имеют внутреннее связывание, каждый файл .cpp получает независимую версию глобальной константы. В большинстве случаев, компилятор соптимизирует их и подставит конкретные значения в местах использования.

Глобальные константы с внешним связыванием

Вышеприведенный метод имеет несколько потенциальных недостатков.Это легко использовать, но каждый раз, когда мы включаем заголвочный файл с константами в файл с кодом, каждая из этих переменных копируется в файл с кодом. Поэтому, если constants.h включается в 20 различных файлов кода, каждая из этих переменных дублируется 20 раз. Header guard не предотвратит это, так как она предотвращает только включение заголовка более одного раза в один cpp-файл, а не в несколько разных файлов с кодом. Это создает две проблемы:

  1. Изменение одной константы потребует перекомпиляции каждого файла, используеющего константы, что делает компиляцию долгой для крупных проектов.

  2. Если константы имеют большой размер и не могут быть оптимизированы, это приведёт к нежелательному расходу памяти.

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

// constants.cpp #include "constants.h"   namespace constants {  // actual global variables  extern const double pi { 3.14159 };  extern const double avogadro { 6.0221413e23 };  extern const double my_gravity { 9.2 }; // m/s^2 -- gravity is light on this planet } 
// constants.h #ifndef CONSTANTS_H #define CONSTANTS_H   namespace constants {  // since the actual variables are inside a namespace, the forward declarations need to be inside a namespace as well  extern const double pi;  extern const double avogadro;  extern const double my_gravity; }   #endif 

Можем использовать их:

// main.cpp #include "constants.h" // include all the forward declarations   #include <iostream>   int main() {  std::cout << "Enter a radius: ";  int radius{};  std::cin >> radius;    std::cout << "The circumference is: " << 2.0 * radius * constants::pi << 'n';    return 0; } 

Теперь константы будут создаваться только один раз (в constants.cpp), а не один раз каждый раз при включении constants.h, и все использования будут просто ссылаться на версию в constants.cpp. Любые внесенные изменения в constants.cpp потребуют только перекомпиляции constants.cpp.
Однако у этого метода есть несколько недостатков. Во-первых, эти константы теперь могут считаться константами времени компиляции только в файле, в котором они фактически определены (constants.cpp), а не где-либо еще. Это означает, что вне constants.cpp они не могут быть использованы нигде, где требуется постоянная времени компиляции. Во-вторых, оптимизировать их использование компилятору сложнее.
Учитывая вышеперечисленные недостатки, хочется определять константы в заголовочном файле.

Глобальные константы как inline переменные

C++17 ввел новую концепцию под названием inline variables. В C++ термин inline эволюционировал и стал означать “допускается несколько определений». Таким образом, встроенная переменная — это та переменная, которая может быть определена в нескольких файлах без нарушения ODR. Встроенные глобальные переменные по умолчанию имеют внешнее связывание.
Встроенные переменные имеют два основных ограничения, которые необходимо соблюдать:

  1. Все определения встроенной переменной должны быть идентичны (в противном случае, это приведёт к неопределенному поведению).

  2. Определение встроенной переменной должно присутствовать в любом файле, использующем переменную.

Компоновщик объединит все встроенные определения в одно определение переменной. Это позволяет нам определять переменные в заголовочном файле и обрабатывать их так, как если бы где-то в файле .cpp было только одно определение.
Перепишем наш пример следующим образом:

// constants.h #ifndef CONSTANTS_H #define CONSTANTS_H   // define your own namespace to hold constants namespace constants {  inline constexpr double pi { 3.14159 }; // note: now inline constexpr  inline constexpr double avogadro { 6.0221413e23 };  inline constexpr double my_gravity { 9.2 }; // m/s^2 -- gravity is light on this planet  // ... other related constants } #endif 
// main.cpp #include "constants.h"   #include <iostream>   int main() {  std::cout << "Enter a radius: ";  int radius{};  std::cin >> radius;    std::cout << "The circumference is: " << 2.0 * radius * constants::pi << 'n';    return 0; } 

Мы можем включать constants.h в любое количество cpp-файлов, но эти переменные будут созданы только один раз и совместно использоваться во всех файлах с кодом.

Инициализация статических полей класса

Рассмотрим класс со статическим полем. В C++14 вам нужно сначала объявить его в классе:

// my_header.h #pragma once #include <string>  struct SomeClass {  static std::string myStaticString; }; 

А затем определить его в отдельном блоке компиляции:

//my_src.cpp #include #my_header.h" std::string SomeClass::myStaticString{"This is annoying"}; 

В C++14 определение переменной в классе приведет к ошибке во время компиляции. Однако в C++17 можно так:

// my_header.h #pragma once  struct SomeClass {  static inline std::string myStaticString{"This is cool"}; }; 

Определение вне класса также возможно:

// my_header.h #pragma once  struct SomeClass {  static std::string myStaticString; };  inline std::string SomeClass::myStaticString{"This is cool"}; 

Замечания

Ещё раз подчеркну: все определения встроенной функции или переменной во всей программе должны быть идентичны. Нарушение этого правила приведёт к неопределённому поведению.

Статическая переменная-член (но не переменная пространства имен), объявленная constexpr, неявно является встроенной переменной.

Пример:

// my_header.h #pragma once  constexpr int generateRandomInt() {  // calculate some random value at compile time }  struct SomeClass {  static constexpr int myRandomInt = generateRandomInt(); }; 

Но почему же мы не сталкиваемся с проблемами при определении функций в заголовочных файлах классов?

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

  • Функция, определенная полностью внутри определения класса/структуры/объединения, неявно является встроенной функцией.

  • Функция, объявленная constexpr, неявно является встроенной функцией.

  • Удаленная функция неявно является встроенной функцией: ее определение (=delete) может отображаться в нескольких единицах трансляции.

Ссылки

При подготовке статьи, кроме материалов, на которые я ссылался в тексте, использовались:

  • C++ — Inline Variables and Functions

  • inline specifier

  • Storage class specifiers

  • Definitions and ODR (One Definition Rule)

  • Global constants and inline variables

  • Внутренняя и внешняя линковка в C++


Данная статья была подготовлена экспертом OTUS — Анатолием Махаевым специально для студентов курса C++ Developer. Professional.

В преддверии старта курса, приглашаем всех желающих записаться на бесплатный демоурок по теме: «Полезные инструменты в разработке на С++».

  • ЗАПИСАТЬСЯ НА ДЕМОУРОК

Источник: habr.com