Когда узнал, что в С++ можно использовать Юникод в качестве идентификаторов / it-юмор :: geek (Прикольные гаджеты. Научный, инженерный и айтишный юмор)

it-юмор geek 

Когда узнал, что в С++ можно использовать Юникод в качестве идентификаторов

I
I
h v' .h+ + ) No Selection
1	#include "^g.h++"
2	#include "g^.h++"
3
4	class A {
5	public:
6	//	$
A f, ^ m) : genderC./ % 2 ?	: "<r"), dna(f, m) {>
8
9	//	<9	V	&	+
void	partner) {
auto = *this + partner;
12	if «3»
¿|.push_back( v ) ;
14	>
15
16	//+--=-
A* operator+(A&
Подробнее
I I h v' .h+ + ) No Selection 1 #include "^g.h++" 2 #include "g^.h++" 3 4 class A { 5 public: 6 // $ A f, ^ m) : genderC./ % 2 ? : "<r"), dna(f, m) {> 8 9 // <9 V & + void partner) { auto = *this + partner; 12 if «3» ¿|.push_back( v ) ; 14 > 15 16 //+--=- A* operator+(A& partner) { return this->gender != partner.gender ? new A (this->dna, partner.dna) : nullptr; 19 > 20 21 private: V Gender gender; V dna; std:: vector< A *> Eli’ 24
it-юмор,geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор
Еще на тему
Развернуть
а где вход?
там же где и выход
выход
есть
villy villy 02.01.201903:08 ответить ссылка 0.2
Тут не вызова main(), не самой функции нет.
1) ты же понимаешь что программа может занимать больше 24 строчки? а тут даже описание класса не поместилось
2) это h-файл, у него нет main()
iduno iduno 02.01.201909:50 ответить ссылка 8.3
Так, падажжи ёбана. Где на скриншоте написано, что перед нами h-файл? И вообще, перед нами реализация, херли ей делать в ашнике?
Я тоже не сразу понял. Там и файл эмодзи назван.
h í1* -.h++) No Selection
1 #include "te.h++"
*ни
Хммм, где-то я уже это видел. SP S20E09
Ь : ^	-4-'°^
V	/ 1
7
: i
^Vï&TP
ЬЬ\

{,	\(мО!
lh ■	Ъ* ,
< жI .'• Лв/\
й»р/*о^г5 '9 ~ *<y7	-,	-т,
'	^ T -V	I
h-
ооО fcT> “ ^Ví
ooohb •=> ^ "И ^o-¿) оОО h ts> ~ 0 ___ _ О Л •■* ft /-4
-
Т 1
•ft г* и»**	*®	(
ooÇ*S8-<p s/v^ooi’E S,H OhlSrf o r.
OOOOt
)
r> _ \ J / о ) v ’> ж □ т- ф
mentr mentr 02.01.201903:10 ответить ссылка 4.2
Кстати на скриншоте Xcode. В этом IDE при создании проекта по-умолчанию используется компилятор GNU++14, а он довольно новый. По сравнению со временем существования С++ поддержка символов юникод появилась недавно.
И еще скорее всего в других IDE вместо картинок будут прекрасные □□□□
Roxot Roxot 02.01.201904:10 ответить ссылка 4.4
Ромб с знаком вопроса ещё может быть.
rsbn rsbn 02.01.201912:00 ответить ссылка 0.4
Если я правильно понял, то в случае любви ребенок добавляется в семью только инициатору этой любви. Как-то немного мрачная и пессимистичная история, вам не кажется?
TheShock TheShock 02.01.201904:20 ответить ссылка 1.9
Да и сам код не толерантный.
Вполне в текущих реалиях.
Но так и не узнал про using namespace.
Amy0ba Amy0ba 02.01.201905:03 ответить ссылка -1.8
using namespace в хеддере?
MIN	T	T		TFT
ldiU	JL	¿	/	I
int16 int16 02.01.201910:41 ответить ссылка 5.6
Может он новичок, не бей его...
uniold uniold 02.01.201911:13 ответить ссылка 13.8
Только глобальный namespace, только ХАОС!
Нихрена не понял, но очень интересно
Если коротко и доступно: Он использует картиночки вместо слов.
Slog Slog 02.01.201912:36 ответить ссылка 1.1
6 namespace £ = std;
' using IT = int;
using £ = void;
1 using # = time_t;
9	using = bool;
10	#define f auto
11	#define 00 enum
12	#define T false
13	#define J§ true 1* #define * "evil"
15	#define £+	: :make_shared
16	#define I virtual
17	#define £::cout
18	#define £::endl
19
klaufman klaufman 02.01.201912:22 ответить ссылка 8.3
Код не работает. Параметры функции разделяются запятой, а не амперсандом.
yevhene yevhene 02.01.201914:08 ответить ссылка -1.2
Ты в курсе что амперсанд в этом коде - не разделитель? Там описывается тип, затем амперсанд (указывает что параметр передается по ссылке), и затем имя параметра.
Согласен. Это ссылка.
yevhene yevhene 02.01.201914:31 ответить ссылка -0.2
Они че, дальше Java'ы пошли? В Java'е нельзя смайлики.
в котлине можно
тока в апострофах
villy villy 02.01.201915:22 ответить ссылка 0.0
На мой взгляд, в Java'е не хватало одной вещи: сделать алгебраические типы, чтобы можно было писать, например, «это строго либо адрес, либо email, либо телефон». Отличный был бы язык.
Котлин разрешил все кроме этого :(
дык цейлон же есть
btw цейлону и котлину систему типов пилил один чувак, тока в цейлоне он ее сделал правильно, а в котлине как попросили
villy villy 02.01.201915:53 ответить ссылка 0.0
Немного не понял, чем тебя не устраивает возможность создать в Java свой простенький тип-контейнер, работающий как алгебраический тип? А "строго либо адрес, либо email, либо телефон" вроде описывается дженериками через wildcard.
Я отвечу на твои вопросы, но давай определимся с ценностями.
Один вариант, когда тебе нужно заставить программу скомпилироваться и запуститься, не упав. В принципе не важно, что ты при этом напишешь, кучу if'ов, используешь рефлекшен и т.д.
Другой крайний вариант – это когда ты хочешь получить принципиально другой уровень комфорта от языка и стараешься программировать в стиле «если скомилировалось, значит программа правильная». В этом случае ты начинаешь выжимать максимум из системы типов, как можно реже _менять_ значения переменных и состояние объектов, по возможности избегать null'ов, боже упаси никаких instanceof'ов и т.д. В этой ситуации тебе очень не хватает алгебраических типов.
Если тебя утраивает второй подход, можно обсуждать дальше.
В первом варианте я с тобой соглашусь, что вообще не понятно, в чем проблема. Хотя с wildcard'ами ты конечно наврал.
C wildcard'ами я и не был уверен, потому сказал "вроде" (всё же их применимость очень сильно может зависеть от проблемы). Но ты меня заинтриговал, сам стараюсь выжимать побольше из системы типов, но опыта у меня очень мало. Опиши, пожалуйста, более детально проблему и как с ней поможет справиться алгебраический тип?
Попробую покороче. Во-первых несколько мыслей. Работать с данными произвольного размера можно можно только при помощи: а. массивов. б. алгебраических типов. Во всех остальных случая размер данных фиксирован и известен заранее. Дальше, как нетрудно догадаться, указатели в традиционных языках – это алгебраические типы, а не указатели. В них можно записать либо настоящий указатель, либо специальное значение null. Большинство языков разрешает проверить, что именно из двух вещей хранится в значении, указатель или null. Большинство языков позволяет неявно скастить значение к указателю и использовать его (с крешем, если там был не указатель, а null), например в Java'е, когда ты пишешь p.value. Котлин, если не ошибаюсь, по умолчанию это запретил.
То, что указатель является на самом деле алгебарическим типом только и позволяет писать нам нетривиальные программы. Но есть много случаев, когда этого не хватает. Например, как ты описываешь файловую систему? В ней есть объекты с путем, которые является либо файлом, лило каталогом и все (упрощенно говоря). Как можно описать это на Java'е? Только предложив вернуть два указателя, один из которых указатель на тип File, а другой – указатель на тип Directory. Комбинируя два указателя (которые, напомню, каждый могут иметь специальное значение null), и договорившись, что из них всегда ровно один ненулевой, мы имитируем то, что должно быть выражено гораздо короче:
наш объект либо File, либо Directory и все. Язык должен поддержать это следующим образом:
позволить присваивать в эту переменную только такой тип, либо конкретные перечисленные типы,
дать возможность написать switch, в котором не будет возможности получить null, сразу два значения, class cast и т.д.
при необходимости проследить, что программист написал case'ы по _всем_ подтипам, ничего не забыв и не компилироваться, если исходный алгебраический тип расширили (сузили, поменял).

Такая необходимость очень часто возникает, когда тебе нужно описать некую сложную структуру данных. Например, очень часто всякие деревья с данными так выглядят, особенно AST, но и файловая система – отличный пример.
В целом, мысль понял. Но:
1. Пример с файловой системой немного не подходит: директория и файл - суть одно и то же, в Java они так и представлены стандартным классом File.
2. Описанный тобой пример сложных структур напоминает паттерн GoF под названием Composite. Те же Collections в Java как раз и задают композитные структуры, могут иметь различное количество элементов, часть коллекций реализуют красно-чёрные деревья/списки с пропусками (skip-list). Для чётко предопределённых списков значений есть структура enum с очень крутыми возможностями по настройке и возможностью использовать в switch-е.
3. Любая переменная ссылочного типа в Java может быть проверена на null несколькими способами, для пущей надёжности существует структура Optional с рядом доп. возможностей.
4. Теоретически, проблема двух ссылок на файл и директорию может быть сведена к одной параметризованной ссылке (generics), т.к. один объект файловой системы он всегда либо файл, либо директория. Описываем интерфейс FileSystemObject, расширяем его через File и Directory, потом при объявлении параметризованного метода можно сделать следующее:
... |T extends FileSystemObject| ReturnType methodName(List|T| fileSystemObjects) {...} // палками "|" заменил угловые скобки, а то браузер их пытается трактовать как теги
И вот уже на уровне кода ты не передашь ничего, кроме наших элементов файловой системы в виде списка в такой метод, компилятор не пропустит другие типы. Да, можно обмануть эту логику, но только сознательно и хорошо зная механизм работы generics.
5. В Java нет понятия указателя, есть ссылочные типы, которые по сути являются просто хранилищем информации о том, где в памяти JVM (конкретно в части памяти - heap) лежат данные описывающие тот или иной объект. Работа со ссылками всегда производится по одному набору правил, без "переключений режима указатель/значение".

В общем: ты меня заинтересовал темой алгебраических типов, но не убедил, что в Java нет возможности легко решить проблему, решаемую алгебраическими типами или создать свой собственный алгебраический тип.
1. В этом-то и суть. Это должно было быть два типа, одни для каталога, другой для файла. У них же совершенно разные методы. Но так изящно сделать этого нельзя (нет алгебраических типов), они просто запихали все методы в один тип, то есть по сути разрушили типизацию и перевел ошибку компиляции (ну нельзя вызывать mkdir на файле) в рантайм-ошибку.
На самом деле все чуть сложнее, но сейчас это не важно.
2. Composite – объект, который исполняет одинообразно вызванные операции над n вложенными элементами? Это здесь вообще при чем.
Если фанат GoF, то посмотри паттерн Visitor (только именно его изложение в GoF, а не вообще). Вот он в точности о том, как сделать алгебраический тип в Java/C++.
Enum – это список значений (одинакового типа). А мне нужем список типов. Понимаешь разницу? И у enum'ов нет строго switch'а, который проверит, что не забыты никакие case'ы.
Погоди, enum как раз хитрая штука: он представляет не просто значения одного типа, а единственные инстансы разных наследников одного типа, формально можно сделать enum, у которого будут общие методы для всех вариантов: FILE, DIRECTORY, а потом в объявлении каждого типа приписать свои уникальные методы: FILE {/*описание доп. методов индивидуальных для FILE*/}. И для enum есть EnumSet, EnumMap, которые помогают элегантно решить проблему с проверкой на варианты.
В целом, я видел на дженериках такое, что не верю уже в фразы "невозможно" в отношении типов в Java.

Спасибо за полезную дискуссию, не часто в нете натыкаешься на кого-то готового пофилософствовать на подобные темы вместо тупого забрасывания шаблонными фразами. Пойду детальнее изучу тему алгебраических типов, мне кажется, я что-то упускаю в твоих словах.
Нельзя. Все константу enum имеют один и тот же тип снаружи. Внутри могут быть свои детали. Но наружу торчит единообразный интерфейс. Кроме того, не забывай, что объект enum'а – это один объект, а объект файловой системы – другой. И компилятор ничего не знает про их связь, то есть он тебе позволит взять enum от одного объекта файловой системы и приложить его к другому объекту, потому что они все для него имеют одинаковый тип.
Тебе спасибо, это как раз немного взбодрило мозг от Нового года :)
Не очень советую сильно в это углубляться, потому что сейчас алгебраических типов толком нигде и нет (кроме функциональных языков), если только не для общего образования или любопытства.
Столкнулся с новой информацией и новым классом проблем и проигнорировать это? Ага, щазз! =)
3. В Java нет _никакого_ способа сделать так, чтобы компилятор гарантировал, что ты не дергаешь нулевой указатель. Современные системы пробуют добавит аннотации для этого, но это уже не сама Java'а.
Единственный способ написать аккуратно, это передавать в какой-нибудь Optional callback, который будут дергать _только_ если указатель ненулевой и передавать его в параметрах. То есть это можно сделать, если не жалко все время новый объект создавать.
В Котлине кажется есть прямая гарантия, что пока ты не проверил указатель на null, _компилятор_ не даст тебе его дернуть.
4. Без обид, мне кажется, ты не знаешь generic'и. То что ты написал к делу никак не относится.
Но если мы упростим твою идею просто до базового класса FileSystemObject, то вот что с ним получается:
идея системы типов заключается в том, что когда я добавлю третий тип к этим двум, у меня должны перестать компилировать все места, где я раньше рассчитывал на то, что этих типов только два. Это примерно так, как при добавлении третьего метода в интерфейс перестанут компилировать все точки, где реализовано только 2 метода.
Скорее, не правильно понимаю суть проблемы.
Возможно. То, что ты написал – хитрая штука, и я не вижу никакой связи с тем, что мы здесь обсуждаем. Грубо говоря, она не для этого. Я думаю, если бы написал просто

ReturnType methodName(List\T/ fileSystemObjects)

ничего бы не изменилось для нашего разговора.
Судя по тому, что я сейчас читаю про АТД, то я не в ту сторону воевал. И конструкция на дженериках та тоже не в тему, может и правда избыточна.
5. Перечитай свои слова и пойми, что ссылки – это и есть указатели, и больше не ведись на маркетинговые термины. Указатель в Java'е (и всех таких языках) – это тип, которое содержит в себе либо настоящий указатель, либо специальное значение null. Это сделано искусственно. Просто без null'а было бы _очень_ трудно программировать. Например, как работает то, что называется «разыменование»:

return mPointer.data;

реальный код: проверяем реальный подтип переменной; если это специальное значение null, то крешимся; если оно имеет значение настоящий указатель, то берем по этому адресу значение; третьего не дано.
Ребята, прекратите давать школоте идеи, скоро аудиозаписями будут программировать
s
€
7
8
S
10
11
12
13
14
15
1€
17
18
IS
20
21
23
24
25
2€
27
28
2S
30
31
32
33
34
35
3€
37
38
3S
40
41
42
43
44
45
4€
47
48
4S
50
51
52
53
54
55
5€
57
58
5S
€0
€1
€2
€3
€4
€5
£€
€7
¿include <iostream> ¿include <locale.h>
Wave Wave 03.01.201915:25 ответить ссылка 0.7
ft¿WHS - [E^IfOIKTu/fUwHS ] - -WfO
Фдмв Ректора Поика Взора Кода ПЙка Ндлддкд Ôkho Пот^шнЛ
ЕЖ.
EDfj^wnz ЕЗщро ЙкнАЬ1-»зя|
Г
J [Uli
кта С/Прсч'кты/Лд-. g И' -• -
Про/.
oiKTa

Í!
ЕЬ В ЙдиЗмз (Ei/ïlpoi iíты/d^iÚHa) ф- &Щр0
—	Ви^льз*
—	[?) кнды-дза j
—	2) сн.иБОД-Б|'ры J32 i : снноднк
Wave Wave 03.01.201915:25 ответить ссылка 0.7
Только зарегистрированные и активированные пользователи могут добавлять комментарии.
Похожие темы

Похожие посты
Style Cover SBC24 for Xperia"" XA
Perfect fit. Pfotective
see through case. 0.65mm slim
Learn r
EN style Covcm for Xperia™ XA. Perfect fit. Protective see-through case. 0 slim DE Elégante Hülle fur Xperia™ XA. Perfekte Passform Schü
Îdurchsichtige Hülle. 0,65 mm dünn. EL Коцфб KdAuppa уют го X
подробнее»

it-юмор geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор

Style Cover SBC24 for Xperia"" XA Perfect fit. Pfotective see through case. 0.65mm slim Learn r EN style Covcm for Xperia™ XA. Perfect fit. Protective see-through case. 0 slim DE Elégante Hülle fur Xperia™ XA. Perfekte Passform Schü Îdurchsichtige Hülle. 0,65 mm dünn. EL Коцфб KdAuppa уют го X
ЧТОБЫ УЗНАТЬ, ПОСОЛЕН ЛИ БОРЩ. НУЖНО ОПУСТИТЬ 8 НЕГО ДВП ЭЛЕКТРОДА И ПУСТИТЬ по ним ток.
ЕСЛИ ПОЯВИТСЯ ЗАПАХ ХЛОРА - БОРЩ ПОСОЛЕН.
подробнее»

песочница geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор Борщ Приколы про еду наука Жратва разное Как узнать посолен ли борщ?

ЧТОБЫ УЗНАТЬ, ПОСОЛЕН ЛИ БОРЩ. НУЖНО ОПУСТИТЬ 8 НЕГО ДВП ЭЛЕКТРОДА И ПУСТИТЬ по ним ток. ЕСЛИ ПОЯВИТСЯ ЗАПАХ ХЛОРА - БОРЩ ПОСОЛЕН.
This is Geek Inc !,Tech,,Voici le générique de Geek Inc qui montre ce que nous sommes, ce que nous aimons, ce dont nous parlons, bref c'est nous, c'est Geek Inc !

Générique : Breizhtorm 
Musique originale : Eric Muller
подробнее»

Geek ink видео,video гик geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор супергерои Сериалы Фильмы узнай всех

This is Geek Inc !,Tech,,Voici le générique de Geek Inc qui montre ce que nous sommes, ce que nous aimons, ce dont nous parlons, bref c'est nous, c'est Geek Inc ! Générique : Breizhtorm Musique originale : Eric Muller