Piratage de langue. Hack (langage de programmation). Gestion des requêtes GET et POST

  • Machine virtuelle Hack de Miller (Python)
    • Machine virtuelle Hack de Miller (Python)
  • Langage de programmation

    Hack VM est un langage de programmation miniature (bien que l'auteur le qualifie de « machine virtuelle pour les hackers », il mérite d'être qualifié de langage).

    Le principal et unique objectif de ce langage est de l'utiliser pour résoudre les tâches de hacker.org, ce qui en fait l'un des rares langages de programmation ésotériques populaires.

    Le programme Hack VM est une chaîne de commandes à un caractère. La machine virtuelle démarre avec la première commande, l'exécute, passe à la suivante, et ainsi de suite. L'index de l'instruction en cours est appelé compteur de programme. L'exécution s'arrête soit lorsque la fin du programme est atteinte, soit sur commande ! , ou après qu'une erreur se soit produite. Un compteur de programme est un pointeur vers l'instruction en cours.

    Hack VM - langage de pile ; Une machine virtuelle se compose d'une pile d'opérandes, d'une mémoire tampon et d'une pile d'appels. Chaque élément de la pile d'opérandes est un entier signé de 32 bits. La pile d'appels est utilisée pour mémoriser la valeur du compteur du programme lors du passage à un sous-programme à partir duquel revenir. La mémoire tampon contient 16 384 cellules dont les numéros commencent par 0. Par défaut, l'exécution du programme commence avec une pile d'appels vide, une pile d'opérandes vide et une mémoire remplie de zéros. La mémoire tampon peut être remplie de valeurs défini par l'utilisateur, et utilisez-les pour simuler la saisie manuelle.

    Liste des commandes de langage (S désigne le nième élément à partir du haut de la pile ; donc, S0 est l'élément supérieur).

    • " " : Ne rien faire (utilisé pour améliorer la lisibilité)
    • "p" : Imprimer S0 sous forme d'entier
    • "P" : Imprimer S0 sous forme de caractère ASCII (seuls les 7 bits de poids faible sont utilisés)
    • "0"..."9" : Ajouter la valeur 0..9 à la pile
    • "+", "-", "*", "/" : ajoutez respectivement S1+S0, S1-S0, S1*S0, S1/S0 à la pile
    • ": : Ajouter -1 à la pile si S1 S0
    • "g" : Ajouter S0 au compteur de programme
    • "?" : Ajouter S0 au compteur du programme si S1=0
    • "c" : Ajoutez un compteur de programme à la pile d'appels et définissez-le sur S0
    • "$" : Place le compteur du programme sur l'élément supérieur de la pile d'appels
    • "<" : Добавить в стек значение из ячейки памяти номер S0
    • ">" : Écrit S1 dans la cellule mémoire numéro S0
    • "^" : Ajouter une copie de S à la pile (ex : 0^ copies S0)
    • "v" : Supprimer S de la pile et poussez cette valeur sur la pile (par exemple : 1 v échange S0 et S1)
    • "d" : Supprimer S0 de la pile
    • "!" : Arrêter l'exécution du programme

    Il convient de noter que la plupart des commandes suppriment leurs arguments de la pile lors de l'exécution.

    Éléments de syntaxe :

    Sensible aux majuscules et minuscules Oui
    Comparaison :

    Exemples :

    Bonjour le monde!:

    Exemple pour les versions Miller's Hack VM (JavaScript), Miller's Hack VM (Python)

    Le programme fonctionne de manière assez évidente : les codes ASCII des caractères du message sont calculés et affichés les uns après les autres. Ils doivent être calculés car seuls les nombres de 0 à 9 peuvent être mis sur la pile à la fois, grands nombres vous devez en combiner des plus petits. La seule astuce non triviale est la gestion du caractère l - lorsque son code ASCII est évalué, il est triplé sur la pile avec la commande 0^ et imprimé deux fois immédiatement et une fois plus tard.

    89* P 45* 99*+ P 39* 99*+ 0^0^PP 56* 99*+ P 29+ 4* P 48* P 92+ 8* 1- P 56* 99*+ 0^P 3+ P P 25* 0^* P 56* 3+ P

    Numéros de Fibonacci :

    Exemple pour les versions Miller's Hack VM (JavaScript), Miller's Hack VM (Python)

    Cet exemple utilise l'itération et fonctionne de la même manière que dans les autres langages ésotériques : l'emplacement mémoire 0 stocke le nombre de nombres restant à calculer, les cellules 1 et 2 stockent les codes ASCII de la virgule et de l'espace, les cellules 3 et 4 stockent les deux derniers nombres de Fibonacci. calculé. Dans la boucle, les valeurs des cellules 3 et 4 sont récupérées, additionnées, la nouvelle valeur est imprimée et les cellules mémoire sont mises à jour. Après cela, le nombre de nombres restants est réduit de 1, et s'il devient 0, le compteur du programme (l'équivalent du pointeur d'instruction dans Brainfuck) avance de 6 caractères et sort de la boucle, sinon il revient au début du boucle. Enfin, trois points sont affichés.

    27* 0> 92+ 4* 1> 84* 2> 10^p3 > 1< P 2< P 10^p4 > 1< P 2< P 3< 4< + 0^p 4< 3> 4> 0< 1- 0> 0< 6? 67* c 58* 6+ 0^0^PPP

    À mesure que l'audience sociale augmente Réseaux Facebook et ses services, l'entreprise a commencé à avoir un besoin urgent d'un langage plus productif que PHP. Les substituts existants n'offraient aucun avantage, c'est pourquoi les développeurs de l'entreprise ont décidé de s'asseoir pour développer un nouveau dialecte. Le résultat de ce travail a été Hack, publié en 2014.

    Brèves informations

    Le langage Hack est écrit en OCaml et s'exécute sur la machine virtuelle HHVM (HipHop) Machine virtuelle), « par hasard » également développé par Facebook. Avec son aide, il est diffusé directement sur code machine, tandis que PHP est d'abord un bytecode. La suppression d'une opération a un impact significatif sur les performances, ce qui a été l'une des principales raisons de sa création.

    La deuxième raison est la sécurité. Lorsque des dizaines, des centaines, voire des milliers de développeurs travaillent sur du code en même temps, utiliser un langage typé dynamiquement n'est pas une bonne idée. meilleure solution- vous risquez des erreurs de manque et de « superposition ». Par conséquent, Hack fournit également saisie dynamique, et statique. Ceci est implémenté à l'aide d'un contrôleur de type typechecker spécial, et de telle manière que les deux options peuvent être présentes dans un seul fichier de code. Vous avez ainsi toujours le choix entre confort, performances et sécurité.

    Hack digère le code écrit en PHP. C'est une étape naturelle si l'on imagine combien de codes sources devraient être réécrits sans héritage. La seule exception concerne les fonctions qui ne sont pas capables de fonctionner avec un typage statique (variables variables, propriétés dynamiques, etc.). La commodité peut être évaluée par l'exemple de Facebook lui-même : les travaux d'introduction du nouveau langage n'ont pris qu'un an.

    En plus de cela, Hack est open source. Assurez-vous de vous rendre sur Github et de découvrir le héros d'aujourd'hui.

    Syntaxe

    La syntaxe du hack n'a subi que des améliorations cosmétiques par rapport à PHP. Alors va à nouvelle langue même les débutants peuvent le faire. Code pour créer le premier fichier sur Hack :

    Espace de noms Hack\UserDocumentation\Quickstart\Examples\First ;

    Boîte de classe {
    fonction publique __construct(private T $elem) (
    }

    Fonction publique get() : T (
    retourner $this->elem ;
    }
    }

    Fonction get_int() : int (
    retour 42 ;
    }

    Fonction use_box() : void (
    $box = nouvelle Boîte(get_int());
    $i = $box->get();
    var_dump($i);
    }

    Comme vous pouvez le constater, rien de fondamentalement nouveau ou inhabituel n’est utilisé ici. Mais il y a une chose remarque importante: Alors que le code PHP se mélange au HTML, Hack aime être seul.

    Éducation

    Si vous êtes confronté à la tâche d'augmenter la productivité et la sécurité, ou si vous êtes simplement intéressé par le langage Hack, nous vous recommandons de consulter les ressources suivantes :

    http://hacklang.org - comme toujours, vous devriez commencer votre plongée en visitant le site officiel. Vous trouverez ici des publications, des exercices, des sources et bien d'autres choses intéressantes nécessaires à l'apprentissage.

    Hack and HHVM est un livre de la célèbre maison d'édition O'Reilly, couvrant tous les sujets, du travail avec les types aux collections, programmation asynchrone et le débogage.

    C'est essentiellement tout. Malgré la taille nom Facebook et les avantages incontestables du Hack, il n'existe pratiquement pas de livres ou de sites Web distincts sur la langue.

    Perspectives

    Un petit nombre de ressources indique-t-il une faible popularité d’une langue ? Si vous vous fiez à la notation TIOBE, non. Même si l'on prend la plage d'observation l'année dernière- Hack a augmenté ses performances d'au moins 2,5 fois, et c'est aujourd'hui la 43ème langue la plus populaire.

    Les développeurs PHP, à en juger par les forums, sont également unanimes concernant Hack. Ils pensent que le typage incrémentiel résout de nombreux problèmes, mais n’est pas nécessaire. Autrement dit, le développeur moyen ne voit pas l'intérêt d'abandonner PHP tant que les restrictions créées ne sont pas critiques pour les utilisateurs.

    Ainsi, la demande de Hack augmentera avec le temps. Ceci est facilité à la fois par la syntaxe familière et par l'ouverture du code. Cependant, il est peu probable qu’il remplace ou déplace PHP de sa position de leader. Tout simplement parce que pour la plupart des développeurs spécialisés, « plus facile » est synonyme de « mieux ».

    Pirater
    Sémantique:
    Cours de langue :

    Erreur Lua dans Module:Wikidata à la ligne 170 : tentative d'indexation du champ "wikibase" (une valeur nulle).

    Type d'exécution :
    Apparu dans :

    Brian O'Sullivan, Julien Verlag et Alok Menhrajani

    Extension de fichier :

    Erreur Lua dans Module:Wikidata à la ligne 170 : tentative d'indexation du champ "wikibase" (une valeur nulle).

    Problème:

    Erreur Lua dans Module:Wikidata à la ligne 170 : tentative d'indexation du champ "wikibase" (une valeur nulle).

    Version d'essai :

    Erreur Lua dans Module:Wikidata à la ligne 170 : tentative d'indexation du champ "wikibase" (une valeur nulle).

    Système de saisie :
    Principales implémentations :

    Erreur Lua dans Module:Wikidata à la ligne 170 : tentative d'indexation du champ "wikibase" (une valeur nulle).

    Dialectes :

    Erreur Lua dans Module:Wikidata à la ligne 170 : tentative d'indexation du champ "wikibase" (une valeur nulle).

    Influencé par :
    Influencé:

    Erreur Lua dans Module:Wikidata à la ligne 170 : tentative d'indexation du champ "wikibase" (une valeur nulle).

    Licence:

    Erreur Lua dans Module:Wikidata à la ligne 170 : tentative d'indexation du champ "wikibase" (une valeur nulle).

    Site web:
    Plate-forme:

    Erreur Lua dans Module:Wikidata à la ligne 170 : tentative d'indexation du champ "wikibase" (une valeur nulle).

    Système d'exploitation :

    Erreur Lua dans Module:Wikidata à la ligne 170 : tentative d'indexation du champ "wikibase" (une valeur nulle).

    Le but de la création du langage était de combiner un cycle rapide Développement PHP avec la fiabilité et les performances offertes par le typage statique.

    Au moment de sa sortie, le projet était soutenu par ses créateurs - Brian O'Sullivan, Julien Verlag et Alok Menhrajani.

    Au moment de la sortie, Hack et HHVM étaient compilés sous Ubuntu 12.04 LTS, Ubuntu 13.10 ou Debian 7.

    Donnez votre avis sur l'article "Hack (langage de programmation)"

    Links

    • .

    Remarques

    Extrait décrivant Hack (langage de programmation)

    Les « créatures merveilleuses » étaient un peu confuses, ne sachant pas exactement comment répondre à une telle salutation...
    "Nous ne faisons que marcher", dit Stella en souriant. - Nous ne vous dérangerons pas.
    -Qui cherches-tu ? – demanda Athénaïs.
    "Personne", s'étonna la petite fille. – Pourquoi penses-tu que nous devrions chercher quelqu'un ?
    - Comment pourrait-il en être autrement ? Vous êtes maintenant là où chacun se cherche. Je regardais aussi... - elle sourit tristement. - Mais c'était il y a si longtemps !..
    - Il y a combien de temps ? – Je ne pouvais pas le supporter.
    - Oh, il y a très longtemps !... Il n'y a pas de temps ici, comment puis-je le savoir ? Tout ce dont je me souviens, c'est que c'était il y a longtemps.
    Athénaïs était très belle et d'une manière ou d'une autre inhabituellement triste... Elle rappelait un peu un fier cygne blanc, quand lui, tombant de haut, abandonnant son âme, chantait sa dernière chanson - elle était tout aussi majestueuse et tragique...
    Quand elle nous regardait avec son pétillant yeux verts, semblait-il, elle était plus âgée que l'éternité elle-même. Il y avait tellement de sagesse en eux, et tellement de tristesse inexprimée que j'en ai eu la chair de poule...
    – Y a-t-il quelque chose que nous puissions vous aider ? – Un peu gêné de lui poser de telles questions, ai-je demandé.
    - Non, cher enfant, c'est mon travail... Mon vœu... Mais je crois qu'un jour cela finira... et je pourrai partir. Maintenant, dites-moi, joyeux, où aimeriez-vous aller ?
    J'ai haussé les épaules :
    – Nous n’avons pas choisi, nous avons juste marché. Mais nous serons heureux si vous souhaitez nous offrir quelque chose.
    Athénaïs hocha la tête :
    "Je garde cet intermonde, je peux te laisser passer par là", et, regardant affectueusement Stella, elle ajouta. - Et toi, mon enfant, je t'aiderai à te retrouver...
    La femme sourit doucement et agita la main. Son étrange robe flottait et sa main commençait à ressembler à une aile blanche-argentée, douce et pelucheuse... d'où s'étendait, parsemée de reflets dorés, une autre, aveuglante d'or et presque dense, légère route ensoleillée qui menait droit au un « flamboyant » au loin, une porte dorée ouverte...
    - Eh bien, on y va ? – connaissant déjà la réponse à l'avance, ai-je demandé à Stella.
    "Oh, regarde, il y a quelqu'un là-bas..." la petite fille pointa son doigt vers l'intérieur de la même porte.
    Nous nous sommes glissés facilement à l'intérieur et... comme dans un miroir, nous avons vu une deuxième Stella !.. Oui, oui, exactement Stella !.. Exactement la même que celle qui, complètement confuse, se tenait à côté de moi à ce moment-là ...

    Les ingénieurs de Facebook Brian O'Sullivan, Gillien Verlage et Alok Mengrazhani ont passé plusieurs années à développer un langage de programmation qui ne ressemblerait à aucun autre.

    Avec l'aide d'autres spécialistes des réseaux sociaux, ils ont réussi à développer un nouvel outil pour création rapide sites Web et autres logiciels complexes, tout en conservant une organisation claire du code de programme- peu de langages de programmation peuvent s'en vanter. Le langage qui en a résulté s’appelle Hack, et désormais presque tout Facebook l’utilise, servant plus de 1,2 milliard de personnes dans le monde.

    « Nous pouvons affirmer en toute confiance que Hack a subi les tests de combat les plus rigoureux imaginables », déclare O'Sullivan, un vétéran de l'industrie qui a travaillé dans des sociétés aussi emblématiques que Sun Microsystems et Lined Lab et pendant longtemps a joué un rôle important dans le développement du langage de programmation Haskell.

    Hack a été rendu public cette semaine et est immédiatement devenu gratuit afin que n'importe qui dans le monde puisse non seulement l'utiliser, mais également contribuer à améliorer l'outil.

    Il existe tout un tas de langages de programmation dans le monde, et de nouveaux apparaissent constamment - cela ne surprendra personne, et de telles versions suscitent généralement peu d'enthousiasme. Mais dans le cas de Hack, la situation est quelque peu différente et les experts parlent assez favorablement de ce projet. Par exemple, le gourou de la programmation David Pollack dit ceci à son sujet :

    S'il avait été réalisé par Brian O'Sullivan, alors pour pouvoir utiliser ce langage, je marcherais sur des charbons ardents.

    Commencer

    Lorsque Mark Zuckerberg a commencé à travailler sur Facebook fin 2003, cette époque est parfaitement décrite dans le film " Réseau social« - il a utilisé PHP, qui était et est toujours un outil de développement d'applications Web populaire qui vous permet de créer et de reconstruire rapidement des produits logiciels.

    Original : installez Hacklang et créez une application Hack
    Auteur : Rob Zwetsloot
    Date de publication : 5 juillet 2014
    Traduction : N. Romodanov
    Date de traduction : juillet 2014

    Préface du traducteur :

    Piratage linguistique— Langage de programmation de type PHP usage général typé statiquement, développé par par Facebook et présenté le 21 mars 2014. Le code écrit en langage Hack est exécuté sur la machine virtuelle HHVM (HipHop Virtual Machine), créée sur la base du traducteur HipHop, qui prend en charge simultanément Hack et PHP.

    Est ouvert logiciel— les codes sources du projet sont ouverts aux membres de la communauté.

    Apprenons comment installer le package Hacklang, configurer Serveur Apache afin qu'il puisse interagir avec l'instance Pirater des applications, puis nous créerons l'application Hack.

    Il y a quelque temps, Facebook a introduit un nouveau langage de programmation dans le monde. Ce langage s'appelle Hack et c'est exactement ce que nous allons examiner aujourd'hui. Hack est unique dans la mesure où, contrairement à de nombreux nouveaux langages, sa première version était la v1. Au cours des dernières années, Facebook a travaillé sur l'écriture du langage Hack et sur le portage de la version de bureau de son service, ce qui signifie qu'il a déjà été prouvé que le langage Hack sera le système tout à fait capable de prendre en charge le exploitation de sites immenses - actuellement il n'y a rien de plus que Service Facebook.

    Facebook a été construit à l'origine avec en utilisant PHP et MySQL, mais le temps a passé, le service s'est développé et ces technologies sont devenues incapables de traiter immédiatement les données et le trafic dont Facebook avait besoin dès le départ. Au lieu de porter votre service vers d'autres niveau bas ou un langage plus optimisé, Facebook a décidé d'investir du temps et de l'argent dans la création de technologies qui sont immédiatement les meilleures. L'un des résultats de ces efforts est le langage Hack, qui, selon Facebook, double la vitesse d'exécution de sa version de bureau sans influence négative lors du développement du produit logiciel. Le langage Hack est la prochaine étape du projet HipHop développé par Facebook, à l'origine un outil open source. code source et conçu pour transformer Langage PHP dans le langage C++. Au lieu d'exécuter du texte compilé en C++, Hack est compilé en bytecode par un compilateur JIT sur la HHVM (HipHop Virtual Machine). Cette fois, nous verrons comment installer la machine virtuelle HHVM et créer une interface de base de données pour le blog. messages électroniques, qui a été écrit en utilisant Hack, PHP5 et MySQL.

    Le langage Hack a déjà été testé comme système sur lequel d'énormes sites Web peuvent fonctionner

    Commençons

    La première chose que nous devons faire est d'obtenir machine virtuelle HHVM. Heureusement, cela est assez simple si vous utilisez le système de packages Apt. Ajoutons un référentiel pour Hack, puis Apt l'installera.

    $ echo deb http://dl.hhvm.com/ubuntu saucy main | sudo tee /etc/apt/sources.list.d/ hhvm.list $ sudo apt-get update $ sudo apt-get install hhvm

    Après quelques minutes, le langage Hack devrait être installé. Vérifions cela rapidement. Créer nouveau fichier nommé test.php et collez-le dedans texte suivant

    Utilisons maintenant la commande hhvm test.php pour exécuter ce code dans le terminal. Dans le terminal, vous devriez voir le numéro de version, par exemple 3.x.x devrait apparaître. Si tel est le cas, vous êtes prêt à configurer le langage Hack pour qu'il fonctionne avec le serveur Apache.

    Avant la version 3, le package Hack/HHVM incluait son propre serveur qui pouvait être exécuté en tant que service. Cela a été supprimé de la version 3 en grande partie parce que l'équipe travaillant chez Facebook estimait que son travail consistait davantage à écrire le langage plutôt que le serveur. Ainsi, Hack fonctionne désormais en conjonction soit avec le serveur Apache, soit avec le serveur Nginx, remplaçant ainsi l'interpréteur de langage PHP habituel. Le langage Hack communique avec ces serveurs via un proxy FCGI, modifions donc maintenant nos fichiers de configuration pour pouvoir le faire. Les instructions suivantes s'adresseront directement au serveur Apache et non à Nginx, bien que la configuration de ce dernier soit en grande partie la même.

    A la fin de notre installation de l’interpréteur Hack, on nous a demandé quoi faire ensuite. Une de ces suggestions consistait à exécuter la commande suivante

    $ sudo /usr/share/hhvm/install_fastcgi.sh

    Maintenant, exécutez ce script ; Il configurera le serveur Hack et l'interpréteur pour utiliser FCGI, mais devra en outre transmettre votre trafic de votre serveur Apache à notre instance Hack. Recherchez soit votre fichier httpd.conf, soit votre fichier apache.conf - il devrait se trouver quelque part dans le répertoire /etc/apache2 - et ouvrez-le pour le modifier. Ajoutez la ligne suivante à la fin du fichier :

    ProxyPass/fcgi://127.0.0.1:9000/var/www/hack

    Enregistrez vos modifications et quittez l'éditeur. En conséquence, tout le trafic reçu par votre serveur sera redirigé vers le répertoire /var/www/hack. Si vous souhaitez uniquement rediriger certains types de trafic vers l'instance Hack, vous pouvez utiliser l'expression régulière pour modifier l'instruction ProxyPass, mais cela est à votre discrétion et nous n'aborderons rien à ce sujet ici. Cela suppose que vous avez un répertoire dans /var/www/hack, si ce n'est pas le cas, vous pouvez soit en créer un maintenant, soit modifier la ligne dans votre fichier .conf pour indiquer où vous souhaitez que votre répertoire de projet soit situé.

    Nous avons presque tout prêt. Copiez le fichier test. php que nous avons écrit il y a quelque temps dans le répertoire du projet nouvellement créé. Si vous essayez d'accéder au fichier via un navigateur, vous verrez que vous ne pouvez pas obtenir le numéro de version comme prévu. En effet, la VM HHVM n'est pas encore en cours d'exécution et pour traiter les fichiers en langage Hack/PHP, nous devons démarrer la VM HHVM et lui fournir ces fichiers. Lorsque nous exécutons la machine virtuelle HHVM, elle assume le rôle de traitement PHP lors du rendu des pages avec certaines fonctions - gardez à l'esprit que le langage Hack n'est pas entièrement compatible avec le langage PHP, mais la compatibilité s'améliore avec chaque version publiée. Au moment de la rédaction de cet article, la machine virtuelle HHVM était dans un tel état qu'elle commençait à prendre en charge certains des frameworks les plus populaires, par exemple WordPress ou Magento, sans configuration complexe particulière. Pour démarrer le serveur Hack, saisissez ce qui suit dans un terminal :

    Hhvm --mode serveur -vServer.Type=fastcgi -vServer.Port=9000

    Maintenant, si vous tapez http://YOUR_IP_ADDRESS/test.php, vous devriez voir à nouveau le numéro de version du langage Hack 3.x.x. Super! Nous sommes maintenant prêts à commencer à créer notre blog.

    Travailler avec la base de données

    Outre les différences dans l'exécution du code, la plus grande différence entre Hack et PHP réside peut-être dans la manière dont ils interagissent avec le langage HTML - Hack n'interagit pas du tout avec HTML. Même si vous expédiez du PHP standard avec un serveur Hack, vous aurez de la chance si un morceau de code PHP est exécuté dans le document avant qu'il ne plante, et si vous essayez de pimenter votre code Hack avec des insertions HTML, vous planterez probablement. . vous serez récompensé par un message d'erreur. Là où le langage Hack brille, c'est dans l'optimisation et le traitement des données, nous allons donc utiliser le langage Hack pour recevoir, organiser, puis encoder des messages JSON à l'aide d'une base de données SQL.

    Dans le répertoire du projet, créez un fichier appelé connect.php et nous créerons une connexion à la base de données en y insérant le texte suivant :

    Et puis revenez au fichier index.php et collez-y le code ci-dessous :

    requête($requête);
    "; }

    Si vous exécutez ce code maintenant, rien ne se passera car nous n'avons pas encore créé la base de données SQL. Vous devez effectuer un dump de la base de données SQL avec du contenu de démonstration, l'importer dans la base de données, puis exécuter le fichier index.php. Vous devriez maintenant voir une liste de toutes les colonnes nommées apparaître dans votre navigateur. C'est bien beau, mais ce n'est que du PHP banal (bien que légèrement optimisé, grâce à la machine virtuelle HHVM). Démontons tout et créons un petit fragment d'un bon script en langage Hack.

    Modifiez à nouveau le fichier index.php et supprimez tout ce qui se trouve après l'instruction require_once, car nous n'en aurons pas besoin ici. Revenez ensuite au fichier connect.php et supprimez tout après les caractères

    Base de données de classe (privé booléen $connected = False ; objet privé $connection ; fonction publique connect(string $addr, string $user, ?string $pw, ?string $db) : ?int (if($db == null)( return 0; ) $this->connection = mysqli_connect($addr, $user, $pw, $db) ou die("DB Error: " . mysqli_error($connection) )( $this->connected = True; return 1; ) else ( $this->connected = False; return 0; ) ) )

    Jetons un coup d'œil à ce que nous avons ici. Il s'agit d'une déclaration de classe Hacklang, elle a des membres et des fonctions privés et publics auxquels nous pouvons accéder et exécuter si nous le souhaitons. Jetons d'abord un coup d'oeil à la ligne où nous déclarons notre fonction connect() ; Certaines fonctionnalités ici sont utilisées différemment, nous allons donc les aborder. Si vous êtes familier avec le langage C++, alors tout vous semblera normal ; Si vous êtes plutôt PHP, alors peut-être pas.

    Tout d’abord, remarquez les paramètres que nous avons transmis ; nous avons déclaré les types de données que nous attendons comme paramètres (string/int/float/object/etc). Si nous essayons d'accéder à une fonction avec les mauvais types de données, alors, en fonction du niveau d'avertissement que vous avez défini dans le langage Hack, soit l'exécution de notre fichier sera simplement arrêtée, soit une erreur sera générée. Pourquoi une telle opportunité ? La partie du langage Hack qui permet d’exécuter du code très rapidement est son interprète. PHP est un langage faiblement typé, ce qui signifie que l'on peut créer des variables à la volée sans trop se soucier de ce qui sera stocké dans la variable. La variable $x pourrait d'abord contenir la chaîne "Hello, World" puis la valeur 5. Hack permet toujours cette flexibilité, mais si nous déclarons le type de données que nous attendons, la machine virtuelle HHVM peut commencer à optimiser ce code et l'exécuter plus rapidement que habituel (jusqu'à six fois plus rapide).

    Les variables $pw et $db sont précédées d'un "?", qui indique au langage Hack que même si nous attendons une valeur string/int/float/etc, nous pourrions aussi potentiellement nous retrouver avec une valeur nulle. Nous pouvons l'utiliser partout où nous souhaitons être moins stricts sur la transmission des données, et comme vous pouvez le voir, nous l'avons appliqué à la fin de la ligne à notre variable :?int. Il s'agit du type de données dont nous nous attendons à renvoyer un entier ou une valeur nulle dans ce cas.

    La dernière petite chose à noter ici avant d'aller plus loin est la fonction $this. Si nous essayons d'accéder aux membres d'une classe, nous devons les initialiser, mais si nous n'avons pas défini de valeur lorsque nous avons déclaré ces variables, alors la variable $this le fera pour nous. Si nous avons écrit $connection au lieu de $this->connection, alors la variable doit exister dans la portée dans laquelle elle a été appelée et n'est donc pas disponible pour les autres fonctions qui pourraient avoir besoin d'accéder à l'objet.

    Ajoutez la fonction du code ci-dessous à notre classe Database dans le fichier connect.php ; Ce joli petit morceau de code utilisera la fonction de connexion que nous avons créée lors de la première initialisation de la classe pour gérer toutes les requêtes SQL sur notre base de données.

    Fonction publique makeQuery(string $q): void( if($this->connected == True)( $result = $this->connection->query($q); return $result; ) )

    Faire la première demande

    Voyons donc ce qui se passe maintenant. Revenez à votre fichier index.php et après notre instruction require_once, ajoutez le code suivant :

    $db = nouvelle base de données(); $db->connect("127.0.0.1", "UTILISATEUR", "MOT DE PASSE", "NOM DE LA BASE DE DONNÉES"); //var_dump($db); $q = $db-> makeQuery("SELECT * FROM posts"); $données = tableau(); while($row = mysqli_fetch_array($q)) ( $object = array("name" => $row["name"], "tag" => $row["tagline"], "content" => $row ["content"], "date" => $row["date"]); array_push($data, $object ) echo json_encode($data);

    Si vous appelez le fichier index.php sur votre serveur, vous devriez à nouveau voir le contenu des messages du forum dans notre base de données. Hourra! Mais c'est juste statique. Apportons quelques petites modifications en utilisant quelques paramètres GET et POST.

    Gestion des requêtes GET et POST

    Tout ce qui est décrit ci-dessus est incompatible avec certaines fonctionnalités du langage PHP. Les requêtes $_GET et $_POST entrent dans cette catégorie. Le code Hack ne sait rien de $_GET ou $_POST (bien que si vous n'exécutez pas l'interpréteur Hack en mode strict, vous pouvez toujours utiliser cette fonctionnalité). Ici, nous supposerons que nous travaillons en mode strict et rendrons les requêtes GET et POST afin que le langage Hack puisse les utiliser.

    Il est temps d'ajouter un autre nouveau fichier. Encore une fois, dans le répertoire de votre projet, créez un nouveau fichier appelé request.php, puis collez et enregistrez-y le code ci-dessous :

    Fonction fetchGET() : Map ( return Map::fromArray($_GET); ) function fetchPOST() : Map ( return Map::fromArray($_POST); ) function postType(): string ( if($_SERVER["REQUEST_METHOD "] === "GET")( return "GET"; ) else ( return "POST"; ) )

    Ces fonctions définissent les variables globales $_SERVER, $_GET et $_POST pour notre code Hack, donc si nous devons appeler la fonction fetchGET(), nous utiliserons le nouveau mappeur $_GET. Nous pouvons maintenant passer au traitement des demandes, même s'il y a une petite mise en garde.

    Vérification des types de paramètres

    Dans le langage Hack, il est souhaitable de savoir quel type de données est utilisé (c'est une fonctionnalité déjà connue), puisqu'il accède simplement à la variable GET, ce qui ne nous aidera pas beaucoup. Tout ce que nous pourrons obtenir, ce sont des chaînes analysées, et tant que nous continuons à travailler uniquement avec des chaînes, nous perdons tous les avantages associés à la vérification du type de données dans la machine virtuelle HHVM. Par conséquent, écrivons un analyseur rapide pour traiter les valeurs entières. Ajoutez le code suivant au fichier request.php :

    Classe abstraite ServerRequest ( fonction publique abstraite getParams() : Map ; fonction publique intParam(string $name) : ?int ( $params = $this->getParams();if (!$params->contains($name)) ( return null ;) $param = $params[$name] ; if (!is_numeric($param)) (return null;) return (int)$param; )) la classe finale getRequest étend ServerRequest (fonction publique getParams() : Map (return fetchGET();) ) function int_check_for_parameter(string $parameter): int (if (postType() == « GET ») (return (new getRequest())->intParam($parameter);))

    Revenez ensuite au fichier index.php et modifiez-le pour qu'il ressemble à ceci :

    $db->connect(« 127.0.0.1″, « NOM D'UTILISATEUR », « MOT DE PASSE », « NOM DE LA BASE DE DONNÉES »); $limit = int_check_for_parameter("limite"); $q ; if($limit > 0)($q = $db->makeQuery(“SELECT * FROM posts LIMIT ” . $limit);) else ($q = $db->makeQuery(“SELECT * FROM posts”);) worxwhile($row = mysqli_fetch_array($q)) (echo $row["name"] . "";)

    Regardons la classe ServerRequest, elle diffère de la classe Database que nous avons écrite dans le fichier connections.php dans la mesure où nous l'avons déclarée comme abstraite. C'est l'une des fonctionnalités ajoutées au langage PHP5 ; Une classe abstraite est une classe qui ne peut pas être créée ; elle ne peut être utilisée que comme une sorte de modèle pour d'autres classes qui l'étendent. Cela s'intègre très bien dans notre classe GetRequest. Notez que la définition est précédée du mot-clé final. Une classe finale est une classe qui étend une classe abstraite, mais elle ne peut pas elle-même être étendue ; si nous essayions de faire cela, le langage Hack générerait une erreur fatale.

    Maintenant, si vous ajoutez ?limit=5 à la fin de votre ligne de requête, vous ne devriez voir que les cinq premiers résultats - ce qui en soi n'a rien de spécial, mais ce que nous voyons ici est un appel à intParam() fonction. Tout d’abord, nous devons savoir si notre requête GET possède le paramètre que nous recherchons. Une fois que nous avons déterminé qu'il existe, nous devons alors vérifier s'il s'agit d'un nombre et, s'il réussit notre test, le convertir en nombre entier. Sinon, null doit être renvoyé. Dans le cas où il s'agit de gérer le paramètre GET, cela peut sembler trop pédant, mais sinon il faudra oublier la puissance du compilateur Hack JIT.

    Lorsque le premier appel se produit, la VM HHVM/Hack ne fera peut-être pas grand-chose pour améliorer la vitesse immédiatement, mais à mesure que le temps passe et que la charge augmente, la VM HHVM optimisera les processus appelés le plus souvent et mettra également en cache le bytecode qu'elle générera. . C'est justement une partie de la beauté du langage Hack : il est plus polyvalent que le langage PHP, qui, avouons-le, n'a pas la réputation d'être un langage concis, mais avec un effort supplémentaire, on peut extraire chaque once de puissance du langage PHP dont il est capable.

    Résumons-le

    Et ce ne sont là que les bases du langage Hack. Le langage Hack peut sembler un peu difficile à mettre en place et si vous êtes le genre de développeur qui aime apprendre à partir d'exemples de code, alors c'est un problème pour le moment - mais ne vous laissez pas arrêter ! Le langage Hack en est encore à ses balbutiements ; il avait à peine un an et son gain de vitesse était déjà devenu tout simplement phénoménal. Certes, il présente les inconvénients de cette amélioration des performances, mais il est important de se rappeler que Hack n'est pas conçu pour restituer du HTML (bien qu'il puisse générer du code au format HTML ou d'autres structures de type Node en utilisant le moteur de rendu XHP d'eHack). Au lieu de cela, il est conçu pour traiter les données très rapidement afin que le reste de vos services Web puisse s'exécuter aussi rapidement que possible. Cela fait de Hack un bon choix lorsqu'il s'agit d'améliorer les performances ou même de remplacer les services actuels qui gèrent de grands ensembles de données, parmi lesquels les API évolutives sont les candidates les plus évidentes.



    Des questions ?

    Signaler une faute de frappe

    Texte qui sera envoyé à nos rédacteurs :