8
votes

Écriture rapide des programmes C à l'aide d'un sous-ensemble de la syntaxe Python

J'essaie constamment d'optimiser mon temps. L'écriture d'un code C prend beaucoup de temps et nécessite beaucoup plus de touches de clavier que de dire un programme Python.

Toutefois, afin d'accélérer le temps nécessaire pour créer un programme C, on peut automatiser de nombreuses choses. J'aimerais écrire mes programmes en utilisant Smth. comme python mais avec une sémantique C. Cela signifie que tous les mots-clés sont des mots-clés C, mais la syntaxe est optimisée. P>

Par exemple, ce code C: P>

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


7 commentaires

Je prédis que quiconque doit maintenir ce code après que vous vous détesterez avec une passion ardente si vous le faites.


Tout cela pour éviter de taper des crochets et des points-virgules frisés?


Cela me rappelle beaucoup de ces programmeurs tragiques réfugiés Pascal qui commencent chaque projet avec un fichier d'en-tête contenant #define commencent { et #define fin} .


Je prends habituellement plus de temps en pensant que de taper, de sorte que de telles choses soient gaspillées sur moi :)


Je vous suggère de rechercher sur le Web pour "obscurcie c". Il y a un concours avec des entrées. Beaucoup d'entre eux utilisent #define pour raccourcir les mots-clés et les idomes. C'est peut-être ce que vous devez raccourcir votre temps de taper lorsque le reste d'entre nous travaille sur la lisibilité, l'exactitude et la maintenabilité, au coût de quelques commentaires supplémentaires et à des coups de frappe.


J'ai trouvé les réactions négatives à cette question vraiment surprenante. Comment cela est-il fondamentalement différent du script de café? Ou plus à peu près, zencodage? Je pense que la même idée pourrait s'appliquer à C, bien que je suggère une approche de type zencodage. Tapez une pseudo-langue compacte et développez automatiquement la version complète et correctement indentée de C.


@DJS +1 c'est vrai, je ne comprends pas non plus pourquoi cela peut provoquer une réaction négative. C a une mauvaise lisibilité (comparée à Python). Au lieu d'inventer de nouvelles langues / compilateurs, il doit y avoir un peu d'utilité ou de l'IDE qui peut simplement générer un code C. L'autre question est que la nouvelle syntaxe devrait ressembler exactement? Étant donné que la syntaxe de Python est un peu lisible à ce jour, ce serait un bon point de départ.


9 Réponses :


1
votes

CYTHON peut vous aider. La voie habituelle d'utiliser Cython consiste à accélérer les modules en ayant une partie d'entre eux compilée à C. Cependant, il est parfaitement possible d'utiliser Cyron pour produire des fichiers PURE C PURE C à partir de la syntaxe de Python.

Cela a également un avantage de vous laisser écrire des informations sur Python si vous le souhaitez.


2 commentaires

Le site est en panne de guichet automatique, essayez un cache Google: 74.125.77.132/Search?q=cachetésdtjoaamj:www.cython.org/...


Bien sûr, le lien ne fonctionne pas si le site est bas, Sheesh. peut-être essayer à nouveau plus tard?



8
votes

Cython est conçu pour écrire des extensions Python, pas des programmes à part entière. La même chose est vraie pour Pyrex.

Même s'il est assez différent de votre exemple, Pypy pourrait être ce que vous recherchez. Il utilise un sous-ensemble Python (appelé Rpython, une sorte de python plus statique) pour générer du code à différents backends - y compris C. Cela ne vous permettra pas de contrôler de la structure de données à grain fin, mais essayez-le d'essayer .

Que demandez-vous est vraiment un dialecte C différent et quelque peu plus facile - alors qu'il pourrait ne pas être une mauvaise idée en soi, il y a déjà beaucoup de langages de programmation différentes dans le monde entier, et ce serait un problème si Tout le monde a inventé un nouveau dialecte pour chaque application à écrire.

Si vous pensez que C est trop verbeux ou trop lowlevel pour vos besoins, essayez cette approche:

  • Écrivez votre programme à Python
  • profilez-le et trouvez quelles parties ont vraiment besoin de vitesse
  • isolez ces pièces dans des modules bien définis
  • Réécrivez ces parties par PYREX ou CYTHON

    Et vous obtiendrez probablement une grande lisibilité, la maintenabilité et la vitesse.


2 commentaires

Je ressens personnellement que beaucoup de choses syntaxiques dans C sont obsolètes. Une seule fois, presque toutes les applications de système de bas niveau sont écrites en C et il n'y a pas de langue alternative pour cette zone d'application.


Bien que cela puisse être vrai - ou non, selon le contexte - la vôtre n'est pas la meilleure solution. Essayez de limiter C-TRUE C - dans le contexte où il est vraiment nécessaire et utilisez d'autres langues pour «coller».



1
votes

Jetez un coup d'œil à "Go" ....

http://golang.org/


3 commentaires

La syntaxe de Go n'est pas beaucoup plus simple que c, et ce n'est pas un script Vim


Go est basé sur C, et a des influences de Python. Non, ce n'est pas un script Vim, c'est un langage de programmation impératif. Pourquoi utiliser un piratage de l'éditeur de texte sur une convention d'une partie inférieure lorsqu'une langue entière a été conçue avec une syntaxe plus simple à l'esprit?


@Petekirkham je n'ai pas essayé d'aller, mais il semble que c'est plus lisible. Seul Semicolon Le retrait et les noms de type à la fin le rendent au moins beaucoup plus près du niveau de lisibilité "adéquat".



2
votes

Si vous souhaitez taper moins C, vous n'avez pas besoin de tours de syntaxe.

Vous avez besoin d'une bibliothèque de constructions de niveau supérieur et de niveau supérieur afin de taper moins de c, pas moins de caractères pour créer pseudo-c.

Si vous aviez une bibliothèque de constructions de niveau supérieur, vous pouvez écrire des programmes correctement orientés objet dans une syntaxe courte et facile à lire.

Prendre ceci à l'extrême logique, vous pouvez créer de belles bundles de bibliothèque appelables de Python. Ensuite, vous pouvez passer à Python, tapez moins et obtenir la même quantité de travail effectuée.


0 commentaires

4
votes

Avez-vous profilé ce que vous passez du temps sur - vous voulez vraiment échanger de la maintenabilité pour sauver quelques coups de frappe?

Lorsque j'écris du code, je passe la plupart de mon temps lire code.

Peut-être que vous êtes juste un très Typer lent ...; -)


1 commentaires

L'OP devrait enquêter sur le processus logiciel personnel de Carnegie Mellon. L'un des attributs est de savoir comment quantifier votre temps de développement, qu'il s'agisse de concevoir, de codage ou de test. Le profilage de ce niveau est ce que l'OP a besoin.



1
votes

J'ai écrit quelques scripts Vim pour diverses choses. J'ai également dû écrire un analyseur lexical, un analyseur et une interprète de zéro pour une classe. Ceci est un très mauvaise idée.

  1. Écrire un script VIM pour traduire votre syntaxe en syntaxe C n'est pas une chose triviale. Déjà écrit un analyseur lexical? Un analyseur? Parce que c'est ce que serait votre script Vim. Analyseur lexical / analyseur / compilateur / interprète. Qui serait un cauchemar à faire dans le script Vim.

  2. Il faudrait un temps long pour écrire suffisamment de votre code de syntaxe modifié pour récupérer le temps nécessaire pour écrire et tester n'importe quel interprète (non seulement un script Vim, bien que Ce serait probablement une limite supérieure) qui ferait le genre de traduction dont vous parlez.

  3. Même si vous avez réussi à créer votre syntaxe-interpréteur, sauf si vous n'avez pas enregistré le fichier dans la syntaxe C normale après l'avoir écrit, quiconque a déjà dû lire ce code voudrait te tuer. Et si vous aviez votre interprète enregistrant le fichier dans le CYNTAX NORMAL C CYNTAX, il était sorti, la prochaine fois que vous deviez maintenir / modifier le fichier, vous seriez droit à votre notion de code C prenant trop de temps pour que vous puissiez écrire.

  4. Si vous voulez être aventureux avec Vim Scripting, vous pouvez toujours écrire des scripts de vim ou des mappages / des abréviations pour rendre le tédium d'accolades et des points-virgules frisés beaucoup moins douloureux. que vaut la peine d'être fait.


0 commentaires

0
votes

On dirait que vous devez consacrer du temps à perfectionner l'utilisation des extraits, des abréviations, des macros, des autocomplets pour C. Vous gagnerez une vitesse avec un travail acharné et une pratique.

L'analogie sane la plus proche de ce que vous suggère est peut-être d'écrire HAML pour générer HTML. Mais c'est pour une langue déclarative non impérative.


0 commentaires

1
votes

Si c ++ est ok pour vous, contrairement à CYTHON et PYREX, La peau de hangar est utilisée pour convertir em> un sous-ensemble de Python à C ++ et compilez-la avec make / g ++. Le "sous-ensemble de Python" signifie que tout ce que vous codez est toujours python, mais vous ne pouvez pas utiliser tous les modules de Python (vous ne pouvez en réalité utiliser que quelques-uns d'entre eux) et vous ne pouvez pas utiliser de choses trop dynamiques. Étant donné que le code est converti en C ++ et compilé avec g ++, il est assez juste.

Par exemple: P>

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


0 commentaires

10
votes

J'ai fait un petit script python qui me permet d'utiliser c en syntaxe Python, comme:

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)


1 commentaires

C'est exactement ce que je cherche. Le script Python est-il disponible?