LINUX.ORG.RU

Избранные сообщения mamboo

Производительность; илитный запил оптимальных реализаций и основы матчасти.

 , , ,

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

Это будет формат для самых маленьких, где я буду показывать как что-то пилится по-пацаночке. Его задача - на примерах пересказать штеудмануал тем, кому лень его читать, но кто очень любит спорить про код, перфоманс и матчасть. Ну и просто интересные наблюдения.

Изначально я хотел написать про то: что такое бесплатные вычисления на примере is_range() + сумма елементов массива, но тут выявилась смешная особенность, поэтому пока без is_range().

Начнём с простого - сумма елементов(float) массива. Как написать её быстро? Обычный крестопоц сделает так:

auto summ = accumulate(begin(vec), end(vec), 0.)

Этот код выдаёт 5.6GB/s(мы всё бенчим в л1д 32килобайта массив). Казалось бы, если бы мы слушали всяких «гуру», которые нам говорят: accumulate() - оптимизирован, «ты что умнее создатели stl"а?», «конпелятор умнее тебе - сам всё делает оптимально», «руками что-то делать слишком сложно и не нужно» - то мы бы там и остались с этими 5.6ГБ, но мы пойдём дальше и поймём почему так, и является ли это тем, что намн ужно.

Но посмотрев на код - он не векторизован:

	addq	$4, %rdx
	vcvtss2sd	-4(%rdx), %xmm2, %xmm2
	vaddsd	%xmm2, %xmm1, %xmm1

Почему? Патамучто это основная флоатпроблема: Он не ассоциативен - флоат не имеет в себе точных представлений всех чисел входящих в диапазон его «представления» т.е. порядкопроблемы.

Поэтому конпелятор НЕ ВЕКТОРИЗУЕТ флоат по умолчанию, ну никак. Даже такую банальщину.

Для решения этих проблем - есть ключик -funsafe-math-optimizations, который входит в -ffast-math, который кладёт на точность при вычислениях. Добавив его мы получаем уже 44.9GB/s.

Но теперь мы получаем ещё одну проблему - надо думать: «как бэ сунуть эту ключик не повредив там, где этот ключик не нужен».

Поэтому ноцанам, которые хотят быстро и не хоятт рандомных жоп из-за тупости конпелятора - пишут всё руками. Допустим на той же сишке это пишется так:

double memadd_autovec(buf_t buf) { //5.609465GB/s, либо 44.969652GB/s с ffast-math
  float * it = buf_begin(buf), * end = buf_end(buf), summ = 0.;
  do {
    summ += *it++;
  } while(it != end);
  return summ;
}

double hsumf(__v8sf v) {
  return (v[0] + v[1] + v[2] + v[3] + v[4] + v[5] + v[6] + v[7]);
}

double memadd_vec(buf_t buf) { //45.652002GB/s и класть на ffast-math
  __v8sf * it = buf_begin(buf), * end = buf_end(buf), summ = {};
  do {
    summ += *it++;
  } while(it != end);
  return hsumf(summ);
}

Т.е. разницы никакой нет, кроме нужной нам реализации горизантального сложение вектора. Когда я говорил пацану: «векторную сишку для написания быстрого кода юзать намного проще, чем плюсы» - поцан нипонимэ, да и любые пацаны скажут - ну дак с -ffast-math оба выдают по 45гигов - нахрен эта сишка нужна?

А вот зачем:

double memadd(buf_t buf) { //132.878440GB/s
  __v8sf * it = buf_begin(buf), * end = buf_end(buf), summ = {};
  do {
    summ += *it++;summ += *it++;summ += *it++;summ += *it++;
  } while(it != end);
  return hsumf(summ);
}

Это называется пацанский анролл копипастой, а вот заставить конпелятор нормально что-то разанролить очень сложно.

Если бы мы слушали всяких «гуру», которые нам вещают: «анрол говно и не нужен» - мы бы так и седели с 45-ю гигами, а так мы сидим с 132.878440GB/s. Т.е. анролл нам дал немного не мало ~300%.

Но основная мысль, которую толкают всякие «гуру» - это не надо следить за тактами/считать такты и прочее. Но мы о5 сделаем наоборот и посмотрим что будет.

Т.к. наш юзкейс упирается на 99% в throughput и дёргается одна инструкция, то нам достаточно просто считать теоретическую производительность для моего камня. 4.5(частота камня)*8(т.е. у нас камень с avx, то там вектор 32байта, либо 8флоатов.)*1(throughput нашей инструкции - в данном случае vpaddps из интел мануала). Т.е. 36гигафлопс, либо ~144гига. Т.е. мы сняли овер 90% теоретической производительности - остальные 10% у нас ушли в наши циклы, всякие горизонтальные суммы вектора и прочее, ну и конечно же чтение данных из кеша.

Но самое смешное - на моём хасвеле умножение имеет throughput 0.5 - т.е. на хасвеле умножение быстрее сложения. Это новая забористая трава у интела.

Казалось бы - какой жопой сложнее оказалось медленнее умножения - а вот так, на всяких штеудах производительность уже давно зависит не от каких-то технических возможностей, а от маркетинга и хотелок.

Поэтому очень смешно слушать, когда какие-то пацаны говорят: «float point имеет такую же производительность как и инты» - нет, оно имеет такоу же производительность лишь по причине того, что на штеуде инты тормазят так же, как и float.

И чтобы окончательно в этом убедится - мы взглянем на fma(вариации умножения со сложением/вычитанем), которые имеют throughput 0.5 - да, да - на хасвеле умножение+сложение в 2раза быстрее просто сложения. Это уже не просто трава - это что-то принципиально новое.

У целочисленного сложения же throughput 0.5 и казалось бы, если мы поменяем в нашей функции float на int - у нас будет сложение работать в 2раза быстрее, но это не так. Оно выдаёт те же 130гигов, а почему?

Вообще у камня есть такая фича, допустим у нас:

add $1, %reg0//вот тут инструкция add залочит регистр reg0
add $1, %reg0//а эта инструкция уйдёт в лок до особождения предыдущей инструкцией регистра reg0

Чтобы такой жопы небыло - есть специальная фича:

add $1, %reg0//lock reg0
add $1, %reg0//И тут вместо того, чтобы уйти в лок - камень вместо reg0 даёт инструкции любой свободный регистр.

Эта фича называется прееименование регистров, либо как-то так - мне лень гуглить.

Дак вот штука в том, что фича работает через жопу. Мне лень читать мануал и искать почему так, но штука в том, что она ограничивает throughput. На умножении и целочисленном сложении она огранивает throughput c 0.5 до 1.

И вот я решил заюзать сложении через fma:

__v8sf fmaadd(__v8sf a, __v8sf b) {
  return _mm256_fmadd_ps(_mm256_set1_ps(1.), a, b);// a + b * 1. == a + b.
}

double memadd_fma(buf_t buf) {
  __v8sf * it = buf_begin(buf), * end = buf_end(buf), summ = {};
  do {
    summ = fmaadd(summ, *it++);
  } while(it != end);
  return hsumf(summ);
}

Но меня ждала жопа: 27.347290GB/s, причем не анролл и ничего не помогал. Я уж подумал, что мануал наврал, но позже до меня допёрло: у неё latency 5тактов и ((4.5×8)÷5)×4 ~= 29гигов - т.е. я получаю производительность с её latency, но какой жопой оно так?

Потом я вспомнил, что гцц гинерит анрольный код вида:

add $1, %reg0
add $1, %reg0
//а не
add $1, %reg0
add $1, %reg1

Т.е. на неё вообще не работает переименовывание регистров - и инструкции постоянно в локе. Я это проверил и оказался прав. Ну и я написал такой мемадд:


__v8sf fmaadd(__v8sf a, __v8sf b) {
  return _mm256_fmadd_ps(_mm256_set1_ps(1.), a, b);
}

inline void fma_10way_finality(__v8sf * cache, __v8sf * it, __v8sf * end) {
  switch(end - it) {
    case 8:
      *(cache + 7) = fmaadd(*(cache + 7), *(it + 7));
      *(cache + 6) = fmaadd(*(cache + 6), *(it + 6));
    case 6:
      *(cache + 5) = fmaadd(*(cache + 5), *(it + 5));
      *(cache + 4) = fmaadd(*(cache + 4), *(it + 4));
    case 4:
      *(cache + 3) = fmaadd(*(cache + 3), *(it + 3));
      *(cache + 2) = fmaadd(*(cache + 2), *(it + 2));
    case 2:
      *(cache + 1) = fmaadd(*(cache + 1), *(it + 1));
      *(cache + 0) = fmaadd(*(cache + 0), *(it + 0));
    case 0:
      break;
    default: error_at_line(-1, 0, __FILE__, __LINE__, "bad_aligned");
  }
}

double memaddfma_10way(buf_t buf) {
  __v8sf * it = buf_begin(buf), * end = buf_end(buf), summ = (__v8sf){};
  __v8sf * cache = (__v8sf[10]){{}};
  uint64_t i = 0;
  while((it += 10) <= end) {
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    *(cache + i) = fmaadd(*(cache + i), *(it - i - 1));++i;
    i = 0;
  }
  fma_10way_finality(cache, (it - 10), end);
  summ = (*(cache + 0) + *(cache + 1) + *(cache + 2) + *(cache + 3) +
	  *(cache + 4) + *(cache + 5) + *(cache + 6) + *(cache + 7) +
	  *(cache + 8) + *(cache + 9));
  return hsumf(summ);
}

Пришлось хреначить финалити, ибо тут «анролл» на 10, а почему на 10 - для максимального throughput"а - надо, чтобы каждый каждый регистр юзался через 5тактов - т.е. 10регистров.

И вся эта порятнка нужна для борьбы с тупостью конпелятора.

Это уже: 214.167252GB/s(раельно там в районе 250 - просто мой бенч говно). 107 гигафлопс на ведро. Из теоретических 144, но тут уже влияние кеша. Причем 50+ из которых выкидываются и просто бесплатные.

Теперь вопрос к пацанам - что нам дадут эти гагфлопсы, когда у нас будет массив не 32килобайта, а 32мегабайта? Зачем нужно выживать максимум, когда скорость памяти отсилы 20-30гигабайт и нам хватит даже С++ кода с ffast-math?

Ну и призываются упомянутые мною пацаны: mv - этот тот експерт, что вещал про «руками переименовывать регистры не надо» и «анрол ваще ненужен», emulek вещал про ненужность счёта тактов, и не понимал что такое «беслпатно», AIv - не понимал в чем проблема плюсов, ck114 - так же не понимал в чем проблема плюсов.

Бенчи: https://gist.github.com/superhackkiller1997/606be26fa158ef75501d - вроде я там ничего не напутал.

P.S. - не выпиливайте пж, пусть пацаны «нужно» или «не нужно». Мне интеерсно. Ну и там рекомендации пацанов.

Carb_blog
()

Сделать из vim C++ IDE, подскажите, пожалуйста, список дополнений

 ,

Предъистория: несколько раз пытался пользоваться vim и каждый раз бросал. Всякий раз он мне казался неудобным. В этот раз плюнул на стандартные настройки, перенастроил его по-нормальному и да, теперь им сходу стало можно пользоваться как редактором текста. В частности: перенёс перемещение курсора с hjkl на esdf и esc на shift+space. Также, курсор при движении влево-вправо теперь не останавливается на конце строки.

Вимом стало возможно нормально пользоваться! Теперь, я хочу затюнить его под С++ кодинг.

Для этого мне минимально необходим следующий функционал:

  • переключение между заголовочником и исходником,

  • переход к определению функции под курсором,

  • переход к объявлению функции под курсором,

  • переход к предыдущей позиции курсора (не используя закладки),

  • плагин для содержащания файлов проектах,

  • переход к файлу, указанному директивой include под курсором,

  • аналог вкладок в других редакторах и переключение между ними,

  • подсветка синтаксиса,

  • подсветка всех слов аналогичных тому, что под курсором (по клавише),

  • инкрементальный поиск,

  • поиск во всех файлах проекта с подсветкой найденного,

  • переименование метода класса в исходнике с автоматическим изменением сигнатуры в заголовочнике,

  • astyle (ну это просто),

  • автодополнение (уже подсказали в другой теме, не пишите про него),

  • дебаггер (с вычислением символа под курсором и переходом из одной точки дебага в другую),

  • листинг ошибок компиляции со списком для удобного перехода на строку с ошибкой (такая штука, которая внизу экрана любой обыяной IDE).

  • Ну и, конечно, сохранение/открытие проекта, быстрый запуск компилятора и скомпилированного файла.

Ну вот и всё. Вроде ничего не забыл.

next_time
()

Расскажите про barman, пожалуйста

 ,

Всем привет,

Пытаюсь настроить бэкапы PostgreSQL с помощью Бармана, но никак не могу понять разницу между сценарием 1 и сценарием 1b на их сайте.

По сути я хочу сделать вот такую структуру:

- 2019/07/10
  - wal-1
  - wal-2
  - wal-3
  - wal-n

- 2019/07/11
  - wal-1
  - wal-2
  - wal-3
  - wal-n

То есть грубо говоря чтобы в «начале» дня делался полный бэкап, а затем просто сохранялись wal, но у них на сайте как то крайне непонятно все написано.

Подскажите, пожалуйста, если кто сталкивался.

alex07
()

Свободное ПО в электронике.

Многое хочется написать. Во-первых, про разрешение 800х600 скажу, чтобы сразу не придирались. У меня сейчас стоит карта S3 Trio64V2, для которой я дорабатываю драйвер для Xorg. Так что низкое разрешение -- это рабочий момент.

На экране изображена моя текущая деятельность -- разработка инфракрасного датчика. Весь фетиш в том, что я, проявив героизм против фраз "Да что ты мучаешься! Поставь OrCAD! Делать тебе нечего?", использовал исключительно свободное ПО. Схему я создавал в gschem (проект gEDA). Трассировка ручками осуществлялась в PCB. Просмотр результатов перед передачей в производство -- gerbv. И вот результат труда вы видите на экране: экспериментальная партия однослойных печатных плат (25 шт.) с маской и шелкографией, изготовленная в Зеленограде. Проект передавался в производство в формате Gerber RS-274X, файл для сверлильного станка в формате NC drill/Excellon. У технолога не возникло ни единого вопроса, кроме способа разделки плат (фрезерование или скрайбирование).

Дистрибутив Debian. Разработка начиналась в пакетах, которые идут с дистрибутивом (последние стабильные срезы), но потом я перешел на версии CVS (только опакетил для Etch), так как предполагаю помогать проекту. Там огромнейший фронт работ по недостаткам, глюкам и фичам. В планах также написание русскоязычного руководства по использованию пакета программ: от проекта до производства. Но когда это буду делать, я еще не знаю. Поймите, времени очень мало.

Резюме: свободное ПО (с соотв. трудностями) можно использовать при производстве электроники. Предлагать переходить на это ПО людям, сто лет сидящим на ворованном OrCAD, PCAD и пр., я не советую. Пока к людям не придет осознание (либо приказ сверху), что использовать ворованный, дорогой продукт -- это очень плохо и опасно, то изменить что-то не получится. Поскольку я сам для себя хозяин в данном вопросе, и ко мне в мастерскую никакая сволочь с советами не лезет, то мне проще.

Zubok
()

Операционная система GNU Emacs завоевывает десктоп! :)

 , ,

Операционная система GNU Emacs получила новые возможности! Собрал волю в кулак и написал библиотеку, которая практически полностью реализует протокол X11. Библиотека незамысловато называется x11 и написана на чистом Emacs Lisp, но пока имеет статус technical preview, хотя в принципе уже можно писать что-то реальное. За основу пока взяты описания протокола на XML из проекта XCB, которые разворачиваются в реализацию. В результате имеем практически все расширения. Работа с протоколом осуществляется в асинхронном стиле подобно XCB. Чего пока нет:

  • MIT-SHM. Запросы реализованы, но работать через разделяемую память из операционной системы Emacs мы пока не можем, поэтому Будем через сокет закидывать. Тем более, что разница в скорости, говорят (видел где-то в инете замеры), не такая сумасшедшая.
  • XKB. Просто забыл реализовать пару конструкций XML, используемых для описания этого расширения. Это я скоро реализую, поэтому расширение будет работать в полном объеме.
  • Big-requests. Тоже будет реализовано. Расширение содержит всего один запрос. Он реализован. Но именно для этого расширения надо несколько перелопатить процедуры формирования запросов к серверу X, так как подсчет размеров запросов изменяется с этим расширением.
  • GLX. Огромнейший пласт. За него возьмусь сильно позже. Тут же еще надо полностью сгенерировать протокол GL, а он очень обширный.

Остальные расширения вроде бы должны работать, если их описания правильные и если я что-то не упустил принципиального. Я работу всех расширений даже не проверил, так как очень спешу радостью поделиться. :)

(размер экрана уменьшил до 1024x768, чтобы скриншот поменьше был)

На скриншоте сверху робкая демонстрашка в стиле LSD основного протокола X11 (Core protocol). Ну с arcs, rectangles и core fonts все и так понятно. А вот как выведены фотографии? Я пока не настолько крут, чтобы писать растеризацию jpg и png на Emacs Lisp. Пораскинув мозгами, пошел смотреть, чем может помочь ImageMagick. Оказалось, есть там возможность получить дамп картинки в нужном формате. Так и сделал: надо отобразить картинку - дергаем stream, она нам отдает дамп в буфер, мы его отсылаем в сервер X. «Привет, Isden» написана мышкой. Демка отслеживает событие motion-notify и рисует маленький квадратик под указателем. По кнопке «q» - выход (отслеживается событие key-press)

На скриншоте снизу робкая и неумелая демонстрашка расширения XRender. Тоже в стиле LSD. На ней мы видим linear gradient, radial gradient, треугольник и отрисовку сглаженных окружностей. Окружности состоят из трапезоидов. Алгоритм рассечения (tessellation) я применил первый, какой мне пришел в голову - горизонтальными трапециями. Какая есть проблема? Сглаженный текст! Что-то мне писать растеризацию TrueType или Type1 на Emacs Lisp не улыбается. Есть идея написать программку на Си с помощью Xft, которую я буду что-то просить растеризовать, а она результат будет отдавать в Emacs. То есть примерно как и с ImageMagick поступить.

Надо хорошенько переобдумать API библиотеки, чтобы его заморозить. При этом надо учесть потенциальные и вероятные будущие новшества в Emacs и в библиотеке, чтобы людям не пришлось переписывать то, что написано ранее. Есть недостатки в Emacs, которые реально мешают и раздражают. Преодолимы, конечно, но это будут костыли. Если интересно, то потом поясню, а то уже и так много воды налил.

Так что есть потенциальная возможность воплотить мечту atoku в жизнь. :)

Традиционная ссылка на обоину: #888888. Старую удалил, так как она надоела, а новую еще не искал. Этот серый цвет реально бесит. :)

Zubok
()

Автоматическое формирование отчётов в LaTeX.

 , ,

Пока оформлял отчёт по НИРу, возникла идея — всё это дело автоматизировать. Есть БД с некими результатами. Полагаю, что нужно скриптом собирать определённую выборку из БД, и на основании выборки (за дату или период) формировать файлы данных для gnuplot и .tex-файлы, которые потом кормить pdflatex'у.

Подтолкните в какую сторону смотреть. Как формировать tex-файл по определённым условиям.

arbyz
()

Посоветуйте, что почитать / посмотреть по нейросеткам

 deeplearning4j, image recognition, , ,

А конкретнее - хочу понять, как распознавать изображения и «понимать», что на них есть.

Я в этом полный никто, поэтому хочется что-то без заумных высказываний, понять которые можно только имея какой-то багаж знаний в этой области.

И да, хочется без привязки к python и TensorFlow, потому что писать буду, вероятей всего, не на них, а на всеми-не-любимой java и Deeplearning4J.

bvn13
()

зависание файловой 1С

 ,

Добрый времени суток. Стоит файловая 1С под Ubuntu - 18.04. Периодически происходит зависание(появляются часики и висит). Приходится закрывать и открывать. Раньше все было нормально. Может кто сталкивался? Или в базе проблемы?

Заранее благодарен...

vadim55_242
()

Второй vpn пускается через первый и от этого тормозит. Как пофиксить?

 ,

Я по умолчанию всегда держу openvpn соединение включенным, используя его как default gateway, так как живу в тоталитарной стране с цензурой интернета. Иногда мне надо подключать openconnect vpn для доступа к компьютерному кластеру. Если я делаю это при включенном openvpn соединении, соединение с кластером тормозит. Я предполагаю, что трафик опенконнекта идет через тот самый default gateway. Как пофиксить? Бонусные очки за решение, использующее GUI нетворкменеджера.

hlebushek
()

Как сменить X11-шрифт по умолчанию?

 , ,

Хочу сменить для программы, в ней прописан системный по умолчанию, смотрел инструкции по настройке шрифтов, но там я так и не нашел, где же именно выставлять тот шрифт, который будет использоваться по умолчанию. В xfontsel я нашел удобный для себя шрифт, но куда его прописать не понял.

https://ibb.co/QNJKkks

FuManchu
()

Информация по t440p

 , ,

Нашёл отличную документацию по покупке и апгрейду Lenovo Thinkpad T440p, который до сих пор ещё даст прикурить многим моделям по соотношению цена/качество.

https://octoperf.com/blog/2018/11/07/thinkpad-t440p-buyers-guide/

Deleted
()

groff и руские буквы

 ,

Понадобилось написать один документик, и я решил юзать groff, так как он уже был, а latex большой

С английскими буквами все норм, а вот с русскими все не так хорошо

Вот пример https://imgur.com/a/d9HXfvy

groff всегда выдает ошибку

:0: macro error: diversion open while ejecting page (recovering)

Макросы: ms

Дистр: Gentoo

clstrmstr
()

Почему одни и те же шрифты выглядят по разному в Убунту 16.04 и Дебиан 9.8?

 , , ,

Убунту 16.04 https://imgur.com/a/GbnUG1o

Дебиан 9.8 https://imgur.com/a/SNQw7mP

Шрифты были скопированы с заменой из мате-Убунту 16.04 в мате-Дебиан 9.8 но выглдят они поразному.

Deleted
()

Посоветуйте хорошую книгу по Haskell для начинающих.

 ,

Желательно чтобы с Hello World начали, а то в тех книгах которые я читал, они сразу начинают со сложных примеров, а дальше идёт запутка.

ITerator
()

Ищу туториал или мануал

 xbase++

В поисках доков(кроме офф сайта http://donnay-software.com/ds/links.htm ) по этому интересному собрату Clipper

pinachet
()

ThinkPad T480 c классической клавиатурой.

 , ,

Похоже, что назрел новый мод для ThinkPad'ов: https://old.reddit.com/r/thinkpad/comments/a9xhx3/t25f_frankenpad_quad_core_c...

Для Ъ: Матплату и экран от T480 запихнули в допиленный корпус от ThinkPad T25(T470 c классической клавиатурой).

Cast t184256, тут даже японская раскладка.

BceM_IIpuBeT
()

HP Chromebook 14-q002er [Quanta YO1] восстановление Chrome OS

 ,

Предыстория аппарата неизвестна.
Включается и пишет «Chrome OS is missing or damaged», и предлагает вставить флешку с хромосю для восстановления. После верификации an unexpected error has occurred и на этом всё. Флешки пробовал разные, писал по нескольку раз официальной утилитой. Лог из консоли сейчас приложу.

Есть какие идеи, или можно уже менять память? Можно на нём Livecd какой-нибудь запустить? Не нашёл меню загрузки.

jewy
()

Common Lisp && Gamedev

 , ,

Делал карту мечты в cs;go но лимит убил мечты,решил сделать свою каэску без всяких лимитов.На графику вообще пофиг,лишь бы текстурки,модельки и примитивное освещение.На клиенте только рендер по сути из тяжелого.Физика вся на сервер.

Суть: Пробовал писать на Perl.Удобно прикольно но библиотек нету. Пробовал на С но нудно пока что,как сюда подходит лисп? Меня интересует производительность,сборка игры под винду и скорость разработки (может быть есть подводные?).

Сервер будет на плюсах так как bullet-physics.Проект для души и меня+друзья,поэтому языки для души.

linuhs_user
()

Retargetable C complier конечно, крут, а новее есть?

 , ,

Захотелось мне почитать про устройство и жизнь простого советского человека небольшого Си-компилятора. В качестве подопытного я выбрал Tiny C Compiler от Fabrice Bellard.

В качестве учебного пособия, для общего ознакомления с сабжем DELIRIUM посоветовал Retargetable C compiler Design and Implementation, но чёй-то от книги несёт нафталином... поновее ничего не написано? Книгу дракона не предлагать :-)

Twissel
()

Мультиплатформенный GUI к утилите управления кластером серверов 1С:предприятия

 , ,

Группа Open Source

Ввиду необходимости управления кластерами серверов 1С:предприятия под linux, была написана данная штука. Позволяет полностью управлять кластером, информационными базами, и так далее, функциональность повторяет родную оснастку от 1С (но используется консольная утилита rac и сервис ras). Работает (тестировалось) в linux и win. Написано на tcl/tk. Скриншот: https://nuk-svk.ru/wp-content/uploads/2018/08/racgui_1_0_linux-1024x792.png Скачать можно по ссылкам: https://nuk-svk.ru/download/rac-gui-linux-version https://nuk-svk.ru/download/rac-gui-windows-version

>>> Git репозитарий (bitbucket.org)

svk28
()