LINUX.ORG.RU

Rust и двусвязный список

 , двусвязный список,


4

2

Хорошую тему тут затронули

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

http://contain-rs.github.io/linked-list/src/linked_list/lib.rs.html#11-1388

Или не лучшее? Растаманы и растафобы, собирайтесь на великую битву!

А вот, кстати, ещё про списки:

https://rust-unofficial.github.io/too-many-lists/

★★★★★

Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от a--

Ну вот пора бы и проверить, остались ли у тебя хоть какие-то знания.

вот! пробил час! пришло время! нечто темное поднялось из бездны и потребовало доказать математически, что 4 это два раза по два, а два это два раза по одному… карочи что 4 это 4 раза по одному.

сцуко…до слез…

вернитесь к спискам уже. продолжаем наблюдение.

alysnix ★★★
()
Ответ на: комментарий от alysnix

Задачка-то и не претендовала на сложность. Для математика такое АККУРАТНОЕ доказательство по сложности примерно как для программиста на собеседовании написать подсчет суммы четных элементов массива, обычным циклом, без всяких stl.

a--
()
Последнее исправление: a-- (всего исправлений: 1)
Ответ на: комментарий от a--

Для математика такое АККУРАТНОЕ доказательство по сложности примерно как для программиста на собеседовании написать подсчет суммы четных элементов массива, обычным циклом, без всяких stl.

если чел сказал - заканчивал мехмат, значит заканчивал мехмат. что тут странного-то?

сразу начинается - а ты справку покажи, задачку реши, что за ерунда.

alysnix ★★★
()
Ответ на: комментарий от alysnix

Не тянет он на то, что заявляет, даже близко. И даже если он там отмучился и все потом забыл — пусть молчит об этом.

Вот если меня попросить формально доказать 2х2=4 — мне это будет интересно вспомнить. Конечно, при условии, что это не домашнее задание там чье-то.

a--
()
Последнее исправление: a-- (всего исправлений: 2)
Ответ на: комментарий от a--

Вот если меня попросить формально доказать 2х2=4 — мне это будет интересно

так докажи, если интересно. почему надо просить. я думаю что из доказательства что 1+1 = 2, будет следовать доказательство любого результата операции типа сложения и умножения. но я не кончал мехмат.

alysnix ★★★
()
Ответ на: комментарий от aist1

я кончал мифи. и знаю что такое индукция.

счас меня попросят вывести волновую фукцию электрона в потенциальной яме… а я скажу - просто верьте и все.

alysnix ★★★
()
Ответ на: комментарий от alysnix

Ну раз знаешь, зачем говоришь, что «из доказательства что 1+1 = 2, будет следовать доказательство любого результата операции типа сложения и умножения»?

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

aist1 ★★★
()
Ответ на: комментарий от alysnix

сравнивать надо на языках здорового человека. це или це++.

в статье есть ссылка на исходную кошерную

https://www.codeproject.com/Articles/340797/Number-crunching-Why-you-should-never-ever-EVER-us

можно не читать, результат тот же.

и да, саечка за невнимательность )

olelookoe ★★★
()
Ответ на: комментарий от aist1

«number crunching» – это тоже весьма расплывчатая формулировка.

Number crunching is the term used here for describing the crunching, sorting, inserting, removing and simply juggling of raw numbers or POD data.(c)

olelookoe ★★★
()
Ответ на: комментарий от aist1

зачем говоришь, что «из доказательства что 1+1 = 2, будет следовать доказательство любого результата операции типа сложения и умножения»?

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

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 1)
Ответ на: комментарий от aist1

то есть организация данных изначально «табличная».

а какой тип организации данных может принципиально повлиять на результат?

olelookoe ★★★
()
Ответ на: комментарий от aist1

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

a--
()
Ответ на: комментарий от alysnix

Берем аксиоматику Пеано; поскольку программистом странно видеть, когда имена объектов начинаются на цифру, у нас они будут называться так:
число_1
число_2
число_3
число_4

Наши аксиомы:
АКСИОМА: есть число_1, оно натуральное число
АКСИОМА: есть операция next
АКСИОМА: все наши объекты (натуральные числа) это результат операции next над натуральными числами либо число_1
АКСИОМА: Равенство чисел: x=y если и только если x это число_1 и y это число_1 или x это next(a) и y это next(b) и a=b


ОПРЕДЕЛЕНИЕ: число_2 это next(число_1)
ОПРЕДЕЛЕНИЕ: число_3 это next(число_2)
ОПРЕДЕЛЕНИЕ: число_4 это next(число_3)

Далее определяем операцию prev
ОПРЕДЕЛЕНИЕ: prev(y) это x если и только если next(x)=y

ТЕОРЕМА: операция prev определена для всех натуральных чисел, кроме число_1

ДОКАЗАТЕЛЬСТВО: очевидно (смотрим на аксиомы).

Нам достаточно что:
ТЕОРЕМА: prev(число_2)=число_1
ТЕОРЕМА: prev(число_3)=число_2
ТЕОРЕМА: prev(число_4)=число_3

Далее определяем сложение add(x,y)


ОПРЕДЕЛЕНИЕ: add(x,число_1) это next(x)
ОПРЕДЕЛЕНИЕ: add(x,y) это next(x,prev(y))

Можно доказать, что add определена корректно и для всех натуральных чисел, но тут опять нам это не нужно. Нам достаточно что
ТЕОРЕМА: add(число_2, число_2)=число_4

ДОКАЗАТЕЛЬСТВО: add(число_2, число_2)=next(add(число_2,число_1))=next(next(число_2))=next(число_3)=число_4

Далее определяем сложение add(x,y)
ОПРЕДЕЛЕНИЕ: mul(x,число_1) это x
ОПРЕДЕЛЕНИЕ: mul(x,y) это add(mul(x,prev(y)),x)

Можно доказать, что mul определена корректно и для всех натуральных чисел, но тут опять нам не нужно. Нам достаточно что

ТЕОРЕМА: mul(число_2, число_2)=число_4

ДОКАЗАТЕЛЬСТВО: mul(число_2, число_2)=add(mul(число_2,число_1),число_2)=add(число_2, число_2)=число_4

a--
()
Последнее исправление: a-- (всего исправлений: 2)
Ответ на: комментарий от olelookoe

в статье есть ссылка на исходную кошерную

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

и вторая ошибка ими совершаемая, они постоянно тискают стандартную либу плюсов, полагая что настоящий «список» это std::list. а массив это какой нить std::array, или классы из либы джавы или еще откуда. сознание отказывается принимать тесты классов стандартных библиотек, как общие тесты представлений данных.

просто напишите СВОЙ нормальный интрузивный список ручками и тестируйте его, если надо мерять скорость.

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

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 1)
Ответ на: комментарий от a--
  1. Возможностей выразить мои мысли в той форме…

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

Но на самом деле не нужно быть академиком, если учесть один момент. Разработку ЯП часто начинают с синтаксических анализаторов. Это ложный путь. Синтаксический анализатор - это конечный, необязательный этап. Сам синтаксис не так важен. Важны структуры данных с которыми Вы будете работать. Если взять ассемблероподобный язык, который будет работать не с регистрами, а со списками и словарями, то получим высокоуровневый язык. Если он будет работать с json, xml или базами данных, то это будет Ваш eDSL. Для такого языка нет проблем сделать валидацию, верификацию и прочее, так как синтаксис примитивен. С Лиспами аналогично.

Kogrom
()
Ответ на: комментарий от a--

собссно это я и выразил вкраце в тезисе - «доказав» что 1+1 = 2(а это аксиома для строительства ряда натуральных), вы докажете все ваши результаты операций на ряде натуральных. 2 и 4 есть натуральные.

2*2 -> 2+2 -> (1+1) + (1+1) -> 1+1+1+1 = 4.

уфф..

alysnix ★★★
()
Ответ на: комментарий от Kogrom

в комплексе нужны только очень редким программистам.

В комплексе да. Но по отдельности (скорее, по подмножеству) они нужны всем. И сейчас де-факто языки реализуют только части всего этого, что, конечно, меня не устраивает. То, что 95% этого не понимает — это их проблемы.

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

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

a--
()
Последнее исправление: a-- (всего исправлений: 3)
Ответ на: комментарий от alysnix

2*2 -> 2+2 -> (1+1) + (1+1) -> 1+1+1+1 = 4.

не так, а вот так:

2*2 = 2*1 + 2 = 2+2 = (2+1)+1 = 3+1 = 4

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

a--
()
Последнее исправление: a-- (всего исправлений: 1)
Ответ на: комментарий от alysnix

у меня нет такой аксиомы или теоремы, так что ты в пролете; а если ты добавишь к себе эту теорему и начнешь ее строго доказывать, тебе придется сделать лишнюю работу

a--
()
Ответ на: комментарий от alysnix

да кстати, я думаю ты свою теорему даже строго сформулировать сходу не сможешь, не то, что доказать

a--
()
Последнее исправление: a-- (всего исправлений: 1)
Ответ на: комментарий от a--

у меня нет такой аксиомы или теоремы

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

alysnix ★★★
()
Ответ на: комментарий от Kogrom

Сам синтаксис не так важен. Важны структуры данных с которыми Вы будете работать.

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

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

a--
()
Ответ на: комментарий от alysnix

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

нуждается, и тем более нуждается раскрытие скобок

в общем, ты даже примерно не представляешь, что такое формальное доказательство

a--
()
Ответ на: комментарий от a--

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

Зачем? Можно сделать транслятор в LLVM IR или даже в C++. Можно компилировать в байт код, который тоже будет выполняться быстро, если у нас есть заранее известный ограниченный набор данных. Например, можно сделать аналог PyObject, но менее универсальный. Операторы и процедуры будут получать только такие объекты. Что же касается многопоточности, то её в условиях не было.

Kogrom
()
Ответ на: комментарий от a--

в общем, ты даже примерно не представляешь, что такое формальное доказательство

ты слишком быстро съехал на личности. мы говорили не об этом.

скобки там вообще не нужны. они лишь иллюстрировали что (1+1) - это представление конкретной двойки. это чисто аннотация. чтобы было удобней читать. можно было сразу делать переход 2+2 -> 1+1+1+1, и все было бы корректно. нигде в математике нет утверждения, что разлагая число на слагаемые надо их писать в скобках, правда ведь?

alysnix ★★★
()
Ответ на: комментарий от Kogrom

Можно сделать транслятор в LLVM IR или даже в C++.

Видимо, ты под «ассемблероподобный» имел в виду «llvm-подобный»? А уж язык с трансляцией в С++ вряд ли окажется «ассемблероподобным», хотя все может быть.

a--
()
Ответ на: комментарий от alysnix

ты слишком быстро съехал на личности

нет, не на личности — на понимание условий задачи

когда я прошу доказательство 2x2=4, это означает какой-то человеко-понятный текст, который можно с косметическими изменениями скормить чекеру, который почекает его и выдаст свой ответ: доказательство это или нет

при этом чекер будет проверять все с нуля, а не modulo theory, потому что в последнем случае задача доказать 2x2=4 вообще бессмыслена

a--
()
Последнее исправление: a-- (всего исправлений: 2)
Ответ на: комментарий от a--

нет, не на личности — на понимание условий задачи

но ты же согласен, что скобки там совершенно виртуальны…

а твой «чекер» не проверит 1+1+1+1 = 4 ??? и он даже рекурсии тут не найдет? выкинь на помойку его.

alysnix ★★★
()
Ответ на: комментарий от alysnix

а твой «чекер» не проверит 1+1+1+1 = 4 ??? и он даже рекурсии тут не найдет? выкинь на помойку его.

пока ты ему не дашь определения и теоремы — не найдет, и это ТВОЯ задача их ему дать

a--
()
Ответ на: комментарий от alysnix

но ты же согласен, что скобки там совершенно виртуальны…

так же как и согласен что 2х2=4, гы-гы

a--
()
Ответ на: комментарий от a--

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

struct Circle
    *r @double

def print_total_area
    cref circles:array|Circle
    *area 0.0
    for *c in circles
        *a 3.1416 * c.r c.r
        area + a
    @print* "Total area: " area "\n"        

def main
    *circles @array|Circle 1.0; 2.0
    @print_total_area circles

Это рабочий пример, транслирующийся в C++. Не надо быть академиком, чтобы создать такой транслятор.

Kogrom
()
Последнее исправление: Kogrom (всего исправлений: 1)
Ответ на: комментарий от a--

и это ТВОЯ задача их ему дать

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

по спискам есть ченить?

alysnix ★★★
()
Ответ на: комментарий от Kogrom

у тебя явно должны быть приоритеты и/или скобки; стиль «2 + 3 * 4 равно 20» я отвергаю

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

a--
()
Последнее исправление: a-- (всего исправлений: 1)
Ответ на: комментарий от Kogrom

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

alysnix ★★★
()
Ответ на: комментарий от alysnix

«кормить» твой «чекер» я не вызывался. твои такие вот зигзаги - это чистое мошенничество, я считаю.

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

Например, без чекера можно предложить:

2*2 = (3-1)*(3-1) = 9-3-3+1 = 4

и любую подобную хрень.

И кроме того, чекер не «мой», а любой из доступных а-ля Agda, Coq, ... без готовой аксиоматики, определений и теорем.

a--
()
Последнее исправление: a-- (всего исправлений: 2)
Ответ на: комментарий от a--

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

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

тогда причем тут математика?

Например, без чекера можно предложить: 22 = (3-1)(3-1) = 9-3-3+1 = 4

предлагайте, кто мешает?

alysnix ★★★
()
Ответ на: комментарий от alysnix

тогда причем тут математика?

при том, что математик из матмеха/мехмата поймет условия задачи «доказать 2х2=4» почти сразу, а не так, как ты

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

a--
()
Ответ на: комментарий от alysnix

то есть читая любое ваше высказывание, я должен задним умом еще что-то понимать???

то мое высказывание было специфично (для проверки ден73), и тебе не обязательно было его вообще понимать

a--
()
Последнее исправление: a-- (всего исправлений: 2)
Ответ на: комментарий от a--

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

да никто не ОБЯЗАН доказывать всяким клоунам свое образование. тебе надо? плати деньги. не надо? идинахер. я так нормально выразился?

alysnix ★★★
()
Ответ на: комментарий от alysnix

да никто не ОБЯЗАН доказывать всяким клоунам свое образование. тебе надо? плати деньги. не надо? идинахер. я так нормально выразился?

Если кто-то на форуме кидает понты типа «Слышь, умник, я окончил мехмат МГУ > 20 лет назад и я однозначно знаю, что такое O большое», а потом тупит как дворник — то обязан доказывать, причем и клоунам, и не клоунам.

А выразился ты ненормально, поскольку я у тебя доказательств образования не требовал.

a--
()
Последнее исправление: a-- (всего исправлений: 2)
Ответ на: комментарий от a--

Если кто-то на форуме кидает понты типа «Слышь, умник, я окончил мехмат МГУ > 20 лет назад и я однозначно знаю, что такое O большое», а потом тупит как дворник — то обязан доказывать, причем и клоунам, и не клоунам.

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

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

alysnix ★★★
()
Ответ на: комментарий от alysnix

Чот тебя прям уязвило. А ведь не должно было.

thesis ★★★★★
()
Ответ на: комментарий от thesis

А зачем аксиома о равенстве, да еще такая стремная?

А, вот и пошли первые вопросы по делу.

Мне там лень было думать, можно ли корректно определять mul и add без однозначного определения prev (а однозначно его непонятно как определить без вот такого равенства).

Поэтому я вот так определил равенство. Но возможно что 2х2=4 и без него — я не знаю, и если так, то это было бы интересно.

a--
()
Последнее исправление: a-- (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.