LINUX.ORG.RU

Ответ на: комментарий от user_id_68054

но пока-что на моём Эльбрусе они не работают

Эльбрусовский компилятор собирает ядро, которое использует гнутые расширения. Так что ищи лучше.

ox55ff ★★★★★
()
Ответ на: комментарий от EXL

фронтенд компилятора которой используют сотрудники МЦСТ, на своей странице заявляет о поддержке диалекта GNU C, пруф: https://www.edg.com/c

список поддерживаемых расширений — где? (или хотя бы список «простите ребята, вот <это> мы пока-что не поддерживаем»)

а вот список расширений всего какие есть в GNU-C:

https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html#C-Extensions

начнём пожалуй с «Nested Functions» (с возможностью выпрыгивать из них во внешнюю функцию по заведомо задекларированному __label__ )

user_id_68054 ★★★★★
()
Ответ на: комментарий от ox55ff

Эльбрусовский компилятор собирает ядро, которое использует гнутые расширения. Так что ищи лучше.

GCC для «Эльбруса» (комментарий)

1. все вот эти расширения использует ядро?

https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html#C-Extensions

2. версия ядра-то хоть знаешь какая щаз уже?

mainline=4.19 stable=4.18.16

на Эльбрусе 4.10

вот угадай — «могу ли я себе туда скомпилировать посвежее?»

user_id_68054 ★★★★★
()
Последнее исправление: user_id_68054 (всего исправлений: 1)
Ответ на: комментарий от user_id_68054

список поддерживаемых расширений — где?

Только непонятно, почему ты спрашиваешь это здесь у нас, а не там у них: https://www.edg.com/contact

с возможностью выпрыгивать из них во внешнюю функцию по заведомо задекларированному __label__

Какой ужас. Надеюсь, это не относилось к утверждению «гнутые расширения позволяют не переходить на C++».

на Эльбрусе 4.10

Похвально для сотрудников МЦСТ.
Я думал там до сих пор 3.x или вообще 2.6.x. А там уже и Java 8 и C++11. Небось скоро и Rust завезут (точнее LLVM).

EXL ★★★★★
()
Ответ на: комментарий от EXL

Похвально для сотрудников МЦСТ.

здесь я тоже был удивлён

user_id_68054 ★★★★★
()

У меня есть уже универсальная сборка быстрая я аж засомневался что что до этого все тормозило все вот эти подменюшки, свистопляски и прочие ингридиенты я думаю подойдет к эльбрусу раз в kvm набрасывал основную оболочку

anonymous
()
Ответ на: комментарий от redgremlin

За 20+ лет (история EPIC началась в 1989) за дофигальярд убитых енотов две весьма известные ИТ компании (при участии и сообщества — gcc же умеет ia64) не осилили.

При этом VLIW вполне себе рулит и педалит в видеокартах, аппаратных видеодекодерах и прочем специализированном железе

annulen ★★★★★
()
Ответ на: комментарий от annulen

При этом VLIW вполне себе рулит и педалит в видеокартах

И как оно, в 2009?

redgremlin ★★★★★
()
Ответ на: комментарий от EXL

Какой ужас. Надеюсь, это не относилось к утверждению «гнутые расширения позволяют не переходить на C++».

я тебе вообще довольно базовую конструкцию описал.

и если ты вспомнишь что в Си нет эксепшинов — то наверно я должен напомнить тебе и про setjmp()/longjmp() (а для них же и volatle переменные запросто могут потребоваться, которые ты должен НЕ забыть САМ описать как volatile — во избежание undefined behaviour, о которых тут упоминали при разговоре про -O3)

так что ад который могбы потребовпться — превышает на порядок твои негодования от прыжков между функциями на стеке :-) ..

и вообще — давай я у тебя лямбду и функтор отбиру из C++ , обозвав их как «ненужны, можно написать программу и без них»..

всяких полезных штук вообще полно в GNU-C — и уже теперь нет уверенности, что авторы (и сочувствующие) LCC не назвали очередную из них словом «ненужно».

user_id_68054 ★★★★★
()
Ответ на: комментарий от alexanius

> пруфы на что? на то как сборка 11 версии постгреса падает при попытке собраться с jit ?

Что конкретно падает, с какой формулировкой?

разве не очевидно с какой? :-)

$ ./configure --with-llvm
checking build system type... e2k-unknown-linux-gnu
checking host system type... e2k-unknown-linux-gnu
checking which template to use... linux
checking whether NLS is wanted... no
checking for default port number... 5432
checking for block size... 8kB
checking for segment size... 1GB
checking for WAL block size... 8kB
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for g++... g++
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking for gawk... gawk
checking for llvm-config... no
checking for llvm-config-7... no
checking for llvm-config-6.0... no
checking for llvm-config-5.0... no
checking for llvm-config-4.0... no
checking for llvm-config-3.9... no
configure: error: llvm-config not found, but required when compiling --with-llvm, specify with LLVM_CONFIG=
user_id_68054 ★★★★★
()
Ответ на: комментарий от alexanius

> или будем соревноваться по количеству if-в-секунду Эльбруса с rasspberry-pi ?

Можно, думаю малина продует :)

да, действительно, малинка продула :-) ..

снимаю шляпу!

написал сортировку пузырьком — и Малинка продула.. сортировку позырьком — ну потому что незнал что можно проверить (ну с учётом того что мои-то «полезные» программы скомпилировать я не могу на Эльбрусе — поэтому пришлось выдумывать «не полезные»)

// to compile:
//          gcc -Wall -Wextra -O3 -funsafe-math-optimizations -o bubble-lab bubble-lab.c
//      or
//          gcc -Wall -Wextra -O3 -funsafe-math-optimizations -DCANNOT_RANDOM -o bubble-lab bubble-lab.c

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#ifndef CANNOT_RANDOM
#include <sys/random.h>
#endif

#define VECTOR_SIZE 16
#define RANDOM_FLOAT_QUALITY 10

typedef float float_vector[VECTOR_SIZE];

#ifndef CANNOT_RANDOM
static
float
getrandom_float ()
{
    float frnd = 0;

    for (int i = 0; i < RANDOM_FLOAT_QUALITY; ++i)
    {
        unsigned short rnd[4];

        for (;;)
        {
            int rnd_len = getrandom (rnd, sizeof (rnd), 0);

            if (rnd_len != sizeof (rnd))
            {
                if (rnd_len == -1)
                {
                    fprintf(stderr, "failure getrandom()\n");
                    abort();
                }
                fprintf(stderr, "retrying getrandom()\n");
                continue;
            }
            break;
        }

        frnd += (float) rnd[0] / rnd[1];
        frnd -= (float) rnd[2] / rnd[3];
    }

    return frnd;
}

static int
make_cmd (const char *out_path, const char *count_str)
{
    int count = atoi (count_str);
    FILE *fout = fopen (out_path, "w");

    if (!fout)
    {
        fprintf (stderr, "%s: failure opening file\n", out_path);
        return 1;
    }

    for (int i = 0; i < count; ++i)
    {
        for (int j = 0; j < VECTOR_SIZE; ++j)
        {
            float item = getrandom_float ();

            if (j) fputc (' ', fout);
            fprintf (fout, "%f", item);
        }
        fputc ('\n', fout);
    }

    fclose (fout);

    return 0;
}
#endif

static inline float
calculate_vec_len (float_vector vector)
{
    float len = 0;

    for (int j = 0; j < VECTOR_SIZE; ++j)
    {
        len += vector[j] * vector[j];
    }

    return len;
}

static int
sort_cmd (const char *in_path, const char *out_path, const char *count_str,
        int noop)
{
    int rv = 0;
    int count = atoi (count_str);
    float_vector *vectors = calloc (count, sizeof (float_vector));
    FILE *fin = fopen (in_path, "r");
    FILE *fout = fopen (out_path, "w");

    if (!vectors)
    {
        fprintf (stderr, "%s: failure calloc()\n", in_path);
        rv = 1;
        goto out;
    }
    if (!fin)
    {
        fprintf (stderr, "%s: failure opening file\n", in_path);
        rv = 1;
        goto out;
    }
    if (!fout)
    {
        fprintf (stderr, "%s: failure opening file\n", out_path);
        rv = 1;
        goto out;
    }

    float_vector vector;
    int real_count = 0;

    for (int i = 0; i < count; ++i)
    {
        memset (vector, 0, sizeof (vector));
        for (int j = 0; j < VECTOR_SIZE; ++j)
        {
            int scan_res = fscanf (fin, "%f", vector + j);
            if (scan_res == EOF) goto read_loop_out;
        }

        ++real_count;
        memcpy (vectors[i], vector, sizeof (vector));
    }

read_loop_out:
    if (!noop)
    {
        for (int i = 0; i < real_count - 1; ++i)
        {
            for (int k = i + 1; k < real_count; ++k)
            {
                float vec_i_len = calculate_vec_len (vectors[i]);
                float vec_k_len = calculate_vec_len (vectors[k]);

                if (vec_i_len > vec_k_len)
                {
                    memcpy (vector, vectors[k], sizeof (vectors[k]));
                    memcpy (vectors[k], vectors[i], sizeof (vectors[i]));
                    memcpy (vectors[i], vector, sizeof (vector));
                }
            }
        }
    }

    for (int i = 0; i < real_count; ++i)
    {
        //float vec_len = calculate_vec_len (vectors[i]);
        //fprintf (fout, "%f: ", vec_len);
        for (int j = 0; j < VECTOR_SIZE; ++j)
        {
            if (j) fputc (' ', fout);
            fprintf (fout, "%f", vectors[i][j]);
        }
        fputc ('\n', fout);
    }

out:
    if (fout) fclose (fout);
    if (fin) fclose (fin);
    free (vectors);
    return rv;
}

int
main (int argc, char *argv[])
{
#ifndef CANNOT_RANDOM
    if (argc == 4 && !strcmp ("make", argv[1]))
    {
        return make_cmd (argv[2], argv[3]);
    }
#endif

    if (argc == 5 && !strcmp ("sort", argv[1]))
    {
        return sort_cmd (argv[2], argv[3], argv[4], 0);
    }

    if (argc == 5 && !strcmp ("sort-noop", argv[1]))
    {
        return sort_cmd (argv[2], argv[3], argv[4], 1);
    }

    fprintf (stderr, "invalid args\n");

    return 1;
}

// vi:ts=4:sw=4:et

------------------------------------------------------------

итоги запусков:

запуск на моём дешёвеньком безвентиляторном ноутбуке:

$ gcc -Wall -Wextra -O3 -funsafe-math-optimizations -o bubble-lab bubble-lab.c

$ time ./bubble-lab sort xxx.txt zzz.txt 100000

real	1m28.023s
user	1m27.837s
sys	0m0.040s

$ time ./bubble-lab sort xxx.txt zzz.txt 100000

real	1m27.909s
user	1m27.733s
sys	0m0.028s

запуск на Эльбрусе:

$ gcc -Wall -Wextra -O3 -funsafe-math-optimizations -o bubble-lab bubble-lab.c
lcc: "bubble-lab.c", строка 11: фатальная ошибка: не
          могу открыть исходник файл "sys/random.h"
  #include <sys/random.h>
                         ^

1 катастрофическая ошибка обнаружено при компиляции "bubble-lab.c".
Compilation terminated.


$ gcc -Wall -Wextra -O3 -funsafe-math-optimizations -DCANNOT_RANDOM -o bubble-lab bubble-lab.c


$ time ./bubble-lab sort xxx.txt zzz.txt 100000

real	10m37.852s
user	10m37.760s
sys	0m0.070s


$ time ./bubble-lab sort xxx.txt zzz.txt 100000

real	10m37.852s
user	10m37.740s
sys	0m0.080s

запуск на raspberry-pi (aarch64):

$ gcc -Wall -Wextra -O3 -funsafe-math-optimizations -o bubble-lab bubble-lab.c

$ time ./bubble-lab sort xxx.txt zzz.txt 100000

real	16m6.437s
user	16m2.548s
sys	0m0.200s

как видим raspberry-pi (aarch64) действительно сортировала дольше. 16 минут — против 10-and-half минут.

ну чтож — снимаю шляпу — чуть менее чем в полтора раза обогнали малину :-) ...

# P.S.: время для работы с файлами (то есть «sort-noop») составляет незначительную часть (на этих трёх платформах соответственно: 1.17 секунд , 5 секунд , 10 секунд).

user_id_68054 ★★★★★
()
Ответ на: комментарий от user_id_68054

как видим raspberry-pi (aarch64) действительно сортировала дольше. 16
минут — против 10-and-half минут.

ну чтож — снимаю шляпу — чуть менее чем в полтора раза обогнали
малину :-) ...

ну 32-битная raspberry-pi победить Эльбрус смогла :-)

$ time ./bubble-lab sort xxx.txt zzz.txt 100000

real	10m33.923s
user	10m29.229s
sys	0m4.167s

правда не совсем чистый эксмеримент, так как Малина была ещё и под некоторой побочной (паралельной) нагрузкой.. но это не так важно.. я в целом 32-битные платы не считаю серъёзными — так что не будем особо тут засчитывать это :-D

user_id_68054 ★★★★★
()

и ещё, пожалуй просто оставлю это тут

// gcc -Wall -Wextra -o hrenov-kompilator hrenov-kompilator.c
// or: gcc -Wall -Wextra -O3 -o hrenov-kompilator hrenov-kompilator.c
// or: clang -Wall -Wextra -o hrenov-kompilator hrenov-kompilator.c
// or: clang -Wall -Wextra -O3 -o hrenov-kompilator hrenov-kompilator.c

#include <stdlib.h>
#include <stdio.h>

int
main (int argc __attribute__ ((unused)),
        char *argv[] __attribute__ ((unused)))
{
    int rv = 0;
    void *g = 0; // изначально пусть указатель будет нулевым

    g = &&out; // а теперь мы его инициализировали

    if (!g)
    {
        fprintf (stderr, "я хренов-компилятор который не позволяет отличить "
                "инициализированное значение указателя от нулевого\n");

        rv = 1;
        goto *g; // переход по нулевому указателю? и без segmentation fault? ОРИГИНАЛЬНО!
    }

    printf ("g is at %lx address\n", (unsigned long) g);

out:
    return rv;
}

// vi:ts=4:sw=4:et
user_id_68054 ★★★★★
()
14 февраля 2019 г.
Ответ на: комментарий от Mischutka

А, просто как-то отвлёкся немного и забыл. Far'а навскидку не вижу. Зачем он нужен когда есть mc - тоже хз. Наверное, ручками скомпилить его несложно.

alexanius ★★
()
Ответ на: комментарий от Mischutka

Да и негоже, что православный файловый менеджер не имеет порта под православную платформу.

Mischutka ★★★★★
() автор топика
Ответ на: комментарий от Mischutka

Ну, хотя бы затем, что FAR, в отличие от mc, — воистину импортозамещение.

Да и негоже, что православный файловый менеджер не имеет порта под православную платформу.

Ээээ, у Вас странное представление об импортозамещении

alexanius ★★
()
Ответ на: комментарий от Mischutka

А точнее?

Импортозамещение делается не потому что одно православнее другого а по тому где есть реальная необходимость. Необходимости заменять один опенсорц на другой такой же опенсорц я не вижу. Если заказчик попросит - другой разговор.

alexanius ★★
()
Ответ на: комментарий от alexanius

не потому что одно православнее другого а по тому где есть реальная необходимость

ну а на практике выглядет так как будто-бы всё делается именно во имя православия. :-)

процессор сделали а софт на нём запускать нельзя (кроме как тот который скомпилирован через проприетарный иностранный компилятор lcc, а затем слинкованный хрен пойми с проприетарным-чем).

как это может работать в качестве импортозамещения?

знаечшь что такое «замещение»? это когда есть АНАЛОГ!

а аналога выходит что нет. так как x86 (x86-64) способен работать с опенсурсным софтом, а Эльбрусы оказалось что не могут выполнить такое требование (по крайней мере в native-режиме.. возможно могут в режиме бинарной эмуляции Intel).

это обычное базовое требование к компьютерам (возможность запускать на нём опенсурс). и то что кто-то-там-где-то-там игнорирует это требование, закупая у вас Эльбрус-компьютеры (якобы во имя импортозамещения) — просто находится в коррупционном сговоре с кем-то (а иначе — какова вероятность что им именно отечественное оборудование якобы понадобилось, если даже софт у них наполовину иностранный? вероятность нуль, если не учитывать понятие «взятка»).

или для тебя фраза «коррупционный сговор» это и есть синоним фразе «реальная необходимость» (в контексте импортозамещениея)?

user_id_68054 ★★★★★
()
Последнее исправление: user_id_68054 (всего исправлений: 4)
Ответ на: комментарий от user_id_68054

ну а на практике выглядет так как будто-бы всё делается именно во имя православия. :-)

Эээ, на какой практике, по подробней можно? )

процессор сделали а софт на нём запускать нельзя (кроме как тот который скомпилирован через проприетарный иностранный компилятор lcc, а затем слинкованный хрен пойми с проприетарным-чем).

а аналога выходит что нет. так как x86 (x86-64) способен работать с опенсурсным софтом, а Эльбрусы оказалось что не могут выполнить такое требование (по крайней мере в native-режиме.. возможно могут в режиме бинарной эмуляции Intel).

Почему я спокойно комменты на ЛОРе пишу с огнелиса, работающего под Эльбрусом? Я конечно понимаю что для школьника очень важна идеологическая чистота коноплятора, но обычно людям нужно чтобы софт просто работал. Кстати, линкер - ld :)

это обычное базовое требование к компьютерам (возможность запускать на нём опенсурс). и то что кто-то-там-где-то-там игнорирует это требование, закупая у вас Эльбрус-компьютеры (якобы во имя импортозамещения) — просто находится в коррупционном сговоре с кем-то (а иначе — какова вероятность что им именно отечественное оборудование якобы понадобилось, если даже софт у них наполовину иностранный? вероятность нуль, если не учитывать понятие «взятка»).

Вообще мысль не распарсил. У ребят есть конкретные проблемы, которые решаются переходом на независимого поставщика. Борцунство со страшной коррупцией - это, конечно, здорово, но как это сюда прикрутить вообще непонятно.

alexanius ★★
()
Ответ на: комментарий от alexanius

У ребят есть конкретные проблемы, которые решаются переходом на независимого поставщика

какие именно проблемы?

и как они (якобы) решились?

user_id_68054 ★★★★★
()
Ответ на: комментарий от alexanius

Я конечно понимаю что для школьника очень важна идеологическая чистота коноплятора,

только если ты говоришь про импортозамещение..

а если ты просто скажешь «мы тут деньги зарабатываем, а не импортозамещением-всяким занимаемся» — то тогда вопросов про чистоту убираю :-) — каждый зарабатывает как может..

но обычно людям нужно чтобы софт просто работал

в том числе GCC — это тоже софт

user_id_68054 ★★★★★
()
Ответ на: комментарий от user_id_68054

какие именно проблемы?

Если требуется независимый поставщик, то понятно какие. Не хочется случайно попасть под экспортные ограничения одной там страны.

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

а если ты просто скажешь «мы тут деньги зарабатываем, а не импортозамещением-всяким занимаемся» — то тогда вопросов про чистоту убираю :-) — каждый зарабатывает как может..

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

в том числе GCC — это тоже софт

gcc иногда (крайне редко) действительно бывает нужен, но тут уже нужно как-то выкручиваться. По крайней мере отсутствие gcc не мешает иметь полноценный работающий дистрибутив.

alexanius ★★
()

а он вообще продается по нормальной цене? просто если нет, то ЗАЧЕМ?

example_cat
()
Ответ на: комментарий от Mischutka

Так FAR будет портирован на «Эльбрус» или сие признано нецелесообразным?

А он вообще в Linux-то целесообразен?

AS ★★★★★
()
Ответ на: комментарий от Mischutka

Да и вообще, было бы неплохо заменить mc в МСВС и AstraLinux FAR'ом.

Mischutka ★★★★★
() автор топика
Ответ на: комментарий от Mischutka

У него российские корни.

А mc давно сам тут укоренился. Начиная с 7.x.

Да и вообще, было бы неплохо заменить mc в МСВС и AstraLinux FAR'ом.

Зачем? Зачем нужна гуйня, да ещё на Паскале, который не особо хорошо в Linux поддерживается?

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 2)
Ответ на: комментарий от AS

Кстати, а что с поддержкой Паскаля на «Эльбрусе»?

Mischutka ★★★★★
() автор топика
Ответ на: комментарий от AS

Зачем нужна гуйня, да ещё на Паскале

Видимо, ты путаешь с Double commander-ом. far2l пишется на c++, есть консольный режим.

Паскале, который не особо хорошо в Linux поддерживается?

И с чего ты это взял?

greenman ★★★★★
()
Последнее исправление: greenman (всего исправлений: 1)
Ответ на: комментарий от greenman

Видимо, ты путаешь с Double commander-ом. far2l пишется на c++, есть консольный режим.

Не путаю, но ошибаться могу. То, что FAR, сам по себе, консольный, это я в курсе, но он же вроде пол-десктопа за собой тянет? И про c++ - его что, весь переписывают что ли? Изначальный же на Паскале.

И с чего ты это взял?

Ну потому, что я посматриваю на fpc/lasarus понемногу. И сам на борландовском, в DOS-овские времена, пописывал бывало.

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 1)
Ответ на: комментарий от AS

И про c++ - его что, весь переписывают что ли?

Насколько я понимаю, пишут заново. Исходный сильно завязан на winapi.

Посмотрел на FAR для оффтопика https://github.com/FarGroup/FarManager

Пара файлов .pas, остальное .cpp

но он же вроде пол-десктопа за собой тянет?

Где?

greenman ★★★★★
()
Последнее исправление: greenman (всего исправлений: 3)
Ответ на: комментарий от AS

Потому, что этот господин в лучшем случае дуалбутчик. Вечно они всякую дрянь из венды втащить на онтопик пытаются. А уж как обосновывают это - так просто поржать и забыть.

anonymous
()
Ответ на: комментарий от greenman

Насколько я понимаю, пишут заново. Исходный сильно завязан на winapi.

А, так вот почему новые версии тормозные такие. И так эту дрянь юзать можно только от безысходности, так ещё и единственный полюс прополимерили.

anonymous
()
Ответ на: комментарий от Mischutka

Так FAR будет портирован на «Эльбрус» или сие признано нецелесообразным?

*убирая руку со лба* Понятия не имею. Я не отвечаю за портирование пакетов, происходит это по другому принципу. Но если Вам очень интересно, Вы можете устроиться в отдел дистрибутива и убедить начальника в острой необходимости наличия данного пакета в системе.

alexanius ★★
()
Ответ на: комментарий от AS

Зачем? Зачем нужна гуйня, да ещё на Паскале, который не особо хорошо в Linux поддерживается?

на Паскале

Ты что-то путаешь, дружище. Возможно с Total Commander. FAR всегда был на C/C++:

https://github.com/elfmz/far2l

Но, к сожалению, в одном ты прав: даже несмотря на текстовый интерфейс он сделан GUI-приложением.

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от AS

И про c++ - его что, весь переписывают что ли? Изначальный же на Паскале.

Не было такого вроде. Он же Рошаловский, как и WinRAR.

EXL ★★★★★
()
Ответ на: комментарий от Mischutka

Так FAR будет портирован на «Эльбрус» или сие признано нецелесообразным?

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

Если бы у меня был Elbrus или доступ к нему, я бы попробовал. Наверняка wxWidgets-библиотеки для этой архитектуры уже портированы.

EXL ★★★★★
()
Ответ на: комментарий от alexanius

Можно. А в дистрибутив это потом без дозволения начальника можно добавить?

А можно узнать, какие именно дистрибутивы доступны для компьютеров на архитектуре Elbrus?

EXL ★★★★★
()
Ответ на: комментарий от alexanius

Поцыент хочет себе фар, поцыент может получить себе фар, пока санитары не видят. Зачем это в дистр тащить?

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.