2009-11-11 5 views
5

Il numero Golang di Google risolve i problemi con le lingue indirizzate nel post di Paul's Graham "Why Arc isn't Especially Object Oriented"?La go-lingua di Google risolve i problemi nel post di Paul's Graham "Perché Arc non è particolarmente orientato agli oggetti"?

+2

Quali problemi? Quel post parla di problemi con l'uso eccessivo di progetti ingombranti orientati agli oggetti, non di problemi con le lingue. – mquander

+0

@mquander: e in realtà il post riguarda i vantaggi spuri più dei problemi. – ctd

risposta

7

La mia sensazione iniziale verso questo è "E 'troppo presto per dirlo"

1) Programmazione orientata agli oggetti è entusiasmante se si dispone di un linguaggio staticamente tipizzato senza chiusure lessicali o macro. Ad alcuni gradi , offre un modo per aggirare queste limitazioni . (Vedere Decimo Regola di Greenspun.)

Go supporta letterali logici (vedere docs), che se sto leggendo questo permette correttamente di passare funzioni come params, se definiti altrove o creato ad-hoc.

2) Programmazione orientata agli oggetti è popolare nelle grandi aziende, perché adatta al loro modo di scrivere software. Alle grandi aziende, il software tende ad essere scritto da grandi (e spesso cambiando) squadre di mediocri programmatori . La programmazione orientata agli oggetti impone una disciplina su a questi programmatori che impedisce a qualsiasi uno di loro di fare troppo danno . Il prezzo è che il codice risultante è gonfio con i protocolli e pieno di duplicazione. Questo non è un prezzo troppo alto per le grandi aziende , perché il loro software è probabilmente gonfio e pieno di duplicazione di duplicazione.

Questo punto è molto soggettivo per rispondere.

3) Programmazione orientata agli oggetti genera un sacco di quello che sembra lavoro. Ai tempi della fanfold, c'era un tipo di programmatore che inseriva solo cinque o dieci righe di codice su una pagina, preceduto da venti righe di elaborati formattati commenti. La programmazione orientata agli oggetti consente di incorporare tutte queste impalcature direttamente nel codice sorgente . Qualcosa che un hacker Lisp potrebbe gestire premendo un simbolo su un elenco diventa un intero file di classi e metodi. Quindi è uno strumento valido se vuoi convincere te stesso, o qualcun altro, che stai facendo molto di lavoro.

Dal momento che go non è un linguaggio veramente orientato agli oggetti, è possibile risolvere il problema in qualsiasi modo si sia a proprio agio.

4) Se un linguaggio stesso è un programma orientato agli oggetti, può essere esteso dagli utenti. Beh forse. Oppure forse puoi fare ancora meglio con offrendo i sotto-concetti di programmazione orientata agli oggetti a la carte. Il sovraccarico, ad esempio, è non intrinsecamente legato alle classi. Vedremo.

Go sembra avere un approccio interessante agli oggetti, dove non è necessario preoccuparsi/sviluppare alberi di grandi dimensioni. Sembra che gli strumenti siano presenti nel linguaggio per strutturare i dati in modo orientato agli oggetti senza bloccarti in un puro ambiente orientato agli oggetti.

5) astrazioni orientate agli oggetti mappa ordinatamente sui domini di alcuni specifici tipi di programmi, come simulazioni e sistemi CAD.

...

+0

Go supporta le funzioni di prima classe e di ordine superiore, quindi è fantastico. Inoltre, supporta il typecasing a la MLs/Haskell/Racket. La cosa che personalmente amo di Go è che, mentre ci sono idiomi al suo interno, i designer sembrano capire che situazioni diverse richiedono strumenti diversi, a differenza di Graham. Non fraintendermi, Graham è fantastico. E 'solo che argomentare sulla programmazione degli idiomi è in definitiva infruttuoso: si riduce a una discussione sugli strumenti tra artigiani distorti o tra processi mentali tra filosofi-di-lingua di parte. – jcc333

5

Paolo ha alcuni punti interessanti, in generale, ho letto un sacco di sue riflessioni. In questa materia, non siamo d'accordo. È un pazzo e un dado da programma scadente. Sembra impegnarsi a fondo per capire i programmi come il lavoro di grandi programmatori. Sì, mi rendo conto che è più sfumato di così, ma in realtà si riduce proprio a questo. Alla fine della giornata, il tuo codice è facile da usare o non lo è. E alcuni programmatori, programmatori che Paul considererebbe grandiosi, saranno in grado di sopportare più cazzate di altri e saranno ancora in grado di fare testa o croce su ciò che il codice intende. È un'abilità, ma sicuramente non è l'unico di cui un buon programmatore ha bisogno.

Parlando di Arc, fa schifo, e a meno che non mi sbagli, anche la gente della comunità Lisp la pensa così - il mio punto di vista è che anche le persone intelligenti fanno errori.

Ancora una volta, Paul è un ragazzo intelligente, ma il suo intero approccio in questo particolare pezzo è fuori luogo, sembra.

1

Aspettare, però, è davvero orientato agli oggetti? Sembra completamente agnostico su quel fronte. Puoi usare OOP o FP o programmazione Imperativa all'interno di Go. Voglio dire, la "programmazione" in stile prolog potrebbe essere un allungamento, ma altrimenti ...

In realtà, direi che Go somiglia a scala in questo senso: ci sono alcuni paradigmi oggettuali in giro, e tuttavia, ci sono anche lambda e typecasing in giro.

+1

Go è orientato agli oggetti. Utilizza l'approccio di dispacciamento generico all'orientamento agli oggetti, come Common Lisp e Dylan. – PuercoPop

Problemi correlati