The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]



"Доступен интерпретатор mruby 3.0"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Доступен интерпретатор mruby 3.0"  +/
Сообщение от opennews (??), 06-Мрт-21, 20:40 
Состоялся релиз mruby 3.0, встраиваемого интерпретатора динамического объектно-ориентированного языка программирования Ruby. Mruby обеспечивает совместимость синтаксиса на уровне Ruby 1.9, но также поддерживает отдельные возможности из более новых версий. Интерпретатор отличается низким потреблением памяти и возможностью встраивания в другие приложения. Кроме того, поддерживается компиляция Ruby-программ в байткод при помощи развиваемого проектом компилятора "mrbc". Код mruby распространяется под лицензией MIT...

Подробнее: https://www.opennet.ru/opennews/art.shtml?num=54712

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "Доступен интерпретатор mruby 3.0"  +1 +/
Сообщение от InuYasha (??), 06-Мрт-21, 20:40 
> для правостороннего присваивания значений.

За этим есть реальный логический смысл или просто "когда лень Crtl+X сделать"?

Ответить | Правка | Наверх | Cообщить модератору

3. "Доступен интерпретатор mruby 3.0"  +/
Сообщение от Леголас (ok), 06-Мрт-21, 20:44 
причём здесь логический смысл? просто такой синтаксис оператора
Ответить | Правка | Наверх | Cообщить модератору

7. "Доступен интерпретатор mruby 3.0"  +1 +/
Сообщение от Анончик (?), 06-Мрт-21, 21:11 
В какой-то степени
Например когда тебе надо из цепочки методов сделать присваивание
a="hello"
a.upcase.reverse => b
конечно можно написать и так
b = a.upcase.revers

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

Ответить | Правка | К родителю #1 | Наверх | Cообщить модератору

9. "Доступен интерпретатор mruby 3.0"  +5 +/
Сообщение от InuYasha (??), 06-Мрт-21, 21:16 
так и скажи - для обфускации однострочников ))
Ответить | Правка | Наверх | Cообщить модератору

24. "Доступен интерпретатор mruby 3.0"  –4 +/
Сообщение от Аноним (24), 07-Мрт-21, 01:14 
Так и скажи, что просто хейтишь то, что для тебя необычно
Ответить | Правка | Наверх | Cообщить модератору

11. "Доступен интерпретатор mruby 3.0"  +/
Сообщение от Аноним (11), 06-Мрт-21, 21:23 
Это тестовая фича новый рубей, кажется. Зачем оно надо, впрочем, непонятно, да.
Ответить | Правка | К родителю #1 | Наверх | Cообщить модератору

13. "Доступен интерпретатор mruby 3.0"  +3 +/
Сообщение от Аноним (13), 06-Мрт-21, 21:32 
Конвейер же....
Ответить | Правка | К родителю #1 | Наверх | Cообщить модератору

25. "Доступен интерпретатор mruby 3.0"  +5 +/
Сообщение от Ordu (ok), 07-Мрт-21, 01:23 
> За этим есть реальный логический смысл

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

Но теперь прикинь, заглядываешь ты код и видишь:

switch(o->type) {
// и тут пара сотня case'ов
}

С точки зрения синтаксиса -- это просто switch, с точки зрения процессора -- это jmp-table. Но с точки зрения задумки, очевидно, что это наколенный ООП, с динамическим полиморфизмом организованным посредством enum'а и switch'а по нему. Тот же ООП можно было бы реализовать при помощи virtual метода в o. Ту же самую задумку, можно реализовать другим способом. И в то же время, используя тот же самый способ (switch) можно реализовать совершенно другую задумку, которая никакого отношения к ООП не имеет.

Вдумайся в это, есть пространство идей, есть множество всех возможных кусков кода. Твоя голова сопоставляет идеям куски кода, и кускам кода идеи, то есть реализует, говоря математическим языком, отображение одного в другое. Если тебе хочется не просто теоретически эту мысль уловить, а практически посмотреть, то я б рекомендовал покодить на ассемблере, и почитать код на ассемблере. Ты увидишь, как твоя голова, со временем, начнёт выдирать из списка инструкций некоторые, и такая "о, push ebp/mov ebp esp -- это создание стекового фрейма". Или mov [ebp+4], 5: это же в переменную на стеке кладётся 5. То есть, твоя голова начнёт сложным образом дешифровывать ассемблерный код, и видеть идеи за кодом. Со временем она начнёт видеть всё более и более сложные паттерны и опознавать их.

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

В большинстве случаев же, опытным программистам удаётся писать понятный код. Как они этого достигают? А это сложная тема, которая, я подозреваю, граничит с психолингвистикой, с тем как человеческие мозги обрабатывают речь. Но как бы там ни было, напрашивается рождение идеи напихивания в язык много разных способов написать один и тот же код, с тем чтобы выбором способа можно было бы намекать на идею, породившую этот код. В этом направлении развития языков программирования сильно отличился Ларри Уолл, который запилил Perl. Что любопытно, Ларри ведь по образованию лингвист, и он получал образование в надежде найти язык без письменности и запилить к нему письменность. С этим не сложилось, поэтому он запилил Perl. Но я отвлёкся. Так вот, Ларри запиливал Perl с явно высказанной идеей о том, что в Perl'е всё что угодно может быть сделано несколькими способами. И слова о выразительности языка тоже звучали. Я не слышал правда, чтобы он говорил о той выразительности, к которой я выше подводил, но подозреваю, что речь именно о ней.

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

Насколько этот подход хорош или плох -- сложно сказать. Я не настолько знаю ruby, чтобы оценить работает ли это в нём, но в perl'е это не сработало так, потому что программисты на perl не думали о том, как они потом будут читать свой код, и лепили его первым пришедшим на ум способом, в результате чего, читаемость программ не повышалась, а снижалась.

Ответить | Правка | К родителю #1 | Наверх | Cообщить модератору

27. "Доступен интерпретатор mruby 3.0"  +1 +/
Сообщение от Леголас (ok), 07-Мрт-21, 06:55 
В противовес Ларри, Гвидо ван Россум -- математик, и в Python акцент делался на читаемости: принцип «явное лучше неявного».
Ответить | Правка | Наверх | Cообщить модератору

33. "Доступен интерпретатор mruby 3.0"  –1 +/
Сообщение от Аноним (24), 07-Мрт-21, 21:00 
«явное лучше неявного» далеко не всегда улучшает читаемость. Часто наоборот, замусоривает код и читаемость ухудшается. В С все очень явно описывается, я бы не сказал, что код легко читать. Логика не видна в куче бойлерплейта.
Ответить | Правка | Наверх | Cообщить модератору

31. "Доступен интерпретатор mruby 3.0"  +1 +/
Сообщение от msgod (ok), 07-Мрт-21, 15:25 
Фига тя прет
Ответить | Правка | К родителю #25 | Наверх | Cообщить модератору

36. "Доступен интерпретатор mruby 3.0"  +/
Сообщение от Аноним (36), 08-Мрт-21, 11:26 
Не прочитал, но интересно!
Ответить | Правка | К родителю #25 | Наверх | Cообщить модератору

38. "Доступен интерпретатор mruby 3.0"  –1 +/
Сообщение от i (??), 09-Мрт-21, 00:35 
> программисты на perl не думали о том, как они потом будут читать свой код, и лепили его первым пришедшим на ум способом,

А что, прогеры руби чем-то лучше?

> Со временем она начнёт видеть всё более и более сложные паттерны и опознавать их.

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

> ...Но с точки зрения задумки, очевидно, что это наколенный ООП

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

> психолингвистикой

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

Ответить | Правка | К родителю #25 | Наверх | Cообщить модератору

39. "Доступен интерпретатор mruby 3.0"  +/
Сообщение от Ordu (ok), 09-Мрт-21, 04:16 
>> программисты на perl не думали о том, как они потом будут читать свой код, и лепили его первым пришедшим на ум способом,
> А что, прогеры руби чем-то лучше?

Я же написал выше: не знаю. Про перловых я знаю, про рубистов -- нет.

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

Я использовал слово паттерн с тем чтобы намекнуть на паттерны программирования, тут ты правильно угадал. Но имел в виду я всё же несколько более широкое явление. Скажем в C++ довольно распространено префиксовать переменные-члены класса, дабы в коде было бы сразу ясно, что это за переменная _size и откуда она взялась. Или приведённый выше пример switch(o->type).

>> ...Но с точки зрения задумки, очевидно, что это наколенный ООП
> Вот не надо тут красок, всегда считал, что код, чем тупее тем
> лучше, весь этот синтаксический сахар только усложняет чтение, идеально тупому коду
> комменты не нужны, там и так все ясно, потому что конструкции
> типа присвоения и if-else ветвление и больше ничего.

Да. Точно. Я в 18 лет, считал, что языки уровнем выше ассемблера для слабых духом.

>> психолингвистикой
> Вам блин шашечки или ехать, вы еще стихи насочиняйте на с++, в
> математике вообщето доказывается, что а + б = б + а,
> а попытки "дать возможность по иному", от лукавого, так как дополнительный
> вектор атаки, так как читать сложнее

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

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

Ответить | Правка | Наверх | Cообщить модератору

40. "Доступен интерпретатор mruby 3.0"  +/
Сообщение от i (??), 09-Мрт-21, 08:31 
> Неа. Проще читать на русском

O_o

Серьезно?

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

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

> из-за этого на нём сложнее выражать мысль, а часто сложнее понимать

Мысль о том, что было 2 козы и одну перехал трамвай и стала одна? или может вероятностную функцию какуюто проще?

Ответить | Правка | Наверх | Cообщить модератору

41. "Доступен интерпретатор mruby 3.0"  +/
Сообщение от Ordu (ok), 09-Мрт-21, 09:13 
>> Неа. Проще читать на русском
> O_o
> Серьезно?

Нет, прикалываюсь. Похоже получается?

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

А теперь попробуй на языке описания схем, написать Войну и Мир. Или вести пьяные беседы на кухне. Или расскажи о том, что такое back-propagation в нейросетке. Хоть что-нибудь кроме схем на этом языке можно выразить?

Ответить | Правка | Наверх | Cообщить модератору

42. "Доступен интерпретатор mruby 3.0"  +/
Сообщение от Брат Анон (ok), 09-Мрт-21, 09:34 
На русском читать проще. Факт, проверенный на себе.

Представь себе носителя английского языка ,который в шоке задаёт вопрос: "На английском читать проще?!" (подразумевается, что весь код в мире пишется на немецком).

ДА! Они читают код НА СВОЁМ РОДНОМ ЯЗЫКЕ. И не понимают, что тут такого.

Так для справочки: Пушкин до 8 лет говорил на французском, Александр I писал приказы войскам на французском языке, при Екатерине Великой студентов универов учили на немецком, последние 20 лет код пишут почти исключительно на английском.

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

Ответить | Правка | К родителю #40 | Наверх | Cообщить модератору

43. "Доступен интерпретатор mruby 3.0"  +/
Сообщение от Аноним (43), 10-Мрт-21, 19:02 
Вообще не проще, приходится постоянно вспоминать перевод чего это вообще и скажи спасибо если редактор был не совсем хлебушек. Особенно весело с совсем незнакомыми терминами на русском.
Ответить | Правка | Наверх | Cообщить модератору

2. "Доступен интерпретатор mruby 3.0"  +1 +/
Сообщение от Аноним (2), 06-Мрт-21, 20:44 
> для правостороннего присваивания значений.

.удобно оченЬ
.читаемой легко становится сразу программА

Ответить | Правка | Наверх | Cообщить модератору

5. "Доступен интерпретатор mruby 3.0"  +/
Сообщение от Леголас (ok), 06-Мрт-21, 20:51 
Ьнечо онбоду.
Аммаргорп узарс ястивонатс окгел йомеатич.
Ответить | Правка | Наверх | Cообщить модератору

6. "Доступен интерпретатор mruby 3.0"  +3 +/
Сообщение от Аноним (6), 06-Мрт-21, 20:54 
тут что-то на эльфийском…
хотя чего еще ожидать
Ответить | Правка | Наверх | Cообщить модератору

4. Скрыто модератором  –1 +/
Сообщение от Аноним (-), 06-Мрт-21, 20:50 
Ответить | Правка | Наверх | Cообщить модератору

8. "Доступен интерпретатор mruby 3.0"  –3 +/
Сообщение от Аноним (8), 06-Мрт-21, 21:12 
Зачем на микроконтроллере рельсы? А если нет рельсов, то зачем вообще Ruby нужен?
Ответить | Правка | Наверх | Cообщить модератору

10. "Доступен интерпретатор mruby 3.0"  +3 +/
Сообщение от Анончик (?), 06-Мрт-21, 21:19 
Как замена однострочников перла очень неплох.
ps aux | ruby -ane 'BEGIN{$sum=0; app="Firefox"}; $sum += $F[5].to_i if $_.match?(app); END{print "#{app}:\t",$sum/1024,"\n" }'
mruby тяжеловат для мк имхо, больше как встраиваемый интерпретатор.
Ответить | Правка | Наверх | Cообщить модератору

17. "Доступен интерпретатор mruby 3.0"  +1 +/
Сообщение от Аноним84701 (ok), 06-Мрт-21, 23:09 
> Как замена однострочников перла очень неплох.
> ps aux | ruby -ane 'BEGIN{$sum=0; app="Firefox"}; $sum += $F[5].to_i if $_.match?(app);
> END{print "#{app}:\t",$sum/1024,"\n" }'
> mruby тяжеловат для мк имхо, больше как встраиваемый интерпретатор.

Кхе.
ps aux|awk '/firefox/{sum+=$6}END{print sum/1024}'
ну или
ps aux|awk -v app=firefox '$0~app{sum+=$6}END{print app ":\t" sum/1024}'

точно так же подсчитает "не совсем, но почти правильно" (хотя memory footprint awk все же заметно меньше руби будет, а уж на фоне FF так вообще незначителен ...)

Ответить | Правка | Наверх | Cообщить модератору

21. "Доступен интерпретатор mruby 3.0"  –1 +/
Сообщение от Анончик (?), 06-Мрт-21, 23:55 
Да там любой футпринт будет не заметен, современные браузеры столько жрут.
Собственно оно и было переписано с подобной awk, ради забавы.
Ответить | Правка | Наверх | Cообщить модератору

23. "Доступен интерпретатор mruby 3.0"  +/
Сообщение от Аноним84701 (ok), 07-Мрт-21, 00:50 
> Да там любой футпринт будет не заметен, современные браузеры столько жрут.

Не, я к тому, что считает оно вместе с процессом ruby/awk ;-)
====
pgrep firefox | xargs ps -o rss= -p | awk '{sum+=$1} END{print sum/1024}'
или
ps ax -o rss,comm|awk '/firefox/{sum+=$1}END{print sum/1024}'

Ответить | Правка | Наверх | Cообщить модератору

26. "Доступен интерпретатор mruby 3.0"  –1 +/
Сообщение от Аноним (43), 07-Мрт-21, 05:55 
Ps кстати врёт, да и rss тебе ни о чём не скажет -- это не информативно совершенно. Надеюсь, ты это понимаешь. И не надо использовать pgrep, pidof подходит куда больше.

Я использую такой однострочник psrss=0;pspid="$(pidof ${1,,}|tr $' ' ,)";for m in `ps -eo rss= -q "${pspid}"`; do (( psrss+=m ));done; потом 3 команды bc и awk только для вывода и форматирования. Можно конечно сейчас написать иначе, но смысла переписывать не вижу.

А вот smaps тебе сообщает кроме точного rss и pss и вот это уже полезно, однострочник там ровно тот же самый только без ps.

Ответить | Правка | Наверх | Cообщить модератору

29. "Доступен интерпретатор mruby 3.0"  +/
Сообщение от Анончик (?), 07-Мрт-21, 12:00 
Мне точность не сильно нужна была, однострочник служил для сравнения потребления памяти браузерами с включенным таб рипером и без. Ну и за одно выбрал какой реально выкружает вкладки, а какой только делает вид.
Ответить | Правка | Наверх | Cообщить модератору

32. "Доступен интерпретатор mruby 3.0"  +/
Сообщение от Аноним (43), 07-Мрт-21, 16:04 
Там разница бывает очень значительная, особенно на программах, пытающихся скрыть своё потребление. Ну, вроде хрома. А rss вообще не отражает дистанцию до "когда зависнет", pss получше в этом отношении и сразу видно кто тут наглеет. Надёжно узнать разницу до и после можно из free (только версии свежее ~3 лет).
Ответить | Правка | Наверх | Cообщить модератору

30. "Доступен интерпретатор mruby 3.0"  –1 +/
Сообщение от Аноним (30), 07-Мрт-21, 12:02 
То есть у перловых однострочников есть фатальный недостаток? Понятно.
Ответить | Правка | К родителю #10 | Наверх | Cообщить модератору

12. "Доступен интерпретатор mruby 3.0"  +/
Сообщение от Аноним Фейспалмирующий (?), 06-Мрт-21, 21:24 
Ах ты такой тонкий тролль, чудо дивное, ммм (нет).
Ответить | Правка | К родителю #8 | Наверх | Cообщить модератору

18. "Доступен интерпретатор mruby 3.0"  –2 +/
Сообщение от YetAnotherOnanym (ok), 06-Мрт-21, 23:22 
Зачем вообще лезет к микроконтроллерам человек, который не знает ничего, кроме Руби?
Ответить | Правка | К родителю #8 | Наверх | Cообщить модератору

28. "Доступен интерпретатор mruby 3.0"  +/
Сообщение от n00by (ok), 07-Мрт-21, 09:22 
Что бы опровергнуть десятое правило Гринспена.
Ответить | Правка | Наверх | Cообщить модератору

19. "Доступен интерпретатор mruby 3.0"  +2 +/
Сообщение от Keqing (?), 06-Мрт-21, 23:35 
А причём здесь вообще микроконтроллеры?
Ответить | Правка | К родителю #8 | Наверх | Cообщить модератору

34. "Доступен интерпретатор mruby 3.0"  +/
Сообщение от YetAnotherOnanym (ok), 07-Мрт-21, 21:36 
> А причём здесь вообще микроконтроллеры?

Это единственное место, где ещё считают килобайты.

Ответить | Правка | Наверх | Cообщить модератору

22. "Доступен интерпретатор mruby 3.0"  +2 +/
Сообщение от funny.falcon (?), 07-Мрт-21, 00:02 
Мне как раз руби нравится, а вот рельсами не болею. Руби - очень приятный язык для скриптов.
Ответить | Правка | К родителю #8 | Наверх | Cообщить модератору

37. "Доступен интерпретатор mruby 3.0"  +/
Сообщение от anonymous (??), 08-Мрт-21, 19:03 
Его не использкют в микроконтроллерах, его используют в качестве встраиваемого языка, как Lua.
Ответить | Правка | К родителю #8 | Наверх | Cообщить модератору

14. "Доступен интерпретатор mruby 3.0"  +4 +/
Сообщение от Аноним (14), 06-Мрт-21, 21:45 
Руби красивый, хорошо продуманный язык.
К сожалению с реализациями руби изначально не везло, поэтому он так и не смог занять подобающее ему положение.
Ответить | Правка | Наверх | Cообщить модератору

15. "Доступен интерпретатор mruby 3.0"  –5 +/
Сообщение от валяйте (?), 06-Мрт-21, 22:43 
Мндаааа... ок...
Ответить | Правка | Наверх | Cообщить модератору

16. "Доступен интерпретатор mruby 3.0"  +/
Сообщение от Аноним (16), 06-Мрт-21, 22:59 
А зачем?
Ответить | Правка | Наверх | Cообщить модератору

20. "Доступен интерпретатор mruby 3.0"  +2 +/
Сообщение от Keqing (?), 06-Мрт-21, 23:41 
Затем же, зачем и Lua: встраивать в программы для удобного написания высокоуровневой логики. Конкретно на mruby, например, написан гуй ZynFusion.
Ответить | Правка | Наверх | Cообщить модератору

35. "Доступен интерпретатор mruby 3.0"  +/
Сообщение от xm (ok), 07-Мрт-21, 23:56 
Встраиваемый интерпретатор. Например, в веб-серверы H2O все сложные вещи а-ля рерайты удалены из парсера конфигурационного файла, зато есть mruby с которым можно сделать практически что угодно.
Ответить | Правка | К родителю #16 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Ideco
A-Real
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру