2009-07-19 8 views
2

Je suis en train de coder dans un langage embarqué appelé JS.Travailler avec un langage interprété sévèrement limité

Je souhaite pouvoir appeler trois fonctions dans n'importe quel ordre. (ABC, ACB, BAC, BCA, ABC, CAB.)

L'astuce? La langue n'a pas de fonctions définies par l'utilisateur.

Il possède une construction conditionnelle et une construction en boucle.

Je pense avoir trois choix.

  1. Dupliquer tout un tas de code.
  2. Ecrivez un préprocesseur (qui créerait tout le code dupliqué).
  3. Effectuez une boucle avec trois itérations, en utilisant un tableau pour contrôler quelle fonctionnalité est appelée à chaque passage de la boucle.

Je déteste # 1. Le code dupliqué est méchant. Comment puis-je changer quoi que ce soit sans foirer?

Je suppose que # 2 est OK. Au moins, je n'ai pas de code dupliqué dans la source. Mais mon code de sortie est ce que je vais déboguer, et je me demande si je veux en diverger. Sur le plan positif, je pourrais ajouter un tas de sucre à la langue.

Je pense que mon meilleur pari est # 3.

D'autres idées? Il n'y a pas de goto. Pas de fonctions. Aucun préprocesseur existant.

Ce qui est amusant à propos de # 3, c'est qu'il est essentiellement le fameux/cauchemar.

+1

Je suis un peu curieux à propos de cette langue, mais chercher sur le Web pour JS, c'est trouver beaucoup de Javascript et pas beaucoup de cette langue embarquée. Avez-vous un bon point de départ? –

+3

http://www.reaper.fm/sdk/js/js.php – Nosredna

+0

Je veux être capable d'appeler un bit-concasseur, filtre passe-bas, et un effets audio waveshaper (par exemple) dans n'importe quel ordre. – Nosredna

Répondre

3

Peut-être une sorte d'état machine mutant, à savoir:

int CODEWORD=0x123; 

while (CODEWORD) 
{ 
    switch(CODEWORD&15) 
    { 
    case 1: 
     /// case 1 
     break; 
    case 2: 
     /// case 2 
     break; 
    case 3: 
     //// case 3 
     break; 
    } 
    CODEWORD=CODEWORD>>4; 
} 

sec, pas préprocesseur, aucun tableau. pour/switch semble quelque peu inévitable.

+0

Droite. Il n'y a pas de commutateur. donc je vais devoir faire semblant avec le conditionnel, qui est un ternaire. J'aime que ça évite le tableau. – Nosredna

+0

Juste édité; était en train de déplacer les octets pas grignoter. –

+0

Aussi, soyez averti que ce code exécutera 3, puis 2, puis 1! –

3

Vous pouvez utiliser le préprocesseur C au lieu d'écrire le vôtre. Cela vous permettrait au moins de l'essayer pour voir si c'est une solution réalisable.

+0

Oui, je pourrais le faire. Ce qui m'arrête, c'est que le langage intégré peut être changé à la volée, ce qui est plutôt cool. Un préprocesseur serait en train de nettoyer le flux, mais pourrait vraiment aider à garder le code sain. – Nosredna

1

La meilleure solution technique (en supposant que vous ayez accès au code ou aux développeurs) est de modifier le langage JS pour faire ce dont vous avez réellement besoin.

A défaut, la meilleure solution dépend des aspects du problème que vous ne l'avez pas expliqué:

  1. sont les « fonctions » récursive?
  2. y a-t-il des paramètres de fonction?
  3. Avez-vous besoin (avez-vous besoin de) d'autres structures de contrôle non fournies dans JS?
  4. L'ordre d'appel de la fonction dépend-il des paramètres d'exécution? Avez-vous suffisamment de compétences et de confiance pour concevoir et implémenter un langage de préprocesseur qui répond à vos besoins actuels et projetés?
  5. est la mise en œuvre d'un préprocesseur va vous sauver/collaborateurs temps à long terme?

Si les réponses à 5. et assez des autres sont « oui », alors votre option # 2 est la bonne réponse. Sinon ... une solution laide comme votre # 1 ou # 3 pourrait être une meilleure idée.

EDIT: Si vous n'avez pas accès au code source et que l'équipe de développement ne répond pas à vos besoins, envisagez de rechercher une alternative open-source.

+0

Bonnes questions. 1. Non. 2. Non transmis, évidemment, car il n'y a pas de fonctions utilisateur, mais ils vont accéder aux variables globales et à la mémoire. 3. Pas besoin, mais voudrait. 4. Oui. L'utilisateur peut changer à tout moment. 5. Oui. 6. Pas sûr. C'est ce que je mijote. – Nosredna

+0

Pas pratique de modifier la langue. La source est fermée et l'exécutable change souvent. Et il y a aussi un débogueur en temps réel auquel je devrais me raccrocher. Peut-être que je devrais envoyer un courriel à Justin Frankel et lui dire que je veux un travail sur ce sujet. :-) – Nosredna

+0

Ou cherchez une alternative open source. –