Le langage de programmation le plus hallucinant? [fermé]

45

D'après un langage de programmation relativement commun, lequel des deux est le plus déroutant?

J'ai écouté beaucoup de podcasts de programmation et j'ai pris le temps d'apprendre de nouvelles langues considérées comme importantes et à venir. Je ne parle pas nécessairement de BrainFuck , mais quelle langue considéreriez-vous comme une langue qui défie les paradigmes de programmation courants?

En ce qui me concerne, j’ai fait de la programmation fonctionnelle et logique (par exemple, Prolog ) dans les années 90, je ne peux donc pas dire que j’y trouve rien de spécial.

Je suis loin d’être un expert en la matière, mais même aujourd’hui, le langage de programmation le plus déroutant pour moi est Perl . Non pas parce que "Hello World" est difficile à mettre en œuvre, mais il y a plutôt une telle flexibilité lexicale que certaines des solutions les plus difficiles peuvent être décomposées de manière si poétique que je dois sortir de mon terminal pour me vider la tête. Je ne dis pas que je vendrais probablement une implémentation logicielle commerciale, mais simplement que Perl est si (si) célèbre. Il suffit de regarder la liste de base des livres à ce sujet.

Alors, quel est votre langage hallucinant qui fait la promotion de vos meilleurs programmes et pratiques ?

Xepoch
la source
Ne peut-il pas être hallucinant et en rester là?
4
N'importe quelle langue où l'espace blanc est important!
Mootinator
@mootinator - Mais travailler avec Python est plutôt amusant tant que votre éditeur de texte ne vous cause pas de problèmes.
Rjzii
1
@Thorbjorn Est-ce que quelqu'un va ajouter INTERCAL? APL est un projet de lycée comparé à ce grand papa.
Marc C
Perl est loin d'être le plus difficile. J'ai 12 ans et je peux très facilement programmer Perl.
Dynamic

Réponses:

73

APL

Cette langue est incroyablement puissante et très laconique, elle va faire mal à votre cerveau.

Pour les débutants, il est difficile de l'utiliser sans un clavier personnalisé, ou du moins une superposition de clavier pour afficher tous les symboles obscurs qu'il utilise.

Clavier APL

Ensuite, le langage est du paradigme basé sur les vecteurs / matrices et se spécialise dans l'algèbre linéaire complexe. La version originale ne comportait même pas de construction de boucle, ni aucun élément en chaînant ensemble des opérateurs de tableau plutôt inhabituels.

  • strip_tags()n'importe qui? (emprunté à Wikipedia)

strip_tags () ala APL

Orbling
la source
18
+1 pour montrer le clavier
tcrosley
5
@tcrosley: C'est bien si vous en avez une vraie: wickensonline.co.uk/apl/unicomp-apl-top-large.jpg
Orbling, le
4
Et si cela ne suffisait pas déjà, certains opérateurs ont nécessité l’utilisation de la touche backspace / surestimation. Par exemple, l'inverse de la matrice était la boîte carrée (sur la touche L) recouverte d'un signe de division (celle située à côté de la touche de menu arrière dans le coin supérieur droit de l'image du clavier).
Tangurena
2
J'ai des flashbacks au début des années 1980, lorsque j'ai utilisé APL pour effectuer une analyse de régression statistique de haut niveau, les gens l'utilisent encore? Frémir.
HLGEM
2
J'ai déjà fait beaucoup d'APL une fois - il garde toujours une place nostalgique pour moi ... J'aimais ça à l'époque.
Rapidement maintenant
56

Haskell . C'est très proche d'être purement fonctionnel, ce à quoi la plupart des gens ne sont pas habitués; très exigeant, ce qui est utile une fois que vous savez ce que vous faites mais frustrant jusque-là; a une syntaxe plutôt cryptique et hautement symbolique, ce qui est génial une fois que vous la connaissez mais opaque avant cela ... la liste est longue.

En outre, il est tout simplement impossible de formater les éléments d’une manière qui me convient.

Jon Purdy
la source
7
J'aurais aussi dit Haskell, mais pas parce que c'est crypté. Bien que cela puisse certainement être difficile à comprendre, le plus étonnant, c'est la théorie qui la sous-tend. Monade et Arrows sont encore un domaine que je n'ai pas encore conquis :)
Matthieu M.
11
Pourquoi "Très proche d'être purement fonctionnel"? C'est purement fonctionnel.
dan_waterworth
4
Je voudrais me citer et ajouter à la façon dont Haskell vous plonge dans l’esprit: "Haskell vous empêche de mettre des choses sous le tapis, vous oblige à traiter explicitement la structure de votre programme et vous apprend un langage pour décrire ces structures. : la langue des types. Comprendre les types, particulièrement ceux riches comme Haskell, fera de vous un meilleur programmeur, peu importe la langue. " programmers.stackexchange.com/questions/28950/…
Waquo
14
Haskell est un langage de programmation purement fonctionnel. Le code que vous écrivez dans Haskell est purement fonctionnel (tant que vous n'utilisez pas unsafePerformIO, etc.). IO-Monad est purement fonctionnel. Si vous croyez le contraire, vous ne comprenez pas comment les monades sont utilisées pour modéliser le contrôle-flux de manière purement fonctionnelle. Pensez à votre programme comme à une liste d'achats d'actions IO, une liste d'achats n'étant qu'une structure de données pure, aucun effet secondaire, et l'environnement d'exécution de la langue étant l'acheteur qui exécute les effets secondaires.
Waquo
8
@ Jon, on est d'accord: Haskell, le langage, est purement fonctionnel, mais son système d'exécution ne l'est pas. L'exécution d'un programme haskell est impure, mais le programme lui-même est pur.
dan_waterworth
30

Prolog. C'était tellement différent de tout autre langage que j'avais utilisé quand j'ai été exposé pour la première fois. J'aime ça, donc je ne déteste pas la syntaxe ou quoi que ce soit.

Matt H
la source
2
J'ai approché Prolog comme une programmation inversée, voulant déjà connaître mes réponses, puis programmer pour obtenir les questions :)
Jé Queue
1
@Xepoch: Je pense que vous êtes peut-être là, Prolog est en train de formuler la question. L'un des seuls langages 5GL appropriés utilisés.
Orbling le
En général, je pense que Prolog est très intéressant et exceptionnellement puissant, mais j’ai beaucoup de difficulté à maîtriser parfaitement le placement ( !).
Orbling le
+1 pour Prolog, j’avais un cours d’intelligence artificielle qui utilisait Prolog et c’est le seul cours d’informatique dans lequel j’ai mal
suivi
Prolog n'est cependant pas un langage de programmation fonctionnel. Être sûr de fonctionnel par Prolog, c'est un peu comme être sûr de la programmation procédurale par Lisp.
JUSTE MON AVIS correct le
24

Je suis d'accord avec vous sur Perl. C'est la syntaxe la plus moche que j'ai jamais vue. Ils disent que même les développeurs Perl ne peuvent pas se rappeler ce qu'ils ont écrit le lendemain.

Sorantis
la source
2
Def +1 sur Perl. J'aimais toujours beaucoup (je crois qu'on les appelle) les variables "implicites". Fait pour un excellent code en écriture seule.
GrandmasterB
2
Tout le monde écrit Perl de manière tellement différente qu'ils pourraient aussi bien écrire des langues différentes. Vous n'avez pas à apprendre simplement comment Perl fonctionne pour récupérer le code de quelqu'un d'autre, vous devez également apprendre comment cette personne l'a utilisé.
Glenatron
3
Bah à cette réponse et les deux commentaires à ce sujet. Bien écrit perl est facile à lire et à écrire. Baby-perl écrit par les débutants est simple, si verbeux. Le seul perl "illisible" est soit dissimulé à dessein, soit écrit dans un script.
Sean McMillan
22

Je devrais dire Forth . La notation que toutes les opérations sont des manipulations de pile. Dans sa forme pure, il n'y a pas de variables locales à utiliser.

Peter Mortensen
la source
10
FORTH est une langue merveilleuse. Au début des années 80, lorsque j'apprenais la programmation, j'avais un Atari 400 et mes choix étaient interprétés sous BASIC, Assembly et FORTH. J'ai utilisé tous les trois intensivement, mais FORTH plus que tout autre. J'ai toujours les livres ultra-classiques de Start FORTH et Thinking FORTH de Leo Brodie. En fait, si on me demandait de créer un langage d’auto-hébergement à partir de zéro sur un nouveau système matériel, je choisirais FORTH sans hésiter.
Adam Crossland
3
@Adam Crossland: la pensée est un grand FORTH livre, vous pourriez être intéressé par ce lien: thinking-forth.sourceforge.net
Orbling
1
@Orbling: les grands esprits se rencontrent. Il n'y a pas plus de 10 minutes, j'ai mis le PDF sur mon Kindle.
Adam Crossland
1
@Adam Crossland: Un bel endroit pour ça. Ce livre est généralement utile pour les programmeurs, devrait figurer sur la liste de lecture des personnes - intéressées ou non par FORTH.
Orbling le
1
Je suis entièrement d'accord Cela a beaucoup à dire sur la façon dont nous pensons résoudre les problèmes en général. Brodie est un penseur lucide et un écrivain clair. Ses œuvres sont une joie pour moi.
Adam Crossland
21

Ruby .

Cela me donne envie de me tuer:

1.month.from.now()

(Je pourrais avoir la syntaxe exacte incorrecte, mais vous obtenez le point).

Matthew Read
la source
23
OMG. Qui a jamais pensé que c'était une bonne idée?
EpsilonVector
8
Ce qui dérange, ce n'est pas à la lecture, c'est à l'écriture. Venir avec ce non-sens est difficile, et avoir à mémoriser / rechercher toutes les fonctions / propriétés intégrées est ridicule.
Matthew Lu
55
Est-ce seulement moi qui pense que cela a l'air génial, et est peut-être une bonne raison d'apprendre Ruby?
Orbling le
9
C'est génial à lire, oui. Mais est-ce que cela signifie que je peux écrire 3 mois à partir du plus tard. Non ou du moins, je ne le pense pas. Si je peux ... RoR peut être le premier langage télépathique de tous les temps.
morganpdx
15
Quel est le problème DateTime.Now.AddMonths(1);? Ces fonctionnalités rendent difficilement le code plus lisible. (Je ne dis pas que C # a la meilleure syntaxe. Vous pouvez le changer pour n'importe quelle convention de langue et cela s'appliquera toujours.)
ChaosPandion
18

Brainfuck

Quiconque peut honnêtement écrire cette moquerie d'une langue ne devrait même pas avoir besoin d'un fil comme celui-là.

Bonjour tout le monde (pointeurs à gauche; explication à droite):

+++++ +++++             initialize counter (cell #0) to 10
[                       use loop to set the next four cells to 70/100/30/10
    > +++++ ++              add  7 to cell #1
    > +++++ +++++           add 10 to cell #2 
    > +++                   add  3 to cell #3
    > +                     add  1 to cell #4
    <<<< -                  decrement counter (cell #0)
]                   
> ++ .                  print 'H'
> + .                   print 'e'
+++++ ++ .              print 'l'
.                       print 'l'
+++ .                   print 'o'
> ++ .                  print ' '
<< +++++ +++++ +++++ .  print 'W'
> .                     print 'o'
+++ .                   print 'r'
----- - .               print 'l'
----- --- .             print 'd'
> + .                   print '!'
> .                     print '\n'
Scott Stamp
la source
2
Ou que diriez-vous de Whitespace? Tout le mal de Brainfuck combiné avec du code invisible.
Loren Pechtel le
17

Lisp est ma dernière langue hallucinante.

J'ai emporté avec moi les monades et la programmation fonctionnelle de Haskell et j'ai maintenant des macros sur lesquelles travailler. J'entre dans CLOS et je n'ai pas du tout touché au système de condition.

Larry Coleman
la source
Je n'aime même pas les Lisps (à l'exception peut-être de Clojure - je n'y ai pas encore pris ma décision) et je vous ai donné un +1. La partie hallucinante est certainement là et ce que j’ai appris de Lisp, même si je ne l’utilise pas, a beaucoup éclairé ce que je fais dans d’autres langues.
JUSTE MON AVIS correct
14

OREILLONS

C'est un langage qui apparaît de temps en temps dans les articles en ligne et qui a l'honneur d'être utilisé en production pour stocker des informations essentielles sur la sécurité des personnes (c'est-à-dire les dossiers des patients). Toutefois, il s’agit également d’un langage dans lequel le sens de la densité est apprécié et où des fonctions telles que les suivantes peuvent apparaître dans le code de production (exemple tiré de l’article de Wikipedia sur le sujet):

s A="String" F i=1:1:$L(A) W $c($S($A($E(A,i))<91:$A($E(A,i))-52#26+65,1:$A($E(A,i))-84#26+97))
rob
la source
wow, vous ne plaisantez pas êtes-vous? Je n'ai pas trop dormi et soudain c'est le 1er avril? Rien avec autant de parenthèses et de signes monétaires ne devrait se trouver à proximité de mes dossiers de patients.
dan_waterworth
1
Mon premier emploi en programmation a été avec une entreprise spécialisée dans MUMPS! Malheureusement, j'avais suivi un cours universitaire sur le développement Web, alors ils m'ont mis dans l'équipe ASP nouvellement formée de la société plutôt qu'avec les anciens, mais MUMPS était le langage dans lequel nous avons été formés pendant nos premières semaines. J'ai peut-être eu une chance de m'échapper ...
thesunneversets
1
Quelqu'un qui a posté ici de Madison Wisconsin? Vérone, vraiment?
Hans Passant
1
Je crois que thedailywtf.com a toute une section dédiée à MUMPS. Cela ne ressemble pas à une langue que je voudrais toucher.
Tyanna
1
Je me souviens d’avoir appris M en milieu universitaire et d’avoir pensé que c’était intéressant comme langue à des fins spécifiques. La concision qu'elle permet est comme une sorte de minification perverse. Dans ma naïveté, je pensais que le code de production ne contiendrait que très peu de la sténographie extrême du langage. La première et unique fois que j'ai vu une production de code M en production, mon intestin s'est resserré ... cela ressemblait à votre exemple. Oh, l'horreur!
ajk
13

Je dirais Coq , ou une autre implémentation de la théorie des types dépendants. Le système de types de Haskell n’est pas très expressif comparativement. Le passage à un système de type plus expressif (par exemple, le calculus de constructions (CoC)) vous permet de réaliser des tâches soignées, telles que prouver les propriétés de programmes dans le langage et incorporer des invariants forts dans vos types, qui peuvent être vérifiés statiquement.

Peter Mortensen
la source
2
Tout type dépendant système / prouveur / langage serait probablement plus déroutant que les langages ordinaires, donc +1.
Orbling le
1
La vérification formelle des programmes est une chose sur laquelle je commence tout juste. Cela fait certainement perdre la tête et devient de plus en plus utile dans le monde réel. +1
dan_waterworth
7

Objective-C . Pour être juste, je ne l'ai que très brièvement étudiée et j'aimais tellement la syntaxe au premier abord que je l'ai abandonnée.

Comme il s’agit d’un langage (relativement) commun (principalement pour le développement Mac / iPhone / iPad ), je suis sûr que c’est un peu correct une fois que vous vous y serez habitués.

Peter Mortensen
la source
2
Eh bien, cela peut sans doute être considéré comme un peu hallucinant, mais je l’aime bien. Cela pourrait être utile si vous réalisez qu'il ne [foo bar]s'agit que d'un sucre syntaxique pour objc_sendMsg(foo, "bar");lequel le pointeur de fonction est à son tour (c'est un "bar" spécial, pas un générique). Saviez-vous qu'il est entièrement tapé?
Per Johansson
Objective-C n'est qu'un énorme sucre syntaxique autour des fonctions d'exécution. Une fois que vous vous y serez habitué, [receiver doStuff:arg]il ressemblera beaucoup à un java dynamique
toasted_flakes
6

Je choisis Mercure .

Mercure plié mon esprit en me montrant que même les langues pures peuvent faire d' E / S .

La façon dont cela fonctionne est que les fonctions d'E / S dans Mercury prennent une valeur «d'état du monde» et retournent une nouvelle valeur «d'état du monde». Ainsi, les fonctions I / O dans Mercure transforment le monde et la pureté est maintenue.

dan_waterworth
la source
3
+1 "... le mercure transforme le monde et par conséquent la pureté est maintenue." - J'aime ça hors contexte. ;-)
Orbling le
Je suis en train de traverser la courbe d'apprentissage avec Mercury en ce moment. Cela a été un combat louable jusqu'à présent. Je l'aime beaucoup.
JUSTE MON AVIS correct le
La seule chose qui m'a mis hors mercure, c'est que son type de chaîne est terminé par NULL.
dan_waterworth
6

Ce doit être Scheme , sûrement. Essayer d'expliquer call-with-current-continuationme blesse toujours le cerveau, mais une fois que vous le comprenez, vous pouvez trouver des solutions incroyablement élégantes.

Voulez-vous arrêter en cours d'algorithme et le contrôle manuel à quelqu'un d'autre? Sûr!

Voulez-vous reprendre la même continuation plusieurs fois? Bien sûr!

Vous souhaitez suspendre l'exécution d'un algorithme, redéfinir une fonction, puis reprendre l'exécution avec la pile d'origine mais avec un état global mis à jour? Aucun problème! Et faites-vous cela plusieurs fois avec différentes modifications de l'état global mais le même point de rentrée de pile? Pour vous, monsieur, n'importe quoi!

Cameron Skinner
la source
+1 LOL + "Pour vous, monsieur, n'importe quoi!" En plus d'être presque une ligne d'une chanson dans Oliver !, c'est aussi une bonne aspiration pour une langue.
Orbling le
1
Scheme n'est pas le seul langage à suites explicites. Haskell , par exemple, est tout à fait d'accord avec cette idée.
JUSTE MON AVIS correct le
4
C'est sans doute plus compliqué en Haskell, puisqu'il est implémenté comme une bibliothèque et non comme une fonctionnalité de langage. Mais peut-être que cela le rend moins fastidieux.
Logan Capaldo
Je pense que c'est simultanément à la fois plus et moins hallucinant. Garder cette contradiction dans ma tête me fait perdre la tête. Donc à la fin, Haskell est plus déconcertant. :)
JUSTE MON AVIS correct le
La bonne chose à propos des continuations Scheme (et Ruby !) Est qu’elles sont intégrées au langage. Haskell ajoute simplement sa syntaxe monadique autour du style de passage de continuation ordinaire, ce que vous pouvez également faire dans Scheme. Mais avoir call / cc intégré partout sans avoir à intégrer le tout dans une construction monadique permet certainement de nombreuses constructions époustouflantes.
Dario
4

J'avais l'habitude d'utiliser un ancien éditeur appelé TECO (Text Editor and COmparator), qui était un langage de modification de texte très puissant, avec toutes sortes de fonctions de macro. Je ne me souviens pas de la célèbre citation à ce sujet, mais l'essentiel était: "toute collection aléatoire de 20 caractères est presque toujours un programme TECO légitime, et modifiera votre fichier (c'est un éditeur) d'une manière fondamentalement imprévisible. Je me souviens d'avoir écrit un convertisseur Fortran en PL1 dans environ une page de code TECO.

Omega Centauri
la source
5
"L’un des jeux les plus amusants à jouer avec TECO consiste à taper votre nom en tant que ligne de commande et à essayer de deviner ce qu’il fait. Presque toute erreur de frappe possible en parlant à TECO détruira probablement votre programme, ou même pire ... introduisez des bugs subtils et mystérieux dans un sous-programme qui fonctionnait jadis. " Mec, c'étaient les jours!
JUSTE MON AVIS correct le
1
TECO était également la base originale d’EMACS. EMACS a commencé comme une simple collection de macros TECO!
Gabe
@ Omega: il est nécessaire de dire à quel TECO vous faites référence. DEC TECO, livré avec TOPS-10, ou MIT TECO, celui écrit en MIDAS. Ce dernier TECO est dans lequel EMACS a été écrit. C'est aussi comment EMACS a été étendu. J'avais l'habitude de pirater EMACS au lieu de passer des cours.
John Saunders
Je n'ai utilisé que DEC TECO. Et oui ce sont les jours (être jeune à nouveau) ....
Omega Centauri
1
Ca me donne souviens taper en mode ViM
ron
3

L’assemblée a été la plus "déconcertante" pour moi, mais je commence tout juste.

Peter Mortensen
la source
ce qui aggrave le
Dave
Qu'en est-il en fait? Des instructions droites sans ordre de groupement explicite? autre chose?
Jé Queue le
Eh bien, en particulier, je n’aime pas l’influence du flou sur le déroulement du programme. Ce n'est pas facile à lire rapidement.
Anto le
2
Ah, le Cincinnati Milacron 2200B: longueur de mot variable combinée avec la modification à l’exécution de l’ adresse d’un JMP. Cela donnait un air apprivoisé au LSD.
Peter Rowell
3

Lisp . L’apprentissage consiste en une série de petites épiphanies, chacune d’elles changera totalement votre façon de penser à la résolution de problèmes de programmation.

Peter Mortensen
la source
3

REBOL

Il repose sur la notion de code en tant que données, à l'instar de Lisp . Les adeptes du langage ont du mal à expliquer ses avantages uniques par rapport aux autres approches de cette famille, et finissent généralement par hausser les épaules et dire quelque chose du genre : et une fois que vous l'aurez compris, ce sera comme si vous preniez la pilule Matrix rouge et vous ne voudrez plus jamais revenir en arrière. "

Le problème, c’est en partie parce que c’est bizarre et que le marché n’est pas défini avec précision. Mais aussi en partie parce que beaucoup de ceux qui le préconisent ne savent pas bien expliquer . :)

Mais Douglas Crockford était un fan, s’en est inspiré avec la création de JSON et a suggéré aux gens de s’y intéresser aussi récemment qu’en octobre 2010:

"Ted Neward a fait du très bon travail de modérateur du panel sur" L'avenir des langages de programmation ". A la fin du panel, il a demandé aux panélistes quelles langues ils devraient, selon les gens, être en train d'apprendre, afin d'obtenir de nouvelles idées. La liste comprenait Io (Bruce Tate), Rebol (Douglas Crockford) , Forth and Factor (Alex Payne), Scheme and Assembler (Josh Bloch) et Clojure (Guy Steele). "

Source: sauria.com

Je pense que cela vaut la peine d’être regardé par ceux qui cherchent à préciser leur conception de la conception et de l’extensibilité de la langue. Maintenant que c'est de l'open source (après 18 ans de développement propriétaire), les renonciations habituelles que j'avais l'habitude de donner pour le garder à distance ne s'appliquent plus ... ça vaut le coup d'oeil! La communauté s'est même sortie de son programme de messagerie propriétaire basé sur Rebol et a commencé à discuter sur Stack Overflow (à ma grande surprise!).

HostileFork
la source
1
J'évite REBOL parce que sa seule implémentation pratique est un logiciel non standard non ouvert qui est modifié à la fantaisie de sa société propriétaire. (Rebol 2 vs. Rebol 3 ...) S'il est jamais standardisé ou ouvert, je le regarderai de nouveau, mais jusqu'à ce jour, Rebol reste en dehors de ma ceinture d'outils.
JUSTE MON AVIS correct
1
@JUSTMYcorrectOPINION le jour est peut-être venu pour jeter un autre coup d'oeil! Rebol 3 est maintenant un logiciel sous licence Apache2 . Nous avons même un RebolBot ici dans la salle de discussion Rebol et Red sur StackOverflow pour nous aider à faire la démonstration de la langue. (Le rouge est une autre variante open source de Rebol qui présente des
perspectives
2

Je dirais que, vu le temps que beaucoup de gens prennent pour ne pas avoir à l'écrire directement, les développeurs trouvent que SQL est époustouflant. Je suppose que beaucoup de gens ne pensent pas naturellement en termes de jeux.

Peter Mortensen
la source
SQL plie certes l'esprit, mais cela ne m'aide pas à écrire un meilleur code.
dan_waterworth
4
SQL est pour moi aussi naturel que BASIC, rien que moi. Incroyable à quel point une application reposant sur une base de données peut être facile lorsque vous maîtrisez le traitement complet des données en SQL.
Jé Queue
@ dan_waterworth, je pense que SQL peut vous aider à rédiger un code plus petit et plus concis en mettant plus de logique dans SQL, par opposition à la gestion de la plupart des conditions et des requêtes ultérieures dans l'application.
Jé Queue
@Xepoch, je pense, s'il y a quelque chose que la montée des ORM nous a appris, c'est que les gens n'aiment pas écrire en SQL s'ils peuvent l'éviter. Ils préfèrent de loin écrire dans leur propre langue.
dan_waterworth
J'imagine que l'utilisation de tout ce qui peut écrire un meilleur code que vous le pouvez est une bonne chose.
JeffO
2

Pur

Pure est un langage fonctionnel basé sur la réécriture de termes. J'aime ça, il est à la fois clairsemé et expressif, même s'il est un peu minimisé.

Aliud Alius
la source
+1 Fonctionnel signifie vecteur, langage exceptionnellement puissant. En tant que descendant de q (qui doit un peu à APL) et en empruntant une tonne à Haskell et al. Cela mérite certainement d'être mentionné.
Orbling le
2

Ce n’est peut-être pas le plus difficile, mais c’est de loin le plus difficile à apprendre pour moi (je pensais que Haskell et le langage assembleur étaient plus faciles!)

C’est l’ensemble des langages HDL , notamment le VHDL (et Verilog dans une moindre mesure )

Il est extrêmement difficile de surmonter le fait que chaque "fonction" s'exécute en même temps et vous ne pouvez pas éviter le passage à la parallélisation absolue. Bien sûr, il ne s’agit cependant que d'un langage de programmation à la frontière.

Peter Mortensen
la source
J'ai fait un peu de VHDL une fois. J'ai eu un vrai moment d'épiphanie quand j'ai soudainement compris qu'en ajoutant du code, de plus en plus de matériel apparaissait pour implémenter ce code et que tout fonctionnait simultanément. Comme la programmation multithread avec des threads à exécution simultanée vraiment illimités; peut-être que les personnes ayant accès à un nombre illimité de nœuds sur EC2 ou sur des clusters de cartes réduisent le même son. (Mais peu de temps après, j'ai compris à quel point il était difficile de mettre en œuvre tout ce qui n'était pas anodin dans ces langues et je me suis enfui).
timday
1
En tant qu'ingénieur électricien, la simultanéité ne me posait pas beaucoup de problèmes, ce fut une véritable libération. Pour ce qui est de la difficulté de la mise en œuvre, ePU est bien une solution de niche pour des classes de problèmes spécifiques qui transforment le problème en solution qui peut être décrite comme un algorithme, un concept emprunté à l'origine aux mathématiques. Un problème de parallélisme inhérent fait partie des problèmes faciles à résoudre et les VHDL et FPGA sont pratiques à ce moment-là.
Oui, le VHDL est bizarre si vous n'êtes pas déjà programmeur et habitué à travailler avec plusieurs blocs simultanés.
medivh
1

Tcl

J'ai commencé à l'apprendre une fois, mais comme j'en ai appris suffisamment pour donner un sens, je détestais vraiment la façon dont mon cerveau se sentait. Cela semblerait qualifier de hallucinant.

David Thornley
la source
1
J'ai beaucoup programmé Tcl vers 1995-1997 sans raison particulière. Lorsque j'ai commencé à chercher un nouvel emploi en 1998, chaque recruteur de toute la région de la Baie a essayé de me faire interviewer pour des concerts sous haute pression mal payés. Je l'ai rapidement retiré de mon CV. J'ai envisagé de vous donner du fil à retordre à ce sujet, car je me souvenais de Tcl comme étant vraiment facile, mais j'aimerais plutôt avoir appris Python à la place, rétrospectivement.
Adam Crossland
Tcl est définitivement un goût acquis. Personnellement, je pense que la conception de la langue est géniale - aucune autre langue ne convient à mon cerveau aussi bien que Tcl, mais je sais que je suis dans la minorité. Que vous aimiez ou détestiez cela, son apprentissage nécessite de repenser le fonctionnement des langues.
Bryan Oakley
1

Le langage machine de Turing , évidemment. Il est extrêmement puissant, nettement supérieur à tous les autres langages de programmation existants et vous fera mal à votre cerveau si vous essayez de l’utiliser.

Peter Mortensen
la source
6
Je dois m'opposer à l'affirmation selon laquelle c'est nettement supérieur. Le terme supérieur suggère de prendre en compte les questions subjectives. En outre, si nous exécutons C sur un ordinateur avec une mémoire infinie (ce qui n’est que justice, car une machine Turing fonctionne avec une mémoire infinie), leur puissance est équivalente.
Winston Ewert
2
@ Winston: Il n'est pas nécessaire que la bande d'une machine à imprimer soit infinie. Il suffit d’une usine de bandes à chaque extrémité pour pouvoir fabriquer des bandes supplémentaires au besoin :)
Mike Dunlavey Le
"Probablement supérieur" est par définition un terme objectif. Cela signifie que n'importe quelle langue peut être implémentée sur une machine Turing, mais toutes les langues ne peuvent pas implémenter une machine Turing. Bien sûr, cela vaut également pour les langages tels que C, qui fournissent une mémoire infinie et une pile infinie.
user12667
BrainFuck comme déjà mentionné dans la question, et c'est à peu près le langage machine de Turing.
Mchl
1
Cela montre qu'une machine de Turing est plus puissante. Le problème est que, du moins comme j'emploierais ce terme, prétendre qu'une langue est supérieure prend également en compte la facilité d'utilisation, la disponibilité, etc.
Winston Ewert
1

C

Les pointeurs, la gestion de la mémoire et les transformations typographiques demandent beaucoup de réflexion et sont faciles à se tromper. L'absence de structures de données intégrées, telles que des tables de hachage ou des listes, vous oblige à concevoir votre propre bibliothèque ou à trouver une bibliothèque tierce et à connaître son API.

david4dev
la source
Pardon. C est un langage d'assemblage. Bien sûr, il n'a pas ces choses.
Peter Rowell
2
Les langues de l'Assemblée sont hallucinantes.
david4dev
-1

JESS (Java Expert System Shell). Intégré dans un environnement Java, cette adaptation de CLIPS est un langage système expert basé sur des règles fonctionnelles. Tenter de cartographier les vrais objets Java en tant que faits et trouver les bonnes questions à poser pour obtenir les résultats escomptés est un véritable défi. Moins si vous êtes familier avec la théorie des systèmes experts, mais quand vous venez d'un pur esprit POO, cela ne vous va pas. NOTE: CLIPS n’est pas Lisp, mais y ressemble. Encore un autre esprit bender.

Une fois que vous avez dépassé la courbe d’apprentissage initiale, il est assez puissant et rapide de proposer des réponses.

Berin Loritsch
la source
Jess est une version moderne de CLIPS, intégrable également comme une sorte de moteur de script / logique pour vos propres applications.
Tangurena
Ok, je suis corrigé. haskel.com/corp/details/0,10294,CLI1_DIV139_ETI9759,00.html Néanmoins, cela nécessite un état d'esprit très différent du langage dans
lequel
-1

TeX est considéré comme un langage, puisqu'il est complet et que je le trouve assez déconcertant. Un langage pour la composition mathématique (et les livres de programmation) ...

Peter Mortensen
la source
-1

CIL

CIL, le langage commun intermédiaire que tous les programmes .NET compilent, est une sorte d'assemblage orienté objet. C'est intéressant pour moi d'essayer d'écrire ou de lire du code et de comparer ses constructions à celles de C # que je connais déjà. C'est un bon moyen d'en savoir plus sur ce que fait .NET en coulisse. Et cela peut être utile pour la génération de code dynamique ou la réécriture de code compilé existant avec Mono Cecil .

Peter Mortensen
la source
2
ou bytecode d'ailleurs?
Jé Queue
Si vous voulez dire par le bytecode Java, alors je n’ai aucune expérience de cela, je ne suis donc pas en mesure de le recommander aussi déroutant.
svick
Je ne comparerais pas vraiment Java-Bytecode et CIL, car Java-Bytecode est déjà compilé et CIL sera compilé au moment de l'exécution (Compilateur Just-In-Time de .net)
basti
@chiffre Dans la plupart des cas, Java Bytecode et CIL fonctionnent exactement de la même manière. Dans les deux cas, vous avez un code source (C # ou Java) qui est compilé dans un langage intermédiaire binaire au «moment de la compilation» (CIL ou bytecode Java), qui est ensuite compilé dans le code machine réel au «moment de l'exécution», par un JIT. compilateur.
svick