Вы про типы, что ли? Нет, я хочу тот же тип, просто пустой.
Так в типе хранится вся трансформация. Иота поверх которой трансформ, поверх еще что то, имеет другой тип чем когда изначально пустой. А стереть тип значит сказать что есть просто какой-то ренж, как получен - не знаю, ограничен сверху или нет - не знаю, и т п. Возможность сохранить эту информацию мощнее чем невозможность ее сохранить. Поэтому сделать обертку всегда можно.
c какой целью вы меняете компиляторы? Сколько раз в день вы меняете компиляторы для хаскеля?
Вы уверены, что стало лучше?
Да. там с подсветкой в гцц сразу видно где ошибки и а где стэк инстанциирования. Читать всё подряд не нужно, это не художественное произведение.
MSVS
там ошибки полное дно
UI подвешивала при попытке их отрендерить
Ошибки на десят экранов из раста тоже легко получить при желании
если мисматч был в implicit-аргументе, которого не видно при печати по умолчанию.
Сам аргумент было видно. Но это не помогает, там же солвер/матчер чё-то пытается сделать, и что он пытается не выдаётся. Примера не будет, я игрался пару лет назад и уже всё стёр.
не один десяток лет и вкладывают деньги MS, Google, Apple, RH, Bloomberg
это весьма условно. Во-первых там несколько компиляторов, так что уже ресурсы сразу делятся на три. Во-вторых то что в компании много денег, не значит что на компиляторы там выделено больше чем полтора человека. Мсвц стд-либу пилит один человек, и он в ишью на гитхабе сообщил что ему времени не хватает и больше ресурсов на это выделять не планируется. В-третьих десятки лет легаси это минус а не плюс. В-четвёртых там не один С++ а еще пачка языков. Да и вообще там круг задач больше чем фронт языка, к примеру, в случае ллвм это фреймворк для создания других модных языков.
Я бы не пребеднялся, у резерч институтов бюджеты тоже хорошие, и дешевой рабочей силы там достаточно. А задачи стоят просто показать пруф оф концепт.
Ответил на это выше (или ниже, лень искать по странице).
В плюсах тоже нету, почему вы от хаскеля требуете?
Есть random_access_iterator концепт
support for constant time advancement with the +=, +, -=, and - operators, constant time computation of distance with -, and array notation with subscripting [].
iota его реализует для интов, и других подобных типов. Вообщем ртфм.
по факту везде используется miri, не имеющий отношения к С++.
Наконец есть valgrind, адрессанитайзеры и прочие инструменты, которые работают как с С++, так и с Rust.
Вы там определитесь какие инструменты используются а какие нет, и тогда пишите. Подсказка: используются разные т.к. мири проверят только малую часть проблем, а именно правила бч, и то теряет информацию когда происходит много кастов в сырые поинтеры.
Я отвечал на это, и привел пример что используется.
И что же там используется? Есть какой-то транслятор, а сами пруфы не наблюдаются. И это только стандартная либа, а еще для сотен крейтов никто даже этот трансформатор вообще не запускал. И вы не поверите, но для си тоже есть методы формальной верфикацией.
Все с точностью наоборот. Бесконечных границ в вашем примере нету. Дженерик кода которы работает с конечной и бесконечной верхней границей в хаскеле нету. Рандомного доступа в хаскеле нету. (да сложность O(n) для рандомного доступа равносильна его отсутсвию)
по поводу остальных проблем, добавляете -fconcepts-diagnostics-depth=10 и сразу получаете
error: no type named 'difference_type' in ...
Кстати зачем вы копируете ошибки сюда? Для устрашения? Без подсветки и перехода к коду их никто в реальности не читает. К слову ошибки в С++ дают понятную информацию в которой можно разобраться. В идрисе я получал "can not unify A and B" и вот там действительно сидишь гадаешь чего не хватает
В хаскеле весь [] это какая-то внутрення структура реализованая в компиляторе. Точнее часть более общей концепции ленивости. Тут опять сравнение не уместно.
Если в ансейф блоках нету сложных зависимостей, то это скорее всего тривиальные обёртки на си библиотекой. Проблемы у вас будут со сложными случаями, а там синтаксический мусор вроде unsafe_unchecked и ужасная эрогономика сырых указателей только мешают. Недавно слышал историю что пришлось ансейф код с раста переписать на си, чтобы его можно было удобно прочесть и отладить. Потом исправленную реализацию запихнуили обратно в раст.
Эти два пункта вообще не связаны, кок и мири это два разных подхода.
И тем не менее:
и тем не менее в тех директориях гита просто кодоген который гоняет код из одной репрезентации в другую. Каким образом он что то верифицирует?
Каким образом Miri заимствован из C++
зачем вы пытаетесь передергивать? И ежу очевидно что мой комментарий был про все остальные сантайзеры из вашего пункта (3). По miri это был пункт (1). Но рад что вы согласились что мири это санитайзер а не формальная верификация.
Кстати модель ссылок StackedBorrows в нем формально верифицирована.
Речь о проверке кода, при чём тут верификация какой-то модели? Вы сели в лужу со своим предыдущим тезисом и теперь пытаетесь приплести слово верификация хоть куда-то.
Если вы хотите вернуть разные ренжи в зависимости от рантайм значения, то задача требует динамического диспатча. Смысла в этом мало, если вы уже передаёте pred, то что мешает передать сразу консьюмера результирующего ренжа? В отличии от динамеческих языков в С++ нам не нужно стирать тип, информация о всём пайплайне трансформаций сохранятеся и может быть использована.
Это не годится. У вас на каждую случай свое имя как в си. Так я не могу написать обобщенный алгоритм который принимает как конечный так и бесконечный интервал.
так а в цифрах есть что то? Вот я открываю это https://projects.propublica.org/nonprofits/organizations/471136085
и тут копейки.
Недавно оказалось что в xz тоже мейнтейнер неактивный был, а потом вместо него подсадную утку поставили. Хотя либа использовалась много где я думаю.
Так в типе хранится вся трансформация. Иота поверх которой трансформ, поверх еще что то, имеет другой тип чем когда изначально пустой. А стереть тип значит сказать что есть просто какой-то ренж, как получен - не знаю, ограничен сверху или нет - не знаю, и т п. Возможность сохранить эту информацию мощнее чем невозможность ее сохранить. Поэтому сделать обертку всегда можно.
Я привожу пример про оверлоад по типу второго аргумента, а вы опять с одним аргументом мне ответ.
Какой-то маркер полезно иметь имхо. Чтобы не было такого:
length [1..]
Hangs forever *
f(x, unreachable_sentinel)
c какой целью вы меняете компиляторы? Сколько раз в день вы меняете компиляторы для хаскеля?
Да. там с подсветкой в гцц сразу видно где ошибки и а где стэк инстанциирования. Читать всё подряд не нужно, это не художественное произведение.
там ошибки полное дно
Ошибки на десят экранов из раста тоже легко получить при желании
Сам аргумент было видно. Но это не помогает, там же солвер/матчер чё-то пытается сделать, и что он пытается не выдаётся. Примера не будет, я игрался пару лет назад и уже всё стёр.
это весьма условно. Во-первых там несколько компиляторов, так что уже ресурсы сразу делятся на три. Во-вторых то что в компании много денег, не значит что на компиляторы там выделено больше чем полтора человека. Мсвц стд-либу пилит один человек, и он в ишью на гитхабе сообщил что ему времени не хватает и больше ресурсов на это выделять не планируется. В-третьих десятки лет легаси это минус а не плюс. В-четвёртых там не один С++ а еще пачка языков. Да и вообще там круг задач больше чем фронт языка, к примеру, в случае ллвм это фреймворк для создания других модных языков.
Я бы не пребеднялся, у резерч институтов бюджеты тоже хорошие, и дешевой рабочей силы там достаточно. А задачи стоят просто показать пруф оф концепт.
подчеркнул важное
Ответил на это выше (или ниже, лень искать по странице).
Есть
random_access_iteratorконцептiota его реализует для интов, и других подобных типов. Вообщем ртфм.
какой-то совсем тупняк. Вы С++ вчера начали учить? Для рандом акссесс итератора нужно реализовывать арифметические операторы, с ренжами аналогично.
Вы там определитесь какие инструменты используются а какие нет, и тогда пишите. Подсказка: используются разные т.к. мири проверят только малую часть проблем, а именно правила бч, и то теряет информацию когда происходит много кастов в сырые поинтеры.
И что же там используется? Есть какой-то транслятор, а сами пруфы не наблюдаются. И это только стандартная либа, а еще для сотен крейтов никто даже этот трансформатор вообще не запускал. И вы не поверите, но для си тоже есть методы формальной верфикацией.
Все с точностью наоборот.
Бесконечных границ в вашем примере нету. Дженерик кода которы работает с конечной и бесконечной верхней границей в хаскеле нету. Рандомного доступа в хаскеле нету. (да сложность O(n) для рандомного доступа равносильна его отсутсвию)
по поводу остальных проблем, добавляете
-fconcepts-diagnostics-depth=10и сразу получаетеКстати зачем вы копируете ошибки сюда? Для устрашения? Без подсветки и перехода к коду их никто в реальности не читает. К слову ошибки в С++ дают понятную информацию в которой можно разобраться. В идрисе я получал "can not unify A and B" и вот там действительно сидишь гадаешь чего не хватает
В хаскеле весь [] это какая-то внутрення структура реализованая в компиляторе. Точнее часть более общей концепции ленивости. Тут опять сравнение не уместно.
Опять контекст потеряли. я хочу
auto f(start, end) { return iota(start+1, end); }У вас в голове контекст в одно сообщение? Идите прочтите тогда ветку сначала
Если в ансейф блоках нету сложных зависимостей, то это скорее всего тривиальные обёртки на си библиотекой. Проблемы у вас будут со сложными случаями, а там синтаксический мусор вроде unsafe_unchecked и ужасная эрогономика сырых указателей только мешают. Недавно слышал историю что пришлось ансейф код с раста переписать на си, чтобы его можно было удобно прочесть и отладить. Потом исправленную реализацию запихнуили обратно в раст.
Эти два пункта вообще не связаны, кок и мири это два разных подхода.
и тем не менее в тех директориях гита просто кодоген который гоняет код из одной репрезентации в другую. Каким образом он что то верифицирует?
зачем вы пытаетесь передергивать? И ежу очевидно что мой комментарий был про все остальные сантайзеры из вашего пункта (3). По miri это был пункт (1). Но рад что вы согласились что мири это санитайзер а не формальная верификация.
Речь о проверке кода, при чём тут верификация какой-то модели? Вы сели в лужу со своим предыдущим тезисом и теперь пытаетесь приплести слово верификация хоть куда-то.
Как обычно условия меняются находу.
Если вы хотите вернуть разные ренжи в зависимости от рантайм значения, то задача требует динамического диспатча. Смысла в этом мало, если вы уже передаёте pred, то что мешает передать сразу консьюмера результирующего ренжа? В отличии от динамеческих языков в С++ нам не нужно стирать тип, информация о всём пайплайне трансформаций сохранятеся и может быть использована.
Использовать. У вас в случае с енум на каждое использование ренжа будет теперь в рантайме бранч - есть/нет конечное значение.
Не вижу никакого абьюза. Все работает как изначально и задумывалось
Это не годится. У вас на каждую случай свое имя как в си. Так я не могу написать обобщенный алгоритм который принимает как конечный так и бесконечный интервал.
Ну вот на самом деле у вас и будет тысяча строк которые не работают без сахара в компиляторе и не реализуют половину фич из цпп.