Quali sono le somiglianze tra Perl e Java? [chiuso]


14

Mi viene da pensare che sto imparando Java come seconda lingua (sono uno sviluppatore Perl). Ma solo leggendo un po 'dei tutorial online, non riesco davvero a trovare alcuna somiglianza tra i due. Cosa avrò una comprensione facile quando avrò imparato Java?


Inizia in anticipo decidendo "MI PIACE QUESTA LINGUA!". Ogni volta che ti imbatti in qualcosa di difficile, ricorda solo la tua decisione e risparmia un sacco di digrignamento e tiratura dei capelli.

1
Letture consigliate: Gorilla vs. Shark

Risposte:


32

Perl è un linguaggio di programmazione dinamico di alto livello, multi-paradigma, interpretato e di alto livello. Java è un linguaggio di programmazione di alto livello, per uso generale, principalmente a paradigma singolo, tipicamente statico.

Quindi, entrambi sono di alto livello :

Un linguaggio di programmazione di alto livello è un linguaggio di programmazione con forte astrazione dai dettagli del computer.

e per scopi generici :

Nel software per computer un linguaggio di programmazione generico (GPL) è un linguaggio di programmazione progettato per essere utilizzato per la scrittura di software in un'ampia gamma di domini applicativi.

In sostanza, ciò significa che tutto ciò che puoi fare con Perl, puoi farlo anche con Java. E come menziona @KyleHodgson , entrambe le loro sintassi derivano da C e C ++ e la sintassi per cose semplici come forloop e ifistruzioni è essenzialmente la stessa - e come nota @DipanMehta , entrambe sono raccolte . E ovviamente entrambi sono estremamente popolari e hanno comunità vibranti.

Ma è qui che si fermano le somiglianze. Perl è multi-paradigma e supporta una vasta gamma di paradigmi di programmazione:

Perl non incoraggia un singolo paradigma, sono essenzialmente uguali e sei libero di scegliere quello che ritieni più adatto a ciò che stai costruendo, senza ovviamente limitarti a un singolo paradigma, puoi mescolare e abbinare. D'altra parte, Java è principalmente un linguaggio orientato agli oggetti basato sulla classe. C'è un supporto per la programmazione generica, ma come principiante dovresti pensare a Java come a un linguaggio orientato agli oggetti strettamente basato sulla classe.

Quindi Perl offre più di un modo per strutturare il tuo codice 1 , mentre Java solo uno. Non è una brutta cosa (o una buona cosa), è solo diversa. Se non hai scritto alcun codice Perl orientato agli oggetti, all'inizio Java potrebbe sembrare un po 'alieno. Non scoraggiarti, l'orientamento agli oggetti è qualcosa che alla fine dovrai imparare, se stai considerando una carriera nello sviluppo di software e l'apprendimento di Java è un buon modo per apprendere i concetti di base dell'orientamento agli oggetti - non un modo perfetto, ma sicuramente un buon modo.

E come sai, Perl viene interpretato, mentre Java è ... beh ... una bestia completamente diversa . In Java scrivi il tuo codice come faresti in Perl, e poi lo compili . Il risultato non è un eseguibile, ma un bytecode Java . Questo formato di intermediazione viene eseguito (finalmente!) Nella Java Virtual Machine , che è in qualche modo analoga all'interprete Perl. Per poter eseguire un programma Java, è necessario installare prima una JVM, allo stesso modo su come è necessario installare un interprete Perl per eseguire uno script Perl 2 .

Proveniente da uno sfondo Perl, la cosa più importante da ricordare è la fase di compilazione in bytecode: ogni volta che si modifica un file sorgente Java, è necessario ricompilarlo. All'inizio potrebbe sembrare folle, ma la compilazione ha una conseguenza molto bella: il tuo codice viene verificato per una varietà di errori in questa fase e il compilatore rifiuta di terminare il processo se ce ne sono, e talvolta ti aiuterà a individuare gli errori con messaggi utili (ci sono sempre messaggi, ma solo a volte sono utili).

Il che ci porta all'ultima grande differenza:

Perl è dinamico 3 :

Il linguaggio di programmazione dinamico è un termine ampiamente utilizzato nell'informatica per descrivere una classe di linguaggi di programmazione di alto livello che eseguono in fase di esecuzione molti comportamenti comuni che altri linguaggi potrebbero eseguire durante la compilazione, se non del tutto. Tali comportamenti potrebbero includere l'estensione del programma, aggiungendo nuovo codice, estendendo oggetti e definizioni o modificando il sistema di tipi, tutto durante l'esecuzione del programma.

e digitato in modo dinamico 4 :

Si dice che un linguaggio di programmazione sia tipizzato in modo dinamico quando la maggior parte del suo controllo del tipo viene eseguito in fase di esecuzione anziché in fase di compilazione.

e Java è scritto staticamente :

Si dice che un linguaggio di programmazione utilizza la tipizzazione statica quando il controllo del tipo viene eseguito durante il tempo di compilazione anziché in fase di esecuzione.

Il che, per dirla nel modo più semplice possibile, significa che in Java devi dichiarare il tipo di variabili e metodi prima di usarli. Ci sono altre differenze, ma non vorrei rovinare il divertimento di scoprirle da soli :)

E, infine, c'è una differenza molto importante: Java è il linguaggio dolce del mondo accademico 5 e del mondo aziendale, mentre incontrerai raramente Perl in un ambiente accademico (dove l'ho incontrata per la prima volta), e le sue prospettive di carriera si stanno riducendo (ancora un bel po 'di lavori, ma in nessun posto vicino a molti linguaggi Java, .Net o PHP). Non commenterò i motivi, sto solo affermando i fatti (tristi). Dato che sei ancora molto giovane, imparando Java sarai un po 'più preparato per una laurea in Informatica, se sceglierai di seguire quel percorso.

Non rinunciare a Perl, ovviamente, ma esplora Java. Il fatto che siano più diversi che simili significa anche che imparerai approcci e mentalità di programmazione abbastanza diversi, è un percorso difficile ma che alla fine ti renderà un programmatore migliore.

1 "Tim Toady"

2 La comunità Perl sta esplorando attivamente la possibilità di una macchina virtuale Perl, tramite Parrot .

3 Dinamico non significa sempre digitato in modo dinamico.

4 Perl è tipizzato in modo dinamico per tipi definiti dall'utente, tipicamente staticamente rispetto a matrici, hash, scalari e subroutine distintivi e fortemente tipizzato via use strict, quindi essenzialmente è un linguaggio di sistema di tipo variabile, ma per mantenere un certo senso di sanità mentale chiamiamolo in modo dinamico digitato.

5 Al punto di abuso, come scrive Joel Spolsky in The Perils of JavaSchools .


6
Rispetto al Perl, Java non è un linguaggio di alto livello. Ci vuole molto più codice Java per scrivere qualcosa di quanto non faccia il codice Perl.
tchrist,

1
@tchrist Cosa c'entra la quantità di codice con se una lingua è di livello elevato o superiore / inferiore rispetto a un'altra lingua?
yannis,

1
@YannisRizos È abbastanza facile rispondere. Se richiede più codice, non hai a che fare con un livello di astrazione abbastanza alto. Un esempio lampante è la gestione delle stringhe instabili di Java. Non supporta il concetto di alto livello di punti di codice Unicode astratti, tranne nel motore regex in Java 7. Ciò rende molto malarkey a causa di quanto un linguaggio Java di basso livello sia confrontato con Perl.
tchrist,

@tchrist La soggettività del termine non lascia molto spazio a un confronto sensato, le linee sono troppo sfocate ed entrambe le lingue hanno una gamma estremamente ampia di funzioni, alcune delle quali sono di livello molto alto e altre di bassa intensità. Quindi, continuerò a pensarli allo stesso livello e non me ne preoccuperò molto. Ho avuto una conversazione simile qui , che mi ha ispirato a non perdere tempo a confrontare le lingue;)
yannis,

@YannisRizos Non è possibile trovare un concetto di alto livello in Java che Perl manca, ma è possibile trovare molti concetti di alto livello in Perl che manca a Java. Pertanto, Perl è di livello superiore. Perl ha puntatori a funzione; Java no. Perl ha un sovraccarico dell'operatore; Java no. Perl ha distruttori deterministici; Java no. Perl può sovraccaricare le funzioni per tipo di ritorno; Java non può. Posso andare avanti così a lungo. Ovviamente continuerai a "sentire" come più ti piace, e per qualsiasi motivo, ma non è dovuto ad analisi soggettive.
tchrist,

2

Bene, entrambi usano una sintassi simile al C - punto e virgola, parentesi graffe e simili. Personalmente, quando ho provato a passare da Perl a Java diversi anni fa, la cosa più grande che mi ha fatto scattare è stata la programmazione orientata agli oggetti. Avevo sviluppato alcuni oggetti in Perl, ma mi faceva male alla testa provare a immaginare la vita nel Regno dei Nomi.


@downvote, perché? (Non sono così innamorato della risposta, sono solo curioso di sapere cosa hai trovato così problematico.)
Kyle Hodgson

1

Cercare una risposta alternativa poiché quella attualmente selezionata sembra concentrarsi sulle differenze tra i due (in realtà non ci sono molte somiglianze tra Perl e Java).

Somiglianze

  • Sono entrambi a forma di C (hanno anelli e parentesi graffe e punti e virgola)
  • Sono principalmente imperativi
  • Né produrre binari compilati
  • Sono entrambi molto maturi
  • Entrambi sono testati in battaglia nell'impresa (Perl più come colla per operazioni e Java più come applicazioni / servizi)
  • Sono entrambi popolari
  • Entrambi supportano l'orientamento agli oggetti
  • Entrambi hanno una vasta gamma di framework disponibili
  • Entrambi hanno pubblicato libri su di loro
  • Sono entrambi di livello superiore rispetto a C / assembly
  • Sono entrambi "lenti" (per vari scenari specifici di lento in quanto nessuno dei due è C / assembly)
  • Entrambi gestiscono automaticamente la memoria ("garbage collection")
  • Né sono alla moda / cool dall'estate 2012
  • Entrambi sono trincerati nella comunità open source
  • Sono entrambi disponibili per molte piattaforme

Se il tuo codice Perl è molto rigoroso e ortogonale (ben collaudato, ben documentato, utilizza Moose o un rigoroso orientamento agli oggetti), quei concetti entreranno molto bene in Java, poiché Java è estremamente ortogonale e non altrettanto espressivo.

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.