Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.129.24.132] |
|
Страницы: (11) « Первая ... 2 3 [4] 5 6 ... 10 11 все ( Перейти к последнему сообщению ) |
Сообщ.
#46
,
|
|
|
Есть сферы, где критично всё. Хотя и с разными уровнями. Там просто не бывает невысококритичного ПО. За остальные случаи я уже говорил: это решает заказчик, исходя из своих соображений эксплуатации целевого продукта. И дай ему бог не ошибиться.
Не пропустил. Ты оттуда цитировал. Цитата sergioK @ Это верно, но это не обязательно высококритичный продукт. Кроме того, возможные жертвы – это не единственный критерий. У нас как-то был проект от некоего оператора, не буду называть три большие буквы, которые хотели от нас полный цикл верификации виндового стека криптографии по упрощённой модели, ибо объём документации, понятное дело, ограничен. Кстати, тестирование должно выполняться без доступа к исходным кодам. Обычно его-таки дают, так дешевле, да и верификация в общем без анализа и рассмотрения многих аспектов требований и кода нереальна, но нужно всегда быть готовым к тому, что подсмотреть в коде ничего нельзя, есть только документация на него. Не уверен, я в нём не участвовал, хотя и консультировал по части архитектуры кода, работающего у винды на уровне ядра, но вроде бы это требовалось как часть процесса сертификации их банковских сервисов. С POSIX-ом им было проще, там открытый код. И да, это было давно, лет 10 как. Я не адвокат, но я знаю что критичный продукт это тот где могут пострадать люди или ущерб большой, какая разница не чем его писали то ? Добавлено https://checko.ru/company/aviaok-1036154001289 Информация в источниках может быть не вполне актуальной, сейчас мы из ООО кастуемся к АО. Спектр деятельности широкий, но помимо легко угадываемых по разделу дополнительной информации тут, они практически неактивны, поставщиков таких услуг и без нас хватает. Там просто все лицензии перечислены. Цитата kopilov @ Конкретно в нашей сфере он один и хорошо известен. Возможно не обману, если упомяну РосАтом в сфере ядерной и атомной энергетики, но это неточно. Больше не знаю. Хотя Минздрав хотелось бы упомянуть, но ИМХО «это утопия» ©. Ну или где можно посмотреть список контор, которые выдают сертификаты на высококритичный софт Добавлено Цитата Qraizer @ Кстати, уже постил куда-то, сбаяню. Мой любимый пример.... но нужно всегда быть готовым к тому, что подсмотреть в коде ничего нельзя, есть только документация на него В документации сказано: «функция void sort(int *vec, size_t size) должна выполнять сортировку массива vec, размером size. Сортировка осуществляется по возрастанию, результат замещает исходный vec.» Требуется разработать набор тестовых сценариев для проверки этого требования. Естественно так, чтобы их можно было рассматривать как доказательную базу корректности реализации sort() согласно описанию её поведения. Если кому интересно, могут попробовать. Пример, конечно искусственный, но он хорошо демонстрирует разницу в подходах к тестированию у нас и у бизнеса. |
Сообщ.
#47
,
|
|
|
Цитата Qraizer @ Есть сферы, где критично всё. Хотя и с разными уровнями. Там просто не бывает невысококритичного ПО. За остальные случаи я уже говорил: это решает заказчик, исходя из своих соображений эксплуатации целевого продукта. И дай ему бог не ошибиться. Не пропустил. Ты оттуда цитировал. Цитата sergioK @ Это верно, но это не обязательно высококритичный продукт. Кроме того, возможные жертвы – это не единственный критерий. У нас как-то был проект от некоего оператора, не буду называть три большие буквы, которые хотели от нас полный цикл верификации виндового стека криптографии по упрощённой модели, ибо объём документации, понятное дело, ограничен. Кстати, тестирование должно выполняться без доступа к исходным кодам. Обычно его-таки дают, так дешевле, да и верификация в общем без анализа и рассмотрения многих аспектов требований и кода нереальна, но нужно всегда быть готовым к тому, что подсмотреть в коде ничего нельзя, есть только документация на него. Не уверен, я в нём не участвовал, хотя и консультировал по части архитектуры кода, работающего у винды на уровне ядра, но вроде бы это требовалось как часть процесса сертификации их банковских сервисов. С POSIX-ом им было проще, там открытый код. И да, это было давно, лет 10 как. Я не адвокат, но я знаю что критичный продукт это тот где могут пострадать люди или ущерб большой, какая разница не чем его писали то ? Добавлено https://checko.ru/company/aviaok-1036154001289 Информация в источниках может быть не вполне актуальной, сейчас мы из ООО кастуемся к АО. Спектр деятельности широкий, но помимо легко угадываемых по разделу дополнительной информации тут, они практически неактивны, поставщиков таких услуг и без нас хватает. Там просто все лицензии перечислены. Цитата kopilov @ Конкретно в нашей сфере он один и хорошо известен. Возможно не обману, если упомяну РосАтом в сфере ядерной и атомной энергетики, но это неточно. Больше не знаю. Хотя Минздрав хотелось бы упомянуть, но ИМХО «это утопия» ©. Ну или где можно посмотреть список контор, которые выдают сертификаты на высококритичный софт Добавлено Цитата Qraizer @ Кстати, уже постил куда-то, сбаяню. Мой любимый пример.... но нужно всегда быть готовым к тому, что подсмотреть в коде ничего нельзя, есть только документация на него В документации сказано: «функция void sort(int *vec, size_t size) должна выполнять сортировку массива vec, размером size. Сортировка осуществляется по возрастанию, результат замещает исходный vec.» Требуется разработать набор тестовых сценариев для проверки этого требования. Естественно так, чтобы их можно было рассматривать как доказательную базу корректности реализации sort() согласно описанию её поведения. Если кому интересно, могут попробовать. Пример, конечно искусственный, но он хорошо демонстрирует разницу в подходах к тестированию у нас и у бизнеса. У нас был курс алгоритмов учили такому, у нас таким математики занимаються, при унивеситетах, но никак не в коммерческих компаниях, С сайта Цитата Крупный поставщик Организация поставила товаров или оказала услуг на сумму более 50 636 687 руб. Я опять что-то не понимаю ? это меньше 1 миилиона долларов, так ? , за 18лет работы ? но у нас это называеться киоск, У нас ларек пивной в год больше дает, ничего личного Цитата Не входит в реестр недобросовестных поставщиков Опять не понимаю, у нас такое в голову не придет писать, зачем ? А это что значит ? Цитата По данным ФНС, среднесписочная численность работников: 111 В фирме 111 работников ? Цитата 1Разработка, производство, испытание, установка, монтаж, техническое обслуживание, ремонт, утилизация и реализация вооружения и военной техники И тут я тебе понять не могу, ну ясно, что все это требует лицензиий, только софт то причем тут ? |
Сообщ.
#48
,
|
|
|
Цитата sergioK @ А у нас вчерашние студенты. Что делать, статус ИТ-столицы обязывает У нас был курс алгоритмов учили такому, у нас таким математики занимаються, при унивеситетах Цитата sergioK @ А он платит при этом миллионы человеко-часов 111-и работникам при белой бухгалтерии? А он использует при этом исключительно лицензионное ПО, потому как в противном случае ни один квалификационный сертификат не будет действительным? Документ, описывающий процесс развёртывания инструмента и полную методику работы с ним в наших процессах с приложенной лицензией на него как гарантом его подлинности, является хоть и далеко ещё не достаточным, но как ни крути неотъемлемым условием для получения квалификационного заключения по нему. И лицензии на подобного рода продукты из-за их малого рыночного спроса стоят нихрена себе. Просто для оценки вложений: в этом году нами была приобретена ещё одна лицензия на Rational Test Realtime за 2000000₱, а общий ордер на специализированное ПО, потраченный нами, нашим заказчиком и его головным распорядителем, за прошлый год составили около 125000000.У нас ларек пивной в год больше дает, ничего личного Цитата sergioK @ sergioK, ничего личного, но я был лучшего мнения о твоих аналитических способностях. К тому же это независимый источник, это его выводы о нас, а не наша реклама. ... |
Сообщ.
#49
,
|
|
|
Цитата Qraizer @ Цитата sergioK @ А он платит при этом миллионы человеко-часов 111-и работникам при белой бухгалтерии? А он использует при этом исключительно лицензионное ПО, потому как в противном случае ни один квалификационный сертификат не будет действительным?У нас ларек пивной в год больше дает, ничего личного У нас нет не белой бугалтерии и не лицензионного ПО, во-первых законы работают, во вторых можно систему обмануть можно только себе дороже, а в третих за ПО получают возврат, налогов и поддержку на случай сбоя, за пиратское по можешь штраф около 300,000$ или срок, а если вдруг сбой дасть то бизнес понесет убытки, Какой смысл стелять себе в ногу то ? А теперь название темы посмотри , может не надо уходить так далеко, можно новую тему открыть , если есть желание Добавлено Цитата Qraizer @ sergioK, ничего личного, но я был лучшего мнения о твоих аналитических способностях. К тому же это независимый источник, это его выводы о нас, а не наша реклама. Ну анализ можно проводит, когда реальность понимаешь, Я реально не понимаю зачем фирме на сайте писать что они честно работают, ясно что фирма существует много лет, то она работает кошерно, иначе б закрылась давно, вообще то ты ушел от темы, разговор был о софте и лицензиях не него, и цены на эти личензии вообще космические, даже по западным понятиям, Монтаж и все что написано на сайте к софту отношения не имеет. Добавлено Цитата Qraizer @ А он платит при этом миллионы человеко-часов 111-и работникам при белой бухгалтерии? У нас человеко-часов при дейсвующем бизнесе никто не считает, ну мне не известно, в одном из 111 в другом бизнесе 11, не факт что первый круче, да и не математика это считать можно по разному, полно всяких трюков(законных), |
Сообщ.
#50
,
|
|
|
sergioK, а кто первым ушёл от темы? Qraizer по нашей с тобой просьбе («вы — это кто?») дал ссылку на компанию, опосредованную (на независимый каталог — видимо, потому, что гугл, паразит, быстро индексирует). А ты уже начал выводы строить.
Ну и, раз такая пьянка, я тоже немного карты раскрою Добавлено Цитата sergioK @ У нас ларек пивной в год больше дает, ничего личного Ага, это не личное, это общественное: бухать наш народ любит |
Сообщ.
#51
,
|
|
|
Цитата sergioK @ В нашей сфере как раз принято контракты заключать под объёмы работ, которые измеряются именно что в человеко-часах. И они не с потолка берутся, есть стандартные таксы на ту или иную деятельность. Если кто работает быстрее, ему только плюс, больше денег в прибыль, но качество результатов естественно не должно страдать, если медленнее, то за свои, ибо зарплаты и налоги платить надо каждый месяц.У нас человеко-часов при дейсвующем бизнесе никто не считает, ну мне не известно Цитата sergioK @ Давай только без тролльства. Я ж не за вас, а за пресловутый ларёк, который ты упомянул.У нас нет не белой бугалтерии и не лицензионного ПО, во-первых законы работают И я не говорил, что наши прибыли баснословны. Это вообще к предмету высококритичности не имеет отношения, государственные кампании вообще на это могут положить и сосать бюджет, пока дают. Пока у государства Добавлено Цитата kopilov @ Ну как бы у нас нет страницы. Была, но в связи с реорганизацей тоже под редизайном. Давно уже, к слову, ответственный за это человек счас сильно другими вещами занят....на независимый каталог — видимо, потому, что гугл, паразит, быстро индексирует... Вообще, мне интересно, когда ж sergioK заметит, что он пытается оспорить свой же тезис. Ну не свой, а вон тот, про дроздов и строителей. Почему б не помочь хорошему человеку, если есть время, я после второй прививки немного свободен. Добавлено Ну так как насчёт задачки? Никто тестированием не занимался, что ли? Если сложно, можно попробовать попроще: "функция int sqeq(float a, float b, float c, float *x1, float *x2) должна решать квадратное уравнение с коэффициентами a, b и c. Выходные параметры x1 и x2 заполняются корнями уравнения, возвращаемое значение 1, если x1 и x2 успешно рассчитаны, или 0 в противном случае." С этой задачи у нас обычно начинается обучение джунов. |
Сообщ.
#52
,
|
|
|
Цитата Qraizer @ Ну не свой, а вон тот, про дроздов и строителей. про дроздов это когда программа дает сбой из-за поца, который не закрыл ресурс,естесно я упрощаю, и результат с десяток умерших, татаму что он физик а наниматель его друг детсва, или там брат подруги жены, добавь любое, а в строительсве если у ниженера нет лицензии то это не поможет, сотни, программист сделавший глупость юридически никак за это не отвечает, в отличии ои электрика , монтажника, механика и т,д, и количество этих багов зависит от его личной ответсвенности, желание сделать хорошо, воспитания, влияние окружение, желания быстро заработать и ,т,д, Вот и придумали шутку про дроздов, а в каждой шутке доля правды, as smaller as better Добавлено Цитата Qraizer @ В нашей сфере как раз принято контракты заключать под объёмы работ, которые измеряются именно что в человеко-часах. И они не с потолка берутся, есть стандартные таксы на ту или иную деятельность. В вашей это в какой ? ты же програмист или нет ? Добавлено Цитата Qraizer @ я после второй прививки немного свободен. И какая связь ? после второй прививки нельзя работать? Добавлено Цитата Qraizer @ Что делать, статус ИТ-столицы обязывает Таганрог это столица IT ? Или это была ирония ? |
Сообщ.
#53
,
|
|
|
В том, что любая операция добавления/изменения приводит к созданию полной копии списка. Оно было одно: Цитата их, например, нельзя просто сделать иммутабельными и/или ленивыми, в отличие от односвязных. Цитата applegame @ Это для чтения, а если надо перезаписать элемент, то придется часть этого дерева пересоздать, это будет стоить намного дороже. Не намного. 1) то что я перечислил, не особенности реализации LinkedList, а особенности двусвязных списков как структуры данных в принципе. 2) я тебе с самого начала говорил, что в твитте речь про LinkedList, но ты продолжил что-то додумывать. Пулы чего? Вот и получается x3: (указатель на объект + prev + next) вместо одного указателя на объект. Цитата applegame @ Я сделал предположение по этому его высказыванию (других я не знаю). А он явно сморозил чушь. Ты сделал предположение по каким-то своим фантазиям, которые упорно продолжаешь фантазировать. |
Сообщ.
#54
,
|
|
|
Цитата korvin @ И что? Любая операция добавления/изменения кортежа в эрланге приводят к созданию полной копии, и это совершенно не мешает быть кортежам иммутабельными.В том, что любая операция добавления/изменения приводит к созданию полной копии списка. Цитата korvin @ И оно неверное. И конечно же моя фраза про бесполезность никак не доказывает это твое утверждение. Ленивость - это вообще ортогональное явление. Сами списки не могут быть ленивыми - это бессмыслица. Ленивыми могут быть операции над самими списками или их элементами. И тут никакой разницы между односвязными и двусвязными списками нет вообще.Оно было одно: Цитата их, например, нельзя просто сделать иммутабельными и/или ленивыми, в отличие от односвязных. Цитата korvin @ Достаточно много, чтобы люди парились с хеш-таблицами и прочими алгоритмами с амортизированной константной сложностью.Не намного. Цитата korvin @ В твите речь не только о LinkedList, но ты продолжаешь игнорировать половину твита.1) то что я перечислил, не особенности реализации LinkedList, а особенности двусвязных списков как структуры данных в принципе. 2) я тебе с самого начала говорил, что в твитте речь про LinkedList, но ты продолжил что-то додумывать. Цитата korvin @ Пулы нод, для минимизации времени аллокации/освобождения памяти под ноду.Пулы чего? Цитата korvin @ Указатель на объект в любом случае есть. Поэтому получается +2*sizeof(size_t) на элемент, а не x3. В C/C++/D часто можно хранить в ноде сам объект, а не указатель на него, что позволяет сэкономить еще один указатель.Вот и получается x3: (указатель на объект + prev + next) вместо одного указателя на объект. Цитата korvin @ Какие фантазии? Автор прямо заявил, что любит односвязные списки, а LinkedList - это что-то совершенно другое. На мой вопрос, что именно "это совершенно другое" ты, видимо, ответить не в состоянии. Java мутабельный язык и в нём не прокатывает аргумент о проблемах персистентности. А в остальном получается, что LinkedList и односвязные списки - близнецы братья. Поэтому я и делаю вывод, что автор сморозил ерунду. Ты сделал предположение по каким-то своим фантазиям, которые упорно продолжаешь фантазировать. |
Сообщ.
#55
,
|
|
|
Цитата applegame @ Любая операция добавления/изменения кортежа в эрланге приводят к созданию полной копии, и это совершенно не мешает быть кортежам иммутабельными. При чём тут кортежи? Если ты используешь кортежи вместо массивов/списков, то ты используешь их неправильно. Цитата applegame @ Ленивость - это вообще ортогональное явление. Сами списки не могут быть ленивыми - это бессмыслица. Ленивыми могут быть операции над самими списками или их элементами ll = [ print 1 , print 2 , print 3 ] Какие операции тут ленивые? https://ideone.com/L5Toq1 Ленивые списки на Scheme (define-syntax lazy-cons (syntax-rules () ((_ head tail) (cons (delay head) (delay tail))))) (define (lazy-head ll) (force (car ll))) (define (lazy-tail ll) (force (cdr ll))) (define-syntax lazy-list (syntax-rules () ((_ x) (lazy-cons x '())) ((_ x . xs) (lazy-cons x (lazy-list . xs))))) ;;; ---------------------------------------------------------------- (define ll (lazy-list (print 1) (print 2) (print 3))) (lazy-head (lazy-tail ll)) https://ideone.com/BexV68 и на Java. Синтаксического сахара только не хватает import java.util.function.Supplier; /* Name of the class has to be "Main" only if the class is public. */ class Ideone { public static void main (String[] args) throws java.lang.Exception { var ll = Lazy.list( () -> print(1), () -> print(2), () -> print(3) ); ll.tail().head(); } private static Unit print(Object o) { System.out.println(o); return Unit.UNIT; } } final class Lazy { public static <T> Promise<T> delay(Supplier<T> expr) { return new Promise<>(expr); } public static <T> List<T> cons(Supplier<T> headExpr, Supplier<List<T>> tailExpr) { return new List<>(new Promise<>(headExpr), new Promise<>(tailExpr)); } public static <T> List<T> nil() { @SuppressWarnings("unchecked") var nil = (List<T>) List.NIL; return nil; } @SafeVarargs public static <T> List<T> list(Supplier<T>... values) { if (values == null || values.length == 0) { return nil(); } return list(values, 0); } private static <T> List<T> list(Supplier<T>[] values, int headCursor) { if (headCursor == values.length) { return nil(); } return new List<>(new Promise<>(values[headCursor]), new Promise<>(() -> list(values, headCursor+1))); } private Lazy() { throw new UnsupportedOperationException("utility class"); } } final class List<T> { static final List<?> NIL = new List<>(null, null); private final Promise<T> head; private final Promise<List<T>> tail; List(Promise<T> head, Promise<List<T>>tail) { this.head = head; this.tail = tail; } public T head() { return head.force(); } public List<T> tail() { return tail.force(); } } final class Promise<T> { private static final Object undefined = new Object(); private final Supplier<T> delayedExpression; @SuppressWarnings("unchecked") private T value = (T) undefined; Promise(Supplier<T> expr) { this.delayedExpression = expr; } public T force() { if (value == undefined) { value = delayedExpression.get(); } return value; } } final class Unit { public static final Unit UNIT = new Unit(); private Unit() {} } https://ideone.com/r0ttxo Цитата applegame @ Достаточно много, чтобы люди парились с хеш-таблицами и прочими алгоритмами с амортизированной константной сложностью. Ты путаешь тёплое с мягким. 1) никто в ФП не парится с хеш-таблицами 2) чистые функциональные хеш-таблицы реализуются точно также, как и функциональные массивы — с использованием деревьев и частичным копированием — и имеют точно такую же сложность. Цитата applegame @ В твите речь не только о LinkedList, но ты продолжаешь игнорировать половину твита. Но речи о single-linked-list vs double-linked-list там нет, так что нет, не игнорирую. Цитата applegame @ Пулы нод, для минимизации времени аллокации/освобождения памяти под ноду. Т.е. ты 1) практически делаешь работу аллокатора 2) никак не решаешь отсутствие векторизации 3) усложняешь структуру данных / её использование, вместо того, чтобы попробовать другую структуру, не имеющую таких проблем отличное решение, молодец. Цитата applegame @ Указатель на объект в любом случае есть. Поэтому получается +2*sizeof(size_t) на элемент, а не x3. 1(указатель на объект) + 2 = 3, поэтому x3. Если ты почему-то думал, что x3 = 1+3, то нет. Цитата applegame @ Автор прямо заявил, что любит односвязные списки Нет, он написал Цитата Don't get me wrong; I love linked lists. They're as useful in C as they are in Scheme. Ладно Scheme, но с чего ты взял, что «linked lists ... in C» означает «односвязные списки»? В C нет двусвязных? Может, ему, например, нравятся интрузивные двусвязные списки в Си? Цитата applegame @ Java мутабельный язык Ты теперь ещё и терминологию какую-то выдумываешь. В Java нельзя описывать иммутабельные объекты? Это запрещено на уровне JVM? Как же Scala и Clojure работают? Может их не рекомендуют к использованию? Да нет, наоборот, рекомендуют. Вот и в стандартной библиотеке давно появилось StreamAPI для работы с коллекциями в функциональном стиле, а неизменяемые обёртки для стандартных коллекций в JDK существуют с незапамятных времён. Добавлено Это и есть автор известной книги по Яве, а также части JDK, в том числе и LinkedList. Какие полмира? Кто его использует? Все хоть сколько-нибудь адекватные люди если и используют его, то крайне редко. Ты тоже любишь пофантазировать? https://discuss.kotlinlang.org/t/why-kotlin...ntation/15991/2 И я не понимаю, зачем, если есть замечательные ArrayList и ArrayDeque. Добавлено ArrayList vs LinkedList benchmark |
Сообщ.
#56
,
|
|
|
Цитата korvin @ Какие полмира? Кто его использует? Все хоть сколько-нибудь адекватные люди если и используют его, то крайне редко. Ты тоже любишь пофантазировать? Не прнимающие направо и на лево используют ArrayList, исторический курьез языка, А LinkedList нужен когда ды ты считываешь данные неопередельной длины, особенно большие обьемы, необходимось зависит от задачи, зачем он двойной нужен это разговор отдельный, Добавлено Цитата korvin @ И я не понимаю, зачем, если есть замечательные ArrayList и ArrayDeque. Ты на втором курсе data structure изучал ? Array имеет фиксированный размер памяти, LL нет, кто применять и где зависить от тебя и понимания задачи, все разговоры о ом что LL устарел чистой воды тролинг, или не понимание. |
Сообщ.
#57
,
|
|
|
Цитата sergioK @ А LinkedList нужен когда ды ты считываешь данные неопередельной длины, особенно большие обьемы, Нет, не нужен. Цитата sergioK @ Ты на втором курсе data structure изучал ? А ты data structures только на уровне базового курса университета знаешь? Цитата sergioK @ Array имеет фиксированный размер памяти, LL нет, Ты вообще, в курсе, что такое ArrayList? Цитата sergioK @ что применять и где зависить от тебя и понимания задачи, все разговоры Не только от этого, но и от характеристик самой структуры данных. Цитата sergioK @ о ом что LL устарел чистой воды тролинг, или не понимание. Это у тебя полное непонимание того, как работает JVM, память и процессор. |
Сообщ.
#58
,
|
|
|
Цитата korvin @ При том, что твой аргумент, что двусвязный список нельзя сделать иммутабельным, потому что надо его целиком копировать при, например, добавлении элемента несостоятелен. Двусвязный список можно сделать иммутабельным. Для того же эрланга можно как нефиг делать написать NIF реализующий иммутабельный двусвязный список.При чём тут кортежи? Если ты используешь кортежи вместо массивов/списков, то ты используешь их неправильно. Цитата korvin @ Очевидно print. Словосочетание "ленивый список" - это по сути жаргонизм обозначающий список с поддержкой ленивых вычислений над элементами. Но суть-то не в терминах. Суть в том, что двусвязный список тоже можно сделать с поддержкой ленивых вычислений (или просто ленивым, если тебе так хочется), не вижу никаких препятствий.Какие операции тут ленивые? Цитата korvin @ Не путаю. Просто ты в каждом ответе норовишь съехать куда-то в сторону.Ты путаешь тёплое с мягким. 1) никто в ФП не парится с хеш-таблицами 2) чистые функциональные хеш-таблицы реализуются точно также, как и функциональные массивы — с использованием деревьев и частичным копированием — и имеют точно такую же сложность. 1) Не парятся потому что выбора у них нет. А в языках с поддержкой мутабельности еще как парятся. 2) См. ответ на пункт 1. Вывод: иммитация массива на деревьях в ФП - вынужденная мера, это лучшее, что там можно сделать. Это слабое место иммутабельного ФП. И памяти оно ест больше и к кэшу процессора недружелюбно и доступ неконстантный. И-за этого в узких местах приходится городить костыли на языках с поддержкой мутабельности. Цитата korvin @ Я думаю, ты просто некомпетентен в этой области. Почитай про мемори пулы и вообще про низкоуровневую оптимизацию работы с памятью, инфа на эту тему есть.Т.е. ты 1) практически делаешь работу аллокатора 2) никак не решаешь отсутствие векторизации 3) усложняешь структуру данных / её использование, вместо того, чтобы попробовать другую структуру, не имеющую таких проблем отличное решение, молодец. Цитата korvin @ Ну а о чем там тогда речь? Почему "LinkedList is another matter entirely"? Раз ты процитировал этот кусок, то хотелось бы услышать твое понимание слов автора.Но речи о single-linked-list vs double-linked-list там нет, так что нет, не игнорирую. Цитата korvin @ Ну в общем-то из-за Scheme я так и понял. Ну и как из фразы "They're as useful in C as they are in Scheme" можно вообще сделать вывод, что в C автор имел ввиду не те же списки, что и в Scheme? Альтернативный английский? Ну и если эти linked list так полезны в C, а LinkedList это "another matter entirely", то вероятно в Java должен существовать правильный linked list, аналогичный таковому в C и Scheme. Он существует?Ладно Scheme, но с чего ты взял, что «linked lists ... in C» означает «односвязные списки»? В C нет двусвязных? Может, ему, например, нравятся интрузивные двусвязные списки в Си? Цитата korvin @ А ты типа не понял о чем речь? Или таки сделал вид, что не понял? Ок, разъясняю: "мутабельным языком" я назвал язык имеющий встроенную поддержку мутабельных переменных. Так понятнее? Ну и как обычно ты сворачиваешь с основной темы. Давай уже назад к "иммутабельным/ленивым" двусвязным спискам. По твоему мнению их можно сделать таковыми или нет? Если нет, то что именно мешает?Ты теперь ещё и терминологию какую-то выдумываешь. Цитата korvin @ Ну это вообще из серии "сам придумал - сам опровергнул". В Java нельзя описывать иммутабельные объекты? Это запрещено на уровне JVM? Как же Scala и Clojure работают? Может их не рекомендуют к использованию? Да нет, наоборот, рекомендуют. Вот и в стандартной библиотеке давно появилось StreamAPI для работы с коллекциями в функциональном стиле, а неизменяемые обёртки для стандартных коллекций в JDK существуют с незапамятных времён. |
Сообщ.
#59
,
|
|
|
Цитата applegame @ При том, что твой аргумент, что двусвязный список нельзя сделать иммутабельным, потому что надо его целиком копировать при, например, добавлении элемента несостоятелен. Состоятелен, потому что юз-кейсы у списка и кортежа принципиально разные. Цитата applegame @ Двусвязный список можно сделать иммутабельным. Для того же эрланга можно как нефиг делать написать NIF реализующий иммутабельный двусвязный список. Без копирования? Ну-ну. Цитата applegame @ Очевидно print. Очевидно, 1) print здесь элемент списка, а не «операция» над элементом списка, 2) в примерах на Scheme и Java print не является ленивой функцией. Цитата applegame @ Суть в том, что двусвязный список тоже можно сделать с поддержкой ленивых вычислений (или просто ленивым, если тебе так хочется), не вижу никаких препятствий. Нельзя, из-за обратной ссылки на предыдущий элемент. Ты не сможешь даже сконструировать такой список. Цитата applegame @ Просто ты в каждом ответе норовишь съехать куда-то в сторону. Вообще-то съезжать в сторону начал ты с самого начала. Цитата applegame @ Я думаю, ты просто некомпетентен в этой области. Почитай про мемори пулы и вообще про низкоуровневую оптимизацию работы с памятью, инфа на эту тему есть. Я думаю, что ты некомпетентен, но думаешь, будто компетентен. Вот и скинь ссылку на «правильную» с твоей точки зрения инфу. А лучше сразу свой связный список с мемори пулом и примером юз-кейса для тестирования/замера. Цитата applegame @ Ну а о чем там тогда речь? Речь о том, что класс LinkedList оказался на практике почти бесполезен. Цитата applegame @ Ну в общем-то из-за Scheme я так и понял. Я так и подумал, что ты выборочно прочитал то, что захотел прочитать и триггернулся. Цитата applegame @ Ну и как из фразы "They're as useful in C as they are in Scheme" можно вообще сделать вывод, что в C автор имел ввиду не те же списки, что и в Scheme? Вопрос другой: как из этой фразы можно было сделать вывод, что автор имел в виду совершенно одинаковые структуры данных в двух сильно разных языках? Цитата applegame @ Ну и если эти linked list так полезны в C, а LinkedList это "another matter entirely", то вероятно в Java должен существовать правильный linked list, аналогичный таковому в C и Scheme. Он существует? В JDK — нет. В сторонних библиотеках коллекций — возможно. Вот, например, в org.apache.commons есть двусвязный список с этим твои кэшированием нод Цитата applegame @ А ты типа не понял о чем речь? Я-то понял, только зачем ты терминологию выдумываешь? Цитата applegame @ По твоему мнению их можно сделать таковыми или нет? Если нет, то что именно мешает? Нет. Что мешает, написал выше. Ты, конечно, можешь просто взять мой пример ленивого односвязного списка для Java и сделать двусвязный. Ну или с нуля на твоём любимом языке. Цитата applegame @ Ну это вообще из серии "сам придумал - сам опровергнул". Кто ж разберёт твои фантазии. |
Сообщ.
#60
,
|
|
|
Цитата korvin @ Цитата sergioK @ Ты на втором курсе data structure изучал ? А ты data structures только на уровне базового курса университета знаешь? Нет, не только Добавлено Цитата korvin @ Ты вообще, в курсе, что такое ArrayList? Я таких ArrayList не один десяток написал , разных имплементаций , ArrayList умножает память на 3/2 и перегрузить это нельзя в отличии от вектора, и это одна имлементация интерфэйса java.util.List другая это Linked List, пользуешь когда не знаешь сколько элементов будет. |