A minimalistic programming language written in C89.
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

55 rader
1.4 KiB

6 månader sedan
6 månader sedan
6 månader sedan
6 månader sedan
6 månader sedan
6 månader sedan
6 månader sedan
6 månader sedan
  1. #include "ink.h"
  2. #include <stdio.h>
  3. #include <time.h>
  4. int main(int argc, char** argv) {
  5. char read_buffer[2048];
  6. struct timespec start_time, end_time;
  7. clock_t begin, end;
  8. double time_spent;
  9. double s_total = 0;
  10. struct context* ctx;
  11. char** end_argv;
  12. ctx = ink_make_default_context();
  13. end_argv = argv + argc;
  14. for(argv+=1; argv != end_argv; argv++) {
  15. FILE* file;
  16. size_t cnt;
  17. file = fopen(*argv, "r");
  18. cnt = fread(read_buffer, 1, 2047, file);
  19. if(cnt == 0) {
  20. fprintf(stderr, "Can't read file !! -> %s\n", *argv);
  21. }
  22. read_buffer[cnt] = 0;
  23. ink_compile(ctx, read_buffer);
  24. if(ctx->panic) {
  25. fprintf(stderr, "Panicked !! -> %d\n", ctx->panic);
  26. }
  27. fclose(file);
  28. }
  29. int increment = 1 << 16;
  30. int counter = increment;
  31. int c;
  32. begin = clock();
  33. clock_gettime(CLOCK_MONOTONIC, &start_time);
  34. while(ink_can_run(ctx)) {
  35. for(c = 0; c < 64; ++c)
  36. ink_step_everyone(ctx);
  37. if(ctx->steps < counter) {
  38. ink_gc(ctx);
  39. counter += increment;
  40. }
  41. }
  42. clock_gettime(CLOCK_MONOTONIC, &end_time);
  43. end = clock();
  44. time_spent = ctx->steps/(double)((end - begin) / CLOCKS_PER_SEC);
  45. s_total += (end_time.tv_sec - start_time.tv_sec) + (end_time.tv_nsec - start_time.tv_nsec) / 1.0e9;
  46. s_total = ctx->steps / s_total;
  47. printf("\nExecuted in %u steps\nCollected %u times\nExecution freq: %lfHz\n", ctx->steps, ctx->collections, s_total);
  48. return ctx->panic;
  49. }