LINUX.ORG.RU

В стандарт C предложено внести лямбды и defer из golang

 , ,


5

6

Привет, ЛОР!

Я тут тебе немного покушать принёс. Как ты, наверное знаешь, не за горами выход нового стандарта языка C – C23. Среди прочих вкусностей, таких как лямбды в стиле C++, в этот стандарт предложено добавить механизм defer, аналогичный существующему в языке Go.

Ссылка на предложение: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2895.htm

В случае, если этот стандарт будет принят, будет возможно написание вот такого кода:

p = malloc(N);
defer { free(p); }

Где аргументом оператора defer является анонимная функция. Так же возможны более сложные варианты использования:

enum { initial = 16, };
double buffer[initial] = { 0 };
...
size_t elements = 0;
double* q = buffer;
defer [orig = q, &q]{ if (orig != q) { free(q); }};
...
// increase elements somehow
...
// adjust the buffer
if (elements > initial) {
    double* pp = (q == buffer) ? malloc(sizeof(double[elements])) : realloc(q, sizeof(double[elements]));
    if (!pp) return EXIT_FAILURE;
    q = pp;
}
...

Учитывая всё это, скоро в C больше не будет нужно использовать goto вообще нигде, даже для очистки ресурсов при ошибке. Так заживём, ЛОР!

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

Как видим раст не только очень даже помогает срать мимо буферов, вроде CVE-2021-28875, но и в коментах. Чему раст не помогает, так это писать код, который нужен и полезен.

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

Чтд. Раст-фанбой, сесуриту фетишист. А close кто проверять будет? :-D

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

Чему раст не помогает, так это писать код, который нужен и полезен.

Ты не понимаешь. Суть Rust не в этом. Он нужен, чтобы Настоящим Сишникам типа @Stanson, который, напомню, любит навалить мимо буфера, рвало задницу. Видишь какой классный тред получился?

Чтд. Раст-фанбой, сесуриту фетишист. А close кто проверять будет? :-D

Ты! Вот ты лично! Будешь сидеть и руками проверять каждый вызов close() в системе с 9 утра до 6 вечера с перерывом на обед!

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

У меня wget. А в курле отключаемый будет скорей всего. Когда через 8 лет в моем лтс’е появится этот курл, если растоманы выживут, и их не заменит какая-нибудь ии скрепка-помощник на рабочем столе – так и быть, пересоберу, вырубив раст. Например, я так и не пользуюсь librsvg новым. Хватает старого. Или, вот, луноходы хоронят пульсу, а я так и не успел ею попользоваться даже.

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

Ты не понимаешь. Суть Rust не в этом. Он нужен, чтобы Настоящим Сишникам типа @Stanson, который, напомню, любит навалить мимо буфера, рвало задницу. Видишь какой классный тред получилс

Звучит как хитрый план :-D

Ты! Вот ты лично! Будешь сидеть и руками проверять каждый вызов close() в системе с 9 утра до 6 вечера с перерывом на обед!

Чо, не дошел в своем чтиве стандартов до уязвимости использования close? Сегодня ты помог сишнику избежать ответственности за бездумное плодение close-уязвимостей, юз афтер фри, сталин её за щеку, а завтра от раста отговоришь? Совсем смузи попутал? ;)

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

Лол, пошел видимо гуглить уязвимость close. :-D

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

Вопрос был бы ещё как-то корректен, если бы ты пятью строчками выше при отсутствии файла не писал в лог и не выкидывал бы ошибку.

Вот так вот у вас всё и устроено.

Если файла нет или прав не хватает - то и делать программе совершенно нечего. Поэтому пишем ошибку в лог и ждём дальше.

Но файл-то есть, и он даже открылся на чтение без ошибок.

Задача не только прочитать файл, но ещё и переместить его в другое место, как уже обработанный.

Файл который открывается, но не читается - что с ним делать? Я вот не знаю. Снова пытаться открыть и прочитать? Сколько раз это надо делать? Или оставить его нетронутым, вдруг, через пару лет при запуске демона при перезагрузке машины этот файл прочитается и отошлётся сообщив получателю то, что его уже два года не волнует?

Ладно я ещё могу понять, когда неосилятор хочет левой ногой писать любую херню и чтобы она собиралась и работала. Но когда неосилятор вообще даже не пытается представить всю картину работы программы целиком - это совсем уже трындец. Как там у вас устроено - получили ТЗ на функцию, что-то там накорябали, с exception на каждый чих, собралось, тесты прошло, а дальше трава не расти, даже если из-за какой-то фигни вся софтина что-то считавшая несколько месяцев вывалится с сообщением об ошибке похерив всю работу?

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

Но файл-то есть, и он даже открылся на чтение без ошибок.

Ичо?

Задача не только прочитать файл, но ещё и переместить его в другое место, как уже обработанный.

Если ты его не можешь обработать, то надо сделать две вещи:

  1. НЕ СРАТЬ МИМО БУФЕРА
  2. Сообщить об этом пользователю программы

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

Ладно я ещё могу понять, когда неосилятор хочет левой ногой писать любую херню и чтобы она собиралась и работала.

И чтобы эта херня ещё память не портила, да. Я понимаю, что для тебя портить память – так же естественно, как портить твои же штаны. Но пожалуйста, не делай этого в приличном обществе. Мы-то на ЛОРе привычные к таким выкрутасам, но вот девки, если ты им скажешь, что любишь наложить мимо буфера, могут тебе больше никогда не дать.

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

Суть Rust не в этом. Он нужен, чтобы Настоящим Сишникам типа Stanson, который, напомню, любит навалить мимо буфера, рвало задницу.

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

Но увы, мне совершенно наплевать на раст. Т.е. вообще. На нём ничего так и не написали нужного, он ничем не интересен.

Лисп и тот солиднее выглядит. Его хотя бы не для того чтобы попытаться кого-то подразнить писали. Но лисп мне даже чем-то нравится. Когда-то даже хотел лисп для однокристалок.

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

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

Если ты свои результаты измеряешь по количеству буферов, мимо которых ты наложил, то результат от Rust действительно будет стремиться к нулю.

Но увы, мне совершенно наплевать на раст.

Конечно! Ведь в нём нельзя на ровном месте облажаться и промазать мимо буфера.

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

Сообщить об этом пользователю программы

А дальше?

Вы вообще больше чем на один шаг думать способны, или камлания на чудо-язычки напрочь отшибает у вас способность продумывать всё до конца?

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

Вы вообще больше чем на один шаг думать способны, или камлания на чудо-язычки напрочь отшибает у вас способность продумывать всё до конца?

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

В любом случае, сообщение вида «ОШИБКА ЧТЕНИЯ ФАЙЛА» гораздо лучше, чем насрать мимо буфера, как ты это делаешь.

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

В лиспе вот тоже нельзя мимо буфера промазать. А ещё там лямбды настоящие, а не какое-то говно в виде банальных безымянных функций.

Не стоит нахваливать раст человеку который с лиспом ознакомился. :)

Лисп намного круче раста, по всем параметрам. И быстрый, и нежирный.

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

В лиспе вот тоже нельзя мимо буфера промазать.

Я, кстати, уверен, что ты сможешь промазать мимо буфера даже в лиспе.

Лисп намного круче раста, по всем параметрам. И быстрый, и нежирный.

Я рад за него. А пока что, пожалуйста, перестань портить память. Это плохо. А я спать пойду, пока меня Шома не забанил тут опять.

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

Я подозреваю ты и на лиспе найдёшь способ облажаться с буферами.

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

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

А ты вообще кто такой, чтобы рассказывать мне, что я могу в своей программе, а что нет?

В любом случае, сообщение вида «ОШИБКА ЧТЕНИЯ ФАЙЛА» гораздо лучше, чем насрать мимо буфера, как ты это делаешь.

Ну как решили мимокрокодилы, такая ошибка может появиться только если диск отвалился, причём точно в короткий момент между открытием файла и немедленным его чтением. И куда это сообщение будет сохранено? Это демон, если что, а не интерактивная софтинка которая что-то кому-то может показать. Не, я конечно предусмотрел использование сислога который в общем-то можно на другую тачку направить, но что-то мне подсказывает, что в этом сислоге эта ошибка будет одной из многих тысяч и не будет представлять никакого интереса вообще.

Вообще фантазии никакой нету? Напрочь?

Ну хоть предложил бы отсылать сообщение о такой жопе последнему использованному XMPP JID’у чтобы тот, кто эти сообщения читает был в курсе, что с тачкой произошла такая маловероятная жопа. Но нет. На это у тебя фантазии не хватает. Только маркетинг раста в голове, больше ничего.

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

Я, кстати, уверен, что ты сможешь промазать мимо буфера даже в лиспе.

Ну ты уже столько тут всякой чуши написал в которой ты, кстати, уверен, что ещё одна чушь ничего не поменяет.

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

Ты так и не привёл ни одного аргумента кроме ТЫ ЧЕ ПЁС.

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

А ты вообще кто такой, чтобы рассказывать мне, что я могу в своей программе, а что нет?

ХАХАХАХАХАХАХАХАХАХАХ! Господи, это потрясающе. Чувак, ты прекрасен. Хоть ты и накладываешь мимо буфера, но ты просто бесподобен в этом! Мы тут с аноном тебя на копипасту разводим, а ты прямо ведёшься как миленький. Ей богу, обожаю тебя!

Ну как решили мимокрокодилы, такая ошибка может появиться только если диск отвалился, причём точно в короткий момент между открытием файла и немедленным его чтением.

На самом деле, мимокрокодилы не очень правы. Такая ошибка может вылезти, например, если polkit внезапно между open() и read() решит что этот файл тебе не принадлежит. Лялекс вообще в этом плане особенный. Кто-то может ещё umount сделать насильно. А если процесс в докере запущен, там вообще свет туши. Любой ад и холокост может случится!

Короче, я понял твою позицию: ты не знаешь, как обработать ошибку, поэтому ты будешь целенаправленно срать мимо буфера, как тебе C позволяет это легко и непринуждённо делать, в надежде, что прога при таком раскладе просто сдохнет сама собой. Я понял тебя. Си головного мозга во всей красе.

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

Такая ошибка может вылезти, например, если polkit внезапно между open() и read() решит что этот файл тебе не принадлежит.

Как ты думаешь, зачем тому, кому понадобился именно микроскопический XMPP клиент, да ещё и в виде демона, устанавливать такое чудовище как polkit на тот девайс, где этот микроскопический XMPP клиент должен работать?

Ты и правда настолько недалёкий? Не понимаешь напрочь, зачем вообще делают тот или иной софт с теми или иными свойствами?

Кто-то может ещё umount сделать насильно.

Ну наверно может, да. Рут там отмонтировать на ходу, или tmpfs в спуле. А ещё может патч Бармина запустить, например, или на ходу ножки процессора закоротить. Странные вы.

А если процесс в докере запущен, там вообще свет туши.

Ну да - писать минимальный XMPP клиент чтобы гонять его на тачке на которой можно запустить докер. Логика!

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

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

А перед тем как ехать куда-то на машине ты её разбираешь до последнего винтика чтобы исключить возможность какой-либо поломки? Или ты велосипедаст, там, или любитель общественного транспорта, как у вас принято? Ну так и там тоже есть risk management.

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

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

Боже! Чувак, ты уже два часа оправдываешь свой тупой говнокод самыми чудовищными оправданиями. Прекрати уже. Мы все поняли, ты не умеешь код писать.

Ты и правда настолько недалёкий? Не понимаешь напрочь, зачем вообще делают тот или иной софт с теми или иными свойствами?

С какими? С просранным буфером на стэке? Ну да, я не понимаю, зачем писать софт с таким свойством. Объясни нам тут, зачем ты мимо буфера пишешь? Я правда не понимаю. Теперь я верю, что ты реально целенаправленно говнокодишь.

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

Боже! Чувак, ты уже два часа оправдываешь свой тупой говнокод самыми чудовищными оправданиями.

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

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

Ну да, я не понимаю, зачем писать софт с таким свойством.

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

Объясни нам тут, зачем ты мимо буфера пишешь?

Ну мы же уже выяснили, что шансов написать мимо буфера тут практически нет. Но никак не можем выяснить, что же в конце-концов нужно сделать по-уму, если это вдруг каким-то чудом возникла ситуация, когда файл без проблем открылся, но читаться не хочет. Что же нужно сделать с таким файлом? Ну чтобы не только мимо буфера не писать, но и сделать всё остальное правильно. Вы ж типа знаете как надо «грамотно» «писать» софт, у вас вся религия на этом построена. Так почему же ответа до сих пор нету? Или это у вас не для результата, а ради процесса?

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

Тебе уже три раза ответили: ошибку как в open верни, чучело.

А дальше?

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

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

Братюнь, вы уже который пост плывёте от вопроса «что делать дальше». Это просто умора. Все согласны, что срать мимо буфера нельзя. Это потенциальная уязвимость, такую в расте на днях нашли. Что делать?! Ты попробовал выдать про return, но обосрался с close, аххах) Давай еще: как хэндлить?!

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

Вы чего тут, упоролись все? Если не знаете как хендлить, то срать мимо буфера стало нормальным вариантом уже, что ли?

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

микроскопический XMPP клиент

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

unC0Rr ★★★★★
()

Ну, дефер давно пора ввести, учитывая, что его альтернатива со множественными goto убога и печальна. А так же учитывая, что defer есть в GNU-расширениях, только убогий.

anonymous
()

Учитывая всё это, скоро в C больше не будет нужно использовать goto вообще нигде, даже для очистки ресурсов при ошибке. Так заживём, ЛОР!

Да, заживём. Сложность компилятора при этом сильно ли возрастёт. Имею ввиду, что Си это же не хай-энд-энтерпрайз, а минимум, в т.ч. и для контроллеров. Хотя не особо в теме этого, если честно, ха-ха.

anonymous
()
Ответ на: комментарий от anonymous
-- ...ли возрастёт.
++ ...ли возрастёт?
anonymous
()
Ответ на: комментарий от unC0Rr

Хочешь включиться в этот парад уродов, или и не выбывал?! Ну ок, рассказывай давай, как хэндлить собрался. :-D

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

picolisp не смотрел? Залипательная штука :)

Смотрел. Няшненько. :)

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

У тебя защитные механизмы выключили мозг примата и остался только рептилий что ли? Обработка open это return. Обработка read это return. Чем эти две ситуации отличаются?

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

Обработка open это return. Обработка read это return. Чем эти две ситуации отличаются?

Внезапно, open вернёт ошибку если файла нет, или нет прав его прочесть. Это стабильная ситуация. В следующий раз тоже не получится это сделать. Такой файл просто игнорируем и это правильно и то, что нам надо.

А немедленный после open read вернёт ошибку, если файл есть, и читать нам его можно и даже нужно, но по какой-то фантастической, и скорее всего временной/случайной причине прочесть его не получилось.

Если мы вывалимся точно так же как в случае с open, то сообщение останется неотправленным. И оно внезапно, окажется отправлено, например, месяца через два, когда, по каким-то причинам связь пропадёт и появится, или демон будет перезапущен, когда актуальность сообщения будет равна нулю, или это вообще будет дорогостоящая ложная тревога.

Я похоже начинаю понимать логику создателей «безопасных» язычков. Это язычки не для того чтобы писать что-то полезное, и не для тех, кто хочет написать что-то полезное. Это для тех, кто хочет исключительно прикрыть свою жопу при написании каких-то кусков кода за деньги. Чтобы какой бы конечностью ни был написан кусок кода, в нём не оказалось бы ошибок за которые можно получить по жопе или лишится денег. А как и, главное, зачем на самом деле нужен этот кусок кода - совершенно насрать. Сказано написать функцию, не думая вообще ни о чём пишем функцию и получаем от хозяина еду за «безопасный» код без ошибок которые нельзя совершить в язычке. Всё. Вот ниша этих язычков. Что мы и наблюдаем тут во всей красе.

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

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

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

Внезапно, open вернёт ошибку если файла нет, или нет прав его прочесть

Или у тебя файловые дескрипторы кончились. Или память в системе кончилась. Или битый блок в ФС. Или ещё сто разных вариантов.

Короче все понятно, очередной «эксперт».

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

Или у тебя файловые дескрипторы кончились. Или память в системе кончилась. Или битый блок в ФС. Или ещё сто разных вариантов.

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

Чудесно, ящетаю. Полная оторванность от реальности, прям аутизм какой-то.

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

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

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

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

Ну а Иудейские Растаманы вообще ничего полезного не пишут, чтобы ошибок не наделать.

Отлично, пусть всё так и остаётся.

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

Сказано написать функцию, не думая вообще ни о чём пишем функцию и получаем от хозяина еду за «безопасный» код без ошибок которые нельзя совершить в язычке. Всё. Вот ниша этих язычков. Что мы и наблюдаем тут во всей красе.

ты наконец-то всё понял, но есть два нюанса

  • эта ниша значительно больше ручного байтодроча вприсядку

  • «за еда» в них гораздо вкуснее, если верить всяким статистикам

а знаешь, почему? потому что бизнесу в первую очередь нужен безопасный предсказуемый поддерживаемый код

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

потому что бизнесу в первую очередь нужен безопасный предсказуемый поддерживаемый код

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

Экономика говна, я прекрасно в курсе.

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

Мысли вслух … /для обсуждения/

Тред Почему C++ не может без потери данных сдвинуть запятую во float типе данных? немножко почитал.
Пожалуй синтаксис Си можно было немножко доработать, для того, чтобы на нем можно было бы эффективно и просто вычислять арифметические выражения с заданной точностью.

Конечно при этом ни какой Фортран в Си тащить не нужно.
В математических программах наработан неплохой синтаксис.

Например:

 float   Коза       = 0.00;  
 int     Бараны     = 15; 
 double  КозаБараны = 0.0000;

 КозаБараны = ( Коза / Бараны), 5;

Это означает, что результат в КозаБараны должен быть c точностью до пяти знаков.  

Вообщем тема для ОБСУЖДЕНИЯ! …

Еще раз напоминаю, что синтаксис должен быть прост.
Конечно должна быть опция при компиляции, которая ( Коза / Бараны), 5 прикажет компилятору генерировать стандартный код …

Просьба БАРАНОВ не участвовать в обсуждении ...

Владимир

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

Владимир все знают что в С есть _Decimal32, _Decimal64, и _Decimal128 и поэтому костыли Владимира не нужны.

Читай почаще cppreference (внизу таблица): https://en.cppreference.com/w/c/language/arithmetic_types

https://en.wikipedia.org/wiki/Decimal128_floating-point_format

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

Владимир все знают что в С есть _Decimal32, _Decimal64, и _Decimal128 и

Вы суть то поста не поняли …

Владимир

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