Come mai i progettisti di linguaggi non aggiornano le loro funzioni globali?

1

Ad esempio, quando si lavora con gli array ci sono metodi come indexOf () che funziona in questo modo:

if (array.indexOf("something")!=-1) { // do something or nothing }

Perché qualcuno non ha creato un metodo contiene?

if (array.contains("something")) { // do something or nothing }

O aggiungi funzioni che le persone trovano utili come:

var fileHeader:int = byteArray.indexOf([0xFF, 0x00]);

O con stringhe o espressioni regolari:

if (String(myString).contains("fox")) { // do something or nothing }

Nelle classi E4X XML vedo così tanti casi in cui le cose non funzionano o devi sapere certe cose. Ad esempio, non vi è alcuna chiamata di rimozione in oggetti XML. Invece di xml.remove () devi fare questo:

 delete xml.parent()[xml.name()][xml.childIndex()];

Ci sono molti posti dove è possibile apportare miglioramenti con le lezioni di base, ma sembra che stagnino. Alcune cose non sono cambiate in oltre 30 anni.

Perché è così e possiamo aggiungere chiamate migliori invece di usare il cadavere putrefatto delle API di ieri?

Desidero che queste funzionalità siano state aggiunte.

    
posta 1.21 gigawatts 23.12.2016 - 19:28
fonte

2 risposte

12

È principalmente un problema di libreria (standard) (nel linguaggio di programmazione), non un problema di linguaggio di base.

Diversi linguaggi di programmazione hanno librerie aggiuntive che li migliorano (o addirittura sostituiscono le loro librerie standard) come desideri (ad esempio Boost per C ++, Batterie o Core per Ocaml, JQuery per JavaScript).

Un progettista di linguaggi di programmazione deve bilanciare due obiettivi (o approcci) in conflitto:

  • fornisce una libreria standard molto completa, ma questa è una enorme quantità di lavoro (un esempio prototipo è Java)

  • fornendo una piccola libreria standard (solo il minimo richiesto ad esempio al compilatore) per ridurre lo sforzo e concentrarsi sulle funzionalità linguistiche di base, ma il linguaggio di programmazione in pratica riuscirà solo se la comunità sviluppa molte librerie esterne (sia C, che in misura minore, Ocaml, vieni in mente)

Non sono d'accordo con l'aggettivo "testardo" nella tua domanda: la maggior parte dei linguaggi di programmazione ha una comunità di sviluppatori linguistici molto limitata (e la capacità di progettare o sviluppare un linguaggio di programmazione è un'abilità piuttosto rara e impegnativa); è difficile essere pagati per progettare un linguaggio di programmazione. Quindi i progettisti di linguaggi di programmazione devono fare delle scelte sulle aree su cui si concentreranno i loro sforzi.

Se desideri avere più funzioni di libreria standard nel tuo linguaggio di programmazione preferito, contribuisci (con il tuo lavoro - e impiega un lotto di tempo, o finanziando gli sviluppatori del linguaggio di programmazione).

    
risposta data 23.12.2016 - 19:33
fonte
3

Dovresti essere più chiaro su ciò che consideri un "upgrade" a una funzione. Intendi migliorare effettivamente l'implementazione già esistente o aggiungere un'implementazione nuova e migliore?

Per migliorare l'implementazione, sarebbe una cattiva idea. Pensa a cosa succederebbe a un'applicazione che hai scritto su SDK versione X e poi esegui il deployment su una macchina che esegue un SDK con una versione superiore? cosa succederebbe se le tue funzioni potessero restituire risultati diversi su alcuni casi limite e fornirebbe un comportamento imprevedibile, che ti costringerebbe ad aggiungere il supporto per quella versione dell'SDK (non è divertente!) o dire al tuo cliente di evitare quell'SDK (anche senza divertimento ).

Molte lingue aggiungono migliori implementazioni e funzioni e ti dicono semplicemente di evitare quelle vecchie per semplificarti la vita. ma li mantengono in giro come legacy in modo che le applicazioni non si rompano.

Come per il tuo esempio, anziché .contains , Array.prototype.includes esiste e può sostituire .indexOf come hai descritto.

Ma cosa succede se ho ancora bisogno di usare la funzione per trovare effettivamente un indice (mi piace farlo mentre sto facendo il mio lavoro), invece di capire che l'elemento dell'array esiste? Non avrei potuto farlo con .contains , quindi per me è una caratteristica inferiore.

Quindi le lingue si aggiornano solo quando c'è una reale necessità per questo, altrimenti avrebbe un enorme, gonfio, retaggio di caratteristiche indesiderate schifose (javascript, php, ecc.) Quindi sarebbe meglio usare solo librerie o API che ti fornissero questi "aggiornamenti".

    
risposta data 23.12.2016 - 21:01
fonte