Для чего нужны дженерики

Что такое дженерики и с чем их едят?

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

Что такое дженерики?

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

Чем дженерики отличаются от оригинальных препаратов?

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

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

Как проверяют дженерики и биосимиляры?

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

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

Как дженерики проверяют в России?

По словам клинического фармаколога Олега Талибова, российские требования к регистрируемым дженерикам практически соответствуют американским и европейским (согласно закону от 2010 года «Об обращении лекарственных средств»). Бытует миф, что в России могут зарегистрироват дженерик, который не эквивалентен оригиналу, но на деле это противоречит закону.

До недавнего времени биосимиляры в РФ проходили регистрацию по упрощенной схеме, как обычные дженерики. В результате на рынке появились препараты, которые действуют далеко не так, как оригинальные. Новые правила регистрации биосимиляров гораздо более надёжны.

Почему у российских дженериков плохая репутация?

Среди российских дженериков попадаются некачественные препараты – это может быть связано с тем, что их регистрировали по старым правилам либо нарушая закон. Гастроэнтеролог, генеральный директор клиники «Рассвет» Алексей Парамонов говорит, что не верит исследованиям биоэквивалентности, которые проводятся в России: «Я сам видел, как они могут проводиться исключительно на компьютере».

Кроме того, исследования не всегда проводятся качественно: «Многие российские компании изначально были нацелены на исследования в 2–3 раза дешевле. Это можно сделать за счёт меньшего контроля качества, более дешёвой лаборатории», – говорит клинический фармаколог Олег Талибов.

Также в России очевиден эффект от политики импортозамещения, считает онколог, сооснователь Клиники амбулаторной онкологии и гематологии Михаил Ласков: «В общем и целом налицо непрозрачность и непубличность процедур, ограничение конкуренции/протекционизм, отсутствие бизнес-логики в поведении наших фармпроизводителей (явный перегиб в выборе меньшего и менее выгодного рынка за счёт встраивания в тренд по импортозамещению».

Почему дженерики дешевле оригинальных препаратов?

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

На окончательную стоимость дженериков часто влияют условия рынка.

Сколько может стоить качественный дженерик?

По мнению экспертов, слишком малая стоимость вызывает подозрения. «Если оригинальный препарат стоит 1000 рублей, а дженерик – 20 рублей, возникает вопрос: «А на чем сэкономили 980 рублей?» – говорит Олег Талибов. Экономия может идти за счёт субстанции, контроля качества или труда людей.

Стоит ли покупать лекарства за рубежом?

Опрошенные врачи говорят о том, что доверяют крупным зарубежным фирмам и обычно покупают лекарства в России. Предполагается, что такая компания не будет рисковать репутацией, приобретая сомнительное сырье, и все её заводы имеют сертификат GMP (Good Manufacturing Practice – стандарты, помогающие избежать нарушений, из-за которых лекарства окажутся загрязненными, переохладятся, перегреются или изменят свойства по любой другой причине – прим.)

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

Как распознать дженерик?

Официальной базы не существует. В ответ на запрос «Медузы» Минздрав сообщил, что в таком сервисе нет никакой необходимости, потому что дженерики — полноценная замена оригинальным препаратам. Однако интересующиеся могут изучить справочник «Видаль» (часть 1, часть 2 и часть 3), где указаны оригинальные препараты с популярными действующими веществами.

Как понять, какой дженерик лучше?

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

2018 году планируется к изданию «Белая книга» компании MorganFrank, в которой приводятся данные исследований, где дженерики сравнивались с оригиналом.

Дженерик могут снять с продажи?

Да, если о серьёзной нежелательной реакции на этот препарат или о его неэффективности стало известно государственным органам. Чтобы обнаруживать такие факты в разных странах созданы системы, когда врачи и пациенты могут сообщать о своих подозрениях в государственные органы. В России это Росздравнадзор.

Что делать, если нет денег на оригинальный препарат?

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

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

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

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

Правила безопасности при использовании дженериков:

Автор: Дарья Саркисян.

Оригинал статьи – Medium.com.

Опубликовано с разрешения редакции «Медузы».

Подписывайтесь на страницу СПИД.ЦЕНТРа в фейсбуке

Источник

Что такое дженерики?

Для чего нужны дженерики. Смотреть фото Для чего нужны дженерики. Смотреть картинку Для чего нужны дженерики. Картинка про Для чего нужны дженерики. Фото Для чего нужны дженерики

Изобретение нового лекарства, процесс его испытания, клинические исследования и регистрация занимают много времени. Иногда с момента получения молекулы действующего вещества до появления в продаже первой упаковки может пройти 10-15 лет. Этот процесс экономически затратный, поэтому оригинальный препарат часто дорогой. Но позже в продаже появляются аналоги, которые часто стоят гораздо дешевле. Если в них используется то же самое действующее вещество, препарат называют дженериком.

Что такое препараты-дженерики

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

После изобретения лекарства, компания получает патент на оригинальную молекулу действующего вещества. Исключительные права на производство и продажу сохраняются за компанией в течение 20 лет. После этого другие фармкомпании могут производить дженерики лекарственного средства. Например, существует оригинальное лекарство российского производства Арбидол. Но в 2007 г у него закончилось действие патента. Поэтому вскоре появились дженерики Арпетол (Беларусь), Иммуностат.

У них одинаковое международное непатентованное название (МНН), но производитель в праве изменять упаковку, давать собственное торговое название лечебному средству. Поэтому в продаже есть Ибупрофен и его дженерик Нурофен.

К дженерикам предъявляются не менее строгие требования к качеству и эффективности. Несмотря на использование одного и того же действующего вещества, влияние на организм может отличаться. Это связано с несколькими факторами:

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

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

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

Почему дженерики дешевле оригинальных препаратов?

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

В стоимость входят вспомогательные вещества. В фармакологии их назначение – придавать форму, связывать основной компонент.

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

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

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

Почему дженерики могут быть менее эффективными?

У денерика лекарства действующее вещество препарата, и влияние на организм должно быть сопоставимо с оригиналом. Но некоторые врачи и пациенты утверждают, что у определенных лекарств он может существенно отличаться. Чаще всего на это обращают внимание при покупке антибиотиков. Оригинальный препарат Аугментин в аптеках продается как Амоксиклав и Фемоклав. По утверждению врачей копия в этом случае не хуже оригинала.

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

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

Стоит ли использовать дженерики

Препараты-дженерики занимают около 60% от общего рынка лекарств. Из-за стоимости и хорошей эффективности их приобретают разные группы покупателей лучше, чем оригиналы.

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

Но в фармакологии есть лекарственные средства, к которым предъявляют повышенные требования. Это препараты для лечения онкологических больных на курсе химиотерапии, большая часть групп антибиотиков.

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

В США в помощь врачам разработана «Оранжевая книга». Это пособие, на страницах которого собраны списки оригинальных препаратов. В следующих разделах книги можно найти дженерики необходимого препарата с доказанной эффективностью. Они формируют список А и расположены на зеленых страницах. Если название препарата обнаружено на красных страницах книги, это обозначает, что оно соответствует эффективности, но имеет низкий уровень доказательств.

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

Будик Александр Михайлович, невролог, КМН, главный врач медицинских кабинетов 36,6

ИМЕЮТСЯ ПРОТИВОПОКАЗАНИЯ, ПЕРЕД ПРИМЕНЕНИЕМ НЕОБХОДИМО ПРОКОНСУЛЬТИРОВАТЬСЯ СО СПЕЦИАЛИСТОМ

Источник

Зачем нужны дженерики в Go?

Для чего нужны дженерики. Смотреть фото Для чего нужны дженерики. Смотреть картинку Для чего нужны дженерики. Картинка про Для чего нужны дженерики. Фото Для чего нужны дженерики

Эта статья о том, что будет означать добавление дженериков в Go, и почему я считаю, что нам это следует сделать. Также я коснусь возможного изменения архитектуры языка ради добавления дженериков.

Go вышел 10 ноября 2009-го. Меньше чем через сутки появился первый комментарий про дженерики. В нём также упомянуты исключения, которые мы добавили в язык в виде паники и восстановления (panic and recover) в начале 2010-го.

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

Зачем нужны дженерики?

Что означает добавление дженериков и почему мы этого хотим?

Перефразируя Jazayeri и других: программирование с дженериками позволяет представлять функции и структуры данных в виде дженериков, исключая типы.

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

Пусть у нас есть слайс целых чисел.

Выглядит просто. Но даже для простой функции вроде этой вам может понадобиться написать несколько тестов. И когда я это сделал, то обнаружил баг. Уверен, многие его уже заметили.

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

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

Большинство других статически типизируемых языков, вроде С++, Java, Rust или Swift, поддерживают дженерики именно для таких ситуаций.

Современное программирование на Go с дженериками

Так как же люди пишут подобный код на Go?

В этом языке вы можете написать функцию, которая работает с разными типами слайсов с помощью интерфейсного типа (interface type) и определения метода для типов слайсов, которые вы хотите передавать. Так работает функция sort.Sort из стандартной библиотеки.

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

Но этот подход не соответствует нашим желаниям. Нужно самостоятельно писать методы в интерфейсах. Довольно странно определять именованный тип с парой методов чтобы лишь поменять порядок элементов в слайсе. А методы, которые вы пишете, будут совершенно одинаковыми для всех типов слайсов, так что мы не исключили код, а, в каком-то смысле, перенесли и уплотнили. Хотя интерфейсы — это способ представления дженериков, они не дают нам всего, что нам нужно от дженериков.

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

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

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

Что дженерики могут дать Go

Первое и самое важное, что нам нужно от дженериков в Go, это возможность писать функции вроде Reverse и не беспокоиться о типах элементов в слайсах. Мы хотим исключить тип элементов. Также мы хотим писать функцию и тесты однократно, класть их в доступный для Go пакет и вызывать по мере необходимости.

А поскольку мы говорим об open source, то будет ещё лучше, если кто-нибудь сможет написать Reverse один раз, а мы все будем пользоваться этой реализацией.

Есть примеры, характерные для Go с его строгой поддержкой параллелизма.

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

Слайсы и map’ы — самые полезные дженерик-структуры данных, но они не единственные. Вот другие:

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

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

Вот какую пользу может извлечь Go из дженериков. Дженерики могут стать эффективными кирпичиками, позволяющими делиться кодом и проще создавать программы.

Надеюсь, я смог объяснить, почему имеет смысл их изучить.

Преимущества и цена

Но дженерики не появляются из Big Rock Candy Mountain, края, в котором солнце каждый день сияет над лимонадными источниками. У каждого изменения языка есть своя цена. Несомненно, что добавление дженериков в Go усложнит язык. Как и с любым изменением, нам нужно обсудить максимизацию преимуществ и минимизацию цены.

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

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

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

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

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

Быстрая сборка и исполнение
Мы хотим как можно больше сократить длительность сборки и исполнения по сравнению с сегодняшней производительностью Go. C дженериками связаны компромиссы между быстрой сборкой и исполнением. Нам нужно как можно больше ускорить оба процесса.

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

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

Черновик архитектуры

Думаю, это возможно. Чтобы завершить статью, я хочу от обсуждения необходимости внедрения дженериков и требований к ним перейти к обсуждению архитектуры, с помощью которой дженерики можно внедрить в Go.

На Gophercon в этом году Роберт Гриземер (Robert Griesemer) и я опубликовали черновик архитектуры дженериков в Go. По ссылке вы найдёте все подробности, а здесь я коснусь лишь основных моментов.

Тело функции совершенно такое же, изменилась только сигнатура.

Тип элементов слайса исключён. Теперь он называется Element и превратился в так называемый параметр типа (type parameter). Вместо того, чтобы быть частью параметра типа слайса, он теперь отдельный, дополнительный параметр типа.

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

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

Вызов дженерик-функции выглядит как вызов любой другой функции.

Контракты

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

Теперь посмотрим на другую функцию.

Вот как контракт Sequence определяется в этом примере.

Те, кто помнят архитектуру, которую мы представили на Gophercon 2018, заметят, что такой способ написания контракта гораздо проще. Мы получили много отзывов о ранней версии, в которой контракты были гораздо сложнее, и постарались учесть пожелания. Новые контракты гораздо проще писать, читать и понимать.

Контракты позволяют задавать тип параметра типа и/или список методов параметра типа. Также контракты позволяют описывать взаимосвязи между разными параметрами типов.

Контракты с методами

Всё просто: проходим по слайсу, вызываем метод String применительно к каждому элементу и возвращаем слайс с получившимся строковыми значениями.

Контракты с несколькими типами

Вот пример контракта с несколькими параметрами типов.

Важный вывод заключается в том, что контракт не обязательно относится к какому-то одному типу. Он может описывать взаимосвязи между двумя и больше типами.

Упорядоченные типы (Ordered types)

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

Контракт Ordered говорит о том, что тип T должен быть упорядоченным, то есть контракт поддерживает операторы вроде «меньше чем», «больше чем», и так далее.

Контракт Ordered — это просто список всех упорядоченных типов, определённых языком. Контракт принимает любые типы из списка, или любые именованные типы, в основе которых лежит какой-то тип из списка. По сути, любой тип можно использовать с оператором «меньше чем».

Гораздо проще перечислить типы, поддерживающие оператор «меньше чем», чем изобрести новую нотацию, работающую со всеми операторами. Наконец, в Go операторы поддерживаются только встроенными типами.

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

Дженерик-структуры данных

Наконец, давайте посмотрим на простую дженерик-структуру данных, двоичное дерево. В этом примере дерево содержит функцию сравнения, поэтому к типам элементов не предъявляется никаких требований.

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

Этот код тестирует, содержит ли дерево значение.

Обратите внимание на аргумент типа E в типе узла. Так выглядит написание дженерик-структуры данных. Пишется так же, как обычный код на Go, за исключением того, что там и сям разбросаны аргументы типов.

Пользоваться деревом просто.

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

Следующие шаги

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

Роберт Гризмер написал подготовительный CL, который модифицирует пакет go/types. Это позволяет протестировать, может ли код, использующий дженерики и контракты, выполнять проверку типов. Работа ещё не закончена, но для одного пакета эта фича по большей части работает, и мы продолжим разработку.

Нам хотелось бы, чтобы с помощью этой и последующими реализациями люди пытались писать и использовать дженерик-код, смотрели, что происходит. Мы хотим быть уверены, что люди могут писать нужный им код, и что они могут использовать его как ожидается. Конечно, сначала не всё будет работать, и по мере работы мы что-то изменим. И нам гораздо интереснее отзывы о семантике, чем о подробностях синтаксиса.

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

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *