- 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
#include <unistd.h>
#include <stdio.h>
#include <limits.h>
template<size_t Size> struct static_string {char data[Size];};
template<size_t ... Indexes>struct index_sequence {};
template<size_t Size, size_t ... Indexes>
constexpr static_string<sizeof ... (Indexes) + 1> make_static_string(const static_string<Size>& str,index_sequence<Indexes ...>) {return {str.data[Indexes] ..., '\0'};}
constexpr static_string<1> make_static_string() {return {'\0'};}
template<size_t Size, size_t ... Indexes>
struct make_index_sequence : make_index_sequence<Size - 1, Size - 1, Indexes ...> {};
template<size_t Size>
constexpr static_string<Size> make_static_string(const char (& str)[Size]) {return make_static_string(str, make_index_sequence<Size - 1>{});}
template<size_t ... Indexes>
struct make_index_sequence<0, Indexes ...> : index_sequence<Indexes ...> {};
template<size_t Size, size_t ... Indexes>
constexpr static_string<sizeof ... (Indexes) + 1> make_static_string(const char (& str)[Size],index_sequence<Indexes ...>) {return {str[Indexes] ..., '\0'};}
template<size_t Size>
constexpr size_t static_string_find(const static_string<Size>& str, char ch, size_t from, size_t nth) {return Size < 2 || from >= Size - 1 ? UINT_MAX :str.data[from] != ch ? static_string_find(str, ch, from + 1, nth) :nth > 0 ? static_string_find(str, ch, from + 1, nth - 1) : from;}
template<size_t Size>
constexpr size_t static_string_find_0(const static_string<Size>& str, char ch, size_t from, size_t nth) {return Size < 2 || from >= Size - 1 ? 0 : str.data[from] != ch ? static_string_find_0(str, ch, from + 1, nth) :nth > 0 ? static_string_find(str, ch, from + 1, nth - 1) : from;}
template<size_t Size1, size_t ... Indexes1, size_t Size2, size_t ... Indexes2>
constexpr static_string<Size1 + Size2 - 1> static_string_concat_2(const static_string<Size1>& str1, index_sequence<Indexes1 ...>,const static_string<Size2>& str2, index_sequence<Indexes2 ...>) {return {str1.data[Indexes1] ..., str2.data[Indexes2] ..., '\0'};}
template<size_t Size1, size_t Size2>
constexpr static_string<Size1 + Size2 - 1> static_string_concat_2(const static_string<Size1>& str1, const static_string<Size2>& str2) {return static_string_concat_2(str1, make_index_sequence<Size1 - 1>{},str2, make_index_sequence<Size2 - 1>{});}
template<size_t Begin, size_t End, size_t ... Indexes>
struct make_index_subsequence : make_index_subsequence<Begin, End - 1, End - 1, Indexes ...> {};
template<size_t Pos, size_t ... Indexes>
struct make_index_subsequence<Pos, Pos, Indexes ...> : index_sequence<Indexes ...> {};
template<size_t Begin, size_t End, size_t Size>
constexpr static_string<End - Begin + 1> static_string_substring(const static_string<Size>& str) {return make_static_string(str, make_index_subsequence<Begin, End>{});}
template<size_t Begin, size_t Size>
constexpr static_string<Size - Begin> static_string_suffix(const static_string<Size>& str) {return static_string_substring<Begin, Size - 1>(str);}
#define remove_underscore(arg) ([] () __attribute__((always_inline)) {constexpr auto a = static_string_find(make_static_string(arg),'_',0,0) == UINT_MAX? make_static_string(arg):static_string_concat_2(static_string_concat_2(static_string_substring<0,static_string_find_0(make_static_string(arg),'_',0,0)>(make_static_string(arg)),static_string_suffix<static_string_find_0(make_static_string(arg),'_',0,0)+1>(make_static_string(arg))),make_static_string("\0"));return a;}().data)
int main()
{
puts(remove_underscore("_testtest"));
puts(remove_underscore("test_test"));
puts(remove_underscore("testtest_"));
}
mittorn 25.06.2021 16:08 # 0
bormand 25.06.2021 16:16 # 0
А с++17 нельзя пока юзать?
mittorn 25.06.2021 16:35 # 0
bormand 25.06.2021 16:38 # 0
Вай нот, если поддержка старых конпеляторов не нужна?
mittorn 25.06.2021 16:44 # 0
Если для C прокатывает всунуть новый компилятор в тот же рантайм, но на C++ начнутся свистопляски с несовместимостями STL
MAPTbIwKA 25.06.2021 16:45 # +1
А там constexpr нету
mittorn 25.06.2021 16:45 # 0
MAPTbIwKA 25.06.2021 16:49 # 0
bormand 25.06.2021 16:57 # 0
MAPTbIwKA 25.06.2021 16:59 # 0
Это просто самый древний из документированных стандратов ЕМНИП, до этого все просто по книжке херачили.
bormand 25.06.2021 16:47 # 0
По-моему даже стабильный дебиан уже на восьмёрке.
mittorn 25.06.2021 17:02 # 0
bormand 25.06.2021 17:10 # +1
Какой багор )))
j123123 25.06.2021 22:42 # +2
https://github.com/crosstool-ng/crosstool-ng/issues/1476 - там максимальный NDK это r17- можно попробовать более новый NDK прикрутить, но это надо AOSP сношаться видимо.
Да и нафиг вообще GCC если там есть Clang-LLVM?
j123123 25.06.2021 23:42 # +1
(хотя еще есть огрызковые устройства, это вообще дно дна)
MAKAKA 26.06.2021 01:02 # 0
Зачем они взяли говноязык с GC я не знаю, вероятно хотели сэкономить
Лучше бы они сделали как Apple
j123123 26.06.2021 01:20 # 0
MAKAKA 26.06.2021 01:22 # 0
Я вот взял GWT, компильнул его в JS, и хуяк -- у меня "джава как язык" нарисовалась в IOS
j123123 26.06.2021 01:27 # +1
Блядь, какое же говно. А есть еще https://github.com/sstur/js2php какой-то компилятор JavaScript -> PHP. Так можно по цепочке Java->JavaScript->PHP перевести какую-то жабаподелку на PHP, разве не охуительно?
MAKAKA 26.06.2021 01:28 # 0
gologub 26.06.2021 01:48 # 0
типа HTA легко портятся на iPony
npopa6 26.06.2021 08:20 # 0
Добавляем в начало цепочки «JRuby», «Jython», «Haxe» и открываем портал в ад.
Был ещё проект по трансляции кода с языков, поддерживаемых фронтендами «gcc» («C», «C++», «Obj-C», «Fortran», «Ada» etc) в «JVM» через промежуточный код для процессоров «MIPS»:
http://nestedvm.ibex.org/
Правда, он перестал обновляться и поддерживает только «gcc 3.x».
j123123 26.06.2021 01:40 # 0
Думаю что они взяли конкретно Java (как язык) чтоб на ведроид легко можно было перекатить всяких джаваменов, клепавших всякую хуйню на J2ME под кнопочные телефоны.
MAKAKA 26.06.2021 01:46 # 0
Ну вот у Жобса хватило ииц не переманивать J2E питухов, а взять свой язык с OS X. Но правда у него эти самые программисты под OS X уже были (равно как и сама операционка), так что ему было проще
gologub 26.06.2021 01:50 # 0
хотя я бы поспорил насчет востребованности всякого JME барахла
npopa6 26.06.2021 08:29 # 0
Они раскиданы по нескольким гитам, самостоятельно не разберёшься, что качать. «Гугл» рекомендует скачать их программу «repo», которая сама скачает нужную ветку из каждого репозитория и положит в нужную директорию.
Скачал я эту «repo». Завелась не сразу, а после пердолинга. Потребовалось сконфигурировать под неё «git», «python» и ещё кучу софта.
Качал три дня, скачалось сорок гигабайт. Исходников всё ещё не видно, только всякая питушня вроде objects из поддиректории «.git». Прервал процесс.
Есть какой-нибудь лёгкий способ их скачать?
bormand 27.06.2021 08:29 # 0
Х.з., может кто-то на торренты выложил архив с этими исходниками?
npopa6 27.06.2021 09:11 # 0
Я надеялся добыть исходники какой-нибудь кастомной прошивки. Но кастомизаторы обычно выкладывают патчи, а основу (которую нужно патчить) предлагают качать через «repo».
Изучал «полезные советы» по этой «repo». Есть какие-то ключики, чтобы она меньше ненужного качала. Как-то не очень помогло.
Почувствовал себя полнейшим нубом.
defecate-plusplus 27.06.2021 10:24 # +2
Какой багор.
Мы на неделе (ре)билдили ембеддед прыщ на деб-9 под арм64, нам выдали тар на 18 гигов.
А рабочего конфига на кернел не дали.
Оказывается если включить все опции в конфиге ядра, то нихуя не будет работать. Какое тестирование )))
guest6 27.06.2021 10:33 # +3
defecate-plusplus 27.06.2021 10:51 # +1
gologub 27.06.2021 15:15 # 0
booratihno 27.06.2021 11:44 # 0
некоторые опции поди и не включить, если включены другие, бо они взаимоисключающие?
Можно подпирдолица и вручную собрать ядро выбрав нужные опции. Обычно это занимает дня три
guest6 27.06.2021 11:47 # +4
npopa6 27.06.2021 11:51 # 0
defecate-plusplus 27.06.2021 11:47 # +1
я так и написал
только оно не работает - дохнет спустя рандомное время с каким-то рандомным багом
так что на это надо с месяц закладывать, или к вендору идти "дай свой рабочий конфиг, чтобы мы от него отстроились хотя бы, а не брутфорсом блять"
booratihno 27.06.2021 11:49 # +1
какой багор ))
Это наверное специфика ембедед хуиты на arm.
Читать кернелпаники и разбираться то еще удовольствие
npopa6 27.06.2021 11:53 # 0
booratihno 27.06.2021 12:05 # +1
но он же не хардварно перегрружался, а кернелпаниковал, как я понял
то есть нужно брать gdb и смотреть крешдамп, если по стеку не понятно, какой питух упал
а если упало внутри какого-то драйвера, специфичного для конкретной железки, а этот драйвер писал не ты, то и пиздец
defecate-plusplus 27.06.2021 12:10 # +2
причем, там ничего из 18 гб писали мы
только брутфорсить "ага, блядь, если заенаблить вайфай, то пиздец"
это планшетная платформа с тачскрином, рокчип 3399 и 4 гб рам
для которой стало неохота пилить особенный способ дистрибуции, а захотелось, как обычно, docker up -d
но вот незадача, китайское ядро скомпилено без включенного нетфильтр - иптаблес не раб., и при этом слишком старое, чтобы работал подман
хорошо, что это не бизнес-критикал сейчас, чисто на провести эксперимент
guest6 27.06.2021 12:11 # 0
booratihno 27.06.2021 12:12 # 0
defecate-plusplus 27.06.2021 12:14 # 0
Оч удобно )))
npopa6 27.06.2021 12:22 # +2
guest6 27.06.2021 11:50 # 0
npopa6 25.06.2021 16:38 # +1