Il linguaggio di programmazione più strabiliante? [chiuso]


45

Da un linguaggio di programmazione ragionevolmente comune, quale ritieni sia il più strabiliante?

Ho ascoltato molti podcast di programmazione e mi sono preso del tempo per imparare alcune nuove lingue che sono considerate imminenti e importanti. Non sto necessariamente parlando di BrainFuck , ma quale linguaggio considereresti uno che sfida i paradigmi di programmazione comuni?

Per me, negli anni '90 ho fatto una programmazione funzionale e logica (ad esempio Prolog ), quindi non posso dire di trovare qualcosa di speciale lì.

Sono lungi dall'essere un esperto in questo, ma ancora oggi il linguaggio di programmazione più strabiliante per me è il Perl . Non perché "Hello World" sia difficile da implementare, ma piuttosto c'è così tanta flessibilità lessicale che alcune delle soluzioni più difficili possono essere scomposte in modo così poetico che devo camminare fuori dal mio terminale per schiarirmi le idee. Non sto dicendo che probabilmente venderò un'implementazione di software commerciale, solo che c'è una ragione distinta per cui Perl è così (in) famoso. Guarda l'elenco di base dei libri su di esso.

Quindi, qual è il tuo linguaggio strabiliante che promuove le tue migliori programmazioni e pratiche ?


Non può essere sconvolgente e lasciarlo a quello?

4
Qualsiasi lingua in cui lo spazio bianco è importante!
Mootinator

@mootinator - Ma Python è davvero divertente con cui lavorare finché il tuo editor di testo non ti provoca dolore.
rjzii,

1
@Thorbjorn Qualcuno aggiungerà INTERCAL? APL è un progetto di scuola media rispetto a quel grande papà.
Segna C

Perl non è da nessuna parte vicino al più difficile. Ho 12 anni e posso programmare facilmente Perl.
Dinamico

Risposte:


73

APL

Questa lingua è incredibilmente potente e molto concisa, ti farà male al cervello.

Per i principianti è difficile da usare senza una tastiera personalizzata, o almeno un overlay della tastiera per mostrare tutti i simboli oscuri che utilizza.

Tastiera APL

Quindi il linguaggio è del paradigma basato su vettore / array ed è specializzato in algebra lineare complessa. La versione originale non aveva nemmeno costrutti loop, niente e tutto fatto concatenando operatori di array piuttosto insoliti insieme.

  • strip_tags()nessuno? (preso in prestito da Wikipedia)

strip_tags () ala APL


18
+1 per mostrare la tastiera
tcrosley

5
@tcrosley: è bello se ne hai uno vero: wickensonline.co.uk/apl/unicomp-apl-top-large.jpg
Orbling

4
E se non fosse già abbastanza strabiliante, c'erano alcuni operatori che richiedevano l'uso del tasto backspace / overstrike. Ad esempio, la matrice inversa era la casella quadrata (sopra il tasto L) barrata con un segno di divisione (quello accanto al tasto backarrow nell'angolo in alto a destra dell'immagine della tastiera).
Tangurena,

2
Sto avendo dei flashback nei primi anni '80 quando ho fatto APL per fare analisi di regressione statistica di alto livello, la gente lo usa ancora? Brivido.
HLGEM,

2
Ho fatto un sacco di APL una volta - ha ancora un posto nostalgico per me ... L'ho adorato in quel momento.
quick_now

56

Haskell . È molto vicino all'essere puramente funzionale, al quale la maggior parte delle persone non è abituata; molto impegnativo, il che è utile quando sai cosa stai facendo ma frustrante fino ad allora; ha una sintassi piuttosto enigmatica, altamente simbolica, che è grandiosa una volta che lo conosci ma opaca prima di allora ... la lista continua.

Inoltre, è semplicemente impossibile formattare le cose in un modo che mi sembra buono.


7
Avrei detto anche Haskell, ma non perché è criptico. Mentre può certamente essere difficile da capire, la cosa che piega la mente riguarda la teoria che sta dietro. Monad e Arrows sono ancora un dominio che non ho conquistato :)
Matthieu M.

11
Perché "Molto vicino all'essere puramente funzionale"? È puramente funzionale.
dan_waterworth,

4
Vorrei citare me stesso e aggiungere a come Haskell piegherà la tua mente: "Haskell ti impedisce di spingere le cose sotto il tappeto, ti costringe a gestire esplicitamente la struttura del tuo programma e ti insegna un linguaggio per descrivere queste strutture : la lingua dei tipi. Comprendere i tipi, in particolare quelli ricchi come Haskell, ti renderà un programmatore migliore in qualsiasi lingua. " programmers.stackexchange.com/questions/28950/…
Waquo

14
Haskell è un linguaggio di programmazione puramente funzionale. Il codice che scrivi in ​​Haskell è puramente funzionale (purché non usi unsafePerformIO e simili). L'IO-Monade è puramente funzionale, se non ci credi diversamente, non capisci come le monadi sono usate per modellare il flusso di controllo in modo puramente funzionale. Pensa al tuo programma come a una lista della spesa di azioni IO, con una lista della spesa che è solo una struttura di dati pura, senza effetti collaterali e il runtime della lingua è lo shopper che esegue gli effetti collaterali.
Waquo,

8
@Jon, che ne dici, siamo d'accordo che: Haskell, la lingua, è puramente funzionale, ma non lo è il sistema di runtime. L'esecuzione di un programma haskell è impura, ma il programma stesso è puro.
dan_waterworth,

30

Prolog. Era così diverso da qualsiasi altra lingua che avevo usato quando ero stato esposto per la prima volta. Mi piace, quindi non odio la sintassi o altro.


2
Mi sono avvicinato a Prolog come programmazione inversa, volendo già conoscere le mie risposte e quindi programmare per ottenere le domande :)
Jé Queue

1
@Xepoch: Penso che potresti essere proprio lì, Prolog sta formulando la domanda. Uno dei pochi linguaggi 5GL corretti in uso.
Orbling

In generale, penso che Prolog sia sempre così interessante ed eccezionalmente potente, ma ho grossi problemi a orientare completamente il posizionamento ( !).
Orbling

+1 per Prolog, ho seguito un corso di intelligenza artificiale che utilizzava Prolog e che è l'unico corso di informatica in cui mi sono
imbattuto

Prolog non è un linguaggio di programmazione funzionale però. Essere inaciditi dal funzionale di Prolog è come essere inaciditi dalla programmazione procedurale di Lisp.
SOLO IL MIO PARERE corretto

24

Concordo con te su Perl. È la sintassi più brutta che abbia mai visto. Dicono che anche gli sviluppatori Perl non riescono a ricordare ciò che hanno scritto il giorno dopo.


2
Def +1 su Perl. Sono sempre stato particolarmente affezionato alle variabili "implicite" (credo che vengano chiamate). È un ottimo codice di sola scrittura.
GrandmasterB,

2
Tutti scrivono Perl in modo così diverso che potrebbero anche scrivere lingue diverse - non devi solo imparare come funziona Perl per raccogliere il codice di qualcun altro al suo interno, devi anche imparare come quella particolare persona lo ha usato.
glenatron,

3
Bah a questa risposta ed entrambi i commenti su di essa. Perl ben scritto è facile da leggere e scrivere. Il baby-perl scritto dai neofiti è semplice, se dettagliato. L'unico perl "illeggibile" è o offuscato di proposito, o scrivere una riga.
Sean McMillan,

22

Dovrei dire Forth . La notazione che tutte le operazioni sono manipolazioni dello stack. Nella sua forma pura non ci sono variabili locali da usare.


10
FORTH è una lingua meravigliosa. Quando appresi per la prima volta la programmazione nei primi anni '80, avevo un Atari 400 e le mie scelte furono interpretate BASIC, Assembly e FORTH. Ho usato tutti e tre ampiamente, ma FORTH più di ogni altro. Ho ancora i libri ultra-classici di Starting FORTH e Thinking FORTH di Leo Brodie. In effetti, se mi chiedessero di creare da zero un linguaggio di self-hosting su un nuovo sistema hardware, sceglierei FORTH senza esitazione.
Adam Crossland,

3
@Adam Crossland: Pensare FORTH è un grande libro, potresti essere interessato a questo link: thinking-forth.sourceforge.net
Orbling

1
@Orbling: le grandi menti pensano allo stesso modo. Non più di 10 minuti fa, ho inserito il PDF sul mio Kindle.
Adam Crossland,

1
@Adam Crossland: un bel posto per questo. Quel libro è generalmente utile per i programmatori, dovrebbe essere nella lista di lettura per le persone - interessate a FORTH o no.
Orbling

1
Sono completamente d'accordo. Ha molto da dire su come pensiamo di risolvere i problemi in generale. Brodie è un pensatore così lucido e un chiaro scrittore. Le sue opere sono una gioia per me.
Adam Crossland,

21

Rubino .

Questo mi fa venir voglia di uccidermi:

1.month.from.now()

(Potrei avere la sintassi esatta sbagliata, ma ottieni il punto).


23
OH MIO DIO. Chi ha mai pensato che fosse una buona idea?
Epsilon,

8
La flessione mentale non è con la lettura, è con la scrittura. Venire a capo di questa assurdità è difficile e dover memorizzare / cercare tutte le funzioni / proprietà incorporate è ridicolo.
Matteo Leggi il

55
Sono solo io a pensare che sia fantastico, ed è forse una buona ragione per imparare Ruby?
Orbling

9
È fantastico da leggere, sì. Ma questo significa che posso scrivere 3.months.from.last.month.if.it.was.a.leap.year? No. O almeno non credo . Se posso ... RoR può essere il primo linguaggio telepatico di sempre.
morganpdx,

15
Cosa c'è di sbagliato DateTime.Now.AddMonths(1);? Queste caratteristiche rendono difficilmente più leggibile il codice. (Non sto dicendo che C # abbia la sintassi migliore. Puoi spostarlo su qualsiasi convenzione di lingua e continuerà ad applicarsi.)
ChaosPandion

18

Brainfuck

Chiunque possa onestamente scrivere questa derisione di una lingua non dovrebbe nemmeno aver bisogno di un thread come questo.

Hello World (puntatori, a sinistra; spiegazione, a destra):

+++++ +++++             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'

2
O che ne dici di Whitespace? Tutto il male di Brainfuck combinato con un codice invisibile.
Loren Pechtel,

17

Lisp è il mio ultimo linguaggio strabiliante.

Ho portato con me le monadi e la programmazione funzionale di Haskell, e ora ho macro con cui lavorare. Sto solo entrando in CLOS e non ho toccato affatto il sistema delle condizioni.


Non mi piacciono nemmeno i Lisps (con la possibile eccezione di Clojure - non ho ancora deciso lì) e ti ho dato un +1. La parte strabiliante è sicuramente lì e ciò che ho imparato da Lisp, anche se non lo uso, ha informato molto di ciò che faccio in altre lingue.
SOLO IL MIO PARERE corretto

14

PAROTITE

Questo è un linguaggio che compare di volta in volta nelle storie online e ha l'onore di essere nell'uso della produzione reale per archiviare informazioni critiche sulla sicurezza della vita (vale a dire, i registri dei pazienti). Tuttavia, questo è anche un linguaggio in cui la terseness è apprezzata e funzioni come le seguenti potrebbero apparire nel codice di produzione (esempio tratto dall'articolo di Wikipedia sull'argomento):

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))

wow, non stai scherzando vero? Non ho dormito troppo e improvvisamente è il 1 aprile? Nulla di così tante parentesi e segni del dollaro dovrebbe essere ovunque vicino alle mie cartelle cliniche.
dan_waterworth,

1
Il mio primo lavoro di programmazione è stato con una società specializzata in MUMPS! Purtroppo avevo fatto un corso universitario sullo sviluppo web, quindi mi hanno messo nel team ASP di nuova formazione della società anziché con le mani esperte, ma MUMPS era la lingua in cui siamo stati addestrati per le nostre prime settimane. Forse ho avuto una fuga fortunata ...
thesunneversets

1
Qualcuno che ha pubblicato qui da Madison Wisconsin? Verona, davvero?
Hans Passant,

1
Credo che thedailywtf.com abbia un'intera sezione dedicata a MUMPS. Non sembra una lingua che vorrei toccare.
Tyanna

1
Ricordo di aver appreso M in ambito accademico e di aver pensato che fosse interessante come lingua per scopi speciali. La terseness che consente è come una sorta di minificazione perversa. Nella mia ingenuità, ho pensato che il codice di produzione contenesse poco dell'estrema stenografia della lingua. La prima e unica volta in cui ho visto una base di codice M di produzione stringermi il fegato ... sembrava proprio il tuo esempio. Oh, l'orrore!
AJK

13

Direi Coq , o un'altra implementazione della teoria dei tipi dipendenti. Il sistema di tipi di Haskell non è comparativamente molto espressivo. Passare a un sistema di tipi più espressivo (ad esempio, il calcolo delle costruzioni (CoC)) ti consente di fare alcune cose ordinate, come dimostrare le proprietà dei programmi all'interno del linguaggio e incorporare forti invarianti nei tuoi tipi che possono essere controllati staticamente.


2
Qualsiasi sistema / prover / lingua di tipo dipendente probabilmente valuterebbe più confuso rispetto alle lingue normali, quindi +1.
Orbling

1
La verifica formale dei programmi è qualcosa su cui ho appena iniziato. Certamente piega la mente e sta diventando sempre più utile nel mondo reale. +1
dan_waterworth

7

Obiettivo-C . Per essere onesti, l'ho studiato solo brevemente e non mi è piaciuta la sintassi a prima vista così tanto che ho rinunciato.

Dal momento che è un linguaggio (relativamente) comune (principalmente per lo sviluppo di Mac / iPhone / iPad ), sono sicuro che in realtà è abbastanza decente una volta che ti ci abitui.


2
Beh, probabilmente si qualifica come un po 'strabiliante, ma mi piace. Potrebbe essere utile se ti rendi conto che [foo bar]è solo zucchero sintattico per il objc_sendMsg(foo, "bar");quale a sua volta cerca il puntatore a funzione (è una "barra" speciale, non una generica). Ti sei reso conto che è completamente dattiloscritto?
Per Johansson,

Objective-C è solo un enorme zucchero sintattico attorno alle funzioni di runtime. Una volta che ti ci [receiver doStuff:arg]
abitui

6

Scelgo Mercurio .

Mercury piegato la mia mente da me mostrando che anche i linguaggi puri possono fare di I / O .

Il modo in cui funziona è che le funzioni I / O in Mercury assumono un valore di "stato del mondo" e restituiscono un nuovo valore di "stato del mondo". Quindi le funzioni I / O in Mercurio trasformano il mondo e quindi la purezza viene mantenuta.


3
+1 "... il mercurio trasforma il mondo e quindi la purezza viene mantenuta." - Mi piace fuori contesto. ;-)
Orbling

Sto lottando attraverso la curva di apprendimento con Mercury in questo momento. Finora è stata una degna lotta. Mi piace un sacco.
SOLO IL MIO OPINIONE corretta,

L'unica cosa che mi ha scoraggiato dal mercurio è che il suo tipo di stringa è NULL terminato.
dan_waterworth,

6

Deve essere Scheme , sicuramente. Cercare di spiegare call-with-current-continuationfa sempre male al cervello, ma una volta capito, puoi realizzare soluzioni incredibilmente eleganti.

Vuoi interrompere parzialmente un algoritmo e il controllo manuale a qualcun altro? Sicuro!

Vuoi riprendere più volte la stessa continuazione? Ovviamente!

Vuoi mettere in pausa l'esecuzione di un algoritmo, ridefinire una funzione, quindi riprendere l'esecuzione con lo stack originale ma con uno stato globale aggiornato? Nessun problema! E farlo più volte con diverse modifiche allo stato globale ma lo stesso punto di rientro dello stack? Per lei, signore, qualunque cosa!


+1 LOL + "Per lei, signore, qualsiasi cosa!" Oltre a essere quasi una linea in una canzone di Oliver !, è anche una buona aspirazione per avere una lingua.
Orbling

1
Lo schema non è l'unica lingua con continuazioni esplicite. Haskell , per esempio, lo supporta benissimo e altrettanto strabiliante.
SOLO IL MIO OPINIONE corretta,

4
È probabilmente più flessibile in Haskell, dal momento che (call / cc) è implementato come una libreria e non come una funzionalità linguistica. Ma forse questo lo rende meno flessibile.
Logan Capaldo,

Penso che sia contemporaneamente sempre più e meno strabiliante. Mantenere quella contraddizione nella mia testa mi fa pensare. Quindi alla fine Haskell è più strabiliante. :)
SOLO IL MIO PARERE corretto

La cosa bella delle continuazioni di Scheme (e Ruby !) È che sono integrate nella lingua. Haskell fondamentalmente aggiunge semplicemente la sua sintassi monadica attorno allo stile di passaggio di continuazione ordinaria, cosa che puoi fare anche in Scheme. Ma avere call / cc integrato ovunque senza dover incorporare il tutto in un costrutto monadico consente sicuramente molti costrutti strabilianti.
Dario,

4

Usavo un antico editor chiamato TECO (Text Editor e COmparator), che era un linguaggio di modifica del testo molto potente, con ogni sorta di funzionalità macro. Non ricordo l'esatta citazione famosa al riguardo, ma il senso era che "qualsiasi raccolta casuale di 20 caratteri è quasi sempre un programma TECO legittimo e cambierà il tuo file (è un editor) in modo fondamentalmente imprevedibile. Ricordo di aver scritto un convertitore da Fortran a PL1 in circa una pagina di codice TECO.


5
"Uno dei giochi più divertenti da giocare con TECO è digitare il tuo nome come una riga di comando e provare a indovinare cosa fa. Quasi ogni possibile errore di battitura durante la conversazione con TECO probabilmente distruggerà il tuo programma, o peggio ancora ... introdurre bug sottili e misteriosi in una subroutine una volta funzionante. " Amico, quelli erano i giorni!
SOLO IL MIO OPINIONE corretta,

1
TECO era anche la base originale di EMACS. EMACS è iniziato come una raccolta di macro TECO!
Gabe,

@Omega: è necessario dire a quale TECO ti riferisci. DEC TECO, come spedito con TOPS-10, o MIT TECO, quello scritto in MIDAS. Quest'ultimo TECO è ciò in cui è stato scritto EMACS. È anche il modo in cui EMACS è stato esteso. Ero solito hackerare EMACS invece di passare le lezioni.
John Saunders,

Ho usato solo DEC TECO. E sì, quelli erano i giorni (per essere di nuovo giovani) ....
Omega Centauri,

1
Mi fa ricordare la digitazione in modalità di comando Vim
ron

3

L'assemblaggio è stato il più "piegante della mente" per me, ma sto solo iniziando.


ciò che lo peggiora è che dipende dal sistema operativo e dall'hardware
Dave,

Che ne dici che lo rende così? Istruzioni semplici senza ordine di raggruppamento esplicito? qualcos'altro?
Jé Queue,

bene, in particolare, non mi piace quanto il flusso del programma sia poco chiaro. Non è facile da leggere rapidamente.
Anto,

2
Ah, il Cincinnati Milacron 2200B: lunghezza delle parole variabile combinata con la modifica del runtime dell'indirizzo di un JMP. Ha fatto sembrare LSD addomesticato.
Peter Rowell,

3

Lisp . L'apprendimento è una serie di piccole epifanie, ognuna delle quali cambierà totalmente il modo in cui pensi di risolvere i problemi di programmazione.


3

REBOL

È costruito attorno al concetto di codice come dati, come Lisp . Gli aderenti al linguaggio hanno difficoltà a spiegare quali sono i suoi vantaggi unici rispetto ad altri approcci in quella famiglia, e di solito finiscono per scrollare le spalle e dire qualcosa del tipo "Beh, il ragazzo che ha progettato l'AmigaOS l'ha inventato, la libreria standard è inclusa e microscopica, e una volta "capito" sarà come prendere la pillola rossa Matrix e non vorrai più tornare indietro. "

Il problema è che in parte è bizzarro e non ha definito con precisione quali programmatori sono il suo mercato. Ma anche in parte perché molte persone che lo sostengono non fanno altro che spiegare . :)

Ma Douglas Crockford era un fan, ne trasse ispirazione con la creazione di JSON e ha suggerito alla gente di esaminarlo fino all'ottobre 2010:

"Ted Neward ha svolto un ottimo lavoro nel moderare il panel sul" Futuro dei linguaggi di programmazione ". Alla fine del panel, Ted ha chiesto ai panelisti quali lingue avrebbero dovuto apprendere per ottenere nuove idee. L'elenco includeva Io (Bruce Tate), Rebol (Douglas Crockford) , Forth and Factor (Alex Payne), Scheme and Assembler (Josh Bloch) e Clojure (Guy Steele). "

Fonte: sauria.com

Penso che valga la pena cercare chiunque cerchi di allungare il modo in cui pensano al design del linguaggio e all'estensibilità. Ora che è open source (dopo 18 anni di sviluppo proprietario) le solite dichiarazioni di non responsabilità che ho usato per tenerlo a debita distanza non si applicano più ... vale la pena dare un'occhiata! La community è persino uscita dal loro programma di messaggistica proprietario basato su Rebol e ha iniziato a chattare su Stack Overflow (con mia grande sorpresa!)


1
Evito REBOL perché la sua unica implementazione pratica è un software non standardizzato e non aperto che viene modificato per capriccio della sua società proprietaria. (Rebol 2 vs. Rebol 3 ...) Se sarà mai standardizzato o aperto, darò un'altra occhiata, ma fino a quel giorno Rebol rimarrà dalla mia cintura.
SOLO IL MIO PARERE corretto

1
@JUSTMYcorrectOPINION forse è arrivato il giorno di dare un'altra occhiata! Rebol 3 è ora un software con licenza Apache2 . Abbiamo anche avuto un RebolBot qui nella chat room di Rebol e Red su StackOverflow per aiutarci con la demo della lingua. (Il rosso è un'altra variante di Rebol open source che sta mostrando alcune promesse molto interessanti come versione compilata ibrida.)
HostileFork

2

Direi per intero che molte persone vanno per evitare di doverlo scrivere direttamente, che gli sviluppatori trovano SQL strabiliante. Immagino che molte persone non pensino naturalmente in termini di set.


SQL certamente piega la mente, ma non mi aiuta a scrivere codice migliore.
dan_waterworth,

4
SQL è naturale per me come BASIC, solo io. Incredibile quanto possa essere semplice l'applicazione supportata da DB quando si acquisisce la piena gestione dei dati in SQL.
Jé Queue,

@dan_waterworth, penso che SQL possa aiutarti a scrivere codice più piccolo e più conciso inserendo più logica in SQL rispetto alla gestione della maggior parte dei condizionali e delle successive query nell'app.
Jé Queue,

@Xepoch, penso, se c'è qualcosa che ci ha insegnato l'ascesa degli ORM, è che alla gente non piace scrivere in SQL se possono evitarlo. Preferirebbero di gran lunga scrivere nella propria lingua.
dan_waterworth,

Immagino che usare qualsiasi cosa in grado di scrivere codice migliore di quello che puoi sia una buona cosa.
JeffO,

2

Puro

Pure è un linguaggio funzionale basato sul termine di riscrittura. Mi piace, è sia scarso che espressivo, anche se un po 'sottovalutato.


+1 Funzionale significa vettore, un linguaggio eccezionalmente potente. Come discendente di q (che deve un po 'ad APL) e prendendo in prestito una tonnellata da Haskell et al. Certamente merita menzione.
Orbling

2

Potrebbe non essere il più strabiliante, ma è stato di gran lunga il più difficile da imparare (pensavo che Haskell e il linguaggio dell'assemblea fossero più facili!)

Questo è l'insieme dei linguaggi HDL , in particolare VHDL (e Verilog in misura minore)

Superare il fatto che ogni "funzione" viene eseguita contemporaneamente è incredibilmente difficile e non si può evitare il passaggio a parallelizzare assolutamente tutto. Naturalmente, questo è solo un linguaggio di programmazione border-line.


Ho fatto un po 'di VHDL una volta. Ho avuto un vero momento di epifania quando improvvisamente mi sono reso conto che, mentre stavo aggiungendo il codice, effettivamente sempre più hardware sembrava implementare quel codice e tutto funzionava simultaneamente. Come la programmazione multithread con thread eseguibili simultaneamente veramente illimitati; forse le persone con accesso a nodi illimitati su cluster EC2 o map-riducono ottengono un ronzio simile. (Ma poco dopo sono arrivato ad apprezzare che dolore completo è implementare qualcosa di non banale in questi linguaggi, e sono scappato).
martedì

1
Essendo ingegnere elettrico non ho avuto molti problemi con la simultaneità, in effetti è stata una vera liberazione. Per quanto riguarda il dolore dell'implementazione, anche l'utility uP è una soluzione di nicchia per specifiche classi di problemi che trasformano il problema in soluzione che può essere descritta come algoritmi, un concetto originariamente preso dalla matematica. Un problema con il parallelismo intrinseco è tra i problemi facilmente risolvibili e VHDL e FPGA sono utili in quei momenti.

Sì, VHDL è strano se non sei già un programmatore e abituato a lavorare con più blocchi simultanei.
Medivh

1

Tcl

Ho iniziato a impararlo una volta, ma quando ho imparato abbastanza per avere un senso non mi è piaciuto molto il modo in cui ha fatto sentire il mio cervello. Sembrerebbe qualificarsi come strabiliante.


1
Ho fatto molta programmazione Tcl tra il 1995 e il 1997 senza una ragione particolarmente valida. Quando ho iniziato a cercare un nuovo lavoro nel 1998, tutti i recruiter di tutta la Bay Area hanno cercato di farmi intervistare per concerti VIGNETTE mal pagati e ad alta pressione. L'ho rimosso rapidamente dal mio curriculum. Ho pensato di concederti un momento difficile, poiché mi sono ricordato che Tcl era davvero facile, ma in un certo senso vorrei avere imparato Python, a posteriori.
Adam Crossland,

Tcl è sicuramente un gusto acquisito. Personalmente penso che il design del linguaggio sia geniale - nessun altro linguaggio si adatta al mio cervello come Tcl, ma so di essere in minoranza. Adorarlo o odiarlo, impararlo richiede di ripensare come dovrebbero funzionare le lingue.
Bryan Oakley,

1

Linguaggio macchina di Turing , ovviamente. È estremamente potente, decisamente superiore a tutti gli altri linguaggi di programmazione esistenti, e garantisce di ferire il cervello se si tenta di utilizzarlo.


6
Devo obiettare a sostenere che è decisamente superiore. Il termine superiore suggerisce di tenere conto delle questioni soggettive. Inoltre, se eseguiamo C su un computer con memoria infinita (che è giusto solo perché una macchina di Turing funziona con memoria infinita) sono equivalenti in potenza.
Winston Ewert,

2
@ Winston: il nastro di una macchina turing non deve essere infinito. Deve solo avere una fabbrica di nastri ad ogni estremità in grado di produrre nastro aggiuntivo secondo necessità :)
Mike Dunlavey,

"Provvisoriamente superiore" è per definizione un termine oggettivo. Significa che qualsiasi linguaggio può essere implementato su una macchina Turing, ma non tutte le lingue possono implementare una macchina Turing. Ovviamente, questo vale anche per linguaggi come C, fornendo memoria infinita e stack infinito.
user12667

BrainFuck come già menzionato nella domanda, ed è praticamente il linguaggio macchina di Turing.
Mcch

1
Ciò dimostra che una macchina di Turing è più potente. Il problema è che, almeno mentre uso il termine, affermare che una lingua è superiore prenderebbe in considerazione anche la facilità d'uso, la disponibilità, ecc.
Winston Ewert,

1

C

I puntatori, la gestione della memoria e la trasmissione dei tipi richiedono molto pensiero e si sbagliano facilmente. La mancanza di strutture di dati integrate come tabelle hash o elenchi significa che devi inventare la tua o trovare una libreria di terze parti e apprenderne l'API.


Scusami. C è un linguaggio assembly. Ovviamente non ha quelle cose.
Peter Rowell,

2
I linguaggi dell'Assemblea stanno piegando la mente.
david4dev,

-1

JESS (Java Expert System Shell). Incorporato in un ambiente Java, questo adattamento di CLIPS è un linguaggio di sistema esperto basato su regole funzionali. Cercare di mappare oggetti Java reali come fatti e trovare le domande giuste da porre per ottenere i risultati che ti aspetti è una vera sfida. Meno se hai familiarità con la teoria dei sistemi esperti, ma quando provieni da una mentalità OOP pura non si adatta bene. NOTA: CLIPS non è Lisp, ma sembra simile. Ancora un altro bender mentale.

Una volta superata la curva di apprendimento iniziale, è abbastanza potente e dannatamente veloce trovare le risposte.


Jess è una versione moderna di CLIPS che era anche integrabile come una sorta di motore di script / logica per le tue applicazioni.
Tangurena,

Ok, sono corretto. haskel.com/corp/details/0,10294,CLI1_DIV139_ETI9759,00.html Tuttavia, richiede una mentalità molto diversa dalla lingua in cui è incorporato.
Berin Loritsch

-1

TeX conta come un linguaggio, dato che è Turing completo , e lo considero piuttosto strabiliante. Un linguaggio per comporre matematica, (e libri sulla programmazione) ...


-1

CIL

CIL, il Common Intermediate Language compilato da tutti i programmi .NET , una sorta di assembly orientato agli oggetti. È interessante per me provare a scrivere o leggere il codice in esso e confrontare i suoi costrutti con quelli di C # che già conosco. È un buon modo per saperne di più su ciò che .NET fa dietro le quinte. E può essere utile per cose come la generazione di codice dinamico o riscrivere il codice compilato esistente usando Mono Cecil .


2
o bytecode anche per quello?
Jé Queue,

Se intendi il bytecode Java, non ho alcuna esperienza con esso, quindi non sono in grado di raccomandarlo come strabiliante.
svick,

Non confronterei davvero Java-Bytecode e CIL, poiché Java-Bytecode è già compilato e CIL verrà compilato in fase di esecuzione (compilatore Just-In-Time di .net)
basti

@chiffre Nella maggior parte dei casi Java Bytecode e CIL funzionano esattamente allo stesso modo. In entrambi i casi, si ha un codice sorgente (C # o Java) che viene compilato in un linguaggio intermedio binario in "tempo di compilazione" (CIL o Java Bytecode), che viene quindi compilato al codice macchina effettivo in "runtime", da un JIT compilatore.
svick
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.