Pull to refresh
17
0

Пользователь

Send message

Да, у Саттера совсем смешная поделка. Даже стыдно что такие эксперты являются идолами цпп общества

Carruth

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

Разные компиляторы находят разные ошибки

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

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

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

Когда как, иногда много раз, когда, например, между проектами переключаюсь,

Давно у хаскеля много компиляторов? Стандарт вы тоже строго Haskell 2010 используете?

среди 180 строк это найти очень легко

гораздо легче чем в ваших страшилках это описывается

Вообще-то выдаёт, и топ-левел-цель, и конкретную ошибку.

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

Получается структура данных struct list { list* next; }. Это же катастрофически неэффективно. Во всяком случае если сделать в каком то расте. В хаскель не знаю что будет. Если весь язык заточен на линкед листы, то понятно что там будет все из коробки, но рандом ренж уже не выразить.

И какой размер команды не подскажете?

Крупным проектам хотя бы на с++20 перейти

Не очень понял, вы хотите просто по рантайм условию обрубить ренж?
псевдо код wantEmpty ? (r | take(0)) : r?
У нас есть rng(args...), можно ли это вообще вызывать если pred(args...) == false? А потом, ну получили мы тип не факт что он default constructible и его дефолт это пустой ренж. Может там захватывается ссылка на какой то контейнер.

Наверное должно быть [a] вместо a.

Если плюсы чего-то не могут, то это желающий этого чего-то виноват.
Если хаскель чего-то такого же не может, то это хаскель виноват.

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

random_access_iterator требует O(1) значит для Foo надо реализовать operator+=. Пока у вас только operator++ то прийдется скакать по-одному.

Я могу глядя только на него сказать, какие эффекты будут у выражения range[10]?

Это уже другая более общая тема и к итераторам, я думаю, не имеет отношения. Тут хаскель не панацея. Как раз в самом интересном случае с много-потоком эффекты работают хуже чем в раст https://www.fpcomplete.com/blog/when-rust-is-safer-than-haskell/
Хотя трюк с ST монадой и rank-2 типом интересный.

это перебор и слишком толсто

так а в цифрах есть что то? Вот я открываю это https://projects.propublica.org/nonprofits/organizations/471136085
и тут копейки.

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

Вы про типы, что ли? Нет, я хочу тот же тип, просто пустой.

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

Я привожу пример про оверлоад по типу второго аргумента, а вы опять с одним аргументом мне ответ.

Какой-то маркер полезно иметь имхо. Чтобы не было такого:
length [1..]

  • Hangs forever *

f(x, unreachable_sentinel)

clang++

c какой целью вы меняете компиляторы? Сколько раз в день вы меняете компиляторы для хаскеля?

Вы уверены, что стало лучше?

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

MSVS

там ошибки полное дно

UI подвешивала при попытке их отрендерить

Ошибки на десят экранов из раста тоже легко получить при желании

если мисматч был в implicit-аргументе, которого не видно при печати по умолчанию.

Сам аргумент было видно. Но это не помогает, там же солвер/матчер чё-то пытается сделать, и что он пытается не выдаётся. Примера не будет, я игрался пару лет назад и уже всё стёр.

не один десяток лет и вкладывают деньги MS, Google, Apple, RH, Bloomberg

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

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

Бесконечных границ в вашем примере нету.

enumFrom 0 что делает, по-вашему?

подчеркнул важное

Привёл выше (или ниже, лень искать по странице).

Ответил на это выше (или ниже, лень искать по странице).

В плюсах тоже нету, почему вы от хаскеля требуете?

Есть random_access_iterator концепт

support for constant time advancement with the +=, +, -=, and - operators, constant time computation of distance with -, and array notation with subscripting [].

iota его реализует для интов, и других подобных типов. Вообщем ртфм.

Куда же у вас поддержка operator[] пропала у iota?

какой-то совсем тупняк. Вы С++ вчера начали учить? Для рандом акссесс итератора нужно реализовывать арифметические операторы, с ренжами аналогично.

по факту везде используется miri, не имеющий отношения к С++.

Наконец есть valgrind, адрессанитайзеры и прочие инструменты, которые работают как с С++, так и с Rust.

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

Я отвечал на это, и привел пример что используется.

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

Все с точностью наоборот.
Бесконечных границ в вашем примере нету. Дженерик кода которы работает с конечной и бесконечной верхней границей в хаскеле нету. Рандомного доступа в хаскеле нету. (да сложность O(n) для рандомного доступа равносильна его отсутсвию)

по поводу остальных проблем, добавляете -fconcepts-diagnostics-depth=10 и сразу получаете

error: no type named 'difference_type' in ...

Кстати зачем вы копируете ошибки сюда? Для устрашения? Без подсветки и перехода к коду их никто в реальности не читает. К слову ошибки в С++ дают понятную информацию в которой можно разобраться. В идрисе я получал "can not unify A and B" и вот там действительно сидишь гадаешь чего не хватает

В хаскеле весь [] это какая-то внутрення структура реализованая в компиляторе. Точнее часть более общей концепции ленивости. Тут опять сравнение не уместно.

Опять контекст потеряли. я хочу
auto f(start, end) { return iota(start+1, end); }

Information

Rating
Does not participate
Registered
Activity