Забастовка кроликов в клубе Playboy в Чикаго, 18 июня 1975 года.

Всем здравствовать!
Всё-таки в этот раз я решил разделить итоговый пост недели и выбор нового слова.
Ну, а раз так, предлагаю вспомнить всех участников этой недели. А их было немало, и это радует. Вот что значит правильное слово.
Ну, двинули!
1. Первым, как часто это бывает, стал @kaktusovoe и его открывашки.
2. Следом был @NibelungKHV и пиво с видом, ну или это вид с пивом. Есть в общем на Реддите сообщество.
3. Вновь @NibelungKHV правда в этот раз речь идёт про ловушки для слизней. А в комментариях есть отличный рецепт их приготовления.
5. @lovefst принёс очень интересную статью Насколько старо пиво? А ведь действительно, как давно люди варят сей чудный напиток?
6. @lovefst про шнобелевскую премию в области биологии. Зато понятно, как делаются научные открытия.
7. Третий пост от @lovefst и вновь про шнобелевку. Но тоже очень интересно.
8. Следующим стал мультфильм от ещё одного постоянного участника @UrmasTormas
А что, идея действительно годная.
9. @Natter решил поделиться то ли баянами под пиво, то ли пивом под баяны...
А для затравки вот вам некромант и его старый друг.
10. Без рецепта с применением пива тоже не обошлось и представил его @Phoenix
Нужно будет обязательно попробовать. А может кто-то уже?
11. Божественный напиток. Да, тут, пожалуй и добавить нечего. @skiph всё-таки вливается в ивент. Хорошо. А более подробно читайте здесь.
12. А я тут просто показываю свой бокал для снятия стресса. И да, он наполнен пивом.
13. @K.Bajun напомнил нам про креативную рекламу пива. А вот обсудить пиво с чипсы можно в комментариях.
14. @pobeDA не часто участвует, но в этот раз поделилась историей невероятного совпадения событий и бельгийские вафли пивные выходные. Читайте. А я по прежнему хочу туда. Эх, мечты, мечты.
15. А вот эта сцена, пожалуй, не нуждается в представлении. Вспоминаем классику советского кинематографа благодаря @UrmasTormas там ещё и Высоцкий есть.
16. @Natter утверждает, что это шедевр! Что же, не могу не согласиться.
17. А в этот раз, уже я предлагаю вспомнить советскую классику. Согласитесь, всё правильно поёт?
18. Итак, здесь @el.melahel показывала нам Сатану без пива. Представляете?! Или это была Сатаней... А может Шатана, в общем смотрите сами. А для тех, кто умеет читать, там ещё и текст есть про нашу героиню.
19. Наш штатный эксперт по Гарри Поттеру @Nemezida77 не только показала нам Кузькину мать стакан бутербира, но и поделилась рецептом.
20. @Vo-Dyatel поделился запечатлённым на видео процессом получения жизненного опыта, одним из Питерских мальчуганов.
А что это так бумкнуло?
22. А @Natter на этой неделе прямо в ударе. Это хорошо, так держать! Пословицы и поговорки. Добавляйте свои.
23. @lovefst решил похвастаться тем, что он в отпуске и пьет из подаренной ему кружки. Редиска!
24. А вот это было неожиданно. Наш фриган @DumpsterDiver произвёл дегустацию пива Garret, найденного на помойке. Как выяснилось, пиво вполне себе. В последствии выяснилось, что это теперь так Garage импортозамещают.
25. Я тут просто поинтересовался сделали ли вомбатяне запасы перед праздником. А выяснилось, что не везде действуют запреты. Не везде даже ограничения есть!
26. @UrmasTormas и Олег Митяев напоминают нам что лето это маленькая жизнь. А вы знали историю создания этой композиции? Почитайте.
27. @Айрат поделился идеей пивного девайса. Но всё-таки это скорее держатель, нежели автомат. Кто как считает?
28. Korpiklaani - Beer Beer их заводная песня способна настолько поднять настроение, что появятся силы с утра сгонять за пивком! Да, я люблю пиво и металл.
29. Наш штатный рептилоид @Yasher_Ko поделился историей создания одного из самых известных пив. А ещё там есть памятник.
30. @lilprobe решил тряхнуть стариной вспомнить кабаре-дуэт "Академию" и их психологический триллер "За пивом". Смотрим, вспоминаем.
31. @IvanKr08 решил рассказать про доброго Шубина. Я ещё не читал, т.к. не успеваю, поэтому почитаю после того, как закончу итоговый пост.
32. @Diman показал нам действительно нестареющую классику...
33. @UrmasTormas показывает гематому. Ну, точнее это название группы так переводится.
Что? Конец недели получился весьма и весьма музыкальным.
34. @Nemezida77 сказала, что пора по пиву, значит пора по пиву. Ну и что, что понедельник? Для подходит любой день недели.
35. @Yasher_Ko говорит, что Княzz это молодёжная музыка. Кто с этим согласен?
36. Всё, пора заканчивать! А то вот к @IvanKr08 белочка пришла. Опять.
Фух, на этом всё. Да, постов на этой недели получилось большое количество. Но все посты прекрасны, а авторы потрясающие!
Вот здесь ссылка на пост, где выбираем новое слово недели.
Да, сегодня вообще неожиданно. Представьте себе- электрическая пила. Удивились?! В конце будет отсылка к предыдущему посту!
Приобретена во "Все инструменты", ценник 1200 без аккумулятора. Была нужна для ровной нарезки вагонки. аккумулятор стоил денег конских- примерно как сама пила. было решено ставить блок питания.
Блок питания от сервера- обычный не вывозил.
С таким блоком питания работала два года. Отпиливал ровные торцы вагонки для обшивки стен. Доску двадцатку грызла, но могла заклинить и тупо встать. Освободил диск- запускалась без проблем снова.
И сейчас работает вполне. Но есть одно но!
Вдруг оказалось, что крепления аккумулятора от недомерка и этой пилы идентичны!!! Оторвал провода и припой, очистил контактные площадки- с хрустом, но встал на место и защелкнулся!!! А дальше:
Да, вполне норм запустилась пила. Ее номиналка 18 волшьт, батарейка 24- но пофиг вообще.
Вместо долгих проточек в вару просверлено отверстие примерно на 3 мм глубиной. В него вставлен отрезок гвоздя и обмят вокруг вала. На эту конструкцию молотком осажена шестерня. Все.
Такой вот приятный бонус за 700 рублей. Не зря на дачу съездил)))
Взято с ТГ канала Поржать и Подумать
1. Проблема, что у тебя не идеально белые зубы. А недавно видел рекламу какой-то фигни, которая «делает глазные яблоки белее». Похоже, нам теперь и об этом придется беспокоиться.
2. Ютуб не дает дальше воспроизводить видео, если ты его сворачиваешь. Да, на Самсунгах можно его свернуть в маленькое окошко, и оно продолжит воспроизводиться, но все же.
3. Контуринг. Косметические компании убедили 13-леток, что у них неправильная структура костей лица, и теперь продают бронзеров на миллиарды баксов, чтобы женщины могли подправлять свои лица. Я больше 10 лет работаю визажистом, и да, теневая растушевка существовала всегда, но далеко не в таких масштабах, как сейчас.
4. Лампочки, которые живут всего один год. Раньше нити накаливания жили невероятно долго. То же самое с нейлоновыми чулками, у которых через определенное время обязательно начнут появляться дырки. Раньше чулками можно было буксировать автомобили. Запланированное устаревание это реальная штука.
5. Герпес. В прошлом он не был особой проблемой. Он был у многих, но не беспокоил. Ну, раз в какое-то время высыпал в районе рта, но люди об этом не сильно переживали. И вот в 70-х появился зовиракс (ацикловир). Но его никто не покупал, и тогда производитель решил привлечь внимание к герпесу. Была запущена рекламная компания, в которой подчеркивалась важность лечения. Они нагнали жути, и теперь, чуть что, многие бегут к доктору на радость этого самого доктора и фармацевтической мафии. А в 80-х журнал Таймс назвал герпес новой проказой, что еще больше подхлестнуло продажи препаратов от него.
6. Шампуни и кондиционеры, которые исправляют секущиеся концы. А не проще ли эти секущиеся концы отрезать?
7. Компания Листерин придумала называть запах изо рта галитозом, чтобы продавать свой ополаскиватель, который до этого провалился как моющее средство. Как только плохой запах изо рта назвали по-медицински, и начали говорить в рекламе, что это страшная проблема, люди стали обращать на это повышенное внимание.
8. Вся эта тема, что у тебя в организме накапливаются токсины, и тебе жизненно необходим курс детокса. Да нет же, твой организм и так с этим прекрасно справляется.
9. Женские бритвы. А чем они технически отличаются от мужских? Да ничем. А почему тогда они дороже?
10. Стандартизированное тестирование в школах. Я не понимаю, почему эти тесты не приравняли к рэкету? Раньше было достаточно оценок по предметам, но эти времена в прошлом. Теперь мало хорошо учиться все четыре года в старшей школе. Необходимо, чтобы у тебя все задалось в день прохождения теста. А не задалось, можно считать, что ты эти четыре года и не учился. Я уже молчу, что их сдача стоит денег, а чтобы прислали результат, еще плати. Не хочешь отдать 200 долларов за прохождение теста и еще 25, чтобы получить ответы? Тогда фиг тебе, а не колледж. Они сделали проблему абсолютно искусственно и зарабатывают на этом каждый год огромные деньги.
11. Бутилированная вода. 25 лет назад производители лимонадов стали озабочены своей репутацией. Их товары считались очень нездоровой фигней. Людям активно советовали пить простую воду. Но если все станут пить воду из-под крана, то производители лимонадов понесут убытки. И тогда они решили эту самую воду разливать в бутылки и продавать ее, заявляя, что она гораздо полезнее и безопаснее воды из-под крана. Но если взять увеличительное стекло и прочитать, что написано на этикетке мелким шрифтом, то там и сказано, что это обычная муниципальная вода, которая и есть из-под крана. Так что теперь у нас миллиардная индустрия бутилированной воды, которой еще недавно не существовало.
12. Необходимость в качестве свадебного кольца обязательно покупать кольцо с бриллиантом. И концепция, что кольцо дешевле трех месячных средних зарплат дарить неприлично, которая разгоняется рекламой компании «Бриллианты навсегда».
13. Туча кожных якобы проблем, о которых пишут модные журналы. Крема против старения, сыворотки с антиоксидантами. Все это псевдонаучные термины, которые придумали, чтобы женщины активнее опустошали свои кошельки. Невозможно обернуть процесс старения кожи вспять, но можно увлажнять кожу и пользоваться солнцезащитным кремом, чтобы поддерживать ее в хорошем состоянии. Антиоксиданты никак не влияют на вашу кожу. Они абсолютно инертны в отношении здоровья кожи и ее состояния.
Еще больше таких подборок на моем канале https://t.me/realhistorys
Мой канал «Клубничный переполох» https://t.me/erosstoris
Мой канал с подборками интересных фактов https://t.me/actualfacts
Мой канал о кошках https://dzen.ru/o_koshkah
Мой канал с переводами рассказов зарубежных писателей https://boosty.to/webstrannik
Всем удачного дня!
Всем здравствовать!
Итак, кто люит хотроды, добро пожаловать! А те кто не любит или не знает что это такое, смотрите, пожалуйста.
Бородатые, глубоко уважаемые дядьки рубят наикрутейший хардрок.
P.S. Говорят, их бороды достались им от их прадедов.
Работаю в поликлинике. Выдала пациентке список документов для МСЭ, обсуждаем список:
- Доктор, а тут в списке написано, что надо копию трудовой книжки
- Да, надо
- Это ее копировать?
- Да
- А заверять на работе надо?
- Вы где-то работаете?
- Нет
- Значит не надо
- Но копировать надо?
- Да
- Все страницы?
- Да
- А заверять?
- Если вы нигде не работаете, то нет
- А если работаю?
- То заверять в отделе кадров
- Но я нигде не работаю
- Значит не заверять
- Но копировать?
- Да
Уруми — одно из самых смертоносных и сложных в освоении видов холодного оружия, возникшее в Индии в XVI веке. Это гибкий меч-плеть с лезвием длиной до 5 метров, изготовленным из закаленной стали толщиной менее миллиметра.
Воин, владеющий уруми, мог одним движением поразить до 4-5 противников одновременно. Однако мастерство требовало многолетних тренировок — неопытный боец рисковал поранить сам себя не меньше, чем противника.
Это оружие было особенно эффективно против португальских и голландских колонизаторов, чьи тактики были рассчитаны на европейские виды вооружения. Примечательно, что воинское искусство Калари Паятту, включающее владение уруми, практиковали и женщины-воительницы, которые составляли элитную охрану некоторых южноиндийских правителей.
Тьфу, аштрисёт
Попалась тут пара видосов на Ютубе о новой экранизации Белоснежки. И нет, я об этом ничего говорить не буду, не моё. Но вот многие блогеры и их комментаторы любят понятие “оригинальная сказка”.
НУ РЕБЯТА НУ ПАЧИМУ ЗАШТО НИНАДА.
Это примерно такая же мерзость, как и “знать язык в совершенстве”. Спойлер, нет такого понятия, ни один человек не знает ни один язык в совершенстве.
Любой текст в определённом отношении уникален.
То же самое про оригинальную сказку. Когда ей противопоставляют новый фильм, всегда имеют в виду сказки братьев Гримм.
Вы серьёзно считаете, что литературная обработка времён романтизма может в принципе быть названа оригинальной сказкой? И что обработка братьев Гримм то самое “сказки не для детей”? Не смешите мои носки.
Сегодня мы с вами узнаем, что такое оригинал сказки, и почему его никто не видел.
Важное для нас утверждение: традиция внутри любой сферы народной культуры может существовать только в виде сочетания вариативности и стабильности. К сказкам это точно так же относится. Однако, стоит отметить, что так называемая стабильная часть всё-таки тоже в процессе существования подвержена некоторым изменениям, степень которых нужно изучать специально, ну и от вариативных частей эту часть отличают характер, динамика и механика этих изменений.
Здесь, я думаю, следует ввести термин, который всё объясняет.
Инвариант — неизменяемая часть сюжета фольклорного произведения, которая характерна для всего сюжетного типа. Это не реально бытующий текст, а умозрительный конструкт, созданный фольклористами. Другими, более строгими словами: обобщение существенных вариативных признаков произведения (его содержания, структуры, стиля...) в отвлечении от вариантной конкретики.
Инварианту противостоит вариант. Вариант — каждый конкретный текст в ситуации своего бытования (записанный в том числе).
Что касается сказок братьев Гримм. Братья собирали их ииииииии что делали? Правильно, литературно обрабатывали! Причём не однажды, если на то пошло. С каждым разом в связи с различной критикой “лишние” фрагменты из сказок могли нещадно вымарываться. Я вообще сомневаюсь, что сейчас мы можем найти конкретную (и уж тем более сделанную по современным правилам)) запись какой-либо конкретной сказки из сборника без обработки, тот самый “оригинал”, который услышали братья Гримм, перед тем, как его обработать.Но даже если бы такое чудо случилось, то… Слышим-то мы от каждого конкретного сказителя при каждом конкретном воспроизведении снова в-а-р-и-а-н-т.
По поводу инвариантов среди исследователей существуют разные точки зрения: некоторые искренне считают, что такой “изначальный” текст действительно мог когда-то давно существовать, а потом уже разойтись на конкретные воплощения; другие полагают, что инвариант – только и чисто умозрительный конструкт, созданный усилиями фольклористов.
Если мы будем говорить о первой точке зрения, то, мне кажется, очевидно, что такого текста в записи от информанта мы не найдём, мы можем его только реконструировать.
Если говорить о предмете со второй точки зрения, т.е. предполагать, что такого “общего” текста никогда не существовало, естественно, что мы точно так же его не сможем обнаружить в “естественных” условиях.
Итак, братья Гримм сказку записали (допустим, “Гензель и Гретель”) и несколько раз отредактировали. Что именно мы должны назвать оригиналом? Первую запись? Какую-то редакцию? Может, то, что рассказал конкретный информант? Но мы не найдём непосредственно этот рассказ. К тому же, очевидно, что информант рассказал историю, которую слышал ранее, и так мы можем уйти довольно далеко в древность.
Таким образом, прихожу к мнению, что сочетание “оригинал сказки” = “сказка братьев Гримм” является упрощением и несколько бессмысленным, как мне кажется. Давайте уж так и говорить, сказка из сборника братьев Гримм. Но тогда опять встаёт вопрос, а какой _авторской_ же редакции?
В общем, давайте лучше такого не говорить, а то приду я и надушню. Муахаха!
Чтобы понимали, то из Республики Беларусь монета преодолела всю европейскую часть РФ и половину азиатской.
@lovefst знакомая монетка?
Привезен ростком, пророщенным из зеленого ореха, воткнут в землю. В первую зиму ипануло морозом -40, сказал "Да вы уху ели!!!", скинул центральный ствол. Но не сдался ни хера! Характер южный, агрессивный, за жизнь цепляется только в путь! Во взрослом состоянии зимы переносит на отгребись, может откинуть концы веток, но на жизнедеятельность не влияет и давно такого не было. Окреп и окопался. Сцуко.
Центральный ствол прям дерево-дерево. Цеплял за него лебедку, чтобы выровнять забор- ему прям пох. Само дерево любит солнце- посадить в тень и с конкурентами- будет мелкое и не особо будет расти- но бороться не бросит!!!
Город- Старый Улей, как зовут местные. Город Ленина, короч, Симбирск. Дачи- Парус, местные знают. Примерно 10 км от города, на берегу Волги, реку видно из окна, что приятно.
Цветения, как такового и не было. про необходимость ореха женского и мужского- звездежь, продоносит без ансамбля, сам бля, один бля... Прошу прощения, увлекся. Фотик елозил, как шалава под клиентом и не хотел никак брать фокус. но я победил! Бля!
Это я к чему- на году 8-9 была масса идей вхерачить в ствол гвоздь-сотку и тд и тп, - типа без этого не будет плодоносить. Надо сказать. что к тому времени было уже прям дерево-дерево и опасались, что выросла пустышка. Куй там, надо было тупо терпеливо ждать. Деревцо интересное, листья прям лопухи, места, конешн, занимает дохера- жалею, что не посадил к мангальной зоне- есть своя аура и ароматика. Про то, что не выживает в п мороз- откровенный 3,14здежь за базар отвечу. Посадил в самый плохой год- первый год - 40 и три ствола вместо одного- но орех выжил. Пусть и Горыныч, но мой. Боковые стволики тоже уже вполне внятные.
Не ухаживал особо, ветки, что мешали- резал беспощадно. не удобрял- ибо тупо не знаю, чем надо. Почва- штык чернозема, дальше глина. Сначала красная, за ней синяя, тугая, что песец. Сортир- на фото- рыл на 1,8 метра- заипался. Муравьи и тля не жрут- листья 3,14здец горькие.
Деревом доволен- есть своя изюминка. не раскаялся ни разу, что заморочился- а если вызреют орехи- эт вообще пестня! Из обрезанных веток ваял ручки для ножа- перекосоебило. Ну, тут сам лох- не высушил.
От сорванных листьев- офигенский запах. Листья- лопухи. дерево живучее и интересное. Как то так, в общем)))
Наверное невозможно найти человека, который бы никогда не встречал программ на Java. Сначала телефоны с J2ME, потом Android, который использует свои варианты реализации JVM и свой байткод. Даже многие сим-карты внутри используют свою оптимизированную разновидность Java.
Даже JavaScript обязан своим названием популярности Java, хотя и не имеет с ней прямого родства.
(При этом некоторый промежуток времени существовали Java-апплеты)
По официальной информации, 23 мая 1995 года, ровно 30 лет назад, Sun Microsystems выпустили первую бета-версию Java. Первая полноценная официальная версия JDK 1.0 выйдет только 23 января 1996.
Изначально язык должен был называться "Oak" (дуб, который рос рядом с офисом разработчиков), после чего был переименован "Green" (зеленый), а потом в честь кофе с острова Ява. А в качестве целей языка ставились:
Синтаксис был практически полностью позаимствован из C++, который уже был знаком многим программистам. Были выброшены процедурные артефакты C в виде "бродячих" глобальных переменных и функций, всё должно принадлежать классам. Также выбросили некоторые "неудачные" решения C++, к примеру дружественные классы, множественное наследование (его заменили интерфейсы), перегрузку операторов (зачем?!) и еще немного. Вместо ручного управления памятью было решено внедрить сборщик мусора, чтобы облегчить разработку и снизить количество ошибок и уязвимостей.
Главной особенностью языка стала концепция "напиши единожды, запускай везде" (хотя правильнее это будет назвать "напиши единожды, отлаживай везде" из-за различных реализаций и окружения), возможная благодаря тому, что код сначала компилируется в стандартизированный и независимый от процессора байткод для виртуальной машины (JVM), а в машинный код переводится только на машине потребителя, учитывая её архитектуру и особенности. Получается что-то среднее между интерпретируемым и компилируемым языком.
Язык получился... интересным.
То, что планировалось простым, в итоге превратилось в многословное нечто, а в сочетании со всякими архитектурными извращениями стало притчей во языцех о громоздкости корпоративного стиля. Потом появились совместимые с JVM альтернативы по типу Kotlin, ибо Java старательно игнорирует и не вводит ничего, что бы могло замазать многословность и неудобство. Android давно официально рекомендует использовать его вместо Java.
Добиться высокой скорости на интерпретируемом языке со сборкой мусора тоже проблемно. JIT замедляет запуск и жрет память, AOT поддерживается плохо и с ним невозможно реализовать некоторые вещи (кодогенерацию, к примеру), плюс остается сборщик мусора. Плюс некоторые не очень удачные решения и ограничения, тоже не способствующие высокой производительности (видно на контрасте с C#, в котором их исправили).
Тем не менее, Java на очень долгое время стала самым востребованным языком и отлично продолжает жить и сейчас, находясь на 4 месте популярности по версии TIOBE и дважды становясь языком года (в 2005 и 2015).
В Вытегре (Вологодская область) полицейские устроили погоню за пьяным водителем "восьмерки".
Смотрите до конца, не пожалеете!
Моя подруга по жизни и по сплавам по рекам (не путать с моей женой, я по жене сплавляюсь тоже). Она мне написала, что напиши про меня, будто я эльфийская принцесса. И у меня се..х. Не так всё пошло. Ну типа она такая принцесса и вдруг у нее замутилось с обычным мужаком молодых лет. Кстати, ей около 2000 лет со дня эльфийского гнездования, если что. К теме. Я зашел в тупик. Там как дальше и куда. Опорные точки: Портал для осмотра подаренных владений. Эльфийка, ее спутник (Временный? Француз) Шаолинь. Нашли они этого принца Гаутама. Но он не стал с ними разговаривать и затарился в куст. Кстати, именно этот куст опа... апа.. в африке европа. (Остап Бендер, остынь) Короче читайте. Жуть кошмарная. И так... Вот вам таинство!
Дорогой дневник.
Сегодня 12-й день Имбаэлк, День рождения. Мне исполнилось 1984 годика. Но все мои друзья из окружного эльфятника №5 до сих пор считают меня скоятаэллей. Дорогой дневник. Понимаешь? Они до сих пор считают меня скоятаэллей...
Интересно, дорогой Дневник. Если ты не просто какой-то дневник, а Дневник эльфийской принцессы. Ты же немного эльф и чуть-чуть принц? А что. Своими рунами я дневник опринцовываю.
На День рождения мне подарили Вселенную. Опять. Сколько их у меня, уже и не помню. Большинство их холодны и пусты. Но есть и не вселенные даже, где все-ленятся, а Веселенные. Надеюсь, что моя новая вотчина скучной не будет. На это намекнул предводитель ВДВ (Ватаги Дарения Вселенных).
Так оно и оказалось. Во всей Вселенной ни одного эльфа! Какое же блаженство отдохнуть от этих зануд. Поглядим каталог... Ух ты. Все интересные местечки уже опорталены. Так, а это что... Звездная система "8 с половиной". Помечена звездочкой. Внизу мелкими рунами на тенгваре "Не посещать." Это почему же? Посмотрим. А вот, список предупреждений: "Дым, кусты и алкаши". Это еще что? Надо глянуть.
Портал переливался всеми цветами радуги. Как и лужа, покрытая пленкой мазута. Принцесса огляделась.
Небольшое поселение двуногих. Похожи на эльфов. Но что-то не так. Ухи! У них недоразвиты ухи. Спешат куда-то. В руках непонятные предметы. Зачем им таскать с собой какие-то вещи? Что же. Пока не скучно. Надо пообщаться с образцами недо-ушастой фауны. Послушаем разговоры.
Примитивный язык усвоился легко. Даже открылись интересные, поражающие своей универсальностью фразеологизмы. Вот, например. Один людь убеждал другого людя в том, что сейчас самое время сделать "выпить". Причем, кроме слова "выпить" людь использовал лишь одно универсальное слово. В результате речь звучала весомо, убедительно. Парочка удалилась в сторону раздвижных стеклянных дверей.
Вдруг Принцесса ощутила на себе пристальный взгляд. Обернувшись она обнаружила небольшую странного вида сущность. "Что ты тут забыла, ушастая? Это наша планета." - молвила сущность. Чистейший тенгвар. "Я Принцесса эльфов, -сказала Принцесса- Эээ... А ты кто такое?" "Я? Космическая межзвездная милота. А ты давай шуруй в свой портал, откуда материализовалась. Ах, да... Колбаса есть?"
Тут что-то отвлекло внимание Милоты и оно исчезло. Принцесса огляделась. Надо пройтись, осмотреться. Дорога между рядами высоких угловатых жилищ привела на берег реки. Вдоль выложенной камнем набережной стояли скамейки. Из густых мокрых облаков выбрался солнечный луч и смущенно указал на одну из скамеек. На ней что-то пошевелилось и Принцесса подошла ближе. Пошевелятором оказался длинный худощавый людь. Пребывая в лежачем положении он почти сливался со скамейкой. Но теперь, поднявшись, он явил себя во всей красе. По крайней мере, так показалось Принцессе, в чем именно он себя явил. Велла Ахман!
"Вы Принцесса что ли?" - ясным баритоном молвил дрыщ. "Принцесса!" - сказала Принцесса. Тут глаза людя остекленели, дыхание как бы приостановилось. "Вот ты где!" - сказал людь голосом папы. Нашел ведь...
* * *
Принцесса вздохнула: "От тебя лет двести вестей не было". "Как это не было? - вкрадчиво молвил Гэдрион Великий, - Дочь, ты не прочла список дарителей этой вселенной? Там только одно имя. Возникла пауза. "Отец. Не в твоем исполнять эльфийские серенады. Что случилось?" "Я не мог доверить дело никому больше... Но я найду тебя позже. Сейчас я открою тебе портал. Времени нет. За тобой идут и они знают где ты".
Худой парень хлюпнул и скатился под скамейку. Затем присел, облокотившись на давно не крашенные доски: "Где я?" . Принцесса глядя куда-то в сторону реки: "Да они не идут. Они плывут!" Тем временем в реке происходило что-то невероятное. Команда гребцов, человек двадцать-тридцать в резиновых шапочках переплывали реку. И все бы ничего. Но над головами пловцов были рога. А гребли они совсем не руками. Первый из этих гуманоидов уже выполз на парапет, когда Принцесса сбросила оцепенение и устремилась в открытый отцом портал. "Ты не уйдещщщ, не уйдещщщ, не ..." - неслось от куда-то снизу. Принцесса почувствовала удар. Что-то холодное ударило в лицо. Порыв ледяного ветра! "Да где же я?"
Применив обогревающее заклинание, Принцесса огляделась. Это была горная вершина, украшенная яркими разноцветными рваными тряпками. Раздался стон. Одна из тряпок зашевелилась, выпустив навстречу ветру и снегу одетое в оранжевый комбинезон существо в огромных черных очках. "Вы же спасатель?" - с надеждой в голосе спросил человек. Мирувор из украшенной серебром фляги из шкуры очень редкого единорога сделал свое дело. Жан Пьер Безухов пришел в себя. Окутанные магическим куполом они сидели на куче брошенных палаток.
Оглядываясь на тела неподвижных товарищей, Жан продолжал. Певучий и журчащий буквой "Р" Каджунский диалект лился весенним ручьем: "Мы достигли плато, когда поняли, что баллоны с кислородом непростительно пустоваты. Это был сущий подвох! Кто-то все это подстроил, я уверен. И даже догадываются. Это - конкуренты! Не альпинисты, а землячки из фирмы по утилизации. Мы тоже занимаемся этим бизнесом, знаете ли. В горы пошли всем коллективом. Они воспользовались тем, что в нижнем лагере был небольшой праздничек. И выпускали наш кислород!" Принцесса в пол - эльфийского уха выслушивала бедолагу пребывая в надежде, что синие пловцы сюда не доберутся.
* * *
Выбор был один. Спускаться традиционным способом скалолазов. Ведь что случится, если открывать портал? Это верный способ обнаружить себя на астро-магическом плане. Разве что рвануть прямо к папочке под родительскую защиту. Но нет. Не этого хотел Гэдрион Великий. Не этого. Принцесса поправила платье. Вздохнула, глянув на туфли.
Под болтовню Безухого пришла мысль.
"Эй, Жан! Иди-ка собери тряпья побольше!" "Это зачем?" - обиделся рассказчик. Его же перебили на кульминации. "Иди уже!" - принцесса начала сердится.
Идея была проста. Магическая сфера способна не только уберечь от холода. Но и от ударов. В этом шарике можно запросто скатиться с этой проклятой горы. Сфера неплохо амортизирует. Однако, учитывая гигантизм скачков по скалам и камням. Болтанка, сопровождаемая приступами "морской болезни" ожидалась ужасной. Но что, если тряпками заполнить лишнее пространство? "Эээ... ты что тут притащил? Я не хочу спускаться в компании с этим.." "Это Кенни, - представил Жан тело, - он мой друг. Нельзя его тут оставлять." В результате споров Кенни был тщательно завернут и засунут подальше в сферу. Шаронавты приготовились к старту.
Сначала сфера катилась по нахоженной тропе. Понемногу набирая скорость, шар стал подпрыгивать. Видимо тропинка осталась слева. Жан прикусил язык. Принцесса выразила чувства на языке орков. Вдруг наступила невесомость. В дальнем углу сферы зашевелился Кенни. Наступила тишина. Шаронавты потеряли счет времени. "Мы падаем" - прошептал Безухов. Принцесса приготовилась к созданию потрала. И тут последовал мягкий пружинящий удар. Пробив слой облаков шар совершил очередной гигантский скачек. Падение ознаменовал писк на непонятном наречии. "Это шарпы. Нет. Это шерпы. То есть, были шерпы." - хрипло, борясь с приступом рвоты прошептала Принцесса.
Наконец-то сфера закончила прыгать и покатилась. Но куда ведет эта тропа? Прошло с полчаса. Сфера замедлила движение. Кенни успокоился. Остановка. Принцесса щелкнула пальцами, сфера раскрылась. Куча тряпья, палатки, рюкзаки живописно рассыпалась по склону. Кенни гордо восседал в центре, напоминая довольного произведением художника-авангардиста. Шатаясь, Жан и Принцесса двинулись вниз по тропе. По дороге им встретилась дорожная табличка. "Китайский, упрощенный, -на ходу пояснила Принцесса, - написано Шао-Линь".
* * *
И они пришли, эти оранжевые люди, о которых в детстве рассказывал папа. Принцесса набрала воздух в легкие. Вдох... медленный и долгий, как заполярная ночь выдох. Принцесса была готова к бою. Но никто не напал. "Вама сяю?" Слегка смутившись Принцесса сказала "Мона, да. Сяю".
Через полчаса Принцесса и Жан удобно устроившись на циновках пили ароматный настой. "Дама ты рушшский штоле?" - нарушил полную сопения тишину монах, тот, что выглядел помоложе. "Посяму-посяму это?" - удивилась Принцесса. Монах кивнул на мятое, испачканное платье и оставшиеся без каблуков туфлельки. "Дама ты ходили в рушшский ресторана, тама много буль волшебный вода. А та вода делай горы с колено. Така оно тута бывать, да-да?" - не смотря на осуждающие взгляды со-монахов продолжил молодой. "что же. Неплохая легенда! Лучше так, чем про телепорт рассказывать" - решила Принцесса. Гордо округлив прекрасные эльфийские глаза заявила: "Буль. Бо-о-ольшой буль". Монахи уважительно переглянулись: "Тако закусь надо-надо." Тут помимо чая перед путешественниками появился горшок с чем-то аппетитным. Позже, когда с трапезой было покончено, с циновки поднялся самый упитанный монах: "Надо васу дама одевать прилисьна" . Через час Жан и Принцесса, сытые и отмытые, сладко спали в келье. Рядом с изголовьем путешественников красовались аккуратные свертки из оранжевой ткани.
* * *
В пол-шестого гостей разбудил мелодичный колокольный звон. "Хороша гора Суньшань в Китае, много там ручьев, кустов и ос! - пропел, потягиваясь Жан, - Принцесса, а что мы вчера ели такое вкусное, будто тушеное мясо в овощах?" "Овощи без мяса, месье! Монахи не едят мяса"- отозвалась спутница. "Да ну! Ты еще скажи, что вино не пьют..." - состроил скорбную физиономию француз, - эх, сейчас бы Эст-Эст или Туссентского..." В ответ Принцесса послала ему выразительный, исполненный ностальгии взгляд: "Вчера мы ели лапшу из золотой фасоли. С добавлением шпината и сельдерея."
Путники оделись в удобные штаны со шнуровкой по голени, удобные тапочки и что-то вроде халата, всю ту одежду, которую местные называли "кашея": "Касея, так касея...- вздохнул, краснея Жан. Он пытался сделать вид, что прелести спутницы его не интересуют. Нижняя одежда Принцессы белые короткие рубаха и штаны - слабая защита от оценки знатока. Специалиста находу вычитать длину ресниц из длины каблука.
На площади около монастыря шаолинцы заряжались потоками энергии. Для этого использовалась практика "Большое дерево", главное упражнение, без которого не обходится ни один день. Принцесса любовалась переливающимися всеми цветами радуги потоками. Реки энергии брали источник в силе каждого и затем сплетались в единый, устремленный в небо поток. Постепенно среди цветов и оттенков стал преобладать фиолетовый. "На что ты смотришь?" - спросил Жан. Он не мог видеть всего. Принцесса будто и не слышала его. Ее внимание привлек странный монах. Он держался в стороне и был прозрачен. Кажется никто его не видел, все кроме нее. В какой-тот момент странный монах понял, что за ним наблюдают и спрятался в кустарнике. "Не нравится мне это" - подумала Принцесса, - но мне представляется, что этот тип еще заявит о себе."
Вопреки всем правилам гостеприимства остался лишь один прозаический путь: "Нырнуть в портал. Ну не спускаться же с горы в тапочках? Хотя Жан клятвенно обещал нести на руках. Всю. Всю дорогу! Я так думаю, до ближайших кустов..."
Всё по классике - если есть какой-то хуёвый зарубежный опыт, то нашим говноедам обязательно нужно на него сослаться как на непревзойденный эталон, и сделать точно так же!
Минтранс обсуждает введение овербукинга в России на авиарейсах, которые выполняются с частотой не реже двух раз в сутки. Об этом сообщил статс-секретарь — замминистра транспорта Дмитрий Зверев.
«Минтранс России вместе с потребительскими сообществами сейчас обсуждает новые механизмы, в том числе введение овербукинга», — сказал Дмитрий Зверев на XIII Петербургском международном юридическом форуме.
Охуеть, с потребительскими сообществами они это обсуждают...
Это, блядь, не те ли самые потребительские сообщества, которые писали письма терешковой с просьбой отодвинуть пенсионный возраст подальше?
Овербукинг — это намеренная продажа авиакомпанией большего числа билетов на рейс, чем мест на борту. При невозможности отправить пассажира намеченным рейсом авиакомпании обычно предлагают билет на ближайший рейс по тому же направлению в расписании и денежную компенсацию за невылет.
Трудно поверить в эту историю. Мой долг её вам изложить. А верить или нет - дело ваше.
Я жил обычной жизнью, занимался скалолазанием, другим передавал знания. Но однажды, по воле рока, лютый недуг сразил меня.
* Функционировать мог 1-2 часа в день. Остальные 22-23 часа - в лежачем состоянии. Сил не было даже ходить.
* Обезболивающее - ежедневно в конских дозах.
* Времени лежать на печи было завались - читал и поглощал всё. Медицину, анатомию, паразитологию, спиртологию, сыроедение, народную медицину, органическую химию и др.
* Мы с ребятами снимали дом компанией и жили как братья. У нас постоянно гостили совершенно разные люди - сибирские травники, путешественники, нейрохирург, мастера спорта, творческие люди и многие другие... Со всеми я подолгу общался и пытался вытащить щепотку мудрости. Так и собирал по крупицам.
* Когда ты зажат в углу - подыхай или дерись как окаянный.
* От безысходности я начал экспериментировать. Занялся зельеварением, как в Хогвартсе, мать его. Началось всё с обычного кофе с чили перцем. Закончилось довольно сумасбродной формулой, которую разрабатывал на протяжении 2 лет.
* У меня нет лабораторных исследований. Нет желания патентовать. Микроскопа даже нет. Всё, что я знаю - эта штука работает. Как - не спрашивайте.
* Я опробовал это лекарство на 70-90 людях разного возраста и состояния. Результаты - фантастические. Каким-то невероятным образом эта формула уничтожает большинство недугов.
* Лучшие пациенты - те, кому нечего терять. Они с удовольствием пробовали это зелье.
Назвал это чудо лекарство - галактический кофе. Во имя материнской силы природы.
После месячного курса ежедневного приёма, я встал и пошёл пилить деревья. Силушка появилась. Так и отработал 5 лет. А сегодня хочу поделиться с людьми рецептом галактического кофе.
На 3х литровую банку:
+ 8-10 любых лекарственных трав (берутся в аптеке, магазине трав или в лесу - есть мобильные приложения, распознающие растения) - подойдут любые лекарственные травы (крапива, чистотел, хвоя, подорожник, пижма, девясил и т д).
+ Насыпьте всех трав понемногу (2-3 столовых ложки сушеных трав, или каждой свежей травы по несколько стеблей с листьями и цветами).
+ Несколько столовых ложек соды. 5-7 столовых ложек.
+ 3-4 столовых ложки кофе. Любого. Растворимого. Зёрна.
+ Сахар или мёд. 8-12 столовых ложек.
+ Перец. Десяток чили перцев или несколько столовых ложек чёрного / жгучего перца. Чем острее, тем лучше.
+ Заливаете 2-2,5 литрами водки. Любой.
+ В жидкую фазу добавляете сок 3-4 лимонов, 100-150 мл перекиси водорода, 3-4 сырых желтка. Размешать как следует неметаллическим предметом.
Банку закрыть медицинской перчаткой - пойдёт брожение. Настаивать 4-5 суток. Употреблять можно начинать через несколько часов.
Через 4-5 суток галактический кофе готов. Слить в любую неметаллическую ёмкость через марлю. Перед употреблением взбалтывать. Каждый день перед едой 20-30 мл в течение 1 месяца. Беременным нельзя. Детям с 4 лет, примерно, можно.
ВАЖНО! За 1 сутки - не более 1 рюмки (20-30 мл). Галактический кофе имеет огромную биологическую мощь. Примете больше - сляжете на пару недель, потекут сопли, слизь, слёзы со всех щелей.
После 1 месяца приёма перейти на порцию по 10 мл в сутки перед едой один раз в сутки.
Вот и всё. Нападайте.
Да, бывает. Хоть я уже и четвертый год не пью. Бывает в виде мыслей об употреблении. Точнее даже мыслишек: "А не послать бы мне всё к черту и не уйти ли от реальности вновь? Там ведь и неплохо тоже было..." Это очень быстро купируется осознанием того, что десять минут облегчения не стоят возвращения того безумного состояния "я хочу ещё!" и тех потерь, что придётся вновь понести в употреблении. Да и само алкогольное "облегчение" – всего лишь шоры и ни в какое сравнение не идёт с результатами, которые теперь я получаю в выздоровлении. Сейчас я обрёл возможность отдохнуть и расслабиться по-трезвому.
Само по себе всё это никогда бы ко мне не пришло. Размышляя пришёл к выводу, что не было бы всех этих блогов, чатов, программы и т.д. – уже давно бы сорвался. Работа с головой решает и спасает. И в одиночку её совершить я не представляю возможным. Не уходи в изоляцию – вот, наверное, первое правило для любого выздоравливающего зависимого.
Это сейчас моя тяга – всего-лишь блоха в закрытой пробирке, она даёт о себе знать, я её помню и нужно поддерживать тот новый образ жизни, те условия, при которых пробирка останется закрытой. Или, как ещё говорят, двигаться по эскалатору вверх, чтобы он не унёс меня вниз. А той сумасшедшей овладевающей тяги, которая практически не оставляла мне выбора, у меня давно уже нет.
Источник, как всегда, мой блог в телеге: https://t.me/trezvyiblog
Дата, понятное дело, сбита, опубликовано автором 10 мая
Большинство процессоров Фон-Неймановской архитектуры в своей конструкции предлагают механизмы стека. Кто играл в покер должны вспомнить стеки фишек. То есть некие значения, сложенные друг на друга (обычно это переменные, в частности адреса в памяти). При этом основными операциями являются добавление фишки на вершину (инструкция PUSH) и ее снятие (инструкция POP). Еще можно косвенно читать и заменять (перезаписывать) фишки относительно вершины (на вершину указывает регистр SP, неявно обновляется через POP и PUSH) или основания (указывает регистр BP) вглубь.
Помимо хранения локальных переменных стек позволяет делать довольно интересную вещь: мы можем положить на стек все необходимые аргументы (x в математике, но их может быть несколько), адрес следующей инструкции (взяв из указателя инструкции IP, это будет адрес возврата), после чего совершить прыжок на какой-нибудь другой адрес (сохранение адреса и прыжок делаются инструкцией CALL).
А на этом адресе может быть функция. Сначала она кладет текущий BP на стек, после чего приравнивает основание к вершине (BP к SP), тем самым создав для себя "новый стек" сразу после предыдущего (это еще называется стековым кадром), в котором якобы лежит только значение старого основания стека (BP), чтобы можно было восстановить его перед возвратом.
После чего функция может прочитать переданные ей аргументы относительно основания своего стека вниз (технически это будет выход за границы текущего стека), выполнить с этим какие-либо действия (записать в файл, вывести в консоль, просто перемножить) и сохранить результат (обычно результат сохраняется не на стек, а в регистр AX).
После чего функция восстанавливает старое значение BP, сняв его со стека, и выполняет команду RET, которая снимает со стека адрес возврата и совершает переход на него, тем самым переключившись на инструкцию сразу после CALL.
И эта система так или иначе перекочевала в большинство высокоуровневых языков начиная с FORTRAN. К примеру в C CALL превратился в круглые скобки, RET в return, а адреса и метки в имена (при этом без скобок они все еще являются указателями, то есть адресами).
Пример кода (к сожалению, штатного форматирования не предусмотрено):
#include <stdio.h>
int pow2(int x) {
return x * x;
}
int main() {
int y = pow2(16); // Вызов функции. В y будет сохранено число 256
printf("%p", pow2); // Без скобок вместо вызова просто выведет адрес функции
return 0; // Возврат нуля из главной функции означает отсутствие ошибок.
}
Такой стиль программирования называется процедурным (выделение кода в блоки называется структурным). А вот называть процедурный язык функциональным совершенно неправильно, ибо функциональное программирование ≠ процедурное, они даже в разных категориях (императивное и декларативное).
Интерактивный компилятор и дизассемблер. (printf я убрал для упрощения, его наличие добавляет слишком много лишних инструкций).
Важно понимать, что стек в большинстве архитектур традиционно растет от больших адресов к меньшим (и в x86). То есть для того, чтобы отодвинуть его вершину вверх, от регистра SP нужно отнимать значения, а вот для ужимания и съедания ненужных значений к указателю на вершину значения прибавляют. И для доступа к значениям относительно основания или вершины это тоже важно учитывать. Это может звучать запутанно, но через время привыкаешь и всё становится очевидным.
Это всё довольно упрощенно. Как минимум, в защищенном режиме используется больше 5 разных соглашений о вызове, которые отличаются деталями реализации. Это было описание для cdecl, обычно используемого в C. Еще часто используются соглашения pascal, fastcall, thiscall, winapi и другие. Fastcall, к примеру, избегает хранения аргументов на стеке, если их возможно передать через регистры, что улучшает производительность. А winapi отличается от cdecl тем, что функция сама очищает стек от аргументов для себя при возврате. А еще я упустил, к примеру, сохранение регистров, которые функция может перезаписать и испортить, а потому обязана предварительно сохранить и перед возвратом восстановить, передачу переменного количества аргументов (как в printf) и возврат значений шире 32 бит (которые не влезут в EAX).
Плюс сейчас мало кто компилирует ПО под защищенный 32-битный режим, а в длинном режиме (AMD64) используется пара других соглашений, основанных на fastcall и имеющих несколько отличий друг от друга.
Процедурное программирование предлагает делить код на подпрограммы, которые принято называть функциями и процедурами (функция обычно является наиболее понятным, частым и обобщенным названием, поэтому я его использую).
Процедура от функции отличается только тем, что функция возвращает какое-то значение (как в математике), а вот процедура этого не делает. Не во всех языках явно есть процедуры (в Pascal есть, но не в C). В таком случае их заменяют функции, возвращающие ничего (void, Unit, undefined, None).
Хотя и тут есть свои особенности. К примеру функция, возвращающая void в C и Java является прямым аналогом процедур, как-либо использовать возвращенное значение из такой функции невозможно, ибо его нет физически. А вот Unit в Kotlin это синглтон (а-ля единственная и уникальная константа уникального типа), ссылку на который можно присвоить в переменную, но в этом особого смысла нет. Undefined в JS и None в Python тоже уникальные константы специальных типов.
Вроде бы процедура никогда не может ничего вернуть...
Только она этого никогда не делает напрямую. При она этом может записать результат в глобальную переменную, а еще часто принимает в себя указатели или ссылки, по которым может записать результат. Это еще удобно тем, что можно "вернуть" несколько значений. Пример:
void procedure(int x1, int *x2, int *x3) { // Функция ничего не возвращает, то есть это процедура
*x2 = x1 * x1; // Разыменовываем указатель и записываем по его адресу результат.
*x3 = x1 * x1 * x1; // Разыменовываем другой указатель и записываем по его адресу результат.
}
int y1, y2;
procedure(16, &y1, &y2); // В y1 оказался результат, аналогичный прошлому примеру. А в y2 куб числа.
PS: оператор звездочка при указании типа превращает его в тип-указатель, а при применении на переменную-указатель разыменовывает ее до изначальной переменной. Амперсанд превращает переменную в указатель на нее (иногда еще называется оператором получения адреса).
То есть мы вернули сразу 2 разных значения из процедуры, которая якобы ничего не возвращает. Чудеса. Подобные чудеса есть в том числе в Pascal с явным делением на процедуры и функции (плюс там это сделано немного удобнее). Хотя механизм тут отличается от того, который используется в возврате значения из функции и совпадает с механизмом передачи обычных аргументов, поэтому никакой магии.
Главное отличие функций в программировании от функций в математике в том, что они могут делать что-то на стороне и не обязаны возвращать одинаковый результат при одинаковых аргументах.
К примеру функция получения случайного числа по определению не может существовать в математике, если она не принимает в себя предыдущее случайное число или зерно для его видоизменения. Или функция записи в файл, возвращающая 0 в случае успеха и другое число при провале. Ко всему прочему, такая функция имеет побочный нематематический эффект, то есть запись в файл, что тоже недопустимо традиционной математикой без высоких абстракций.
Поэтому придумали чистые функции. По сути это ограничитель, которые делают функцию полным отражением таковой в математике. Им запрещено возвращать разные значения при одинаковых аргументах (точнее запрещено всё, что может такое позволить сделать), запрещено обращаться к нечистым функциям, запрещено обращаться к тому, что не является аргументом или локальной переменной, запрещены вообще любые действия, которые могут сделать что-то на стороне (даже функция sin() в C не всегда является чистой, ибо может зависеть от состояния FPU).
Чистые функции через ключевое слово pure явно есть в D и FORTRAN (проверка на чистоту во время компиляции), а также являются основой функционального программирования.
Чистая процедура тоже имеет право на жизнь, используя механизм со ссылками (на счет указателей не уверен из-за возможности арифметики над ними).
Это очень сложная категория, которую постоянно путают с процедурным программированием. А еще это де-факто противоположный стиль: декларативный. Традиционное императивное программирование детально описывает процесс получения результата, а декларативное сам результат, без деталей реализации (хотя разделение обычно довольно нечеткое). При этом второй типичен для языков разметки типа HTML и CSS. То есть, условно, как одна и та же операция могла бы выглядеть в императивном и декларативном стиле:
document.tags.A.color = "blue" /* Императивный (JSSS). Сделать ссылки синими */
a { color: blue } /* Декларативный (CSS). Ссылки должны быть синими */
Почувствуйте разницу.
И функциональное программирование я никогда не изучал и слишком мало о нем знаю. Так что готовьтесь к ошибкам и не воспринимайте всё за чистую монету.
Основано полностью на математике, все функции обязаны быть чистыми. Операция присваивания запрещена (разрешены константы), переменных в привычном виде нет. Прикольно? Очень!
Во многих процедурных языках функции и процедуры являются объектами второго класса (не путать с классами из ООП), что не позволяет их свободно присваивать в переменные, передавать как аргументы в другие функции или возвращать из них (только через указатели). Функциональные языки расценивают функцию как объект первого класса, то есть их можно, а часто нужно передавать в другие функции напрямую.
Это дает некоторые преимущества, особенно в плане безопасности и при работе с многопоточностью (по причине неизменяемости данных и отсутствия глобального состояния), но вся концепция имеет один фатальный недостаток: вы мало чего полезного можете сделать, ибо что ввод, что вывод являются математически нечистыми, а потому запрещены. Вот такое вот гениальное изобретение безумных математиков.
Каждый чисто функциональный язык выкручивается из этого по-своему, к примеру через монады. Это позволяет им существовать вне шуток и даже использоваться на практике.
Это не все особенности функциональных языков, но одни из самых важных. Самый известный такой язык: Haskell. Функциональные F#, Lisp, ML и многие другие не являются 100% чистыми.
Последнее время часто используются смешанные языки, к примеру вместе с процедурным или объектно-ориентированным программированием, что избавляет от ограничений математики, но дает гибкость в том, что функциями можно оперировать как с любыми другими типами данных, а еще дает много очень удобного сахара вроде замыканий и лямбд. Это C#, Python, JS, частично Java и C++ (в них нужны костыли в виде интерфейсов из одного метода или оберток над указателями).
Функции как объект первого класса. К примеру в C# это реализовано через систему делегатов, которые представляют из себя тип-обертку для функций:
Action<string> printer = Console.WriteLine; // Action<string> - тип-делегат. Неявно создаем его объект и присваиваем туда функцию
printer("Hello, World!"); // Вызываем функцию через делегат
Локальные функции: как обычные, только вложенные в другую функцию (объявленные внутри нее)
void Func1() { // Глобальная функция
void Func2() { // Локальная функция
Console.WriteLine("В локальной функции");
}
Func2();
}
Лямбды: возможность объявить безымянную функцию посреди кода (часто удобнее локальных)
var pow2AsLambda = x => x * x; // => - оператор лямбда-выражения
pow2AsLambda(5); // Вернет 25
Замыкания (можно использовать вместе с лямбдами и локальными функциями):
int someValue = 42;
var pow2AsLambda = x => x * x + someValue; // someValue будет захвачено замыканием, хотя напрямую не передано
pow2AsLambda(5); // Вернет 67
Особенность замыканий в том, что они могут захватить локальную переменную родительской функции внутрь себя, продлевая ей время жизни за пределы блока с кодом. После чего такую лямбду можно передать в другую функцию, которая просто так не имеет доступа к someValue (в обычных условиях someValue вообще уже будет уничтожен), а вот переданная лямбда сможет ее прочитать или записать всегда и откуда угодно. И самое интересное то, что значение этой переменной будет сохранятся между вызовами к замыканию. То есть она становится глобальной, но видимой только из функции-замыкания.
Посмотрим на индекс TIOBE по популярности языков. Фиолетовым я пометил чистые функциональные языки. Языки, имеющие возможности, присущие функциональным языкам (смешанные) - синим, процедурным - красным, а объектно-ориентированным (ООП) - зеленым. Языки, в которых нельзя объявить функцию, принадлежащую самой себе или модулю, процедурными считать не совсем корректно (Java).
Видите фиолетовые точки? И я не вижу. А вот синих 12. В то же время красных и зеленых по 16. При этом реально применяемый чисто процедурный язык всего 1: С. Остальные имеют какую-либо встроенную поддержку других парадигм.
И сейчас практически всё большое ПО пишут в ООП. Ибо позволяет хоть как-то сдерживать структурированность кода после перехода с десятков тысяч строк к сотням (и миллионам).
ООП является развитием идеи процедурного программирования. Проблема была в том, что помимо кода в программе существуют еще и данные, которые было бы неплохо связать с соответствующим им кодом. И через некоторое время после появления процедур появились структуры (они же записи в Pascal, не путать со структурным программированием).
Структуры были удобным способом объединить несколько переменных в единое целое. Пример:
typedef struct user_struct {
char *username;
int userid;
int reputation;
} user_t;
user_t someuser = { "IvanKr08", 17002, 253 }; // Инициализируем значениями
someuser.reputation += 10; // Обращаемся к полю
(Вместе с этим объявляем структуру новым типом через typedef, что не делается по умолчанию в C, в отличии от C++. Один из ярких примеров несовместимости C и C++):
После чего user_t превращается в новый тип, как int или char. Можно создать полноценную переменную типа user_t (или массив такого типа), а потом обратиться к какой-нибудь ее части (полю) через оператор точки (.). Можно сделать функцию, которая будет принимать или возвращать переменную типа user_t (к примеру someuser). Можно сделать указатель на user_t, тогда для обращение к полю используется оператор стрелки (->). Или можно встроить переменную типа одной структуры в другую, это тоже не запрещено. Внутри структурная переменная представляет из себя последовательно слепленные поля в одно целое.
Суть ООП в том, что помимо полей структуры могут содержать процедуры и функции. Такая структура называется классом, переменная класса - объект, а процедура класса - метод.
Метод принципиально ничем не отличается от любой процедуры или функции, кроме того, что неявно принимает в себя специальный аргумент this (в Python это делается явно, в некоторых языках вместо this может быть self). Он содержит в себе ссылку/указатель на объект класса, от которого был вызван. Пример:
class User {
public:
char *username;
int userid;
int reputation;
void print() {
printf("Пользователь \"%s\" (%i). Репутация: %i\n", this->username, this->userid, this->reputation);
// Постоянно писать this-> не обязательно. Если локальной переменной с таким именем нет, то будет произведен доступ к полю
}
};
User someuser = { "IvanKr08", 17002, 253 }; // Инициализируем значениями
someuser.print(); // Вызвали метод, print() неявно получил в себя указатель this, который указывает на someuser
someuser.reputation += 10; // Обращаемся к полю
someuser.print(); // Теперь вывод поменяется
Да, никто не мешает объявить обычную функцию, которая будет явно принимать в себя указатель на User и ничего не поменяется, и так повсеместно делают в C (тот же WinAPI на этом построен целиком и полностью), но ООП на самом деле крайне сложная, большая и холиварная тема, которая развивалась на протяжении 60 лет в разных направлениях и которую поднимать тут глупо. Только опишу еще несколько разновидностей методов:
Если вы осилили эти 3000 слов и даже смогли что-то понять, то найдите и распечатайте себе утешительную грамоту. А я устал и пойду искать смысл жизни...
UPD: исправлены косяки форматирования, очепятки, добавлено еще пару пунктов про разновидности методов и функциональное программирование.