Ускорение пишущий C программы с помощью подмножества синтаксиса Python

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

Однако для ускорения времени, требуемого создать программу C, можно автоматизировать много вещей. Я хотел бы записать свои программы с помощью чего-то как 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;
} 

в оптимизированной 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

Мой вопрос: Вы знаете какой-либо сценарий VIM, который позволяет переводить исходный pythonized C код в стандарт C код? Например, каждый пишет код C, но использует pythonized синтаксис, после того как она решает перевести pythonized блоки в стандарт C, она выбирает такие блоки, и нажмите некоторую клавишу. И она не сохраняет такой код pythonized, конечно, VIM переводит его в стандарт C.

6
задан 2 revs 16 December 2009 в 10:56
поделиться

8 ответов

Cython предназначен для написания расширений python, а не полноценных программ. То же самое и с Pyrex.

Несмотря на то, что он сильно отличается от вашего примера, PyPy может быть тем, что вы ищете. Он использует подмножество Python (называемое RPython, что-то вроде более статичного питона) для генерации кода для разных бэкэндов, включая C. Он не позволит вам детально контролировать структуры данных, как вы хотите, но попробуйте .

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

Если вы думаете, что язык C слишком многословен или слишком низок для ваших нужд,

7
ответ дан 8 December 2019 в 05:55
поделиться

Have you profiled what you actually spend time on --- you really want to trade maintainability for saving a few keystrokes?

When I write code, I spend most my time reading code.

Perhaps you're just a very slow typer... ;-)

4
ответ дан 8 December 2019 в 05:55
поделиться

Have a look at "Go"....

http://golang.org/

1
ответ дан 8 December 2019 в 05:55
поделиться

Если вы хотите печатать меньше C, вам не нужны синтаксические уловки.

Вам нужна библиотека лучшего , конструкции более высокого уровня, так что вы фактически набираете меньше C, а не меньше символов для создания псевдо-C.

Если бы у вас была библиотека с более качественными конструкциями более высокого уровня, вы могли бы писать правильно объектно-ориентированные программы за короткие и простые слова. читать синтаксис.

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

1
ответ дан 8 December 2019 в 05:55
поделиться

Cython может вам помочь. Обычный способ использования cython - ускорить работу модулей за счет того, что часть из них скомпилирована в C. Однако вполне возможно использовать cython для вывода чистых файлов C с синтаксисом, подобным python, если вы будете осторожны.

Это также имеет преимущество в том, что позволяя писать модульные тесты на Python, если хотите.

1
ответ дан 8 December 2019 в 05:55
поделиться

Похоже, вы должны посвятить некоторое время, чтобы совершенствовать использование сниппетов, сокращения, макросы, autocompletes для C. Вы будете набирать скорость с тяжелой работой и практикой.

Самая близкая разумная аналогия тому, что вы предлагаете, - это, возможно, написание HAML для генерации HTML. Но это для декларативного языка не императивный.

0
ответ дан 8 December 2019 в 05:55
поделиться

I've written a few Vim scripts for various things. I also had to write a lexical analyzer, parser, and interpreter from scratch for a class. This is a very bad idea.

  1. Writing a vim script to translate you syntax to C syntax is not a trivial thing. Ever written a lexical analyzer? a parser? Because that's what your Vim script would be. A lexical analyzer/parser/compiler/interpreter. Which would be a nightmare to do in Vim script.

  2. It would take a long time to write enough of your modified-syntax code to recoup the time it would take to write and test any interpreter (not just a Vim script one, although that would probably be an upper bound) that would do the kind of translation you're talking about.

  3. Even if you were successful in creating your syntax-interpreter, unless you had it save the file in normal C syntax after you wrote it, anyone who ever had to read that code would want to kill you. And if you had your interpreter save the file in the normal C cyntax it was outputting, next time you had to maintain/modify the file, you'd be straight back to your notion of C code taking too much time for you to write.

  4. If you want to be adventurous with Vim scripting, you could always write some Vim scripts or mappings/abbreviations to make the tedium of curly braces and semicolons a lot less painful. That would be worth doing.

0
ответ дан 8 December 2019 в 05:55
поделиться

Если C ++ вам подходит, в отличие от Cython и Pyrex, Shed Skin используется для преобразования подмножества из Python в C ++ и скомпилируйте его с помощью make / g ++. «Подмножество Python» означает, что все, что вы кодируете, остается Python, но вы не можете использовать все модули Python (на самом деле вы можете использовать только некоторые из них), и вы не можете использовать слишком динамичный материал.Поскольку код преобразован в C ++ и скомпилирован с помощью g ++, это достаточно справедливо.

Например:

# Actually, in Python, this is one line:
matrix = [[1, 2, 3], [4, 5, 6]]
zipped = zip(*matrix)
# But, Shed Skin has some restrictions for this, so you have:
matrix = [[1, 2, 3], [4, 5, 6]]
zipped = zip(matrix[0], matrix[1])

Shed Skin использует вывод типов, поэтому

x = 4.0 # OK
x = 5.0 # OK
x = "foo" # OK in Python, but Shed Skin will not compile this

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

0
ответ дан 8 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: