LINUX.ORG.RU

Выбор ЯП для системного программирования.

 ,


2

4

Добрый день, задумался я тут о том чтоб начать учить один из низкоуровневых ЯП для развития и разработки. До этого писал только на Python, но он на роль языка разработки системных инструментов не подходит. Так как тут народ опытный хотел бы узнать что в данный момент лучше начинать учить? Пока выделил следующие ЯП. C,C++,JAVA,RUST.


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

Уже лучше.

Но можно обойтись и буфером на стеке, там, где это нужно для скорости, ибо максимальная длина double в десятичном представлении вычислима на этапе компиляции. И должно стоять не 128, а это значение. А ещё лучше - constexpr формула для плюсов или #define с формулой для сишки.

Только #define примитивен, а constexpr позволяет рекурсию, циклы и прочее, позволяя вычислять много больше, сохраняя переносимость без цепочки #elif SYSTEM_XXX

Но это нужно знать инструменты и уметь ими пользоваться. ООП совать в это не обязательно.

dzidzitop ★★
()

Добрый день, задумался я тут о том чтоб начать учить один из низкоуровневых ЯП для развития и разработки.
Пока выделил следующие ЯП. C,C++,JAVA,RUST.

а низкоуровневые почему передумал?

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

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

Максимальный double value не обязательно имеет наибольшую длину в десятичной строковой репрезентации.

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

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

Итого: пока крестодауны изобретали феерических размеров consexpr-ы и считали длину самого длинного double в символах, сишник написал char str[128]; snprintf(str, sizeof(str), «%g», val); и пошел решать действительно важные задачи.

Крестобыдлу не понять.

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

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

А тупой крестодаун воспользуется std::to_string и будет спокойно решать важные задачи.

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

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

Тупым сишникам-анонимусам не понять.

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

сишник написал char str[128]; snprintf(str, sizeof(str), «%g», val); и пошел решать действительно важные задачи.

Зачем вообще так жить? Кода много, код неэффективный, и это еще самый простой случай. На Rust это будет просто: val.to_string(), еще и быстрее наверняка.

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

Ага, сишный герой оставил после себя уязвимость

Ты в глаза долбишься, или правда не знаешь, что такое snprintf?

А тупой крестодаун воспользуется std::to_string и будет спокойно решать важные задачи.

Изобрази-ка мне «%5.2f%%» на std::to_string, а я посмеюсь.

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

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

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

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

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

Ты в глаза долбишься, или правда не знаешь, что такое snprintf?

Таким будут заниматься разве что воннаби хацкиры.

Дружок, ты уж определись, будет использоваться snprintf с ручным перевыделением памяти или не будет.

с запасом

Уже в который раз берут «с запасом», а потом оказывается, что максимальное значение должно быть в три раза больше.

%5.2f%%%%%%55555

этим ты в 1960х кого-нибудь удивил бы точно. А сейчас - держи снисходительную улыбку.

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

этим ты в 1960х кого-нибудь удивил бы точно. А сейчас - держи снисходительную улыбку.

Ну давай, покажи. Держу пари, ты как и 95% повелителей шаблонов, не умеешь пользоваться iomanip, хваленый std::to_string нихрена не поможет, так что ты либо подожмешь хвостик и сделаешь snprintf, либо притянешь какой-нибудь boost::format. Шах и мат, неумеха!

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

plain old C

Это, кстати, совет Go-фера бэк-эндщика, который ни C, ни системного программирования в глаза не видел.

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

Какой же ты тугой,посмотри как пишутся проекты на Си.Хорошие проекты,там все нормально сделанно.

Вот это — нормально? Если чистый C такой замечательный, что же код на нем так убого-то выглядит? Сплошная копипаста и закат Солнца вручную.

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

Анон прав, я имею в виду кучу встраиваемых питонов, не только микропитон.

shkolnick-kun ★★★★★
()

Системное - только С. И нечего со всяким говном плюсерским лезть!

anonymous
()

И да, если в МК хочешь, вот тебе мои сниппеты: STM8, STM32.

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

если NULL то пусть программа падает

Тут твой голубой друг в треде про исключения заявлял что обработка ошибок не нужна потому что если произошла ошибка — то программа должна просто корректно упасть.

Ты с ним?

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

Ты не поверишь, насколько все хорошо с управлением памятью в сишколибах.

HeartBleed

mersinvald ★★★★★
()
Последнее исправление: mersinvald (всего исправлений: 1)

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

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

Ага, сишный герой оставил после себя уязвимость

snprintf юзают нормальные люди.Но ты не зацикливайся я же написал о my_speed_double_to_string() а там все идеально

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

Можно вынести основу в другую функции,в итоге эти функции копи-пастные будут различаться на строчку.Ну или так

#define my_copy_paste_fn(type) type->out("123");free(type)

к примеру...

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

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

linuhs_user
()
Ответ на: комментарий от linuhs_user
#include <iostream>
#include <deque>


int main()
{
    const std::size_t count = 0xFFFFFFF;
    std::deque<std::size_t> dblque;
    for( std::size_t i = 0; i<count; ++i  ) {
        dblque.push_back( i );
    }

    for( std::size_t i = 0; i<count; ++i  ) {
        dblque.pop_front( );
    }

    for( std::size_t i = 0; i<count; ++i  ) {
        dblque.push_front( i );
        dblque.pop_back( );
    }
}

Давай аналог на сишке, петушок. Или иди отсюда нах.

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

Вчера вы были сонным, а сегодня еще не проспались? Иначе не понятно, как воспринимать ваш комментарий.

Ну и да, вот это:

type->out(«123»);

каким боком относится к чистому C?

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

С чего это я петух,или ты проецируешь?))Видимо это какой то std::vector.Ну size_t = stdlib/stddef а векторов куча,даже недавно было на хабре про удобные вектора на C89 - https://habrahabr.ru/post/324210/

А теперь найди компилятор который не компилирует С++ код по 10 часов))

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

#define my_copy_paste_fn(type) type->out(«123»);free(type)

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

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

Код давай, или иди отсюда нах. А мы сравним на сколько твой код сольет этому коду на крестах. Ну если ты конечно трепло и ссышь...ну тонгда ты да - петух.

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

Слив защитам, чмошник. Да потому что ты ни с++ ни Си толком не знаешь, школота тупорогая. Можешь теперь наклеить себе перья и кудахтать на уроках.

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

Че ты вообще хочешь?Ну показал ты что в С++ std:: есть и что?Думаешь если я напишу такую же вещь как этот декуе оно работать будет медленее?))Я просто только сейчас увидел в чем суть.

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

Лол,у тебя подгорело видимо хорошо.Но слив то от тебя,ты тут кукарекаешь что Си медленее и при этом ничего написать не хочешь))

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

Понятно, в наше время было принято писать (*p->out)("1234").

Тем не менее, какой-нибудь вменяемый ответ по средствам борьбы с копипастой в C будет?

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

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

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

Он не умеет в Си. Это понятно уже. Он только первый 5 страниц про «Си для чайников прочитал»

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

char name[20] = «01234567890123456789»;

Пфф, ты это на С изобрази:

constexpr auto str1 = "01234567890123456789"sv;
constexpr auto str2 = "01234567890123456780"sv;
constexpr bool eq = (str1 == str2);
anonymous
()
Ответ на: комментарий от linuhs_user

Там, вааще-то, три однотипных куска. С третьим что делать прикажете? Поверить вам, что можно сделать компактнее, читаемее и легче в сопровождении?

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