Ябло (Свежее) / Говнокод #19104 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
//
//  How ARC causes memory leaks and leads to crashes out of the blue
//

import Foundation

let noLeak = 131030          // Empirically found constant
let withLeak  = noLeak*10

// Single-linked list
class R {
    var _a : R?
    init(a : R?) {
        _a = a
    }

//    One have to resort to a manual C-like code to fix it
//
//    deinit {
//        var i = self._a;
//        while let i2 = i {
//            let t = i2._a
//            i2._a = nil
//            i = t
//        }
//    }
}

func test(n:Int, leak:Bool) {
    let p0 = R(a : nil)
    var p = R(a : p0)
    for _ in 1...n {
        p = R(a : p)
    }
    if leak {
        // When the list is not cyclic it will be deleted by ARC just fine...
        p0._a = p
    }
} // Oh wait, the destructor isn't tail-recursive...

test(withLeak, leak: true)
print("Bad leaking function")
test(noLeak, leak: false)
print("Good function")

гц -- сила, ARC -- могила
(язык -- Swift, если что)

Запостил: CHayT CHayT, (Updated )

Комментарии (29) RSS

  • if leak {
        p0._a = p
    }

    Внимание! Обнаружена ЖЖ Артем утечка памяти при создании циклических ссылок!

    А вообще, вот из-за, в том числе, таких магических крешей (с BAD_ACCESS, Карл!) Свифт и не готов к продакшну. ObjC ещё минимум года два-три будет основным языком вменяемых разработчиков под эти наши гейфоны.
    Ответить
    • Ты так говоришь, как-будто в Objective C этих проблем нет... Тот же самый ARC с присущими любому reference counting'у проблемами.
      Ответить
  • > cyclic
    Ну а что ты хотел? В крестах std::shared_ptr точно так же течёт от закольцованных структур...

    > деструктор падает с BAD_ACCESS
    ... и точно так же сегфолтится от переполнения стека при разрушении слишком глубоких структур.
    Ответить
    • P.S. И в конце-концов, где в мобильной гуйне на практике нужны самодельные связные списки длиной в километр? Это же не хаскель какой-нибудь, где эти списки для любых целей юзают...
      Ответить
        • Господи, что за хуйню ты несеш???
          Ты понимаешь что ты поехавший??
          Ответить
            • Вспомнилась песенка:

              Я скриптом кобенирую тексты
              Марковской цепью построив коммент
              Силой питона ворцую пространство
              На миллионы комментов за тред.

              Я -- кобенатор. Он -- кобенатор.
              Ты -- кобенатор. Мы -- кобенатор.
              Ответить
              • > Марковской цепью
                в 2к18 пора осваивать лстм и внимание
                Ответить
      • > Это же не хаскель какой-нибудь
        запах борща чувствуется там неплохо так
        правда то, что в хаски делается парой классов, в свифтие запилили как кривой синтаксис
        Ответить
    • > Ну а что ты хотел?
      исключительно срача про модели управления памятью
      Ответить
      • Все модели говно и имеют кучу ограничений. Гц тоже не панацея. [/срач]
        Ответить
        • ГЦ вообще не нужно, потому что оно для анскиллябр заедушных, которым взападло убрать за собой после того, как насрали. Настоящим программистам ГЦ только мешает.
          Ответить
        • вообще говно не нужно, говноязык , животное, потому что оно для питушня для питушков питушня для питушков анскиллябр заедушных, которым взападло , днище галимое, убрать за и ещё раз повторю, тебе животное после того, как говно насрали. настоящим программистам Царь гц только говноязык мешает.
          Ответить
          • p.s. и в ко-ко-ко конце-концов, где , животное, питух, иди кукарекай, в мобильной хасвелл гуйне
            Ответить
  • >131030 // Empirically found constant
    Что-то тут пахнет неточным умножением 128*1024.
    Ответить
    • Ну размер стека, походу, кратен степени двойки (и размер фрейма деструктора тоже). А небольшой недобор съели рантайм, main и test.
      Ответить
  • зато заедушный удобный анскилед способ измерения размера стека
    Сишка, господи, что заедушный за хуйню ты несеш???
    ты понимаешь что ты говно поехавший??
    > это же хасвелл не хаскель, животное, какой-нибудь
    запах борща ко-ко-ко питух чувствуется там питух неплохо так
    правда заедушный то, что , питух, иди кукарекай, говноязык в хаски делается
    Ответить
      • отговорите меня от написания генереций на основе link grammar
        Ответить
        • Когда делать будешь - дай ссылку на гит, мне интересно

          А лучше стрим на твиче запили
          Ответить
            • уже и такое есть?
              сраные хипстеры
              P.S. проект в процессе, парсить грамматику я уже умею, но времени у меня сейчас мало пишу с работы (sic)
              Ответить
        • KobNode 1 (Right (NLPWord {_nlpword = <b>"the"</b>, _nlpclass = ""},([],[])))
          KobNode 2 (Right (NLPWord {_nlpword = <b>"gray"</b>, _nlpclass = ""},([],[])))
          KobNode 0 (Right (NLPWord {_nlpword = <b>"dog"</b>, _nlpclass = ""},([],[])))
          KobNode 3 (Right (NLPWord {_nlpword = <b>"runs"</b>, _nlpclass = ""},([KobNode 4 (Left D-)],[])))

          то чувство, когда из-под слоя служебных данных начала показываться сверхтвёрдая синтаксиальная психоза

          ^______^
          Ответить
          • ...
            the dog slowly slowly runs
            the dog slowly soundly runs
            the dog soundly slowly runs
            the dog soundly soundly runs
            the dog slowly runs
            the dog soundly runs
            the dog slowly runs
            the dog soundly runs
            the dog runs
            the dog slowly slowly sleeps
            the dog slowly soundly sleeps
            the dog soundly slowly sleeps
            the dog soundly soundly sleeps
            the dog slowly sleeps
            the dog soundly sleeps
            the dog slowly sleeps
            the dog soundly sleeps
            the dog sleeps

            так оно работает работает на тестовой грамматике
            щас надо сменить вореционный движок, и можно будет засирать тут всё
            Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8