Ci sono tre problemi distinti nella tua app.
-
Interfaccia utente. Se è basato sul web, è HTML + JavaScript o una lingua che compila in modo efficiente su JavaScript (ce ne sono alcuni). L'interfaccia utente probabilmente non è eccessivamente sofisticata (ad esempio, molto più semplice di Gmail), quindi puoi scegliere qualsiasi framework con cui ti trovi comodo.
-
Una parte del server web. Questa parte riceve richieste HTTP dall'interfaccia utente e le invia al motore. Anche questo non è molto complicato e può essere implementato in qualsiasi lingua tu stia a tuo agio, ad es. JavaScript (Nodo) può andare bene; esistono infinite opzioni.
-
Il motore di scacchi. Questa parte riceve mosse (in qualsiasi formato tu ritenga conveniente), genera mosse, mantiene la posizione sulla scacchiera e il tempo, ecc. Ciò di cui hai bisogno dipende molto dalle tue esigenze, dall'ambizione, dalle risorse a disposizione, ecc. prendi un linguaggio ad alte prestazioni e compilato staticamente per questo. C'è una vasta scelta; In cima alla mia testa, considererei OCaml, Go, Java, C #, Rust, D e anche C ++ se fossi un esperto in questo. Tutti offrono strutture di dati buone o almeno dignitose per un calcolo efficiente, inclusi alcuni calcoli su base down-to-bit che hai citato. Potresti considerare l'utilizzo di OpenCL o CUDA per parti del tuo calcolo che permettano la parallelizzazione di questo tipo.
Se tutto quello che stai cercando è una prova di concetto e / o studio, allora Python, o qualsiasi altro linguaggio dinamico facile da ispezionare, potrebbe essere più adatto. Perderai un sacco di prestazioni (anche se numpy, numba e cython potrebbero aiutarti in determinati punti), ma avrai molto più tempo a guardare come funzionano le parti interne del tuo motore. Aiuterà sicuramente a scrivere una versione successiva migliore.
Come vedi, le tre parti sono tutte relativamente indipendenti. Se fossi in te, inizierei con il motore, con l'interfaccia più cruda (leggere / scrivere stringhe di testo), eventualmente collegarlo ad un server web (di nuovo con i moduli HTML statici più crudi e più semplici possibili), e dopo lavora su una bella interfaccia utente.
È probabile che esistano già belle interfacce utente per programmi di scacchi open source; forse alcuni di essi potrebbero essere riutilizzati, in parte o addirittura interi. Ma senza un motore l'interfaccia utente è praticamente inutile. Non iniziarei con questo.