Ненаписанный языг программирования "Превед!".

Концепция строк.

Во всех существующих ЯП я испытываю проблему с "прожорливостью" строк, во всех, кроме си. Там их тупо нет. Но возникает попоболь манипулирования с массивами чаров. Строка - это всегда структура, как правило с массивом букв и длинной строки. Структуры аллоцируются в куче, порождая громадный своп в процессе их эксплуатации и часто являются самым узким местом как по потреблению памяти, так и по производительности, будучи помещенными в бесконечный цикл, чтения из сокета, например. Также, операции взаимодействия с библиотеками написанными на си - порождают операции копирования из структур в массив и обратно, зачастую сводя на нет преимущество библиотеки на си. Например в гоу, я просто вынужден их (строк) избегать, для избегания проблемы аллокаций и GC. В паскале подошли к проблеме радикально, зарезервировав первый байт под длину строки, но ограничив максимальный размер строки 255 байтами. Я думаю истина может быть посередине. При операциях с числами, практика резервирования типов в зависимости от размерности числа - общераспространенна и никого не смущает. В большинстве языков мы имеем int8, int16..int64 - и это правильно, так как на миллионных картеджах каждый байт превращается в гигабайт. Суть моей идеи состоит в следующем:

- Мы храним информацию о размере строки - непосредственно в массиве char
- Мы сохраняем нулевой байт в конце строки, для избежания memcopy при передаче в си и обратно
- Таким образом мы существенно экономим память, за счет отказа от структур и имеем все преимущества структур

Как это реализовано. Строки бывают следующих типов string8, string16, string32 и string.
string - является 64 битной строкой, и для 64 битов мы опускаем разрядность ( по аналогии можно поступить с int)
Допустим я хочу записать строку 'hello', в типе данных string8 она будет закодирована как в паскале:
5hello\0
где: 5 - длина строки, uint8, это первый байт (8 бит), затем строка и нултерминейтед байт, чтобы при передачи в си - можно было передать адрес не нулевого, а первого чара, без дополнительных конвертаций.

В случае 64 битной строки - у нас будет зарезервировано 8 байт под размерность.

Аллоцировать же память я предлагаю степенями двойки, следующая степень двойки, в которую поместится этот массив. Те при аллокации массива под строку hello в string8 - нам необходимо аллоцировать 5+2= 7, 2^3=8
Почему мы выравниваем память? Захваченную память по мере высвобождения проще переиспользовать, если она выровнена по степеням. Допустим я захожу создать строку pole - если память от hello уже высвобождена - я могу зареюзать любой слот подходящего размера (8байт) в данном случае. Не рвя память на "куски/фрагменты". Ну и хранить размер деаллоцированный области можно компактно в одном байте(размер - 2^256).

15.11.2019 Комментарии Telegram

Страдал тут хуйнёй на выходных. Это телеграм в консоли. Точнее шляпа какая-то

13.11.2019 Комментарии Telegram

Меня тут попросили написать должностную инструкцию для математика. Делегировал этот таск на нейросети.

Зашел сюда: https://talktotransformer.com/
И ввел начало: Job description math
Оно сгенерило.

Потом перевел гугл транслейтом, вот че получилось:

Описание работы

Математически ориентированная инженерная работа с акцентом на развитие математических навыков и решение задач. Человек будет отвечать за анализ и анализ данных из различных дисциплин и применение математической теории и математического моделирования и / или методов моделирования. Предполагается, что этот человек сможет разрабатывать и реализовывать математические решения для проектирования и / или реализации сложных технических систем. Человек также может быть вовлечен в разработку, создание и / или реализацию математических систем. Человек обеспечит высокий уровень производительности и обеспечения качества при использовании математики при проектировании, разработке и / или реализации сложных систем и других инженерных задач.

Основные функции

Разрабатывать, документировать, анализировать и применять математические модели и / или математические концепции. Разработка, документирование и / или анализ решения математических задач. Оцените и примените математический анализ. Понимать и применять математические концепции в задачах проектирования, разработки и / или реализации

12.11.2019 Комментарии Telegram

Вчера выпили 2 бутылки коньяка.

По количеству дней, которые https://github.com/recoilme/b52 стоит на проде)

Около 3млн записей. Сервер жрет ~ 1,5 Gb, из которых 1,1 Gb - cache. Latency ~ 2ms.
Read/write ~ 100 тысяч/сек под нагрузкой. База запущена в режиме master/slave.
На каждом инстансе около 1,5k активных клиентов.

Я понимаю что это скучно и неинтересно, но пока писать мне больше неочем, простите)

31.10.2019 Комментарии Telegram

Забросил все проекты. Отписался от всех каналов. Забил на личную жизнь. Пишу базу данных.

25.08.2019 Комментарии Telegram