2009-07-21 10 views
12

Je suis sûr que je rejoins beaucoup d'être heureux qu'il y ait enfin un langage puissant lié étroitement à un cadre de base de données/interface graphique/communication.Si les opérateurs Ascii sont définissables, pourquoi ne pas utiliser les symboles Unicode?

Je n'ai pas été sûr de l'endroit où publier ce message, mais voici le meilleur endroit.

Je dois utiliser des caractères de symbole Unicode soit en tant qu'opérateurs, soit en tant que noms de fonctions. Je voudrais du sucre syntaxique, mais je n'en ai pas besoin. Guy Steele a souligné dans Communications de l'ACM que "*" était un choix forcé quand il a été adopté par Ascii comme multiplication, mais mon logiciel fonctionne en Unicode, donc je ne suis plus attaché à Ascii.

$% & * + -/< =>, @^| ~:.

Une partie de localisation comprend les programmeurs locaux?. Pourquoi limiter l'ensemble des opérateurs qui peuvent être définis en F #? Il n'est pas orthogonal à l'acceptation par C# et F # de nombreux IsLetter Unicode dans les identifiants. En outre, F # est susceptible d'être utilisé pour la manipulation symbolique de problèmes de logique, mathématiques, physiciens, etc. Cela rend le travail beaucoup plus facile s'il y a un mappage direct dans la langue des opérateurs de base. (F # et C# acceptent plusieurs Unicode IsLetter? Ainsi que IsDigit '? Ceci est une demande pour autoriser Unicode IsSymbol? As des opérateurs avec la précédence de, par exemple, *, ou, puisque "+" est un opérateur unaire et binaire, Je peux supporter la précédence de + et faire la différence avec les groupes entre parenthèses

Considérons les besoins spécifiques au domaine des logiciens, mathématiciens, physiciens, etc. Je préfère écrire un différenciateur symbolique ou un intégrateur en utilisant des symboles mathématiques. que les permutations Ascii des opérateurs déjà prises

  • Logic. ∀ ∃ ⇒
  • Math: Σ ∫ ∂
  • théorie groupe: ≤ ≥ ∈ ∉
  • la théorie des ensembles: ⊆ ⊇ ⊃ ∪ ∩
  • tenseurs: ⊗

J'ai écrit beaucoup de langues dans d'autres langues, mais parce que F # est bien .Net- intégré, ce problème pose des défis particuliers sans prise en charge linguistique:

Il est trivial de concocter un traducteur qui prend la source F # de l'opérateur Unicode et le mappe, ligne par ligne, à la source F # de l'opérateur Ascii.

Mais lors du débogage, comment puis-je m'assurer que le programmeur voit toujours sa source non traduite? Et qu'ils peuvent voir des valeurs variables.

Opérateurs et les convertit est trivial. Mais comment puis-je m'assurer que la traduction est compilée, alors que le programmeur voit sa propre source? Si je mappe ligne-pour-ligne correctement, comment puis-je m'assurer qu'ils peuvent toujours pointer sur une variable et voir sa valeur?

+0

J'ai ajouté la balise f #, mais de le faire, je devais me débarrasser de l'étiquette de mathématiques. Je pense que c'est un commerce équitable (le problème principal ici est quelque chose que les gens pourraient maintenant, plutôt que quelque chose pour les mathématiciens à réfléchir) – tialaramex

+3

Voir aussi http://cs.hubfs.net/forums/thread/9690.aspx – Brian

Répondre

1

D'autres langues, telles que Scala, faire des opérateurs de permis en dehors de la plage ASCII - symboles mathématiques (Sm) et d'autres symboles (So)

1

Vous pouvez être intéressé par Project Fortress qui est un nouveau langage de programmation fonctionnelle embrasse le jeu de caractères Unicode (parmi de nombreuses autres fonctionnalités). En particulier, voir la page Mathematical Syntax in Fortress qui contient quelques exemples de code.

+0

Mon intérêt est fort dans F # parce que .Net peut être utilisé pour créer n'importe quelle application qui n'a pas besoin des performances C++. Et Project Fortress semble intéressant. Merci. –

2

Il y a une extension de symboles mathématiques (Unicode) pour F # disponible dans le Visual Studio Gallery.

Cela vous permet de définir des symboles Unicode, .: par exemple

let inline (~∑) xs = xs |> Seq.sum 

let total = ∑myList