Skip to content
DevMeme
3005 of 7435
A Visual Representation of Learning Rust's Ownership Model
Languages Post #3319, on Jun 23, 2021 in TG

A Visual Representation of Learning Rust's Ownership Model

Why is this Languages meme funny?

Level 1: No Pain, No Gain

Imagine you have to learn a super hard lesson all at once, kind of like eating all your vegetables in one huge bite because they’re really good for you. This meme shows a person with a big machine pumping knowledge into his head, and he looks like he’s in pain. It’s a funny way of saying learning something very hard can feel like your brain hurts. Rust is a new set of rules for coding that will keep you safe from mistakes (like a very strict teacher making sure you don’t do anything wrong). At first, having to follow all those rules is frustrating and might even make you want to cry, just like the guy in the picture with tears in his eyes. But the reason he’s enduring it is because after all that painful teaching, he’ll come out the other side much smarter and safer in how he writes his code. It’s like getting a big shot at the doctor: the needle hurts now, but it keeps you healthy later. In simple terms, the meme is saying Rust is hard to learn (ouch!) but it makes you a better programmer in the end. No pain, no gain!

Level 2: Rust 101 Crash Course

So, what exactly is being zapped into that developer’s brain in the cartoon? Let’s break down the jargon. Rust is a programming language that prioritizes memory safety and type safety through a strict set of rules checked at compile time (this is what we mean by StaticTyping – the compiler knows and enforces the types and lifetimes of all values before the program runs). The trade-off for Rust’s safety guarantees is a steep LearningCurve, because you have to understand concepts that many other languages handle for you (or don’t handle at all!). The scattered text around the meme character are names of Rust’s traits and types, which are basically the rules and tools you need to learn. Here’s a quick rundown of some of them and why they matter:

  • Ownership & Borrowing: Rust has an ownership model where each value has one owner, and you can borrow references to that value. The borrow checker is the part of the compiler that ensures you follow the rules: you can’t use data after its owner goes away, and you can’t have conflicting mutable accesses. If you break these rules, the compiler throws errors to stop you. For example, a lifetime annotation like 'a is a way to tell the compiler “this reference must not outlive (outlast) the data it points to.” It’s a promise about how long a borrow is valid. New Rustaceans often struggle here: these rules are very different from what you see in languages with garbage collection or manual memory management.

  • Traits: A trait in Rust is like an interface or a promise that a type can do something. Think of it as a capability or behavior. For instance, the trait Clone means “you can make a copy of this value”, and Copy (a special marker trait) means “this type is so simple that copying it is just a bit-wise copy and is done implicitly.” The meme lists many traits:

    • Send and Sync: marker traits that relate to thread safety. Send means a type can be sent to another thread (i.e., moved across thread boundaries safely), and Sync means a type can be accessed from multiple threads at the same time (shared immutably) safely. If a type isn’t Send or Sync, the compiler will stop you from using it in a multi-threaded context. This is part of Rust’s famous fearless concurrency — ensuring at compile time that threads won’t cause data races.
    • Drop: this trait is used for cleanup. If a type implements Drop, it means it has special instructions for when it goes out of scope (like closing a file or freeing some resource when an object is destroyed). The presence of a destructor can affect what the compiler allows (for example, types with Drop can’t be Copy because you must run the destructor, not just duplicate bits).
    • Sized: a trait that all types implicitly have by default, meaning the size of the type is known at compile time. Some types, like slices or trait objects, might not have a known size without extra context, so functions can use T: ?Sized to say "T might not be Sized" and handle those specially. This allows things like using pointers to dynamically sized data.
    • Deref and DerefMut: traits that overload the * operator for smart pointers. If a type implements Deref, you can treat it like a reference (for example, Box<T> implements Deref<Target=T> so you can use a Box<T> much like a &T). DerefMut is the mutable counterpart. These traits are why you can often seamlessly use a smart pointer as though it were the value inside it.
    • Borrow and BorrowMut, and AsRef: these traits let generic code work with either owned data or references. For example, if you have a function that can take either a String or a &str, it might take something like T: Borrow<str> or T: AsRef<str>. They provide standardized ways to get a reference out of a container or type.
    • ToOwned: a trait that is often paired with borrowed data to get an owned clone of it. For instance, str (string slice) has a ToOwned implementation that returns a String (an owned string). In the meme, Cow<'a, B> uses B: ToOwned to indicate it can clone the borrowed data if needed.
    • Unpin and Pin

      : these relate to the concept of pinning. Pin<P> is a wrapper that prevents moving the inner value in memory. This is important for scenarios like self-referential structs or asynchronous futures where moving an object could invalidate pointers into itself. Unpin is a marker trait that says “this type can be safely moved even if it’s pinned.” Most types are Unpin by default, but some (like future generators) are not, and the compiler will enforce that they never get moved once pinned. It’s a mouthful, but basically it’s a niche feature you encounter when doing advanced Rust (like writing your own Future or dealing with low-level memory).

    • PhantomData: this one is a bit mystical! It’s a zero-sized marker type used in structs to tell the compiler that the struct acts as though it holds a value of type T, even if it doesn’t really at runtime. This is used to satisfy the borrow checker in some generic programming scenarios, usually to inform the compiler about ownership or borrowing relationships that aren’t obvious from the fields alone.
  • Smart Pointers & References: Rust gives you different pointer types for different use cases:

    • &[T] (seen in the image) is a slice reference, essentially a pointer to a sequence of T elements. It’s always borrowed, not owned.
    • Box<T>: a heap-allocated pointer. Box<T> means you own a piece of memory on the heap where a T is stored. When the Box is dropped, it frees that memory. It’s the simplest smart pointer.
    • Rc<T> and Arc<T>: these are reference-counted pointers for shared ownership. Rc<T> is a single-threaded reference count (not safe across threads), used when you want multiple parts of your program to own the same data in a single thread (common in tree or graph data structures). Arc<T> is an Atomic reference count, which is thread-safe, so you use Arc when you want to share read-only data across threads. The meme text includes both, highlighting rc_vs_arc_confusion: beginners often wonder “Which one do I use?” The rule is: use Rc for single-thread, Arc for multi-thread. Both have a counterpart called Weak<T>, which is a non-owning weak pointer that doesn’t keep the object alive (used to break cycles – e.g., for graph structures so memory can get freed).
    • Cell<T> and RefCell<T>: these enable interior mutability, meaning you can mutate data even when you only have an immutable reference to it. This is normally disallowed by Rust’s rules, but Cell and RefCell provide a controlled bypass. Cell<T> allows setting and getting copyable values by value (useful for simple types). RefCell<T> allows borrowing mutably at runtime: it has methods borrow() and borrow_mut() that return smart references (Ref<T> and RefMut<T>) and enforce at runtime that you don’t violate the borrow rules (if you try to borrow mutably while something is already borrowed, it will panic at runtime). This is what refcell_runtime_borrow_checks refers to: you push the borrow checker from compile time to runtime in those specific cases. It’s a way to say “trust me, I know what I’m doing here” — but if you’re wrong, your program crashes, not corrupts memory. UnsafeCell<T> is actually the underlying primitive that powers interior mutability (it’s the only legal way to get a mutable pointer from an immutable one, and Cell/RefCell are built on it).
    • Cow<’a, B>: stands for Clone-On-Write. This type can hold either a borrowed reference &'a B or an owned B. If you need to mutate it and it’s borrowed, it will clone the data into an owned B first. The crazy syntax Cow<'a, B> where B: 'a + ToOwned + ?Sized means: it’s a clone-on-write container for some type B (which might be unsized like a str or [T]), with the condition that B can be cloned into an owned form via ToOwned, and the borrowed form (the 'a reference) can’t outlive the container (ensuring no dangling pointers). In simpler terms, Cow allows efficient read-mostly access by borrowing, but can upgrade to an owned clone if mutation is needed. It’s a neat utility but that type signature can look terrifying to newcomers.

That’s a lot to digest (no wonder our cartoon developer looks agonized!). To see how some of these rules play out in practice, here’s a simple example of Rust’s borrow checker catching a potential error:

fn main() {
    let r: &i32;
    {
        let x = 5;
        r = &x; // error: `x` does not live long enough
    } 
    // `x` is dropped here at the end of the inner scope
    println!("{}", r); // this would be a use-after-free if allowed
}

Rust won’t compile this code, because r would be referencing x after x is gone – a big no-no (that would be a dangling pointer in C or C++). The compiler forces us to fix the code, maybe by moving x to an outer scope so it lives long enough. The point is, Rust’s compiler is doing these checks everywhere, with all those traits and rules mentioned.

For a newcomer or junior developer, encountering Rust’s strict rules can be overwhelming. Many of these concepts (StaticTyping, lifetimes, traits, smart pointers) might be completely new if you’re coming from a language like Python or JavaScript, or even if you have used C/C++ you might not have seen them enforced so strictly. At first, it feels like an avalanche of rules: you have to think about who owns what memory, add annotations for lifetimes, and satisfy trait bounds that look like hieroglyphs. The meme humorously exaggerates this feeling by showing it as a torturous machine forcing the knowledge in. But as tough as it is, each of those pieces of knowledge is important in Rust. They’re not there to make your life hard for no reason; they each solve specific safety or performance problems. Once you start to understand them one by one, the confusion clears, and you realize your brain has essentially been upgraded with a new model of thinking about code. Rust’s steep learning curve is like climbing a sheer cliff, but at the top, you’re rewarded with a fantastic view (and a lot of new power as a systems developer). Hang in there — everyone struggles at first, and that’s exactly what this meme jokes about!

Level 3: Borrow Checker Bootcamp

From a seasoned developer’s perspective, this meme hits on the shared trauma and triumph of learning Rust. The image of a developer strapped into a contraption force-feeding him Rust’s trait and lifetime rules is a comedic exaggeration of the LearningCurve every Rustacean endures. Why is it funny? Because anyone who’s tried Rust remembers that phase where the compiler aggressively yells at you with error messages filled with <'a> lifetimes, trait bounds like T: Sized + Copy, or suggestions to add 'static somewhere. It genuinely feels like a bootcamp: the borrow_checker is a drill sergeant, shouting “No, you can’t do that!” until you internalize the rules of engagement. The DeveloperFrustration is real: you see terms like DerefMut, UnwindSafe, or PhantomData flying around your head (just like in the image) and you grit your teeth thinking, “Do I really need to understand all of this just to get a simple program running?” The meme is basically screaming “Yes, you do, recruit! Drop and give me 20 push-ups for that dangling reference!”

This combination of elements is humorous because Rust, despite being a highly respected systems language, is notorious for front-loading a ton of complexity onto the developer. It’s the polar opposite of languages that let you learn gradually; here you get the trait_bounds_overload and lifetime_annotations blasted at you early on. Seasoned programmers nod knowingly at the sight of Rc<T> vs Arc<T> confusion (shared vs atomic reference counting? Many of us had to Google that one a few times), or the first time you encountered a compiler error about moving an Rc<T> out of a RefCell<T> and thought “What fresh hell is this?”. The meme’s text cloud — RefCell<T>, Cell<T>, UnsafeCell<T> — reads like a who’s who of Rust’s thorny concepts, all those things you typically wrestle with in advanced chapters of The Book (Rust’s official guide). Seeing them all at once swirling around Wojak’s head is simultaneously horrifying and hilarious, because it reflects reality: learning Rust often means juggling pinning_concepts (hello, Pin<P> and Unpin when dealing with async futures), understanding interior mutability (Cell and RefCell letting you bend the rules with runtime checks), and decoding weird errors until your DeveloperExperience_DX improves.

In the real world, this scenario happens whenever a developer dives into Rust for the first time. One moment you’re excited to try out this fast, memory-safe language you heard so much about; next moment the compiler greets you with a barrage of errors about lifetimes and trait implementations that you’ve never seen in simpler languages. Systemically, the meme is poking fun at Rust’s approach of shifting bug-catching to compile time. Instead of finding memory bugs in production (with nasty crashes or security holes), you find them on day one because the compiler simply will not let your code run until the rules are satisfied. That’s the whole no free lunch deal: Rust promises fearless concurrency and memory safety, but first you endure a hazing process. It’s like the language saying, “MemorySafety isn’t free — you pay for it upfront with brain sweat.” And as many veteran Rust developers will tell you, the pain is front-loaded: once you’ve been “brainwashed” by the compiler and absorbed these rules, you start naturally coding in a way that avoids errors. The humor is that the process feels less like learning and more like conditioning. Seasoned folks joke that Rust teaches you to “think like a borrow checker.” The meme’s literal depiction of knowledge being brutally uploaded is exactly how that conditioning feels.

There are plenty of industry anecdotes and shared experiences to back this up. Have you ever spent an afternoon wrestling with an error along the lines of “cannot borrow X as mutable because it is also borrowed as immutable”? That’s Rust’s borrow checker whipping you into shape. Or the classic, “error[E0597]: x does not live long enough” when you first deal with references and scopes — at first you tear up (like the Wojak in the drawing) because you just want it to work. Many of us have been in that situation where fixing one error spawns two more compiler messages, almost as if the machine is upping the torture until you truly understand. Over time, though, experienced Rustaceans will reassure you that this struggle pays off. The meme resonates because it’s an exaggeration of truth: Rust will make you uncomfortable, it will upload new paradigms into your brain. But in the end, you come out the other side battle-hardened and confident that if it compiled, it’s probably correct. It’s a compile-time bootcamp that turns frightened newbies into disciplined coders who unconsciously avoid whole classes of bugs. No dangling pointers allowed on Rust’s watch! The collective laughter is a bit self-deprecating: we’re laughing at the memory of ourselves as that crying, red-faced developer, and at how absurd yet effective Rust’s tough-love approach can be.

Level 4: Type System Brain Surgery

At the deepest level, Rust’s approach to memory safety is essentially performing a form of formal verification on your code, and it can feel like surgical insertion of logic into your brain. The language embodies concepts from advanced type theory — notably ideas similar to linear or affine types — which ensure that each value is used in a controlled way (you either use it exactly once or don’t use it after giving it away). This is why Rust’s compiler is so strict about ownership and borrowing: it’s enforcing rules that guarantee memory and thread safety without a garbage collector. In theoretical terms, Rust’s compiler tries to prove that your program upholds certain invariants (no data races, no use-after-free, no double-frees) at compile time. Each lifetime annotation (like 'a or 'b) in your code can be seen as a logical statement about how long a reference is valid. When the compiler complains about lifetimes, it’s essentially saying “I can’t prove this reference lives long enough” – a very high-brow, almost mathematical concern. The result is a language that nudges developers toward writing memory-safe code by construction, effectively doing theorem-proving light. If you squint, Rust’s notorious borrow_checker is like an automated proof assistant living inside the compiler, ensuring your code respects strict rules derived from academic research in programming languages. It’s as if lambda calculus and resource semantics got plugged straight into your IDE, which is both amazing and headache-inducing.

Rust’s trait system is another theoretically rich aspect being jammed into our poor Wojak’s brain in the meme. Traits in Rust are akin to Haskell’s type classes (a concept from category theory that allows abstracting operations over types) but adapted to Rust’s needs. The compiler uses traits to reason about what operations are valid for a type at compile time (this is ad hoc polymorphism in PL theory terms). The seemingly bizarre trait bound syntax (like the Cow<'a, B> where B: 'a + ToOwned + ?Sized floating in the image) encodes a set of logical predicates about types: in this case, that B can be owned (cloned) and any borrowed data inside lives at least as long as 'a. This explosion of angle brackets and lifetimes is really the surface of a sophisticated constraint-solving system under the hood. In fact, Rust’s borrow checker was originally based on lexical scopes and later evolved to a more advanced non-lexical lifetimes (NLL) model that works by analyzing the control-flow graph of the program. The next-generation borrow checker is codenamed Polonius (a tongue-in-cheek reference to Shakespeare’s “Neither a borrower nor a lender be”), which uses a Datalog-based solver to reason about borrows and lifetimes. All this shows how Rust leans on heavy theoretical machinery (like logic solving and region inference algorithms) to provide real-world guarantees. The meme exaggerates it as a brutal brain upload because, honestly, learning Rust’s rules can feel like a high-voltage download of academic concepts directly into your skull. It’s painful, yes, but it’s grounded in the brilliant idea that MemorySafety and TypeSafety can be achieved without a garbage collector, through compile-time machine-checked assurances. In essence, Rust is performing a minor brain surgery on every developer: implanting an intuition for sound TypeSystemDesign and safe systems programming whether you asked for it or not.

Description

This meme uses a variation of the 'Man in Brain Torture Machine' Wojak comic format to depict a developer's struggle. The central figure is a man with a tortured expression, sweating and crying, with his head strapped into a complex mechanical device that seems to be applying immense pressure. Floating all around his head are numerous keywords, traits, and type signatures from the Rust programming language. Some of the visible terms include 'Send', 'Arc<T>', 'Borrow<T>', 'DerefMut', 'UnsafeCell<T>', 'Cow<'a, b> where B: 'a + ToOwned + ?Sized', 'Box<T>', 'Pin<P>', 'RefCell<T>', and 'Clone'. The image powerfully visualizes the overwhelming cognitive load and steep learning curve associated with mastering Rust. For senior developers, it's a deeply relatable depiction of the mental gymnastics required to internalize the language's famously strict ownership, borrowing, and lifetime rules, which are enforced by the compiler to guarantee memory safety

Comments

75
Anonymous ★ Top Pick That's the face of a developer trying to pass a variable to a third function after the borrow checker has already said no twice. You don't own the variable; you're just its temporary emotional support human
  1. Anonymous ★ Top Pick

    That's the face of a developer trying to pass a variable to a third function after the borrow checker has already said no twice. You don't own the variable; you're just its temporary emotional support human

  2. Anonymous

    Rust onboarding these days: they strap you in, DMA trait bounds into your cortex, and if you survive the compile-time screams HR certifies you “Send + Sync + 'static” - therapy sessions, sadly, are still !UnwindSafe

  3. Anonymous

    After 15 years of C++, you think you understand memory management. Then Rust introduces you to its borrow checker and suddenly you're explaining to your PM why implementing a doubly-linked list requires a PhD thesis on lifetime variance and why 'just use Rc<RefCell<T>>' is both the solution and admission of defeat

  4. Anonymous

    When you finally think you understand Rust's ownership model, but then realize you need to choose between Rc<RefCell<T>>, Arc<Mutex<T>>, or just accepting that Pin<Box<dyn Future>> is your life now. The borrow checker isn't just a compiler feature - it's a lifestyle that slowly rewires your brain to think in lifetimes, making you question every '&' and wonder if that 'static really needs to live forever. At least when it compiles, you know it's probably correct... assuming you haven't just wrapped everything in unsafe to make the red squiggles go away

  5. Anonymous

    Rust onboarding summarized: until your cortex implements Send + Sync + UnwindSafe, the borrow checker pins you in place while it rebinds your lifetimes

  6. Anonymous

    Rust onboarding: the borrow checker migrates ownership to your brain; once it implements Send + Sync + UnwindSafe, Cow<'a, B: ToOwned + ?Sized> stops hurting and Arc just counts the remaining sanity

  7. Anonymous

    Rust borrow checker: Preventing segfaults by first heap-overflowing your brain with PhantomData and Pin projections

  8. @Zedchi 5y

    пояснительную бригаду в студию)

    1. @Chess_player_1224 5y

      +

    2. @nuntikov 5y

      Horrible rust coding experience

    3. Deleted Account 5y

      rust having alot of types dedicated to just managing lifetimes

    4. @sylfn 5y

      Translation: I didn't understand, help me. Remember, this is an English-only chat. If you wanna talk any other language, please add a translation of your message. Это -- англоязычный чат, поэтому, если вам захотелось выразить свои мысли на любом другом языке, то необходимо добавить их перевод на английский.

      1. @Dobreposhka 5y

        well, sense is the same, but the translation could be better. There're words about helping (((division?))) that should go into studio

        1. @sylfn 5y

          not "into studio" That is because Russian "в студию" came from TV show "Поле чудес" (Russian copy of American "Wheel of Fortune"), where used as "[принесите] что-то в студию" ([bring] something here). I did not found what they used in "Wheel of Fortune", so I can not make a better translation.

          1. @Dobreposhka 5y

            well, what is translation for "студия"? That's a room, where some show filmed. So, if the room's name in English is the same, you can translate like that. Meme part will be deleted, but at least it is proper translation

            1. @sylfn 5y

              we need translation to repersent meaning of whole text, and not the single words. If we translate word by word we can lose grammatics (if we don't reorder words) and/or entire meaning. "give smb a hand" means "help smb", compare "дать кому-либо руку" and "помогать кому-либо": they have different meaning.

              1. @Dobreposhka 5y

                ok, you got a point, but "дать кому-то руку" is understandable in Russian as "help sbd" too. Especially, if you add "руку помощи" in the end. But yes, in case of "пояснительной бригады" your translation is more correct

        2. @Zhenyokmsk 5y

          "Explanation squad" )

          1. @Dobreposhka 5y

            +, better version

          2. @sylfn 5y

            I second this

      2. @LastStranger 5y

        Can someone write chatbot, that automatically translate from non-enlgilsh language to English🤔

        1. @affirvega 5y

          How should it work?

          1. @LastStranger 5y

            It can reply message with non-english text and send English translation with it

        2. @sylfn 5y

          how to detect non-englisg text without a translation?

          1. @LastStranger 5y

            Can we use unicode? If can, we can use symbols codes to detect it. How auto detection in Google translate works?

            1. @sylfn 5y

              We should use unicode. But if text is written not in single language, but in multiple, what will the bot do? How would it handle code blocks with russian comments?

              1. @LastStranger 5y

                We can use it only in situation, when all message has written in Russian or another language. I seen here only 2 situations, when people write in non-english language or, like you, when people write in English and Russian. And if message had translate on English, it doesn't need translation

                1. @sylfn 5y

                  Yes, there are 2 common situations - Eng only or Eng+Rus. But, there were some Eng+German messages. And what if translation provided is incorrect or just of opposite meaning? Like "これが好きです" and "I hate this" (Real translation: I like this)

                  1. @LastStranger 5y

                    For the second part of message answer will be "reply message of person". He/She got a notification, that he/she replied. If person have some knowledge of English (good programmer should know english), He/She can edit this message. But in most situations, Google translate or yandex translate can translate clearly almost all messages.

                    1. @affirvega 5y

                      You can use they as a gender neutral pronoun

                      1. @LastStranger 5y

                        Thanks, i never talk about people without knowledge of they gender, and didn't know about this

                  2. @LastStranger 5y

                    For eng+german, can you give me some examples of this messages, to think about answer on your question?

                    1. @sylfn 5y

                      Riedler wrote some, if I'm not mistaken

                      1. @LastStranger 5y

                        This not best solution, but we can detect non-english words, translate it and use instead of words, that been translated

                        1. @LastStranger 5y

                          It first solution, that came in head

                        2. @sylfn 5y

                          code snippets written in KuMir will be broken

                      2. @RiedleroD 5y

                        only example messages, yes

  9. @Zedchi 5y

    thanks) i thought its something about ++ templates

  10. Deleted Account 5y

    lmao

  11. @tarasssssssssssssss 5y

    дед и батя сцепились по пьяне...

    1. @sylfn 5y

      Translation: drunk dad and grandfather are fighting Remember, this is an English-only chat. If you wanna talk any other language, please add a translation of your message. Это -- англоязычный чат, поэтому, если вам захотелось выразить свои мысли на любом другом языке, то необходимо добавить их перевод на английский.

      1. @Dobreposhka 5y

        ur translations lose meme and humour sense

        1. @sylfn 5y

          I will try to make them better next time

          1. @Dobreposhka 5y

            like, ofc that's translation and stuff, but ur last you can translate back as "пьяный папа и дедушка дерутся". Well, sense is the same, but sounds not that great

    2. @RiedleroD 5y

      warning 1/3 for @taras_dashkov ; reason: speaking a foreign language (without translation) @developerxyz I believe they don't take the rules seriously without warnings

      1. @sylfn 5y

        does the warning apply to me?

      2. @tarasssssssssssssss 5y

        лол ты дурачёк?) какие нахуй ворнинги?

        1. @sylfn 5y

          I don't think that will work.

        2. @affirvega 5y

          Не ходи в чужой монастырь со своим уставом) When in Rome, do as the Romans do)

          1. @tarasssssssssssssss 5y

            где where

            1. @affirvega 5y

              Here

  12. @tarasssssssssssssss 5y

    ай спик эс ай вонт, итс йор дисижн ту рид ор нот

    1. @RiedleroD 5y

      warning 2/3 for @taras_dashkov for being an asshole as well

  13. @tarasssssssssssssss 5y

    вы тип приколисты? на канале нет никаких правил Translation: lol kek

    1. @RiedleroD 5y

      warning 3/3 for @taras_dashkov we are the moderators, and we make the rules. Now speak english for once, or you're banned.

  14. @tarasssssssssssssss 5y

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

    1. @RiedleroD 5y

      and it's fine if you write "untranslatable joke" or smth

  15. @tarasssssssssssssss 5y

    lol so if your moders you can do whatever you want? where is the blyadskie rules?

    1. @RiedleroD 5y

      go ask @Linegel, I asked him twice to add them there (to the group desc), but alas I am only a moderator, not the admin

  16. @tarasssssssssssssss 5y

    я не хочу быть токсик, но токсик тут только вы Tranltion: moders are dumb or smth idk

    1. @affirvega 5y

      Я не понял ситуацию, сорян что наехал I didn't got the situation right, I'm sorry for the bullying (?)

  17. @tarasssssssssssssss 5y

    если будут правила официально в закрепе или в описании, то я ебало завалю, с радость. Но чёт мне кажется вы перебарщиваете, ребята untranslatable

    1. @RiedleroD 5y

      untranslatable my ass, you're out

      1. @Roman_Millen 5y

        Moral of the story: you may explain what's wrong even thousand times, but some people just won't stop finding reasons to complain and be stubborn assholes.

        1. dev_meme 5y

          We talked with him in private and agreed that he will use English within there, so he is free to comeback to chat

    2. @sylfn 5y

      Pinning rules won't work, new posts on main channel will overwrite pin; pinning in main channel is bad idea

      1. @RiedleroD 5y

        also we can't pin anything, only admin can

      2. Deleted Account 5y

        @DiscussUnpinBot try this bot

        1. @RiedleroD 5y

          I'd rather not have bots in this group

          1. Deleted Account 5y

            Why?

            1. @RiedleroD 5y

              annoying and complicated, the group is still small enough that it's easier to do everything by hand

            2. @sylfn 5y

              Overengineering problem

  18. @tarasssssssssssssss 5y

    lol

  19. @lawenard 5y

    PhantomData sounds edgy af

  20. @LastStranger 5y

    Ok, we can locate it only for situations, when all message written in non-english language, and parallel think about algorithm, to solve this problem

Use J and K for navigation