LINUX.ORG.RU

Вопросы по C, и вообще.

 ,


4

9

Будем считать что я пишу прикладные программки.

  1. Как лучше обрабатывать malloc == NULL? Игнорировать или кидаться аbort() не хочется, но обработать нужно, обрабатывать каждый вызов?
  2. Писать свои строки или есть библиотека? Строки хранить как utf8 или utf32?
  3. Динамические массивы, писать свои, есть готовые? Как находить оптимальный размер для увеличение массива при расширении, нужно ли вообще заранее выделять память?
  4. Куда лучше выводить ошибку? Можно в консоль, но на винде не прокатит вроде, плюс ничего не видно.
  5. Нормальная ли идея: Есть много строк по 3-16 символов, сделать MyMemAllocate который при выделении (64 > X) байт, выделяет память в уже аллоцированном буфере на пару мегабайт к примеру... А при MyMemRealloc(X > 64) перемещает память из этого буфера в системную кучу. Перед данными хранить байт отвечающий за тип кучи.
  6. Когда структуру нужно передавать через стек а когда по указателю?
  7. на x86_64 быстрее uint32_t или uint64_t?
  8. for(...;i != len;...) vs for(...;i < len;...)
  9. Всегда ли ((unsigned)0-1) == ((unsigned)0-1)?
  10. На чем быстро рисовать графику (картиночки, кнопочки)? SDL2 говорят медленный.
  11. Есть много текста, с разным шрифтом, разным размером. Как лучше такое рисовать? (ttf), нарисовать алфавит для каждого {размер+шрифт}, или нарисовать алфавит с очень большим размером а потом сжимать для буков меньшего размера? Рендерит кто нибудь TTF на видеокарте кстати?
  12. Есть много объектов с одинаковыми и неизвестными именами, делать отдельную структуру (в виде чего?) где будут храниться эти имена дабы не занимать память одинаковыми строками?
  13. Как лучше хранить значения key:value что бы быстро с ними работать?
    1. если значений мало,
    2. если значений много.
  14. Можно ли как то поставить обработчик на изменение участка памяти? Костыль, но нужно. (Win/Linux хотя бы)
  15. Актуальна ли для современных систем фрагментация кучи?
  16. Какие библиотеки есть для многопоточного? Что можно почитать? SDL_Thread тоже медленный?
  17. Вот допустим решил я распарсить INI файл, как лучше его читать? По линиям? Сразу весь? Проецировать?
  18. Библиотека для RegExp?
  19. Какие флаги для строгости компилятора юзать стоит? Я использую: -std=c89 -Wall -pedantic

Ну или можно книжку где это расписанно.



Последнее исправление: beastie (всего исправлений: 2)

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

Такой лол, что не могу остановится.

ТС, напиши хотя бы парсер html5 на сишке. Нормальный, быстрый, с error-recovery и прочим.

Спойлер: не осилишь даже это.

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

В нативную тему не умеет - не нужно.

Как же не умеет? См. swt, например.

А с тем, что не нужно (для больших проектов типа браузера, да даже и для более простых), — с этим согласен. Там в принципе годной производительности не добьёшься, даже используя нативные методы, хотя бы потому, что динамической памятью полностью управляет отдельный процесс — диспетчер памяти, и делает это не всегда оптимально, хотя для программиста, конечно, удобно (не надо беспокоиться о delete).

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

Ну сделать веб рендер, и все остальное тоже на нем.

А. Понял.

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

Ну, если так, то браузер осилишь за неделю. В любом случае, удачи.

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

Ну, если так, то браузер осилишь за неделю

Да за два вечера, вчера начал а завтра уже будет готовый!

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

Я уже писал в комментах почему мультибайт считаю хорошим решением. :)

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

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

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

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

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

А, в этом смысле — да. Я в более широком смысле говорил, про пожирание памяти и процессорного времени. Но тут правильнее было бы сказать «тяжесть», а не «скорость».

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

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

Особенно с этим: «Я использую: -std=c89 -Wall -pedantic» - ты обречён.

Все, кто тебе говорит о том, что си - это быстро - ламерки. Си - это мусор, си - это легаси. Си - это дерьмо. Си как язык - давно мёртв.

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

То, что используется в linux, то, что использует упомянутый тут Поттеринг - это совершенно другой си.

Настоящий си - это другой си, это не тот си, тот си не существует как язык. Тот си - это некая синергия понимания и языка, языка, который даёт тебе то, что тебе нужно. Без этого понимания - даже настоящий си - тебе не даёт ничего.

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

vcerloman
()

Как лучше обрабатывать malloc == NULL? Игнорировать или кидаться аbort() не хочется, но обработать нужно, обрабатывать каждый вызов?

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

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

Тебе нужны будут абстракции, то, что будет всё это делать для тебя. Но си - это не язык для написания абстракций. Это тонкое искусство( при этом не на мусорном си(-std=c89 -Wall -pedantic), на которое мало кто способен. Тебе достаточно посмотреть на то мусорное api, что предлагают си-либы и проблеваться.

(Win/Linux хотя бы)

Особенно в контексте этого.

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

И по поводу «сишников». Поясню.

Тебе достаточно посмотреть на мир асм"а, где говнари ваяют убожество на 386 мусоре, называя это асм"ом. Ваяя убогое, ненужное и бездарное дерьмо. Зачем? Это имеет смысл? Нет. Асм не имеет смысла как язык - это не язык.

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

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

То же самое и с си. Си достаточно примитивный язык, абсолют в мире юникса( привет всякие вчерашние/сегодняшние админы и прочее). Си уже давно стал пхп. Когда-то тулился всем за партой, под видом си, либо С/С++. Сейчас за партой вещают о пистоне - результаты мы видим.

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

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

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

Если тебе нужно красиво и удобно - есть кресты. c89 - это полное убожество( в современных реалиях), и я вообще не понимаю - как на нём можно писать. Если только еду хочешь добывать, но на си без серьёзного бекграунда - это гиблое дело. Только в дерьме копаться.

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

А так, как хочешь. Твой выбор

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

NetSurf получше

Только что установил и пишу из него. Вот только почему он по внутренним ссылкам (меткам) не умеет нормально переходить, и copy/paste только с 3-его раза выходит?

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

NetSurf получше.

Поддерживает HTML 4 и CSS 2.1 (но не HTML5 и CSS3). Браузер быстр и нетребователен к ресурсам, но цена этого — отсутствие расширяемости и полноценной поддержки JavaScript

???

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

А что дает C11?

Не только с11, а и с99, ведь у тебя с89.

Объявление переменных везде, инициализацию {.field} и ТД, создание временных объектов/стековые аллокации через: (type){}. Не константные инициализаторы к тому же. Да, а безымянные структуры в структурах. Комментарии. Инлайн. Много чего в либах. ... в макросах.

Но даже с11 убог. https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html

Там есть __auto_type, raii через cleanup, typeof, определение констант, константные условия, диапазоны в кейсах/инициализаторах, атрибуты и множество лоулевел фишек.

Ты можешь даже лямбды наколхозить:

#define lambda(ret, args, body) ({ret __f args  {body;}; __f;})

void foreach(size_t len; int v[len], size_t len,  void f(int)) {
  for(size_t i = 0; i < len; ++i) f(v[i]);
}

int main() {
  int v[10] = {[0 ... 9] = 1};
  
  __auto_type add = lambda(int, (int a, int b), { return a + b; });
  
  foreach(v, 10, lambda(void, (int x), {fprintf(stderr, "%d ", add(x, 10));}));
}

Конечно, подобное(лямбды) работает чисто случайно, но всё же.

Всё перечислять очень долго.

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

Рендер баганный, сам браузер ошибками плюется. В NetSurf хоть работает то что есть.

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

Браузер пишу.

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

Безобразие происходит с вебом, браузеры это следствие.

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

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

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

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

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

И в удачу в привличении того, кто мог бы хоть чем-то помочь по проекту, даже просто побыть собеседником в рассуждениях :)

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

Мне вроде и на С нормально, взял все же glib, довольно удобно.

лол, ну и смысл тогда от C? лучше уже сразу C++ брать, там всё то-же самое только серьёзнее и больше статических проверок.

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

Пока не вижу необходимости в плюсах, увижу - перепишу.

если тебе нужен glib то тебе на самом деле нужен C++.

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

лучше уже сразу C++ брать, там всё то-же самое только серьёзнее и больше статических проверок.

и работает быстрее

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

Ну это еще почему?
double sum = atof(«5») + atof(«5.43»);

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

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

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

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

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

А ты знаешь, сколько кода в хроме или лисе? 5-10 миллионов строк. Вот столько кода нужно, чтобы современный веб показывать. Это практически XP или линукс лет 10-15 назад. Одному человеку такое и за всю жизнь не написать.

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

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

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

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

Браузер пишу. Лол. Не смейтесь там!

Звучит не смешно, а грустно...
Какие преимущества планируются? Если браузер не намечается в стиле suckless, то не лучше присоединиться, например, к Otter?

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

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

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

дико переценен

Что-ж тогда гуру-сишники не гребут бабки за веб в две лопаты?

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

Сайт на си за пару дней? Без утечек и «корок»?

потому что если бы спрашивали - было бы разнообразие

Где вы смотрите? Гуглопочта от ЛОРа отличается )) А магазины - да насрать мне на рюшечки, а нормальных фильтров нет не потому, что их сложно или дорого запрограммировать, а просто задолбаешься расписывать каждый товар по 48 критериям.

поэтому имеем то, что имеем: УГ в контенте и браузеры, жрущие ресурсы, как не в себя

Как контент зависит от разрабов? Или они и его должны производить? А звезда заказчик должен сформулировать только одно требования «хочу няшку!»?

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

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

Сайт на си за пару дней? Без утечек и «корок»?

Если что, бэкенд — это лишь верхушка айсберга! Основную массу трудов занимает разработка CSS и заполнение исходников на хытымле. Плюс портянки на жабоскрипте, которых в итоге получается в разы больше, нежели исходников серверной стороны.

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

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

Очертить границы применимости своего утверждения сам удосужишься? А то на ум сразу приходят всякие твитеры, агрегаторы, те-же некоторые гугловские «произведения»...

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

вот это и есть идеология говнокода. в её чистом виде.

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

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

Если браузер не намечается в стиле suckless

Намечается.

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