psi*_*lia 6 c python syntax vim scripting
我一直在努力优化自己的时间.编写C代码需要花费大量时间,并且需要比编写Python程序更多的键盘触摸.
但是,为了加快创建C程序所需的时间,可以自动化许多事情.我想用smth写我的程序.像Python一样,但有C语义.这意味着,所有关键字都是C关键字,但语法已经过优化.
例如,这个C代码:
#include "dsplib.h"
#include "coeffs.h"
#define MODULENAME "dsplib"
#define NUM_SAMPLES 320
typedef float t_Vec;
typedef struct s_Inter
{
char *pc_Name;
struct s_Inter *px_Next;
}t_Inter;
typedef struct s_DspLibControl
{
t_Vec f_Y;
}t_DspLibControl;
void v_DspLibName(void)
{
printf("Module: %s", MODULENAME); printf("\n");
}
int v_DspLibInitInterControl(t_DspLibControl *px_Con)
{
int y;
px_Con->f_Y = 0.0;
for(int i=0;i<10;i++)
{
y += i * i;
}
return y;
}
Run Code Online (Sandbox Code Playgroud)
在优化的pythonized版本中可以看起来像:
include dsplib, coeffs
define MODULENAME="dsplib", NUM_SAMPLES=320
typedef float t_Vec
typedef struct s_Inter:
char *pc_Name
struct s_Inter *px_Next
t_Inter
typedef struct s_DspLibControl:
t_Vec f_Y
t_DspLibControl
v_DspLibName():
printf("Module: %s", MODULENAME); printf("\n")
int v_DspLibInitInterControl(t_DspLibControl *px_Con):
int y
px_Con->f_Y = 0.0
for int i=0;i<10;i++:
y += i * i
return y
Run Code Online (Sandbox Code Playgroud)
我的问题是:你知道任何VIM脚本,它允许将原始的pythonized C代码转换为标准的C代码吗?例如,一个是编写C代码但使用pythonized语法,一旦她决定将pythonized块转换为标准C,她就选择这样的块并按下某个键.当然,她没有保存这样的pythonized代码,VIM将其转换为标准C.
小智 8
我做了一个小Python脚本,让我在Python语法中使用C,如下所示:
void quicksort(int* lst, int left, int right):
int i, j, p, tmp
i = left
j = right
p = lst[(i + j) / 2]
while i <= j:
while lst[i] < p: i++
while lst[j] > p: j--
if i <= j:
tmp = lst[i]
lst[i] = lst[j]
lst[j] = tmp
i++
j--
if left < j: quicksort(lst, left, j)
if i < right: quicksort(lst, i, right)
Run Code Online (Sandbox Code Playgroud)
非常简单,只需查看行并检查一些模式并更改缩进以生成标准C代码.效果很好,imho读取比分号和括号更好.我不明白为什么你们这些人非常讨厌这个想法.你怎么看?
Cython旨在编写python扩展,而不是完整的程序.Pyrex也是如此.
即使它与你的例子完全不同,PyPy可能就是你正在寻找的东西.它使用Python子集(称为RPython,一种更为静态的python)来为不同的后端生成代码 - 包括C.它不会让你对数据结构进行细粒度的控制,但是试一试.
你要求的是一个不同的,有点简单的C方言 - 虽然它本身可能不是一个坏主意,世界上已经有很多不同的编程语言,如果每个人都发明了一个,这将是一个很大的问题.应该写的每个应用程序的新方言.
如果您认为C过于冗长或过低,无法满足您的需求,请尝试以下方法:
而且你可能会获得很好的可读性,可维护性和速度.