- 1
Onetime = ?config(onetime, Config) =:= true,
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
Onetime = ?config(onetime, Config) =:= true,
Boolshit? Нет, это динамическая питуизация.
+4
#include <iostream>
#include <string>
#include <string_view>
int main() {
std::string s = "Hellooooooooooooooo ";
std::string_view sv = s + "World\n";
std::cout << sv;
}
https://alexgaynor.net/2019/apr/21/modern-c++-wont-save-us/
What's happening here is that s + "World\n" allocates a new std::string, and then is converted to a std::string_view. At this point the temporary std::string is freed, but sv still points at the memory that used to be owned by it. Any future use of sv is a use-after-free vulnerability. Oops! C++ lacks the facilities for the compiler to be aware that sv captures a reference to something where the reference lives longer than the referent. The same issue impacts std::span, also an extremely modern C++ type.
−1
def da_pizda(update, context):
global da_counter, pizda_counter
text = update.message.text.split()
text = [word.lower() for word in text]
if 'дa' in text or 'da' in text or 'dа' in text:
text.append('да')
if 'пиздa' in text or 'pizda' in text or 'pizdа' in text or 'Πизда' in text:
text.append('пизда')
if 'да' in text:
bot.send_message(chat_id=update.message.chat_id, text='пизда',
reply_to_message_id=update.message.message_id)
pizda_counter += 1
if 'пизда' in text:
bot.send_message(chat_id=update.message.chat_id, text='да',
reply_to_message_id=update.message.message_id)
da_counter += 1
da_counter += update.message.text.split().count('да')
pizda_counter += update.message.text.split().count('пизда')
Бот, проверяющий наличие слов "да" и "пизда" в чате телеграма, и отвечающий соответственно.
+2
// https://github.com/WebKit/webkit/blob/e0e7e8f907f4c01c723374e8230a63d46e89e6a0/Source/WebCore/platform/graphics/filters/FEComposite.cpp#L98
static unsigned char clampByte(int c)
{
unsigned char buff[] = { static_cast<unsigned char>(c), 255, 0 };
unsigned uc = static_cast<unsigned>(c);
return buff[!!(uc & ~0xff) + !!(uc & ~(~0u >> 1))];
}
−1
//"вирус" в стиле кулхацкеров
#include <stdlib.h>
int main() {
int i = 1;
while( i == 1) {
system("start calc");
}
return 0;
}
+1
var v: List[Int?] = List@{1, 2, none, 4};
//Chained - List@{1, 4, 16}
v->filter(fn(x) => x != none)->map[Int](fn(x) => x*x)
//Piped none filter - List@{1, 4, 16}
v |> filter(fn(x) => x != none) |> map[Int](fn(x) => x*x)
//Piped with noneable filter - List@{1, 4, 16}
v |??> map[Int](fn(x) => x*x)
//Piped with none to result - List@{1, 4, none, 16}
v |?> map[Int](fn(x) => x*x)
// 5.15 Merge
entity Baz {
field f: Int;
field g: Int;
field k: Bool
}
var t = @[ 1, 2, 3 ];
t<+(@[5]) //@[1, 2, 3, 5]
t<+(@[3, 5]) //@[1, 2, 3, 3, 5]
var r = @{ f=1, g=2, k=true };
r<+(@{g=5}) //@{f=1, g=5, k=true}
r<+(@{g=3, k=false}) //@{f=1, g=3, k=false}
r<+(@{g=5, h=0) //@{f=1, g=5, k=true, h=0}
var e = Baz@{ f=1, g=2, k=true };
e<+(@{g=5}) //@{f=1, g=5, k=true}
e<+(@{g=3, k=false}) //@{f=1, g=3, k=false}
e<+(@{g=5, h=0) //error field not defined
«Буквально несколько дней назад компания Microsoft представила публике новый язык программирования. Языку дали название Bosque. Главная миссия дизайна языка — чтобы он был прост и понятен как для человека, так и для компьютера»
А вот кому новый, простой и понятный язык? Содержание спецсимволов всего на 54% превосходит таковое у «C++»!
h/448814
https://github.com/Microsoft/BosqueLanguage/blob/master/docs/language/overview.md
+2
https://habr.com/ru/article/448466/
*/
А последние пару лет набирает популярность boost.hana. Это boost.fusion,
но с constexpr'ом и лямбдами. Автор hana, Луис Дионе (Louis Dionne),
используя на полную мощь все возможности новых стандартов, в некотором
смысле очеловечил метапрограммирование. С помощью hana всяческие
манипуляции с типами, их кортежами, отображениями, а также компайл- и
рантайм-работа с ними обрели практически человеческое лицо и читаемый
вид. Ну, с поправкой на синтаксис C++, разумеется. Вот, например, как выглядит
универсальный сериализатор структур, написанный с помощью hana:
*/
// 1. Give introspection capabilities to 'Person'
struct Person {
BOOST_HANA_DEFINE_STRUCT(Person,
(std::string, name),
(int, age)
);
};
// 2. Write a generic serializer (bear with std::ostream for the example)
auto serialize = [](std::ostream& os, auto const& object) {
hana::for_each(hana::members(object), [&](auto member) {
os << member << std::endl;
});
};
// 3. Use it
Person john{"John", 30};
serialize(std::cout, john);
/*
Ну да, структуры приходится описывать особым образом. А кому сейчас легко?
И тут хочется также отметить библиотеку tinyrefl за авторством Manu Sánchez
(Мануэля Санчеса). Довольно неплохая попытка принести в мир C++-разработки
статическую рефлексию без расширения компилятора. Для своей работы библиотека
требует стороннюю утилиту (cppast), но зато предоставляет довольно удобный доступ
к информации о структурах, которую можно использовать в процессе разработки
программы. Преимущество этой библиотеки (по сравнению с другими) в том, что для
работы с ней не надо использовать «птичий язык», а элементы структур (как и сами
структуры) можно произвольным образом атрибутировать прямо в исходном коде:
*/
struct [[serializable]] Person {
std::string name;
int age;
};
template<typename Class>
auto serialize(std::ostream& os, Class&& object) -> std::enable_if_t<
tinyrefl::has_metadata<std::decay_t<Class>>() &&
tinyrefl::has_attribute<std::decay_t<Class>>("interesting"),
std::ostream&>
{
tinyrefl::visit_member_variables(object, [&os](const auto& /* name */, const auto& var) {
os << var << std::endl;
});
return equal;
}
/*
Таких примеров можно привести ещё много (или найти на гитхабе или гитлабе).
Объединяет все эти библиотеки и инструменты одна особенность: значительно
облегчая жизнь своим пользователям, они имеют такую реализацию, что остаётся
лишь предполагать, какое количество страданий испытали их разработчики. Достаточно
заглянуть в реализацию, увидеть забор из ifdef'ов и угловых скобок — и всё понятно.
Нередко эти реализации делаются на грани возможностей компиляторов. workaround'ы
банальных ошибок (или особенностей реализации языка конкретной версии конкретного
компилятора с конкретными флагами) здорово раздувают их код. Желание поддерживать
несколько стандартов сразу заставляет придумывать зубодробильные конструкции.
Безусловно, простая попытка реализовать что-нибудь подобное здорово поднимает уровень
владения языком (иногда — и самооценку). Но в какой-то момент, после многочасовой возни
с очередной ошибкой, или непроходящим тестом, или крэшем компилятора руки опускаются,
хочется плюнуть и бросить, ибо силы бороться иссякают.
*/
Именно поэтому я за гомоиконность
0
https://habr.com/ru/post/448810/
Уж слишком анскильно )))
Не удивлюсь, если сам Юра - автор статьи.
0
Переменная loffset 0 loffset!
Переменные местные жители здесь местные! Выбрано 100 (несколько) ячеек
: локальный, (смещение -)
отложить rp @ loffset @ swap -
откладывать буквально откладывать +;
: бизнес, (смещение -)
местный, отложи рп! ;
: (local DOES> @ local, отложить @;
: f> r r> rp @ 1 float - dup rp! е! > г;
: (flocal DOES> @ local, отложить f @;
: нечего делать ;
: ralign r>
START rp @ [1 плавает 1-] Буквально и
WHILE ['ничего не делать> тело] ALiteral> r
REPEAT> r;
: <local (- sys1)
текущие @ @ loffset @ местные жители @
больше 0 = ЕСЛИ отложено до ТО; мгновенный
: местный: (-)
откладывать> последние новости здесь местные жители @ дп!
ячейка loffset +! Создать loffset @, немедленный (локальный
вот местные жители! дп! lastcfa! прошлой! ; мгновенный
: flocal: (-)
Последние новости здесь местные жители @ дп!
START loffset @ 0 1 плавает падение FM / мод, пока
0 отложено Буквально откладывай> 1 ячейку + клетки! повторение
отложить f> r Создать loffset @, немедленный (flocal
вот местные жители! дп! lastcfa! прошлой! ; мгновенный
: local> (sys1 - sys2); мгновенный
: локальный (sys2 -)
местные жители! dup delocal
Loffset! ток @! ; мгновенный
: TO> in @ 'dup @ [' (local> cell body +] ALiteral =
IF> body @ local, отложить! падение
ELSE dup @ ['(flocal> cell body +] ALiteral =
IF> body @ local, отложить ф! падение
В противном случае, смотрите> в! отложить на потом; мгновенный
: DO 2 ячейки loffset +! отложить DO; немедленное ограничение
:? DO 2 ячейки loffset +! отложить? ДЕЛАТЬ; немедленное ограничение
: Для 2 ячеек loffset +! выделить для; немедленное ограничение
: LOOP -2 ячейки loffset +! Задержка LOOP; немедленное ограничение
: + LOOP -2 ячейки loffset +! отложить + LOOP; немедленное ограничение
: СЛЕДУЮЩИЙ -2 loffset + клетки! отложите СЛЕДУЮЩУЮ; немедленное ограничение
:> R 1 клетки loffset +! отложить в сторону> R; немедленное ограничение
: R> -1 ячейки loffset +! отложить R>; немедленное ограничение
Местные жители высокого уровня 19aug93py
: {отложить <местное -1
НАЧАЛО> в @ name dup c @ 1 = swap 1+ c @ '| = и к
drop> in @> r
НАЧНИТЕ dup 0 <0 = WHILE> в! отложить местное: REPEAT drop
d> в! отложить местное>; немедленное ограничение
: F {отложить <местный -1
НАЧАЛО> в @ name dup c @ 1 = swap 1+ c @ '| = и к
drop> in @> r
НАЧНИТЕ dup 0 <0 = WHILE> в! Отложить Flocal: REPEAT DROP
d> в! отложить местное>; немедленное ограничение
'местный; псевдоним} немедленное ограничение
\ ANS Locals 19aug93py
Создайте 5 локальных ячеек, выберите их
: (местный) (адрес)
местный @ 0 =
Если вы отложите в сторону <local local on
3 локальных ячейки + 2! местная ячейка + 2! ЗАТЕМ
dup IF linestart @> r исходная строка #> r загрузочный файл @> r
blk @> r> tib @> r #tib @ dup> r> in @> r
> Тиб +! dup #tib! > Tib @ Swap Move
> выкл blk выкл loadfile выкл -1 linestart!
отложить местное:
d> в! r> #tib! > Тиб! r> blk!
r> загрузочный файл! r> Loadline! r> linestart!
ELSE 2-капельные локальные клетки + 2 @ локальные 3 клетки + 2 @
отложить местный>
2 локальных ячейки + 2! местная ячейка +! ЗАТЕМ;
:? местный;
местный @
IF с местными ячейками + @ с местными 2 ячейками + 2 @
отложить местное; местный от ТОГО;
:; ?местный; отложить; ; немедленное ограничение
:> Местный; откладывать делает>; мгновенный
: EXIT inlocal @ IF 0 delocal, TO откладывает EXIT; мгновенный
: местные жители |
НАЧАТЬ имя dup c @ 1 = больше 1+ c @ '| = и 0 = WHILE
читать (локально) REPEAT 0 (локально); немедленное ограничение
0
void converting(char *in, char *out, node *PTR, char (checking_stack)(node), void (push)(node *topPTR, char value), int (pop)(node *fix), int (isOper)(char c), int (precedence_intro)(char data_1, char data_2, int(intro_precedence_power)(int res_1, int res_2)), int(intro_precedence_power)(int res_1, int res_2)) {
int k = 0, j = 0, d = 0;
push(PTR, '(');
for (k = 0; checking_stack((node)PTR) != 0; k++) {
if (isdigit(in[k])) {
out[j++] = in[k];
}
if (in[k] == '(') {
push(PTR, in[k]);
}
if (isOper(in[k]) == 1) {
while (precedence_intro((*PTR)->alpha, in[k], intro_precedence_power) != -1) {
out[j++] = pop(PTR);
}
push(PTR, in[k]);
}
if (in[k] == ')') {
d = pop(PTR);
for (; d != '('; d = pop(PTR)) {
out[j++] = d;
}
}
}
}
int precedence(char data_1, char data_2, int(intro_precedence_power)(int res_1, int res_2)) {
char collection[] = "+1-1*2/2^3";
char buf_1 = (char)strcspn( collection , &data_1) + 1;
char buf_2 = (char)strcspn(collection, &data_2) + 1;
return intro_precedence_power(atoi(&collection[buf_1]), atoi(&collection[buf_2]));
}
int precedence_power(int res_1, int res_2) {
if (res_1 < res_2) {
return -1;
}
else if (res_1 == res_2) {
return 0;
}
else if (res_1 > res_2) {
return 1;
}
return 0;
}
Якобы вычисляет обратною польскою нотацию номер два