LINUX.ORG.RU

Структуры данных на C

 , , , ,


1

2

А вы пишете свои структуры данных? Мне тут один парень вчера на ютубе затирал то, что это полезный навык. Мол, ему приходилось писать свой двусвязный список, когда он что-то там кодил на C под контроллеры. Я ему на это сказал, что это порочная практика, потому что нужно брать готовый код, написанный более умными людьми и проверенный сто раз другими. Потому что будь ты хоть семи пядей во лбу, всё равно нафигачишь ошибок. Да и время просто тратишь впустую — вместо того, чтобы решать необходимую задачу, ты придумываешь себе интересные подзадачки и упарываешься по ним. Мне кажется, что это даже такой способ прокрастинации, когда не хочется решать основную проблему, то можно возбудить в себе NIH-синдром и начать переписывать то, что уже и без тебя существует.

Короче, вопрос темы я уже задал, но повторюсь: как часто приходится, и вообще приходится ли вам писать вот это всё? Структуры данных, алгоритмы для работы с ними, может даже фреймворки какие-то? И, если да, почему не считаете, что вы страдаете фигнёй?

Поразмыслив ещё немного, я решил убить пару часов времени и написать тот злосчастный двусвязный список на C. К языку этому я не прикасался уже лет дцать, да и вообще не знаю, как в нём принято кошерно такие вещи пилить, но решил нафигачить никуда не подглядывая чисто по памяти. Вот, что из этого вышло: https://github.com/NightmareZ/plain-c-data-structures Можно ещё добавить очередь, деревья всякие, хэшмапы и прочее-прочее, но чёт мне кажется, что я уже забил на эту затею и не буду этого делать, а лучше поиграюся во что-нибудь сегодня. А вы когда-нибудь реализовывали хэшмапу? И, если да, то нафига?

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

Хэшмап – вечная тема.

vM ★★
()

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

Harald ★★★★★
()

Хороший вброс.

Вообще-то, если пользоваться «уже готовыми», то либо частично можно найти в самой glibc (да, хэши те же – man hcreate, hdestroy, hsearch, hcreate_r, hdestroy_r, hsearch_r по очереди). В glibc не только хэши есть, но да ладно.

Либо (из «уже готового») можно взять GLib.

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

Можно ещё добавить очередь, деревья всякие, хэшмапы и прочее-прочее,

Так вот. Всё из Вами перечисленного уже давно расписано в исходниках даже и даже с картинками умными людЯми и всё это в сумме называется abstract data types или advanced data types.

Для начала – https://en.wikibooks.org/wiki/C_Programming/Advanced_data_types и https://eecs280staff.github.io/notes/07_ADTs_in_C.html

Сокращённо это называется ADT и трудностей или сложностей у нормального С-программиста не вызывает.

Moisha_Liberman ★★
()

Суть в том, что

я решил убить пару часов времени и написать тот злосчастный двусвязный список на C

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

struct filedesc {
  char const * name;
  uchar type;
  off_t size;
  ushort mode;
  uint owner, group;
};

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

struct filedesc {
  struct filedesc *next, *prev;
  char const * name;
  uchar type;
  off_t size;
  ushort mode;
  uint owner, group;
};

struct filelist {
  struct filedesc *first, *last;
};

Реализуем ещё около 20 строк кода: функция добавления файла в список, удаления файла из списка, поиска файла по имени в списке. Всё, теперь у нас есть двусвязный список описаний файлов. Разумеется, не за 2 часа, а за 10 минут.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)

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

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

byko3y ★★★★
()

Пару раз писал лабы в универе. Один раз деревья на жабе другой раз двухсвязный список на си.

Все это считаю идиотизмом.

Кстати, у меня вопрос получше: является ли leetcode/hackerrank по вашему тратой времени или писать тупые, давно всеми написанные/переписанные/оптимизированные вещи самому это типа круто?

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

является ли leetcode/hackerrank по вашему тратой времени

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

писать тупые, давно всеми написанные/переписанные/оптимизированные вещи самому это типа круто?

Кем круче быть, Гейтсом или Торвальдсом? Что круче: иметь своё ядро, комьюнити и призвание, или до жопы бабла и свою транснациональную корпорацию? Да чёрт знает. Я знаю одно: НЕ КРУТО — это когда денег нет на полноценную жизнь. А если денег на жизнь начало хватать — можно уже заниматься любой хероборой, которая по душе приходится.

vihoco3039
() автор топика
Ответ на: комментарий от anonymous

Пару раз писал лабы в универе.

На первом курсе нам выдали тридцать билетов по программированию, в каждом из которых были свои варианты того, что нужно будет запрограммировать на экзамене. Я взял, написал код для всех тридцати билетов и раздал всем одногруппникам. Кроме морального удовлетворения это, конечно же, мне особо ничего не принесло, потому что решать тридцать раз однотипные задачи — такое себе. Но было приятно, я даже толком не знаю, от чего. Больше я так не делал, а после второго курса вообще забил на пары ходить.

vihoco3039
() автор топика

Учи бедон

я на си не пишу. только питон и только js. всякие структуры типа стека заменяют списки и массивы. твои же связанные списки довольно изящно реализуются:

from dataclasses import dataclass
from typing import Any

@dataclass
class Node:
  data: Any
  next: 'Node' = None

  def __str__(self):
    return f"{self.data}"

  def __eq__(self, other):
    return self.data == other.data

class LinkedList:
  def __init__(self, node):
    self.head = self.last = node

  def append(self, node):
    self.last.next, self.last = node, node
    return self

  def __iter__(self):
    node = self.head
    while node is not None:
      yield node
      node = node.next

  def remove(self, target):
    prev = None
    for node in self:
      if node == target:
        if prev is None:
          assert node.next is not None, 'Empty List'
          self.head = node.next
        else:
          prev.next = node.next
        break
      prev = node
    return self
         
  def __repr__(self):
    return ' -> '.join(map(str, self))

Пример:

>>> LinkedList(Node('A')).append(Node('B')).append(Node('C')).append(Node('D')).remove(Node('C'))
A -> B -> D
tz4678 ★★
()
Ответ на: Учи бедон от tz4678

Учи бедон

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

vihoco3039
() автор топика
Ответ на: комментарий от vihoco3039

Ну и сама идея тут была именно на С написать. Потому что, к сожалению, многие вещи на нём делаются крайне всрато. И это дополнительный челендж: как прострелить себе всего одну ногу и не сильно.

vihoco3039
() автор топика
Ответ на: комментарий от vihoco3039

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

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

Иногда...

возможность достать и съесть цианид тоже может потеряться заодно

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

Я больше склоняюсь к версии самоповешания, но тут тоже проблема. Где-то видел видос про программиста, который до армии не умел завязывать шнурки. Думаю, на верёвке узел он тоже не сможет завязать.

Так что, скорее, остаётся надеться только на угасание по естественным причинам…

Moisha_Liberman ★★
()

И, если да, то нафига?

Если тебе нужен реалтайм, а/и размер оперативки будет ограничен 1килобайтом... То общие решения могут не подойти.

Например: можно кодить на ардуине, а можно на аппаратном уровне, можно смешать, смотря какие задачи.

LinuxDebian ★★★★
()
Последнее исправление: LinuxDebian (всего исправлений: 3)
Ответ на: комментарий от vihoco3039

То есть задротить литкод ровно до офера из фаанга? Но ведь можно это же время ядро линукс изучать и дозадротиться до переезда в калифорнию точно так же.

Что больше подуше? А ничего :) Сладкая жизнь у океана :)

anonymous
()

Короче, вопрос темы я уже задал, но повторюсь: как часто приходится, и вообще приходится ли вам писать вот это всё? Структуры данных, алгоритмы для работы с ними, может даже фреймворки какие-то? И, если да, почему не считаете, что вы страдаете фигнёй?

Иногда приходилось. Почему - потому что бывает так, что нет готовой структуры данных, удовлетворяющей неким требованиям. Ну вот например недавно я приводил код с односвязным списком, когда alloca() обсуджали Новые серьезные уязвимости в ядре Linux и systemd (комментарий)

https://wandbox.org/permlink/QSe51o1Mt6kuuBNg

SZT ★★★★★
()

нафига?

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

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

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

но иногдааа какое-нибудь частное узкоспециализированное решение имеет все шансы закрыть целый пласт частных узкоспециализированных проблем и на сцену выходит какой-нибудь Clickhouse, не такой как все, и вокруг него вырастает комьюнити потребителей. ну или там Redis, SQLite, mdbx, вставить (не)нужное.

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

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

А что касается связанных списков, то у них есть методы типа insertAfter, insertBefore. Для чего? - Например, для хранения чего-то типа списка дочерних элементов ноды DOM-дерева. И возвращаясь к скриптухе, моим любимым языкам, то опять же в питоне можно и списками обойтись:

In [14]: def insert_before(lst, el, v):
    ...:     p = lst.index(el)
    ...:     assert p != -1, 'Not Found'
    ...:     return lst[:p] + [v] + lst[p:]
    ...: 

In [15]: a = ['foo', 'bar', 'baz']

In [16]: insert_before(a, 'bar', 'quix')
Out[16]: ['foo', 'quix', 'bar', 'baz']
tz4678 ★★
()
Последнее исправление: tz4678 (всего исправлений: 2)
Ответ на: комментарий от tz4678

то что ты на си связанный список реализовать по памяти не можешь, ужо говорит, что не твое

Я ж реализовал и даже ссылку на репу привёл…

vihoco3039
() автор топика

Ну и если сравнивать твой односвязный список с тем, что в https://wandbox.org/permlink/QSe51o1Mt6kuuBNg

То оказывается, что мой вариант односвязного списка хранит значение в ноде, а у тебя https://github.com/NightmareZ/plain-c-data-structures/blob/main/single-linked... - нода содержит указатель на элемент.

А еще мой список работает на стеке, и не требует malloc(). А еще мой список не содержит https://github.com/NightmareZ/plain-c-data-structures/blob/main/single-linked... вот этого typedef struct SingleLinkedList - у меня есть только ноды, зачем мне специальная штука с указателем на хвост и голову?

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

В этом ненужно выдают огромное кол-во очень нужных денег. На этом вся нужность фаангов начинается и заканчивается.

anonymous
()
Ответ на: комментарий от SZT

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

vihoco3039
() автор топика
Ответ на: комментарий от anonymous

В этом ненужно выдают огромное кол-во очень нужных денег. На этом вся нужность фаангов начинается и заканчивается.

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

vihoco3039
() автор топика
Ответ на: комментарий от vihoco3039

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

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

Ну у меня есть знакомый, в 40 в гугл поступил обычным гребцом. Это когда жена и 2 детей взвыли от голода.

Теперь 200к зеленых в год гребет + акции и плюшки и норм ему.

anonymous
()
Ответ на: комментарий от vihoco3039

а что толку? если оно никому не нужно. можешь еще всякие пузырьки пописать. оно потребуется только при трудоустройстве в некоторые места (Яндекс, Тиньков, …, Amazon, Google). там у тебя спросят структуры, потом алгоритмы, потом олимпиадных задачек накидают. все это говно целенаправленно заучивают с целью трудоустройства, но вот только, если в гугле и амазоне платят нормально, но в куяндексе считают, что тебе за честь уже сам факт работы у них, поэтому тебе заплатят ниже средней по рынку

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

Яндекс, Тиньков, …

Меня только что вырвало на клавиатуру. Извини, дочитаю твоё сообщение чуть позже.

vihoco3039
() автор топика
Ответ на: комментарий от anonymous

Это когда жена и 2 детей взвыли от голода.

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

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

vihoco3039
() автор топика
Ответ на: комментарий от Harald

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

Вообще не вижу проблем. Для самообразования, для фана, для поиска узких мест. Я пользуюсь стандартными, но у меня не C, у меня C++, где этого добра навалом именно стандартного. Как то прикидывал написание своих юникодных строк для Си, но дальше обдумывания не пошло.

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

А что, женщина в современном мире может зарабатывать? И при этом быть матерью 2 детей и женой? Похоже на сказки.

До этого чувак учился в лиге плюща на философа лол :) потом получал опыт гребца на галерах. Его судьбе не позовидуешь, но и речь не про него, а про литкод, фаанг и целесообразность всего этого. Я вот в фаанг хочу исключительно ради денег, а литкод мне противен на генном уровне. Спрашиваю вот, кто-то может все эти деревья/алгоритмы/задачки просто так делает, не с целью в фаанг?

anonymous
()

Да, всё уже давным давно придумали до нас. На примере тех же многосвязных списков → queue.

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

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

А что, женщина в современном мире может зарабатывать? И при этом быть матерью 2 детей и женой? Похоже на сказки.

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

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

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

anonymous
()
Ответ на: комментарий от Harald

Да ладно че, я этих зарабатывательниц всю молодость спонсировал. Но они таки не были женами и матерями.

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

Но они таки не были женами и матерями.

откуда ты знаешь

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

Кстати, у меня вопрос получше: является ли leetcode/hackerrank по вашему тратой времени или писать тупые, давно всеми написанные/переписанные/оптимизированные вещи самому это типа круто?

Я думаю, что трата времени. Если есть время лучше заслать патч в популярный opensource проект. Даже в популярных opensource проектах, тех кто пишет патчи - 3 калеки.

В не очень популярных, вообще один автор всё пишет.

fsb4000 ★★★★★
()

Вот читаю я вас тут читаю, читаю-читаю, и снова и снова думаю: блин, это же сколько есть талантливых кодеров, которые в том числе не прошли собес в амазон/гугл или их даже туда не пустили? Да, они засылают патчи в опенсорсные проекты, которыми интересуется два с половиной человека, и про них в ближайшие лет десять узнают только местечковые работодатели. Я всерьез намерен заняться поиском таких кадров (которых я умею отличать от остальных), но самая большая проблема у меня с заказчиком. IT — это главным образом вспомогательная сфера на подсосе у бизнеса, ворочающего деньгами. Ну то есть, например, есть банк, но банк не является айтишной конторой — айтишников он нанимает. Причем, в банковскую сферу, наверное, сложнее всего пролезть и при этом там одна из самых высоких концентраций программистов-мудаков на квадратный миллион долларов.

Я хорошо помню этот совет «не нужно пытаться становиться продуктовой компанией, потому что там слишком много рисков. Лучше быть консультантом, который получает деньги независимо от результата» (привет SAP, Oracle, IBM). Ну и куда двигаться? По пути галер, которые просто кричат о себе на каждом углу — авось кто-то клюнет?

byko3y ★★★★
()

Помнится, посмотрев это видео, почувствовал себя очень и очень глупым…

Реализовывать стандартные коллекции (которые имеет в виду ТС, на неправильный заголовок уже указали) – конечно же нафиг надо, когда есть готовые. Хотя вот qsort пару раз реализовывать приходилось, один раз кажется на php, другой не помню, и почему приходилось – тоже не помню. Оба раза тупо гуглил, копипастил и переводил на нужный язык.

dimgel ★★★★★
()

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

Vit ★★★★★
()

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

anonymous
()
Ответ на: комментарий от dimgel

Помнится, посмотрев это видео, почувствовал себя очень и очень глупым

Смешно то, что уволив 1% самых бесполезных сотрудников гугл снизит расходы больше, чем все плоды творчества этого чела с видео. И если я соглашусь с тем, что до кризиса сверхспециализация еще могла быть оправдана, то сейчас эта лекция выглядит бессмысленно и беспощадно, как конференция о повышении производительности программирования при помощи Vim на фоне большого числа иных вариантов — например, перехода на VS Code, который увеличит производительность кодинга уже через пару недель обучения.

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

Пишу. Мне плевать на эффективность, я программирую, чтобы получать фан

А деньги на школьные обеды мама даёт?

vihoco3039
() автор топика

А вы пишете свои структуры данных?

Это же Си, конечно да.

Мне тут один парень вчера на ютубе затирал то, что это полезный навык.

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

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

Ога со стак оверфлова тощить гыгыгы. Твои слова верны для абстрактных алгоритмов и всё (ну или их реализаций порой).

Если все будут брать готовое то кто будет писать это самое готовое? С чего ты взял что сторонний код написан человеком умнее тебя? С чего ты взял что его реализация подойдёт тебе?

Потому что будь ты хоть семи пядей во лбу, всё равно нафигачишь ошибок.

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

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

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

как часто приходится, и вообще приходится ли вам писать вот это всё?

Что всё? Есть данные которые можно эффективно использовать через свою реализацию ты и делаешь. Есть иное реализовывать которое невыгодно во всем фронтам да и квалификации может не хватить ты используешь стороннее API полагаясь на него. Нет никакого абсолюта. Софт разный бывает и решает разное с разными целями в разных условиях. Если у тебя мелкая утилитка в которой нужны связные списки верх тупизны линковать что-то внешнее ну разве что-то типа header only вшивать.

Структуры данных, алгоритмы для работы с ними, может даже фреймворки какие-то? И, если да, почему не считаете, что вы страдаете фигнёй?

Всё нужно делать оправданно. По мере надобности. Где-то притащить, где-то самому придумать/написать.

Можно ещё добавить очередь, деревья всякие, хэшмапы и прочее-прочее

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

Вот, что из этого вышло:

Весь текст ты говорил что это ненужно, а сам написал )))))))))))

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

Ты не поверишь, но многие с кодом играются.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от byko3y

Смешно то, что уволив 1% самых бесполезных сотрудников гугл снизит расходы больше, чем все плоды творчества этого чела с видео.

Допустим, лоботрясов там не 1% а гораздо поболе. Допустим даже их 50%, и их гугл всех уволит, таким образом снизив расходы более чем существенно. Но пойнт не в этом. даже если от конкретной хэш-таблицы пользы на копейки (что в общем тоже не факт), тем не менее:

  1. Мужик двигает прогресс. Тут как с фундаментальной наукой: копошатся-копошатся – а потом ррраз! и выстрелило. UPD: Одними увольнениями много ненаоптимизируешь.

  2. «все плоды творчества этого чела», подозреваю, ни тебе, ни мне неизвестны.

dimgel ★★★★★
()
Последнее исправление: dimgel (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

Ты перепутаешь цианид с картошкой, накушаешься и довольный уснёшь =)

Я пожалуй подпишусь на ответы: дюже интересно узнать, как можно перепутать цианид с картошкой. :)))

dimgel ★★★★★
()
Последнее исправление: dimgel (всего исправлений: 1)
Ответ на: Иногда... от Moisha_Liberman

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

LINUX-ORG-RU ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.