to post messages and comments.

← All posts tagged C

Интересный текст richardhaskell.com
коротко, хардварная имплементация раз в 10 быстрее чем реализация на ЯП, Си как обычно тормозит, FORTH-процессоры это ня, надо зопейлить таковой на своей плисине, можно попробовать уходить в крайности RISC/CISC и посмотреть что — лучше, а что — хуже.

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

Я что спросить хотел, как с такого рода ошибками в более других чем C языках дело обстоит? Сразу отмечу что статический анализатор ничто не сказал потому что ошибка алгоритмическая. Что там хаскель? Что теоретически можно придумать чтобы в torth сделать лучше?

C code ?

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

#define pc_input_size 1024
#define pc_input_packet 256
uint16_t pc_input_write_pointer= 0;
uint8_t pc_input_buffers[pc_input_size];
uint16_t pc_input_read_pointer= 0;
uint16_t pc_input_toread()
{//if return is zero, nothing to read, else read from returned address
  if (pc_input_read_pointer > (pc_input_size - pc_input_packet))
    pc_input_read_pointer= 0;
  if (pc_input_read_pointer==pc_input_write_pointer)
    return 0;
  else
    return pc_input_buffers+pc_input_read_pointer;
}
uint16_t pc_input_towrite(uint16_t amount)
{//if return is zero, could not write, else write to returned address
  if (pc_input_write_pointer > (pc_input_size - pc_input_packet))
    pc_input_write_pointer= 0;
  if (pc_input_write_pointer > pc_input_read_pointer)
    return pc_input_buffers+pc_input_write_pointer;
  else if (pc_input_read_pointer - pc_input_write_pointer > pc_input_packet)
    return pc_input_buffers+pc_input_write_pointer;
  else return 0;
}