- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
#include <iostream>
using namespace std;
int main() {
const char *kakoiBagor = R""""(
"Какой
багор )))"
)"""";
cout << kakoiBagor << endl;
return 0;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+1
#include <iostream>
using namespace std;
int main() {
const char *kakoiBagor = R""""(
"Какой
багор )))"
)"""";
cout << kakoiBagor << endl;
return 0;
}
А вы знали, что в C++ есть ХЕРЕДОК?
https://ideone.com/5KdJJQ
Кстати, это компайл-тайм функция!
извините
Кстати, пистону бы пошло добавить dedent
Почему избыточно? Нормально. При беглом взгляде видно, что это лямбда, не приходится парсить закорючки.
Ах кейворды мои кейворды как я их люблю
https://www.meme-arsenal.com/create/meme/306940
ки
>new
говно и ненужен. От него только вред, потому что он засирает код
>lambda
это соль, чтобы не хотелось её писать
Как ты обозначишь каким образом и где создать объект?
> Ки
Кейворд уже устоявшееся выражение. Типа как суши (правильно говорить – суси).
> lambda
Есть такая картинка с лесом и надписью: «не нашел снайпера за 5 секунд – проиграл», лямбда без кейворда точно так же прячется в скобочках и загогулинах, как снайпер в комуфляже в зарослях.
А в каком языке, кроме С++, у тебя есть выбор?
> устоявшееся выражение.
угу, как "колготки с лукрой'
>прячется в скобочках и загогулинах,
но почему она не прячется в руби или котлине или JS?
Ruby
JS
Perl
Kotlin
Groovy
Все скриптушки боль-мень консистненты, только питухон выделяетчя
во-вторых это был бы lame excuse)
Плохо, мне он вообще не очень нравится, просто я хочу быстро заработать много денег, создавая сайт на «джанге».
> {{ куча лямбд }}
Мне они все не нравятся тем, что если бы в функцию передавались несколько результатов выражений, пара лямбд и ещё какие-нибудь параметры-массивы, то вызов функции превратился бы в кашу из специальных символов:
funkcia([n % n == 2 for n in {} + {11 % 2}], (1, 2 + 3, "$s" % 8) ...)
Что-то типа такого. Лично мне неприятно разбирать штучки!
Вот в «Nim» всё по-ня-тно, там лямбда выглядит так:
do (x: int) -> bool: x == 5
Сразу видно где лямбда начинается, где у неё аргумент, где у неё возвращаемое значение и что она делает. Ещё лямбду можно объявить как процедуру, это ещё нагляднее!
В «Nim», кстати, есть «new», мне такое по нраву: можно создать объект в куче!
Изучи PHP! Там есть new!
> бы в функцию передавались несколько результатов выражений
>пара лямбд и ещё какие-нибудь параметры-массивы,
если у тебя функция c несколькими аргументами, пара из которых другие лямбды, то не нужно делать лямбду наверное
> можно создать объект в куче!
а на стеке?
И на стеке!
> Изучи PHP!
Нехочетсо.
> то не нужно делать лямбду наверное
Если обозначение лямбды понятно и выделяется, то почему бы и нет.
Например, можно передать в функцию компаратор и ещё одну лямбду, которая будет какой-нибудь массив записывать в файл.
JS
Ну это не всегда хорошо.
Зачем мне хранить в куче три инта?
Кстати, а можно сделать такую оптимизхацию, чтобы sizeof(vector<int>) занимал бы столько, чтоб можно было прямо в нем хранить 1-2 инта, а что больше -- класть в кучу
или их тогда нельзя swap?
Тогда значит я в теории мог бы сделать такой аллокатор, который первые N хранил бы на стеке не сломав swap
или всё равно не мог бы?
Походу не могу еще потому что стандартные коллекции (емнип) просто вызывают ему методы чтобы создать и удалить объект, а на их размер он не влияет..
"new" при вызове функции неявно создает "this" и его же возвращает.
Для примитивных типов String (в JS это примитив), Integer и пр. вызов их без new это просто каст, а с new создание объекта-враппера.
По степени упоротости приблежается к перловому bless, который привязывает ссылку к пакету, реализуя таким образом объект)
это объект, а в булевом контексте он true:)
Она стреляет ``[object Object]``ом и "undefined"ом
Разницей между "of" и "in" в лупе.
Ловким приведением типов
итп
Так в коде теряется всё вообще)
Её естественно лучше выделить отступами, каментами и так далее, если вдруг почему-то в твоём коде лямбда - это что-то необычное, что может понадобиться "искать".
Достаточно mySecondEblan = Pituh(2, "eblan"). Нахуй new в таких языках как js, Java, сисярп? Ни нахуй он не не нужон
Но вообще нужно было просто делать синтаксис как в C++, и проблемы бы не было
Весьма очевидно, что ты вызвал.
А еще в C# "new" вызывает конструктор даже у распологаемых (по умолчанию) в стеке структурах, что особо пиздец
Petuh p(1,"A");
Я не понял, что ты проиллюстрировал этим кодом
std::cout << p << std::endl;
Проблемы нет, а new есть.
> А еще в C# "new" вызывает конструктор даже у распологаемых (по умолчанию) в стеке структурах, что особо пиздец
Почему пиздец? В C# new означает вызов конструктора, только и всего, это же не C++.
потому что джавушки пидарасы
Впрочем, в крестах тоже можно соснуть и написат
foo = Foo(123);
но это более редко
Забавно, что new есть еще в Ruby, но там оно метод класса.
И еще в objc, не к ноче будет помянут
Ты действительно хочешь синтаксис "как в с++"? ;)
Там ведь помимо Petuh a(1, "A") можно и Petuh(1, "A") написать для создания временного объекта на стеке. И Petuh{1, "A"). И Petuh p = {1, "A"}. Возможно я ещё какие-то варианты забыла, лол.
Но, с другой стороны, там всё просто. Что ближе по скопу, то и вызовется. Т.е. метод своего класса победит конструктор другого класса.
И причём у этих вариантов может, сука, быть разное поведение!
А самые неудачные из них вообще декларируют функцию, а не создают объект...
"Нужно было просто делать синтаксис как в C++, и проблемы бы не было".
неужели не было бы лучше вместо
писать
?
Тут правда есть такой жмых, что без скобочек бы оно просто создавало указатель (в случае референс тайпа)
в C# же методы пишутся с большой буквы
?
В C# кстати есть "dynamic" -- вообще отказ от стат типизации, как "any" в TS или "def" в груви
Вроде нет, ты просто дергаешь метод, и течешь.
Он дергает его рефлексией, так что кастить ничего не нужно.
Опкод в IL ввели небось для скриптушни типа Ironpython
-------
пруупф
А как работает object для value types?
или никак?
Value type становится reference type со всеми вытекающими.
То есть если нечто принимает "object" в качестве аргумента, то передача туда даже обычного числа "1" приведет к перемещению этого числа в кучу (ну или взятию из пула, наверное) и к передаче ссылки на него?
Ох.. Слава богу, в c# для этого генерики есть
Я не уверен, что в императивной помойке это было бы легко сделать не порадив часовую компиляцию и труднохуйпоймикакие ошибки..
Алсо, нужна же наверное структутрная типизация?
Вот есть у тебя x.size(). Какого типа x? ICollection какой-нибудь, в котором этот size заявлен?
А если ты этот size() реюзаешь в разных целях и общего интерфейса нету?
Тому я и сказал
>Алсо, нужна же наверное структутрная типизация?
Придется отказаться от понятия "класс", и просто скзаать "нечто с методом .size()"
А потом у тебя есть метод, который принимает нечто с мтеодом size() и методом petuh()
Сделали "интерфейсы" и запретили реюзать имена, по сути.
Вот такое вполне работает
Утка-с
Кстати, из-за этого в реальных проектах встречались реальные факапы с лочками, когда вместо взятия лочки получалось объявление функции которое нихрена не делает. "Нужно было просто делать синтаксис как в C++, и проблемы бы не было".
Petuh p{}
именно для этого
Я ж спецом там не пустой ктор вызвал
Да, теперь надо уметь читать вдвое больше кобенаций...
Petuh p()
?
ты или не пиши скобочек, или пеередавай туда чото
или это могло как-то от шаблонов вылезти/
Ну был у тебя конструктор с аргументом. Ты его порефакторил и аргумент убрал. Получи граблями по яйцам на ровном месте.
Разумеется, p скорее всего* будет инициализирован и без скобочек, но чем меньше нядо вспоминать няканутых правил инициализации — тем лучше.
*
Если у меня старый сишный объект (как это верно выразить в терминах современного стандарта?) то он конечно сам собой не инициализируется. Но я же могу инициализировать его потом.
Можно наверное наступить на такое
Сам собой не инициализируется
А такой инициализруется небось
Объект с тривиальным конструктором по умолчанию (https://en.cppreference.com/w/cpp/language/default_constructor).
> то он конечно сам собой не инициализируется
Если Petuh — это класс, то он в любом случае инициализируется дефолтным конструктором. Просто если этот конструктор тривиален, то члены Petuh будут тоже инициализированы тривиальными конструкторами, и так до тех пор, пока ня встретится не-классовый (или как оно там) член, вроде int, который уже будет ня инициализирован.
> Сам собой не инициализируется
> А такой инициализруется небось
Оба инициализируются одиняковым конструктором.
А вообще вот: https://habr.com/ru/post/438492/ (Инициализация в С++ действительно безумна. Лучше начинать с Си). После прочтения этой статьи становится предельня понятня, почему лучше всё инициализировать явня.
В общем правильно считать так:
Конструктор вызовется всегда и у всех членов, просто у членов "int" по умолчанию он НЕ устанавливает значение и потому не инициализирует
Хотя на самом деле конечно никакого кода для вызова конструктора в объектный файл добавлено не будет для такого кода:
Теперь у Foo конструктор по умолчанию инициализирует i в 0.
А вдруг я хочу
я не хочу делать лишние действия))
Спасибо за статью, но я дочитал до фразы "статическая продолжительность хранения", и переключился на английскую версию
Если у тебя Foo создаётся меньше миллиона раз в секунду — особой разницы ты ня увидишь. Нябольшая цена за избавление от головной боли.
> переключился на английскую версию
Да, она лучше.
Не надо там никакого new. Это вот как раз странно, что компилятор дает тебе в одном скопе иметь два какие-то питуха, и различает их по new. Такой код и читать сложнее.
В крестах я ведь могу написать Foo(x) как вызов конструктора и Foo(x) как функцию в текущем скопе. И ничего, как-то с этим живут.
Т.е. проблема есть даже если не писать new.
Потом народилось новое поколение жаберов и шарпеев и джаваскриптеров с пыхерами, которые кресты отродясь не видывали, и для них "new" вот уж точно не имело никакого смысла.
Кстати, в ObjC у типа переменной, представляющей объект, указывается звездочка. Ну типа это же настоящий указатель(на объект в куче), и записывается как указатель. Звездочка там также не нужна по идее, как new
но мне не оч понятно, почему нельзя было сделать это без зведочки. Строка и так не является валидным сишным кодом
Но не сырой. Иначе бы как работал референс каунтинг и вызов dealloc?:)
А он работал? :)
Там же вроде вручную надо было дёргать retain и release на указателе. В общем-то на сишной структуре мне тоже никто не мешает это делать, если у неё внутри счётчик.
Но уже лет семь как завезли ARC, который впиндюривает их.. хотя... он впиндюривает их уже после компиляции, чуть ли не на уровне LLVMного байткода..
Так что ты прав: это может быть обычный указатель
он просто ручной был, но был же
define "работал" тогда
Ну я про ARC, его же не было изначально. Так что похоже, что это реально просто обычный сишный указатель на особую структуру. Без какой-то там магии.
шахимат
А , у вас кодстайл другой: "method", но "Class"
Надо внимательней думать, что у тебя в локальном скопе. И не писать классы на тыщу строк.
foo = Petuh(123)
а потом петуха сделали функцией, а не конструктором класса, и сохранили сырцовую совместимость
В питоне тоже такое есть в джанге..
но раз эукариаот сказал, то наверное для него это проблема.
Сишарперам неследовало бы писать методы с большой буквы, и проблемы бы не было почти никогда.
Но видимо хотели быть похожими на кодстайл функций в винде
В питоне нету, кстати. Там ведь методы без self не позвать.
spam = Eggs()
что мешает Eggs быть функцией?
------
В реальной жизни так писать нельзя, конечно, но если ты пишешь крутую либу с кучей хаков и оптимизацией, то можешь себе такое позволить
PEP8, я думаю.
Верно. Потому в большинстве случаев проблемы нет в языках кроме C#, но в коде библиотек могут использовать такой хак для каких-то оптимизаций
Ну что значит хак? Это ведь банальное кеширование чего-то в локалку. Можно и другое имя дать, чтобы читателю шаблоны не рвало.
Хотя его бы лучше сделать через декоратор.
К сожалению не вспомню сейчас где я это видел в джанге, но вот тебе пример из котлина
Думаешь, ``BroadcastChannel`` это класс?
Хотя под кодстайлу котлина разумеется функция не пишется с большой буквы
Ну да. И опять же, тут просто фабричная функция, зачем её называть так же как и класс, который она создаёт? Ну напиши MakeBroadcastChannel или CreateBroadcastChannel.
Ну потому что там был класс сначала, а потом его поменяли на фабричную функцию, чтобы вон сделать разные реализации.
Потому что ты не можешь вернуть разные реализации из конструктора же.
А хотелось НЕ заставлять клиентов менять код (хотя пересобрать его всё же придется -- скорее всего опкод там другой).
Я не защищаю этот подход, просто показываю, что он есть:)
Тогда почему бы явно не сломать код клиентов, чтобы они не забыли пересобраться? Выглядит как какие-то грабли на ровном месте.
Или там для непересобранных клиентов осталась копия класса под старым именем, чтобы они работали дальше?
Я не думаю, что старая версия осталась.. Это был бы ад.
по идее вызов функции это invokestatic, а класс это "new" и "invokespecial".
А ты в крестах когда пишешь
всегда понимаешь ``petuh_krestux`` это функция, или конструктор?
В основном да. Даже если всё в одном стиле, то по имени видно же обычно... Если существительное -- значит конструктор, если глагол -- значит функция.
какой size() ))
Угу, в крестах одно время ещё был дурацкий приём, когда геттер и сеттер для свойств делали с одним именем. Что-то в духе:
Почему не делать как в жобе: с префиксом "get" и "set"?
Или почему не сделать проперти как в C# и котлине?
В сисярпе такое невозможно, там никаких глобальных функций нет. В качестве "глобальных функций" можно использовать статик класс со статик методами, но они вызываются как ClassName.MethodName, так что никакой проблемы нет.
хуйню написал, у вас же там не классы импорятстя, а неймспейсы, да?
Да. Но для класса можно сделать алиас
и теперь вместо Petushok.MethodName можно использовать Cock.MethodName.
Вообще заметил, что C# больше похож на C++ в этой области: тоже неймспейсы с классами, тоже алиасы для классов.
Аналогов джавьих пакетов нет
Нельзя.
> C# больше похож на C++ в этой области
Ну, Хейлсберг сам говорил, что C# — это не клон Java и ближе к C++ (хотя по факту конечно напизжено из жабы очень много). В unsafe можно вообще точно так же пойнтеры использовать как в C/C++.
https://www.linux.org.ru/forum/talks/913456?cid=913826
хороший язык
люблю CLR и люблю функциональщину
но у меня на клавиатуре нету ψ, и потому мне он не подойдет
придется делать стартап на пхп
/19653#comment316725
мне кажется, это ранний МАКАКА
язык на букву Э
real_equals_including_type
> Compute(8 ====Э [ ]).
[8]
прыг скок
я веселый гонопсевдокок
Из Euphoria formal syntax:
.
соответственно, можно так
vb.net есть, а эйфории нет
-------
к сожалению, это всё написано про C++98
какой багор ))
Забыли написать, что где-то в совершенно левом месте, которое не имеет отношения к точке, где реально таится бага.
Наблюдать, не влияя на эксперимент, сложно.
А еще бывает генеральский эффект, или эффект админа: комп у бухгалтерши глючит. Админ приходит -- комп не глючит. Уходит -- снова глючит
"требуется программист на Euphoria для поддержки высоконагруженного сервиса aka социальная сеть для общения программистов"
Зато по «PHP» их полным полно!
Точно так же можно и с переменныи
Можно любое слово на месте его использовать
прямо как в php /green
Вот чертов Борн -- писатель шелла -- всё у пхп спиздил в 1969-м году
Сап, говнокод. Есть одна тян...
(‘ T `U)
Можно с интерполяцией
throw new
TooLongLineExceedingRecommendedMaximumLe ngthOfEightyCharactersForCompatibilityWi thOldPrintersEncounteredException
();
Наслаждаемся:
Java убьет ваш стартап. PHP спасёт его.
https://medium.com/nuances-of-programming/java-unichtozit-vash-startap-7c07c5f1ca75
PHP-программистов больше и они дешевле чем Java-программисты.
У PHP отличная производительность и становится она только лучше. На деле, он с легко конкурирует с компилируемыми языками.
PHP не «скриптовый» язык (что бы это ни значило), это мощный, полнофункциональный, объектно-ориентированный язык.
PHP создан для веб. Никаких дополнительных серверов, процессоров, хаков, уловок не нужно. Он буквально един с вашим сервером.
Какой апач )))
А может они о том, что сделали в ВК? Там вроде весь код линкуется в итоге в один бинарь с HTTP сервером
Там наверняка апаче был. Вообще в 2000-м году ничего не могло быть кроме апаче ни на каком юниксе (были еще сервера от лотуса и сана, но в дикой природе они не встречались)
Во-первых чужие хостинги часто говно для своего софта на пыхапы - потому что жадные хостеры экономят на всем и простой поиск в базе будет занимать минуты.
А свой хостер поднять не имея никаких знаний по безопасности - это дыра безопасности. Ведь как обычно предлагают в учебниках по настройке апатча? "Ну если у вас что-то не работает, отключите все антивирусы, брандауэры"... Обычно так и оставляют, ведь знания как сделать чтобы работало без отключения не появилось, а работать оно как обычно должно еще вчера.
p.s. Лучший язык для стартапа - JavaScript через Node.js
Приведите реальный пример такого учебника.
Это зависит ))
Плюс JS в том, что можно писать и фронт и бек. Но если твой стартап это не веб прилоожение с SPA, то я не уверен в выборе языка
Ну и лучше сразу взять TS, как только чуть чуть выучишь JS
1. PHP
Серверный язык сценариев PHP широко используется как молодыми, так и опытными компаниями. Хотя есть много способов применить PHP, он часто используется для создания динамических веб-приложений. Дополнительные качества, которые делают его хорошим выбором для стартапов, - это его высокая производительность и открытый исходный код. Благодаря простоте использования он также может ускорить вывод продукта на рынок.
https://itanddigital.ru/itstartup
Он ебанутый чтоли?
ssh там из коробки.
Мак это микроядро Mach + верхний слой из FreeBSD = ядро XNU
Поверх юзерленд спиженный из FreeBSD = DarwinBSD
--дальше пошла проприетарщина--
Поверх CoreFoundation
Поверх Cocoa, AppKit, Quartz и что там еще == OS X
Так что внунтри мака нормальный ssh, как во FreeBSD
Пиздец, чувак нихуя ни в чем не понимает, а уже статью писать
Оказывается, его завезли ещё в 1809.
Конечно же эта заметка возможно совсем не для хабра + я попутал с хабами и не мог определиться, Спасибо todoman, что подсказал про Чулан.
Я относительно недавно начал находить свободное время и силы, так как перестал работать дома и теперь вижу, что смысла мне пробоваться как автору на Хабре нет. Да и было просто желание чем-то поделиться, видать не тем чем нужно ))))
Теперь я понимаю, что лучше тратить время на что-то другое.
Это все написано на самом деле с чувством благодарности! Спасибо вам!
Хотя что там интересного? Очередная говностатья на говнохабре с тупыми комментариями в ней.
> Хотя что там интересного?
Как что? Ещё больше тупых комментариев, конячно <( ̄︶ ̄)> !
Скоро на хабре будут такие статьи:
Вчера я прибухнул с друзьями, башка с утра немного трещала, но я посрал, выпил рассолу огуречного, и стало ничего
Спасибо за внимание
В общем шло время, потихоньку начинал привыкать к тому, что null может не существовать, даже пытался сделать что-то на мой тот взгляд идиоматичное: дефолтные значения в виде объекта.... В общем все это меня вгоняло в тоску и я очень хотел опять писать на Java, так как привык жить с null. Прошло время я уже нормально начал жить с котлиновским not nullable, и стало ничего
Спасибо за внимание
вон взять Романа: на ГК Стандарт от его зубов отскакивал, а на Хабре он про тугосерь исполнял
> я спокойно сидела на fedora
Вот до чего мак доводит.
а номера нужны, чтобы статистику собрать
Вот например автор открыл для себя нулл сейфети, и пытается сам себе объяснить зачем оно нужно
https://habr.com/ru/post/560634/
Программисты живут в постоянном страхе, ведь в переменной может оказаться печально известный нулл и программа упадёт (как в Коко).
> Ну и чтобы явно подсветить для читателя те редкие кейсы, где нулл нужно обработать потому что там что-то опциональное.
Это кривая реализация optional или абстракция протекла?
Как-то так, да. По-хорошему всё должно быть нот-нулл. Кроме тех мест, где optional/nullable. Но это язык с нуля дизайнить надо, а не на основе джавы.
А если ты её туда сам засунул -- ССЗБ.
В джавке этого нехватает, кончно
Тут вопрос в том, надо ли усложнять язык новыми концепциями, если более-менее получается и без них.
Если повезёт.
Этот код скорее всего не упадёт.
Загадка: если предыдущий код гарантированно не упадёт, может ли упасть этот код:
https://gcc.godbolt.org/z/c1nnMKrKn
Вот так и появляются уязвимости...
Ибо адрес функции не получен при помощи взятия адреса функции.
З.Ы. Срачи про няшную и позиксовый dlsym по-моему до сих пор продолжаются...
И что характерно, ебанутые платформы где указатель на данные нельзя взять и кастануть в указатель на код -- это как раз по большей части эмбеддед.
На ARM'е, к примеру, в младшем бите указателя на код лежит индикатор arm/thumb.
Писать нельзя в nullptr же
int i = 0;
а потом
int* q = reinterpreter_cast<int*>(i);
?
JVM это не то место, где нужно экономить на сравнении указателя с нулом. Если это вот прямо хотспот, то его джит джитнет.
А то что, semantic web не сделаем?
но я не очень ему верю
Остерегаешься подделки?