Penso che potresti confondere le funzionalità della lingua di base con le funzionalità fornite da estensioni e / o toolkit.
Non conosco alcun algoritmo crittografico che prepari un hash per te, motivo per cui il tuo collega ha fatto il suo commento. Ma quella funzione di crittografia non è un aspetto fondamentale della lingua, fa parte di un'estensione.
In generale, è necessario comprendere gli strumenti che si stanno utilizzando indipendentemente dalla loro appartenenza al linguaggio principale o forniti tramite un toolkit.
Se la lingua dice che farà X, Y e Z su invocazione, allora puoi fidarti della lingua per fare X, Y e Z quando la invochi correttamente. Qualsiasi altro risultato sarebbe un bug nell'implementazione di quella lingua. Ciò non ovvia alla necessità di capire cosa fornisce la funzione.
Come esempio correlato, l'allocazione della memoria in C non inizializza il segmento di memoria su un valore preimpostato / predeterminato. In genere è necessario impostare la memoria su un valore predefinito (come 0x00) prima di utilizzarlo. Posso fidarmi che quando chiedo l'allocazione, la memoria è stata allocata (assumendo che il mio puntatore restituito non sia nullo). Ma l'alloc non garantisce che fornirà memoria inizializzata, quindi ho bisogno di farlo da solo.