- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
#include <iostream>
//
#define PROGRAM i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,o,s,i,o,i,i,i,i,i,i,i,s,s,s,o
//
template <char n, typename Ns>
struct Cons {
static void print() {
Ns::print();
std::cout << n;
}
};
struct Nil {
static void print() {}
};
template <typename Ms, typename Ns> struct Append;
template <typename Ns>
struct Append<Nil, Ns> {
typedef Ns String;
};
template <char m, typename Ms, typename Ns>
struct Append<Cons<m, Ms>, Ns> {
typedef Append<Ms, Ns> Next;
typedef Cons<m, typename Next::String> String;
};
#define INS(name, expr) \
struct name { \
template <int n, typename Out> struct Result { \
static const int value = expr; \
typedef Out Output; \
}; \
}
INS(i, n + 1);
INS(d, n - 1);
INS(s, n * n);
template <int n> struct DecimalLoop;
template <> struct DecimalLoop<0> {
typedef Nil String;
};
template <int n> struct DecimalLoop {
typedef DecimalLoop<n / 10> Next;
typedef Cons<'0' + (n % 10), typename Next::String> String;
};
template <int n> struct ToDecimal;
template <> struct ToDecimal<0> {
typedef Cons<'\n', Cons<'0', Nil>> String;
};
template <int n> struct ToDecimal {
typedef Cons<'\n', typename DecimalLoop<n>::String> String;
};
struct o {
template <int n, typename Out> struct Result {
static const int value = n;
typedef typename Append<typename ToDecimal<n>::String, Out>::String Output;
};
};
template <int n> struct Wrap {
static const int value = n < 0 || n == 256 ? 0 : n;
};
template <typename... Is> struct Seq;
template <typename I, typename... Is>
struct Seq<I, Is...> {
template <int n, typename Out> struct Result {
typedef typename I::template Result<n, Out> A;
typedef typename Seq<Is...>::template Result<Wrap<A::value>::value, typename A::Output> B;
typedef typename B::Output Output;
};
};
template <> struct Seq<> {
template <int n, typename Out> struct Result {
typedef Out Output;
};
};
int main() {
Seq<PROGRAM>::Result<0, Nil>::Output::print();
}
Dummy00001 06.03.2017 15:00 # 0
roman-kashitsyn 06.03.2017 15:22 # +2
Скука.
kaktus 06.03.2017 15:36 # 0
Dummy00001 06.03.2017 16:27 # 0
bayan 06.03.2017 18:50 # +1
Dummy00001 06.03.2017 19:55 # 0
dxd 06.03.2017 19:57 # 0
bayan 06.03.2017 19:59 # −1
roman-kashitsyn 06.03.2017 20:00 # +1
Ещё есть культурный фактор: писать непонятный простым смертным код умеет каждый перловик, а крестовые мета-заклинания — только особо упоротые крестолюбы.
Dummy00001 06.03.2017 20:07 # 0
bayan 06.03.2017 20:12 # 0
bayan 06.03.2017 20:12 # 0
Tzar 06.03.2017 20:19 # 0
bayan 06.03.2017 20:23 # 0
Я довольно хорошо умею ObjectiveC. Это тоже си с классами (ну и всякой лабудой типа лямбд)
Значит-ли что я могу быть хорошим крестовиком?
roman-kashitsyn 06.03.2017 20:30 # 0
Думаете, в C++ много разных конструкций и возможностей языка? Вы просто не видели ObjectiveC++...
guestinho 06.03.2017 20:39 # 0
Dummy00001 06.03.2017 21:06 # 0
bayan 06.03.2017 23:24 # 0
Асмовец сойдет с ума реализовывать руками колконвешены в каждой процедуре, да и циклы там тоже унылы
куда без макросов?
roman-kashitsyn 06.03.2017 20:28 # 0
Не существует абсолютно "чистого и понятного", чистоту и понятность разные люди могут понимать по-разному. Опять же, довольно очевидно, что ясность и понятность определяется не столько языком, сколько программистом, который пишет код. Я даже не утверждаю, что C++ является хорошим, понятным и удобным языком для написания программ.
На мой взгляд, в плюсах в среднем, проще понять, "что" происходит, чем в perl. Понять, "зачем" это происходит, обычно трудно независимо от языка.
P.S. Меня недавно спросили, какой из опен-сорсных проектов можно почитать, чтобы посмотреть, как выглядит "хороший", "идиоматичный" плюсовый код. Честно говоря, я даже и не знаю, что ответить.
Dummy00001 06.03.2017 21:08 # 0
а чем Qt и KDE не угодили? у них достаточно хороший стиль сырцов.
roman-kashitsyn 06.03.2017 21:57 # +1
> хороший, идиоматичный
lol
Dummy00001 06.03.2017 23:40 # 0
Antervis 07.03.2017 05:45 # 0
У QtCreator'а хороший код
huesto 07.03.2017 12:18 # 0
guestinho 06.03.2017 20:48 # 0
Dummy00001 06.03.2017 20:04 # 0
даже если линтер поймёт что ты написал, это еще не значит что ты сам понимаешь что ты написал.
dxd 06.03.2017 21:49 # 0
Dummy00001 06.03.2017 23:43 # 0
(*) парсер перла на бизоне сделан. 1+К строк. лексер сложнее и извращенее - но синтакс сам по себе на удивление детерминистический.
bayan 06.03.2017 23:56 # 0
перл нужен чтобы писать скрипты для парсинга логов, а люди хуячат на нем CRM и возмущаются что ах -- на перле тяжело писать сложную бизнеслогику или хайлоад на пол ляма юзеров
guestinho 06.03.2017 19:58 # −1