LINUX.ORG.RU

Там опять Go ругают

 , ,


4

9

сабж

Статья вызвала бурю эмоций на HN.

Сама статья мне очень понравилась. Очень красочно описывает моё отношение к Go.

This fake “simplicity” runs deep in the Go ecosystem. Rust has the opposite problem - things look scary at first, but it’s for a good reason. The problems tackled have inherent complexity, and it takes some effort to model them appropriately.

Ну или как я люблю говорить: Go примитивный, а не простой.

PS: Работа со строками в Go напомнила недавний холивар (C рулит и педалит.). @grem’у понравится. Путь к файлу содержит недопустимые символы? Та забей!

@WitcherGeralt

Ответ на: комментарий от RazrFalcon

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

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

Как видите, средний размер файла в репе — 6 килобайт. Соответственно, при блоке накопителя в 4 килобайт возникают веселые артефакты.

Но почему-то избирательно видишь факты. Например, не в курсе опции «du –apparent-size».

Я бенчил реальное использование, а не теоретическое. И даже во времена винтов с физическими секторам в 512 байт, размер кластера (блока) по-умолчанию уже давно был 4 КБ.

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

Полторы минуты «hg pull -u» у меня при наличии обновлений.

проводилось без предварительного echo 3 > /proc/sys/vm/drop_caches

По-моему, лучше не гадать, что другие знают или не знают.

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

Я бенчил реальное использование, а не теоретическое. И даже во времена винтов с физическими секторам в 512 байт, размер кластера (блока) по-умолчанию уже давно был 4 КБ

А ты в курсе, что есть разные файловые системы? ReiserFS сует несколько файлов в один блок, например. Ты измеряешь артефакты файловой системы по сути, а не влияние VCS, поскольку иначе кол-во хранимых данных у Git и Mercurial почти одинаковое.

Ведь и я тоже могу предположить, что

Полторы минуты «hg pull -u» у меня при наличии обновлений.

проводилось без предварительного echo 3 > /proc/sys/vm/drop_caches

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

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

… Ты измеряешь артефакты файловой системы по сути …

Но снова таки, одной из самых распространённых, т.е. повседневная реальность.

Это как, если бы десктопная программка для приемлемого отклика требовала 500 ГБ/с доступа к памяти. Но даже на свежих десктопах максимум где-то 50 ГБ/с. Вывод: программа не виновата, просто оборудование не подходящее, ведь сервера могут в 500. Но нет: программка десктопная, значит, нужно отталкиваться от типичных доступных ресурсов.

И когда остатки нескольких файлов хранятся в одном блоке, то это может негативно сказаться на время записи.

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

… Ты измеряешь артефакты файловой системы по сути …

Но снова таки, одной из самых распространённых, т.е. повседневная реальность.
Это как, если бы десктопная программка для приемлемого отклика требовала 500 ГБ/с доступа к памяти. Но даже на свежих десктопах максимум где-то 50 ГБ/с

ReiserFS является штатной ФС для Linux и FreeBSD. К тому же, ты уже упомянул, что есть еще кэши ОС-и, которые могут целиком схавать всю репу и вообще не читать ничего с диска — кол-во RAM в современных компьютерах вполне позволяет это сделать, ведь маркетинг принес в дом именно большую и медленную память, что самая что ни на есть повседневная реальность.

И когда остатки нескольких файлов хранятся в одном блоке, то это может негативно сказаться на время записи

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

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

Т.е. функционал не важен, нужно чтобы на диске занимало пару гигов?

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

Т.е. функционал не важен, нужно чтобы на диске занимало пару гигов?

Важно, чтобы Раст не был говном, а то у его фанатиков башка совсем отупится.

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

Важно, чтобы Раст не был говном, а то у его фанатиков башка совсем отупится.

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

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

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

Они отсутствуют в других языках за ненадобностью. Раст – помойка.

Очевидно, чтобы понять суть сложных концепций нужно включить голову.

Концепция отключать голову при программировании? Она не сложная. Тысячи людей следуют этой концепции ежедневно. Код-макаки зовутся.

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

Пойди в началку и почерпни там новые знания.

Хм.. кажется я начал понимать, почему у некоторых одно «говно» на языке.

Твоя самокритика не может не радовать, но ты мало стараешься.

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

Они отсутствуют в других языках за ненадобностью.

Так не нужны, что модули добавили в С++20. А pattern matching хотят добавить в С++23. А в шланге пытаются запилить какой-то аналог лайфтаймов.

Пойди в началку и почерпни там новые знания.

Можно и в «началке» почерпнуть знаний. Например по детской психологии. Но я понимаю, вам такое и в голову не приходило, просто хотелось покривляться.

у некоторых одно «говно» на языке

Твоя самокритика не может не радовать, но ты мало стараешься.

Забавная попытка. Но любой, читающий это, увидит кто начал писать про «говно». Забавно то, что вы этого не понимаете.

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

Так не нужны, что модули добавили в С++20.

C++ – это говноязык куда добавляют всё, что плохо лежит. Помойка, такая же как и Раст.

А pattern matching хотят добавить в С++23.

Лол. Ненужое хотят добавить. Да ещё и language level.

А в шланге пытаются запилить какой-то аналог лайфтаймов.

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

Можно и в «началке» почерпнуть знаний. Например по детской психологии.

Зачем же так усложнять, если есть Раст – воплощение всех детских комплексов сразу.

Но любой, читающий это, увидит

Так ты для кого-то кривляешься? Лол. Забавно. Нормальное поведение для школьника, не стесняйся. А сам читать пробовал, вообще, на что отвечаешь, и осмыслять, разумеется?

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

А pattern matching хотят добавить в С++23.

Лол. Ненужое хотят добавить. Да ещё и language level.

Уж лучше бы pattern matching и контракты добавили, нежели переусложненную систему модулей, которая разделит язык на две версии, по типу python2 vs python3.

После внесения std::variant в стандартную библиотеку C++17 некостыльного pattern matching-а в C++ сильно не хватает.

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

C++ – это говноязык куда добавляют всё, что плохо лежит. Помойка, такая же как и Раст.

Сам-то на чем пишешь, илитарий?

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

C++ – это говноязык куда добавляют всё, что плохо лежит. Помойка, такая же как и Раст.

С++ – «говно», Раст – помойка. Pure C вам, наверное, тоже не нравится. Что осталось в категории «неговно» из системных языков?

Нормальное поведение для школьника

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

А сам читать пробовал, вообще, на что отвечаешь, и осмыслять, разумеется?

Да вообще-то всё началось не с ответа, а с вопроса. Моего вопроса вам. И продолжилось вашими унылыми ужимками.

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

С++ – «говно», Раст – помойка. Pure C вам, наверное, тоже не нравится. Что осталось в категории «неговно» из системных языков?

Pascal.

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

Боюсь kostyarin_ и паскаль внесёт в список «говно» по признаку малой стандартной библиотеки.

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

Боюсь kostyarin_ и паскаль внесёт в список «говно» по признаку малой стандартной библиотеки

Паскаль линкуется с сишными объектниками, и функции на чистом Си можно свободно вызывать из него.

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

которая разделит язык на две версии, по типу python2 vs python3.

  1. stability sucks
  2. ролинг-релизный Раст так вообще
kostyarin_ ()
Ответ на: комментарий от htower_

Сам-то на чем пишешь, илитарий?

Ну ясное дело, только на нормальных ЯП: Logo, Pascal/Delphi, Go, Python(3), Ruby, как и все у нас в школе.

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

Pure C вам, наверное, тоже не нравится.

Сишка-то норм, если бы не макросы и тупость с размерами типов. Ну и постоянное дрочево на backward compatibility. Как будто бы ANSI C перестал существовать. Макросы переносят его от high-level assembler на уровень подальше. Как и необходимость ковырять pkg-config, чтобы узнать как там структура упакована. Короче, далёк он от железа.

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

Клеймить? Школьник спрашивает школьника. Это по твоему клеймление? Ну ты дал.

Вкупе с любовью к говну это многое о вас говорит.

Уверяю Вас, сэр, я старательно избегаю C++ и Раст, так что любовью к говну меня не упрекнуть.

Да вообще-то всё началось не с ответа, а с вопроса. Моего вопроса вам. И продолжилось вашими унылыми ужимками.

Ага, из воздуха. Ну тогда это полностью твоя проблема. Я-то контекст не терял.

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

stability sucks

Речь не об этом, а том, что то, что вам кажется «ненужно», на самом деле весьма нужно.

Logo, Pascal/Delphi, Go, Python(3), Ruby

Ни одного сколько-нибудь продвинутого языка. Яснопонятно.

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

Речь не об этом, а том, что то, что вам кажется «ненужно», на самом деле весьма нужно.

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

Может ты не в курсе, но в Го для всего этого был свой подход. Т.е. ненужное так и осталось не нужным. Единственная инновация в Go 2, которая имеет смысл – это check, и он может быть интегрирован запросто и в Go 1. Т.к. ничего не ломает. И это всего лишь сахар. Всего лишь сахар.

Точно так же, толпы школьников и последователей Страуструпа не смогли в прототипы и тогда в JS завезли классы. Какое достижение! И все эти достижения из той же оперы. Кто-то просто очень инертен во взглядах. Это печально.

Характерная черта таких фанбоев – это «если не похоже на ЯП, который я использовал» – это недостаток.

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

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

А я пошел бы дальше, и спросил бы: кто не школьник? Вот скажи мне, торвальдс - не школьник? Человек, который с молодых лет не смог изучить ни одного нового языка и инструмента с подходом «Си хорош, потому что я его знаю». Кому доверить создание языка? Стоит также понимать, что Go писался для индусов, потому прихоти индусокультуры таки стоит учитывать. Сейчас дилема стоит основная такая: мы либо добавляем разные варианты метапрограммирования и язык становится тяжелым для обучения, чтения кода, да и вообще написания, либо оставляем простым, но тогда он будет ограничен простым спектром задач — например, работаем с прибитыми гвоздями к компилятору строками и контейнерами. Конечно, в идеале хотелось бы устоять на двух лодках, задействовав простой элегантный способ метапрограммирования, но я таких не знаю.

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

А теперь расскажи мне, что решения принимают не школьники, которые по простоте своей думают, что чем больше фич – тем лучше.

Вы уверены, что все это вывалили на подходящего собеседника? Я вот уверен в обратном.

Давайте еще раз, может сейчас вам станет понятнее.

Итак, у вас есть мнение о том, что добавление pattern matching в C++ – это «лол, ненужно» и все в таком духе.

Так вот, это мнение неправильное.

Поскольку тем, кто C++ использует (и использует именно современный C++, а не говно мамонта с теплым ламповым названием «Си с классами») pattern matching как раз нужен. И чем дальше, тем больше.

Что вы думаете по этому поводу и что вы имеете сказать про «школьников и последователей Страуструпа» не интересно от слова совсем. Ваше мнение неправильно о чем я счел нужным вам сообщить.

Почему оно неправильное – это ваши проблемы.

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

Поскольку тем, кто C++ использует (и использует именно современный C++, а не говно мамонта с теплым ламповым названием «Си с классами») pattern matching как раз нужен. И чем дальше, тем больше

Да, я согласен, что в C++ классы не нужны — был бы замечательный язык, но Страуструп хайпанул, в итоге язык стал успешным и говном.

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

Сишка-то норм

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

школьники, которые по простоте своей думают, что чем больше фич – тем лучше

Минутку, разве не вы ругали Rust за скромную стандартную библиотеку?

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

Переусложнение в одном месте и есть ЯП для т.н. «индусов». Т.к. «индус» не может выйти за рамки текстового файла, очевидно полагая, что рамка окна текстового редактора – это запретная граница поста. Получается, что ЯП перегружен, и непонятно зачем. Есть модель

  • итоговый файл
  • линкер
  • объектные файлы
  • ассемблер
  • компилятор
  • генераторы (шаблоны)
  • макросы
  • исходники

Вместо (именно вместо) ассемблера в Go используется Go Assembler. Макросов нету, хотя никто ведь не запрещает обвязать всё M4. Генераторы вне языка.

Ну так вот, школьники не в курсе. Ведь для них важно чтобы всё было именно language level. По сути, просьбы добавить всё это в ЯП и есть желание проехаться на спине разработчиков ЯП в своей немощности. Что, кстати, неплохо так диссонирует с защитой маленькой стандартной библиотеки.

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

Поскольку тем, кто C++ использует (и использует именно современный C++, а не говно мамонта с теплым ламповым названием «Си с классами») pattern matching как раз нужен. И чем дальше, тем больше.

Это что, такая игра в кто кого переговрит? Давай поясняй или сливайся. Разборки уровня начальных классов школы меня не сильно интересуют.

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

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

Ясное дело, у Си своя специфика. Тащить HTTP и даже просто треды на каждую его платформу – просто не нужно. Он должен быть простым и маленьким, как и его стандартная либа.

Минутку, разве не вы ругали Rust за скромную стандартную библиотеку?

Да, и привёл довольно подробное объяснение.

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

Это что, такая игра в кто кого переговрит?

Нет.

Давай поясняй или сливайся.

Посняй что? То, что pattern matching в C++ нужен?

Так это проистекает из того печального факта, что в C++ нет встроенных удобных и безопасных средств работы с std::optional, std::variant и грядущим expected. Нет ни в языке, ни в стандартной библиотеке.

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

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

Или нужно пояснить что ваше мнение неправильно?

Меня не интересуют мнения, и своим я не делюсь. Это просто факты.

То, что pattern matching в C++ нужен?

Так это проистекает из того печального факта, что в C++ нет встроенных удобных и безопасных средств работы с std::optional, std::variant и грядущим expected. Нет ни в языке, ни в стандартной библиотеке.

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

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

и своим я не делюсь

Шизофренией попахивает.

Это просто факты.

«Лол, ненужно» уже стало фактом? Ахринеть.

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

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

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

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

Бывает, чтобы было неудобно, специально и задумано: трайпос.

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

Что именно вы считаете развёрнутым объяснением? Это:

Её размера.

Или это:

Важно, чтобы Раст не был говном, а то у его фанатиков башка совсем отупится.

Дальше речь не касалась стандартной библиотеки раста.

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

Что именно вы считаете развёрнутым объяснением?

То, что ты не читал, но на что ответил, потому что у тебя сгорел пукан по Расту. Сам ищи, не маленький.

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

Хорошо, давайте разберём ваше сообщение, на которое я ответил в самом начале.

Примитивными считаю ЯП без нормальной стандартной либы, если это не обосновано (как в ANSI C, но только в ANSI)

Почему это обосновано для ANSI C и только для него?

Стандартная либа – это одновременно и плацдарм для базовой отработки ЯП, так и определение реальных (а не эфемерных, мнимых) границ его применимости.

Из ваших же слов разве не следует, что если Rust хочет стать альтернативой для С, то для него обоснован небольшой размер стандартной библиотеки, где всё же есть очень много чего?

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

Почему это обосновано для ANSI C и только для него?

Отвечал уже тебе или кому-то. Вот:

Ясное дело, у Си своя специфика. Тащить HTTP и даже просто треды на каждую его платформу – просто не нужно. Он должен быть простым и маленьким, как и его стандартная либа.


Из ваших же слов разве не следует, что если Rust хочет стать альтернативой для С,

Ему unsafe не даст и модель памяти. Си – это хайл-левел асм в первую очередь. И там применим, где malloca и быть не может. Раст может потеснить Си там где уже Си слишком низкоуровневый, но применяется.

то для него обоснован небольшой размер стандартной библиотеки, где всё же есть очень много чего?

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

Для Го основные практики и границы применимости весьма конкретны. Шаг в сторону – фиаско. Много работы, да мало толку. И во многом благодаря стандартной библиотеке. Иначе бы он был гораздо более пёстрым. Да ещё бы и торчал бы, где ему не место.

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

В особенности это касается криптографии и прочего. Кто-то там на ГитХабе что-то сделал. И может даже с толком. Но кто ему поверит? Кто проверит?

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

Ему unsafe не даст

Почему? Из ваших слов можно подумать, что в С unsafe нет, тогда как там всё unsafe.

И там применим, где malloca и быть не может.

В Rust тоже можно использовать стэк.

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

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

без которых не обойтись, но котрые написал какой-то чувак по фану, но теперь у него есть работа/жена/собака/ему пофиг и он забил

Если пакет кому-то нужен, а автор пропал, то оставшиеся пользователи могут продожить развитие.

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

Почему? Из ваших слов можно подумать, что в С unsafe нет, тогда как там всё unsafe.

Да, всё. Но это языковая норма, а не нонсенс.

В Rust тоже можно использовать стэк.

В микроконтроллерах использовать стек, порою, нельзя, оттого то он там маленький.

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

На этапе написания стандартной библиотеки всё это всплывает. Иначе каждый познаёт это на своём опыте.

Если пакет кому-то нужен, а автор пропал, то оставшиеся пользователи могут продожить развитие.

Это определяется необходимостью. И есть тема очень необходима для ЯП, то ей место в стд, а не у Васяна на задворках. Всё просто же. Если нет, то проект стухнет – вопрос времени.

kostyarin_ ()

Мне больше по душе CS:Source. Но CS:GO тож можно погонять.

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

вот это ты ворвался с искрометным юмором в тухлый тред

Virtuos86 ★★★★★ ()

Видел эту статью, открыл и закрыл. Идиотизм. Особенно аргументы про винду.

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

Да пусть уходит хоть на хаскель сразу! В его расте затрахаешься пока сделаешь то что нужно. Для разных задач - разные языки. И «разные» в данном случае означает, что для части задач нужны РАСПИ**ЯЙСКИЕ языки, потому что они УДОБНЫ!

vitalif ★★★★★ ()
Ответ на: комментарий от LINUX-ORG-RU
$ wget -qO- https://fasterthanli.me/blog/2020/i-want-off-mr-golangs-wild-ride/ | grep -i rust | wc -l
49
$ wget -qO- https://fasterthanli.me/blog/2020/i-want-off-mr-golangs-wild-ride/ | grep -i go | wc -l  
218
$ wget -qO- https://fasterthanli.me/blog/2020/i-want-off-mr-golangs-wild-ride/ | grep -i sex | wc -l
8
tz4678 ()
Последнее исправление: tz4678 (всего исправлений: 1)
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)