Questa è una domanda che ho pensato per un po '. Recentemente ho controllato linguaggi concorrenti come Haskell o Go o Erlang.
Dal mio punto di vista, hanno enormi vantaggi in termini di prestazioni rispetto a linguaggi come C ++ o Python a causa del modo in cui gestiscono le funzioni in parallelo.
La mia domanda è: perché la sintassi per le lingue come C ++ o Python è così diversa (e IMO più semplice) da quelle dei linguaggi concorrenti, anche se la maggior parte dei linguaggi concorrenti vengono eseguiti in runtime (e quindi hanno più possibilità di semplificare sintassi)?
Ecco un esempio, considera Go sqrt
:
// Package newmath is a trivial example package.
package newmath
// Sqrt returns an approximation to the square root of x.
func Sqrt(x float64) float64 {
z := 1.0
for i := 0; i < 1000; i++ {
z -= (z*z - x) / (2 * z)
}
return z
}
Ora per la controparte Python (portalo da solo basandomi sull'esempio Sqrt
di Go):
def Sqrt(x):
z = 1.0
for i in Range(0, 1000):
z -= (z*z-x/2*z)
return z
Ora come puoi vedere, c'è una sintassi come ":=" per l'assegnazione, Se prendi un esempio più complicato, la sintassi assomiglierà più a quello che sto cercando di indicare.
E Go è solo la lingua meno "strana". Se consideri Erlang sembra ancora più strano:
%% qsort:qsort(List)
%% Sort a list of items
-module(qsort). % This is the file 'qsort.erl'
-export([qsort/1]). % A function 'qsort' with 1 parameter is exported (no type, no name)
qsort([]) -> []; % If the list [] is empty, return an empty list (nothing to sort)
qsort([Pivot|Rest]) ->
% Compose recursively a list with 'Front' for all elements that should be before 'Pivot'
% then 'Pivot' then 'Back' for all elements that should be after 'Pivot'
qsort([Front || Front <- Rest, Front < Pivot])
++ [Pivot] ++
qsort([Back || Back <- Rest, Back >= Pivot]).
Le parti che hanno attirato la mia attenzione erano "++ [] ++", "< -" e "- >"
Sono convinto che questi linguaggi abbiano questo aspetto per una ragione, ma non posso fare a meno di pensare: non può essere più semplice? Perché sono linguaggi concorrenti come questo? Perché se usano un runtime come Python e JavaScript, sono ancora sicuri per tipo?
So che i linguaggi sicuri per tipo hanno il vantaggio di non mescolare i tipi di variabili, ma, tuttavia, deve esserci qualcuno che ha fatto un linguaggio concorrente che non ha la sicurezza del tipo, se possibile giusto?
Sembra che quasi tutte le lingue concorrenti abbiano una cosa in comune: un elenco più grande di sintassi possibile / valida.
Spero di aver spiegato abbastanza bene la mia domanda.