- 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_"));
}
А с++17 нельзя пока юзать?
Вай нот, если поддержка старых конпеляторов не нужна?
Если для C прокатывает всунуть новый компилятор в тот же рантайм, но на C++ начнутся свистопляски с несовместимостями STL
А там constexpr нету
Это просто самый древний из документированных стандратов ЕМНИП, до этого все просто по книжке херачили.
По-моему даже стабильный дебиан уже на восьмёрке.
Какой багор )))
https://github.com/crosstool-ng/crosstool-ng/issues/1476 - там максимальный NDK это r17- можно попробовать более новый NDK прикрутить, но это надо AOSP сношаться видимо.
Да и нафиг вообще GCC если там есть Clang-LLVM?
(хотя еще есть огрызковые устройства, это вообще дно дна)
Зачем они взяли говноязык с GC я не знаю, вероятно хотели сэкономить
Лучше бы они сделали как Apple
Я вот взял GWT, компильнул его в JS, и хуяк -- у меня "джава как язык" нарисовалась в IOS
Блядь, какое же говно. А есть еще https://github.com/sstur/js2php какой-то компилятор JavaScript -> PHP. Так можно по цепочке Java->JavaScript->PHP перевести какую-то жабаподелку на PHP, разве не охуительно?
типа HTA легко портятся на iPony
Добавляем в начало цепочки «JRuby», «Jython», «Haxe» и открываем портал в ад.
Был ещё проект по трансляции кода с языков, поддерживаемых фронтендами «gcc» («C», «C++», «Obj-C», «Fortran», «Ada» etc) в «JVM» через промежуточный код для процессоров «MIPS»:
http://nestedvm.ibex.org/
Правда, он перестал обновляться и поддерживает только «gcc 3.x».
Думаю что они взяли конкретно Java (как язык) чтоб на ведроид легко можно было перекатить всяких джаваменов, клепавших всякую хуйню на J2ME под кнопочные телефоны.
Ну вот у Жобса хватило ииц не переманивать J2E питухов, а взять свой язык с OS X. Но правда у него эти самые программисты под OS X уже были (равно как и сама операционка), так что ему было проще
хотя я бы поспорил насчет востребованности всякого JME барахла
Они раскиданы по нескольким гитам, самостоятельно не разберёшься, что качать. «Гугл» рекомендует скачать их программу «repo», которая сама скачает нужную ветку из каждого репозитория и положит в нужную директорию.
Скачал я эту «repo». Завелась не сразу, а после пердолинга. Потребовалось сконфигурировать под неё «git», «python» и ещё кучу софта.
Качал три дня, скачалось сорок гигабайт. Исходников всё ещё не видно, только всякая питушня вроде objects из поддиректории «.git». Прервал процесс.
Есть какой-нибудь лёгкий способ их скачать?
Х.з., может кто-то на торренты выложил архив с этими исходниками?
Я надеялся добыть исходники какой-нибудь кастомной прошивки. Но кастомизаторы обычно выкладывают патчи, а основу (которую нужно патчить) предлагают качать через «repo».
Изучал «полезные советы» по этой «repo». Есть какие-то ключики, чтобы она меньше ненужного качала. Как-то не очень помогло.
Почувствовал себя полнейшим нубом.
Какой багор.
Мы на неделе (ре)билдили ембеддед прыщ на деб-9 под арм64, нам выдали тар на 18 гигов.
А рабочего конфига на кернел не дали.
Оказывается если включить все опции в конфиге ядра, то нихуя не будет работать. Какое тестирование )))
некоторые опции поди и не включить, если включены другие, бо они взаимоисключающие?
Можно подпирдолица и вручную собрать ядро выбрав нужные опции. Обычно это занимает дня три
я так и написал
только оно не работает - дохнет спустя рандомное время с каким-то рандомным багом
так что на это надо с месяц закладывать, или к вендору идти "дай свой рабочий конфиг, чтобы мы от него отстроились хотя бы, а не брутфорсом блять"
какой багор ))
Это наверное специфика ембедед хуиты на arm.
Читать кернелпаники и разбираться то еще удовольствие
но он же не хардварно перегрружался, а кернелпаниковал, как я понял
то есть нужно брать gdb и смотреть крешдамп, если по стеку не понятно, какой питух упал
а если упало внутри какого-то драйвера, специфичного для конкретной железки, а этот драйвер писал не ты, то и пиздец
причем, там ничего из 18 гб писали мы
только брутфорсить "ага, блядь, если заенаблить вайфай, то пиздец"
это планшетная платформа с тачскрином, рокчип 3399 и 4 гб рам
для которой стало неохота пилить особенный способ дистрибуции, а захотелось, как обычно, docker up -d
но вот незадача, китайское ядро скомпилено без включенного нетфильтр - иптаблес не раб., и при этом слишком старое, чтобы работал подман
хорошо, что это не бизнес-критикал сейчас, чисто на провести эксперимент
Оч удобно )))