2013-04-12 15 views
7

Il mio attuale linguaggio di programmazione primario è python. Ci sono molte cose che mi piacciono, ma mi piacciono anche i linguaggi funzionali. Non abbastanza per fare un intero programma in loro, ma sicuramente per certe funzionalità, che si adattano bene allo stampo funzionale.Interop di Python e linguaggio funzionale

Ovviamente .NET è sorprendente a questo proposito, avendo sia ironpython che F #. Ma considerando il supporto ironpython per l'ecosistema scientifico Python è ancora dubbia l'ultima volta che ho controllato, .NET non è un'opzione per me. Sono un po 'scioccato dall'apparente mancanza di strumenti per facilitare l'interpolazione tra cpython e dire, Haskell. Sono entrambi lingue mature con grandi comunità, che mi sembrano così piacevoli.

C'è qualcosa nella loro architettura che li rende poco compatibili che mancano, o è semplicemente qualcosa di fantastico che sta ancora aspettando di accadere?

Per chiarire; ci sono alcuni progetti semi-cotti là fuori, ma sto pensando a qualcosa che paragona la grandiosità di Weave, pycuda o boost. Qualcosa che automatizza tutta l'idraulica inerente all'interop con solo poche annotazioni.

+2

È possibile eseguire un'interpolazione tra Cthons e Haskell C FFI – jozefg

+0

. Haskell ha un'interopzione con C, e python ha un'interpolazione con C. Quindi in teoria dovrebbe essere possibile avere la mia lista python automaticamente inserita in una lista Haskell e viceversa. Ma non ci sono strumenti per astrarre ordinatamente questo tipo di caldaia, i vantaggi sono rapidamente oscurati, secondo me. –

+0

Penso che sia una questione culturale. È come ... rendere gli script AWK utilizzabili da Scala tramite Java Scripting Services? – Ingo

risposta

0

riferimento a:

C'è qualcosa circa la loro architettura che li rende mal compatibile che im manca, o è solo una cosa impressionante che è ancora in attesa di accadere?

penso che sia circa le persone che fanno queste lingue:

non ci sono molto persone che vogliono fare Haskell e Python, allo stesso tempo.

  1. di fare uso di entrambe le lingue (liek Haskell e Python), allo stesso tempo si sia potrebbe andare via il C-Interface o creare un protocollo di entrambe le lingue parlano.

    Entrambi sono abbastanza avanzati, limitando il numero di persone che potrebbero farlo. Certo, ci sarebbero anche dei compromessi che rendono difficile l'utilizzo della piena potenza di entrambe le lingue.

  2. Sto usando Python e sebbene conosca alcuni Haskell, non lo programma. Sono un po 'bloccato nell'orientamento agli oggetti, dicendomi che un giorno un problema deciderà per me che è meglio risolverlo in Haskell che in Python. Questo problema non si è ancora verificato perché il mio primo pensiero è: so come farlo in Python. Penso che anche altri "esperti" affrontino questo problema.

  3. Si inizia a pensare in una lingua. Penso che Haskell abbia un modo totalmente diverso di pensare con il suo stile funzionale, senza effetti collaterali. Per entrare in questo modo di pensare ho bisogno di dimenticare o di non usare la mia conoscenza di Python. Passare da questi due modi di pensare richiede un po 'di forza.

Avvolgendolo: perché le due lingue non sono così vicine rimangono separate. È difficile fare entrambi e non ci sono molti o semplici modi per esercitarsi con entrambi.

+1

Per riassumere: non si vede veramente il punto. Ma fidati di me: usare le lingue funzionali diventa molto più attraente quando sono perfettamente integrate. Non dire ai fanatici funzionali, ma alcuni compiti si prestano molto meglio a uno stile o l'altro. Mettere un pixel in un framebuffer in un linguaggio funzionale sembra proprio come mettere un piolo quadrato in un buco rotondo, per esempio. Questo è ciò che sta bloccando le lingue funzionali per me. Sto già usando innumerevoli lingue allo stesso tempo, quindi non è l'ostacolo per molte persone. Lo sono centinaia di linee di piastre per avvolgere una funzione a 5 linee. –

0

Penso che qualsiasi risposta a questa domanda sarebbe trascurata senza considerare l'inerzia dei linguaggi orientati agli oggetti e imperativi rispetto a quelli funzionali. Si consideri la seguente situazione, a cominciare dal fatto che le lingue funzionali non vengono insegnate quasi alla frequenza in cui le lingue orientate agli oggetti o imperative sono al livello secondario, universitario o laureato.Come cita l'utente, c'è un momento significativo coinvolto come programmatore riguardo alla scelta della lingua. Ad esempio, durante il corso di un tipico corso di laurea specialistica in un'università quadriennale, si può imparare una manciata di lingue e più che probabile, non una di queste è una lingua funzionale. Questo tipico laureato inizierà quindi a lavorare nell'industria, dove, dopo aver programmato per più di 40 ore a settimana per il proprio lavoro, è molto difficile prendere tempo, non solo imparare una lingua completamente nuova, ma imparare una lingua che funziona completamente diverso da quello che già conosce. Oltre a tutto ciò, c'è l'inconveniente che i linguaggi funzionali non sono così utili nell'industria quanto quelli orientati agli oggetti o imperativi. Uno può vedere che dato questo stato attuale, è comprensibile che l'interoperabilità tra Python e Haskell non è ciò che alcuni programmatori vorrebbero che fosse.

0

Se si dovessero utilizzare i collegamenti da Haskell a Python, cosa faresti in ogni lingua?

Se si considera l'associazione C e Python, ad esempio, si usa C quando è necessario il boost di velocità, o quando è necessario spostare i bit e si sta utilizzando Python quando si vuole essere espressivi e concisi. È normale che tu abbia un paio di lingue, una per la maggior parte della logica, e una che tu possa far cadere su per velocizzare, a costo di chiarezza. Maggiore è il divario tra le lingue, maggiore è il guadagno derivante dal passaggio.

Se dovessimo legare Haskell e Python, è meno chiaro cosa ne otterresti. Non vorrei passare da Python ad Haskell solo per velocità, dato che Haskell, anche se veloce, non è veloce come C. Ma se stavo usando Haskell, quando dovrei usare Python? Python non è più espressivo di Haskell, non come confrontare C e Python.

Penso che la maggior parte del tempo, è più facile da solo importfunctools, e il programma funzionale in Python, invece di dover convertire gli oggetti in qualche rappresentazione Haskell, fare un certo lavoro, e poi riconvertirlo.

Sebbene, se lo volessi davvero, Cython renderebbe facile la scrittura delle funzioni che l'FFI di Haskell può utilizzare.

+0

Interessante osservazione. – Ingo

+1

Vorrei usare python per cose che sono naturalmente espresse come codice mutabile, e Haskell per i loop interni matematici, dove l'immutabilità di Haskell mi permette di scrivere codice ovviamente più corretto (che è anche molto più veloce di python e si avvicina quello di C). Ma la divisione concettuale mutevole/immutabile sarebbe il principale interesse per me. –

+0

Vuoi che io approfondisca l'FFI per mostrare come associare una funzione Haskell in Python? (Avrei bisogno di imparare un po 'anch'io). –

2

Un altro approccio consiste nell'utilizzare i pipe unix, e solo scrivere un programma Haskell, e anche scrivere un programma Python e farli comunicare via testo. Haskell e Python condividono anche la stessa sintassi per gli elenchi, quindi è davvero facile reindirizzare i dati da uno all'altro.

Problemi correlati