Nouveau site web dédié au langage Pascal (2021), basé sur Pure Pascal

Les bouquins, les scans, les pdf ou les liens qui vont bien... ici c'est la bibliothèque.

Modérateurs : Papy.G, fneck, Carl

Neotenien
Messages : 354
Inscription : 23 oct. 2020 19:15
Localisation : Le Mans
Contact :

Re: Nouveau site web dédié au langage Pascal (2021), basé sur Pure Pascal

Message par Neotenien »

Le pascal ets un langage non permissif, obligeant le développeur à programmer proprement

Pour ton histoire de varable reviadique (ou je en sais quoi), vu que Pure Pascal, HS Pascal, permettent de programmer des logiciels de type GTP ou TTP (avec passage de paramètres, un exécutable à la unix quoi), ça doit donc être possible mais vu que je n'ai pas creusé le sujet.... J'ai évoqué la possibilité de donner en argument, une chaine de caractères (de toute facon, un logiciel TTP ou toute commande unix) ce qu'il reçoit c'est une chaine de caractères. Quant au lien wikipedia que j'ai donné ya un warning à propos du Pascal. Actuellement je ne sais pas comment utiliser des paramères vériadique en Pascal, sachant qu'il y a peu de langage qui le pratiquent. Une solution serait apparemment, d'utiliser des "CONST", mais par contre, je ne vois pas comment à partir d'une chaine (passé sur une commande unix), ça soit considéré comme une suite d'arguments... A part en utilisant les pointeurs ?

Pour ce qui est de mes arguments, désolé mais ils sont tous vrais (concernant la vitesse de comilation, c'est reocnnu que les Pascal sont les plus rapide justement de part la structure imposé dans l'écritire des programme, de par le fait qu'il y ait des procédures et fonction séparées...)... Le C n'a pas de surcharge d'opérateur (le C++ l'a mais c'est pas le C), il utilise plusieurs fonction pour une même opération appliquée à un même traitement (printf et put par exemple, pour affichage à l'écran, ça n'est pas,orthogonal), il n'y a pas les types énumérés (c'est à dire une liste contenant des nom comme (lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche) , pas de type ensemble (opération sur les ensembles : union, intersection, ajout, enlevage d'élément).

Je n'ai pas de rancoeur envers le C mais envers le Java. Si je suis aussi mordant envers le C c'est envers tous les détracteur du pascal au profit du C. Certes ya pas les opérateur ternaires, certes c'est un peu plus compliqué à utiliser les pointeurs de variables ou de fonction. Le Java je n'ai jamais accroché parce qu'il n'est que OO, que ce qu'il fait d'autres langages l'ont fait avant lui (le C++ par exemple, ou même Pascal puisque le pascal objet est apparu avec TP 5.5, voire SImula) et je ne comprend pas que la grande majorité des entreprises veulent du Java! Exemple, pour de la prog côté serveur web, le langage le plus utilisé est, sans contestaton possible le PHP (avec près de 80% des serveurs) alors que le Java stagne à 3.5-4%, ASP.NET chute et Python tourne autour des 1%... et pourtant je vois des annonces de prog serveur demandant du Java. Concernant la POO, Python, C++ (et même Pascal) semblent quand même plus appropriés puisque cux ci sont multi paradigme (et pas seulement Objet pour Java)... De plus Java est très limité concrenant les opérateurs.

De plus, sans même que ça soit Objet, Pascal et C peuvent faire de l'Objet avec les pointeur de variables et de fonction (C) ou procédure (Pascal). L'Objet c'est très surfait. En fait ce sont juste des structures auquels on a intégré des méthodes... C'est quand même étrange ce concept de dire que, par exemple, si on a une fonction "se déplacer ça soit propre à un objet alors que la fonction est utilisable pour plein de cas en dehors de l'objet.

Si j'ai aussi de la rancoeur c'est parce que en cours de fac de science j'avais du Pascal, en cours du CNAM, le Pascal (pendant 3 ans d'UE), que a a été LE langage utilisé par les facultés (des années 80 aux débuts des années 2000, remplacé par le R depuis), les grandes écoles et les scientifiques et que ça soit le C dot on parle partout, et surtoit que le PAscal est tombé "en apparence" en déésuétude a la faveur du Java (qui, pourtant subit de nombreuses critiques négatives)

Bref mon site web a pour but de faire redécouvrir le Pascal et demontrer tout ce qui est possible de faire dessus.
Neotenien
Messages : 354
Inscription : 23 oct. 2020 19:15
Localisation : Le Mans
Contact :

Re: Nouveau site web dédié au langage Pascal (2021), basé sur Pure Pascal

Message par Neotenien »

Voici ma première page d'algorithme perso en langage Pascal.. De sont 41 fonctions mathématiques, fonctions au sens propre puisqu'ayant un seul paramètre en entrée et un en sortie. Cette page met à jour Turbo PAscal 5 mini (et tous les compilo compatibles) avec Free Pascal. Sachant que j'ai ajouté en bonus 9 fonctions inédites en Free Pascal.

Cette page ne se contente pas de décrire les fonctions, elle contient des démonstrations pour arriver aux fonctions elle même (je vous recommande cette de la suite de Fibonacci et de sa liaison avec le nombre d'or (formule de Binet).

Il y a notament les fonctoins puissance, trigonométriques absente de l'unité système, diverses (avec, notamment, une fonction donnant la mantisse et l'exposant d'un réel), les diverss arrondi (floor, ceil), les logarithmes de base N...

Bref c'est une page assez instructive je pense.
sporniket
Messages : 242
Inscription : 22 mars 2022 20:23
Localisation : Pas trop loin au sud de Paris

Re: Nouveau site web dédié au langage Pascal (2021), basé sur Pure Pascal

Message par sporniket »

Note : je pratique le Java coté serveur au quotidien dans mon travail depuis plus de 20 ans, et j'adore le Java depuis que je l'ai rencontré en 1997-1998 en école d'ingénieur. Le Pascal, je ne l'ai pratiqué que pendant les classes préparatoires (avant qu'une réforme impose autre chose) et en cours d'algorithmique (premier semestre d'école d'ingénieur), et c'est tout.
Neotenien a écrit : 07 févr. 2023 12:59 je ne comprend pas que la grande majorité des entreprises veulent du Java! Exemple, pour de la prog côté serveur web, le langage le plus utilisé est, sans contestaton possible le PHP (avec près de 80% des serveurs) alors que le Java stagne à 3.5-4%, ASP.NET chute et Python tourne autour des 1%...
Java, ça a été Sun Microsystems à l'origine, puis Oracle l'a racheté. Donc une grosse puissance commerciale et industrielle derrière pour spécifier, implémenter et promouvoir les briques serveurs "Java Enterprise Edition", le tout sur un temps très long.

Quand j'ai commencé dans le Web, les CGI en Perl ou C avaient déjà décliné, j'ai commencé avec l'ASP de Microsoft à l'armée. Puis j'ai travaillé sur un middleware qui utilisait du javascript coté serveur, et enfin autour de 2005-2010 le Java coté serveur a décollé (pour ma plus grande joie bien sûr).

Là où je suis actuellement, on a une API frontale implémentée en Node.js, divers sous-systèmes en Java, et un sous-système central historique et incontournable en Natural.

Côté frontal, la part du lion est en javascript.

PHP de son coté est surtout porté par les moteurs de site générique et extensibles, orientés contenus (drupal, joomla, wordpress...) ou boutiques électroniques (magento, prestashop,...) notamment. J'ai très rarement vu des projets PHP démarrés de rien.
Neotenien a écrit : 07 févr. 2023 12:59 Le Java (...) n'est que OO, ce qu'il fait d'autres langages l'ont fait avant lui
Et c'est tout à fait normal. Java s'est présenté comme un challenger du C++ "en plus facile" pour attirer les développeurs, et sur ce plan la c'était réussi : syntaxe similaire, pas d'héritage multiple complet mais une version simplifiée avec les 'interfaces', pas de gestion explicite de la mémoire, "tout est référence", la gestion des erreurs, et enfin et surtout, une API pour faire des interfaces graphiques et des applications fenêtrée plus facilement que ce qui existaient à l'époque (personnellement, j'ai dû m'y reprendre à trois fois pour comprendre comment fonctionnait l'api win32, côté Unix on travaillait avec SunOS, l'api openwindow était plus simple mais c'était du C ; quant à l'AES/VDI sur Atari ST, c'était avant que j'aille en école d'ingénieur, alors j'y comprenais rien).

La promesse de Java, à l'époque, son point fort, son joyau, c'était "Write once, run anywhere". C'est à dire pas besoin de recompiler les sources, comme en C/C++. Et le plugin pour les pages Web (enfin, avant que Microsoft ne se sente menacé et fasse son trouble-fête, et que Macromédia Flash n'entre dans la danse et rafle la mise)
Neotenien
Messages : 354
Inscription : 23 oct. 2020 19:15
Localisation : Le Mans
Contact :

Re: Nouveau site web dédié au langage Pascal (2021), basé sur Pure Pascal

Message par Neotenien »

Je répons ici à spoknet puisqu'apparemment imporrible de lui rpéondere directement

Je suis spécialiste en PHP (plus de 20 ans de pratique) JavaScript, Basic, Pascal, et je connais un peu de C (appris de moi même) et un peu de Java (appris au CNAM mais je n'ai pas adhéré du tout connaissant d'autres langage meilleurs de mon point de vue). Oui JavaScript côté client, mais c'est le seul existant et adopté par tous les navigateurs moderne (ou plutôt ECMASCRIPT qui est la norme).

Tout ce que fait Java ou C, le langage Pascal (Turbo Pascal/Pure Pascal) peut le faire (puisqu'il intègre également les pointeur de fonction et de var, les types "structuré" et, évidemment l'Objet). Je suis en train de créer une page pour comparer Pascal avec les 6 langages populaires (C/C++, Javan PHP, JavaScript et Python). . Et il y a quelques + en Pascal qu'on ne retrouve pas en CC++ ou Java.. Comme les Enregistrement variant, le type "ensemble"... Il intègre de base une unité (dite "system) qui intègre un certain nombre de fonctions/procédures de manipulation de texte, de foncton mathématiques, gestion de la mémoire, entrée sortie (dont les fameux "write/read" applicable à n'iimporte quel type, y compris fichiers) et des unités standard, tels Graph et CRT qui permettent de dessiner n'importe quelle figure 2D avec trame ou pas, de lettres etc ainsi que de positionner le curseur à l'écran... Il y a aussi un format d'image (que je suis en train de décortiquer pour de futurs jeux)

Côté serveur Web, je pratique PHP depuis 1999 (à l'époque c'était déjà la version 3 et c'était déjà très populaire). Ce que tu écrit à propos de la montée en puissance de Java depuis 2005-2010 semble faux d'après les chiffres donnés sur cette page. En 2010 Java était pour environ 4% des pages serveurs et a décliné vers 3.5% en 2021 alors que, dans le même temps, PHP est passé de 72% à presque 79% en 2021. Par contre, Ruby a dépassé Java... (bien que Ruby soit un langage très lent).

PHP est vraiment LE LANGAGE préférentiel à utilisé pour,le WEB. L'arrivé de PHP 7 a corrigé les défauts (lenteur notamment, j'ai créé un algorithme pour voir la différence de vitesse pour un calcul lourd (retourner les permutation de 10 ou 11 éléments), entre PHP 5.4 et PHP 7, ce dernier allait 5 fois plus vite!). Python est donné come un langage scientifique sauf qu'il est très lent (aucune différence entre Python 2.5 et Python 3.5 en terme de performance) ... Sur cette page, on voit un comparatif des langages en terme d'énergie dépensée, de temps d'exécution et de place mémoire... Mais je ne suis pas forcément d'accord sur,les résultats comparé entre PHP et JavaScript! Dans l'algorithme que j'ai créé sur les permutation, les différentes versions de JavaScript étaient entre 0.9 et 1.2 fois plus rapide que PHP7, par contre PHP7 était 5 fois plus rapide que PHP 5.4, ce qui coille avec les résultats donnés ici... PHP7 s'est nettement amélioré en terme de rapidité d'optimisation diverses/PHP 5. Et plus encore avec PHP8. C'est d'ailleurs grâce à ça que PHP a redoré son blason dans les années 2010-2020. Le seul défaut de PHP est qu'il ne soit pas compilable!! C'est la seule incohérence de ce langage! Quand on a créé un script qui marche, pourquoi le garder en format script alors ce qui nécessite de le compiler à la volée à chaque appel d'un "client" web et une perte de temps à ce niveau là ? Il existe une unité en Pascal pour gérer le client serveur cgi.

PHP à la même syntaxe que le C/C++ mais ne nécessite aucun typage (qupoiqu'il est permis d'indiquer le type lors d'appels à fonctions)..PHP est totalement fait pour la programmation côté serveur Web, il contient toutes les librairies possible pour tous les types de bases de données, il intègre directement la manipulation de SQLite (eque j'utilise depuis peu comme database, MySQL étant inutile dans la plupart des cas dans un contexte Web, puisque le client serveur DB ne sert à RIEN dans ce contexte! Sauf si'il s'agit d'une banque...). Et la syntaxe est simple! Il suffit dans une page HTML d'écrire

Code : Tout sélectionner

<?php
Ton code PHP
?>
à tout endroit de la page "HTML". En langage Pascal Web, ya un projet PSP qui semble inachevé mais dont l'intégration ressemble bcp à PHP

Code : Tout sélectionner

<%
Ton code Pascal
%>
que tu compiles par la suite et que tu appelle en cgi comme un appel exécutable (comme c'est le cas pour un certain environnement Python compilé dont j'ai oublié le nom).

Pour ce qui est des CMS de PHP dont tu parles... Moi je programme tout à la main, effectivement "apparemment" bcp d'entreprises demande de "connaitre" ces CMS dans le cadre de tel ou tel emploi, mais c'est parce qu'ils ne savent pas qu'il faut avant tout connaître PHP (et MySQL souvent). Mais tous les CMS que tu décris ont forcément démarré un jour. Perso, je produit mes propres applications web que je contrpole parfaitement (sans besoin de POO qui est inutile dans 95% des cas et surtout inapproprié).

Pour Java, en cours du CNAM, on nous l'avait été présenté comme une version simplifiée de l'Objet en C++. Perso, je n'ai jamais trouvé d'intérêt à l'Objet. Les méthodes ne sont juste que des fonctions appliquées à certaines variables... C'est la seule chose qui différencie le type Objet au type structuré (et encore!! Vu qu'on peut aussi utiliser les pointeurs de fonctions). En fait, l'objet n'est qu'un cas particulier du paradigme impératif. Alors que le paradigme logique, rien à voir. Le fonctionnel, pareillement, n'est qu'un cas particulier du paradigme impératif. La POO c'st de belles théories mais qui concrètement n'aporte pas greand choses... Même pour des gros projets!! A grand coups d'API savamment distilé, et de types structurés, on peut faire de la programmation propre.
Zebulon
Messages : 2787
Inscription : 02 nov. 2020 14:03

Re: Nouveau site web dédié au langage Pascal (2021), basé sur Pure Pascal

Message par Zebulon »

Attention tout de même, l'étude que tu mentionnes se préoccupe du contenu exposé sur le web. Mais le patrimoine applicatif des (grandes) entreprises n'est que très peu exposé sur le web (un site institutionnel et quelques portails métiers dédiés aux clients/fournisseurs). La masse de ce patrimoine qui fonctionne généralement en client/serveur avec utilisation du navigateur sur le poste utilisateur peut être grandement développé en Java.
Neotenien
Messages : 354
Inscription : 23 oct. 2020 19:15
Localisation : Le Mans
Contact :

Re: Nouveau site web dédié au langage Pascal (2021), basé sur Pure Pascal

Message par Neotenien »

Pour Samuel

Les raisons de pourquoi je voulais utiliser la fonction MaxAvail de Pascal, c'est simplement dans le cadre de l'écriture de fonctions faisant intervenir des tableaux en Pascal, comme celles liées aux polynomes.

Dans cette page j'ai utilisé un type Polynome contenant notamment un tableau de coefficients dont le nombre figé est, ici, de 65536 éléments alors que très souvent, yen a moins (donné par la variable "degre"). Je me suis dit que ça prenait quand même bcp de places (même s'il n'y a que 10 ou 15 éléments, la RAM réservera 65536 éléments).
Alors que si je créé un type DARRAY qui est une structure, contenant un pointeur, il faudra réserver suffisamment de place pour les (DEGRE+1) éléments et savoir s'il y a suffisamment de place. Mais finalement avec la procédure GetMem() on peut savoir s'il y a une erreur dans la création d'espace RAM...

Je ne sais pas si ces erreurs interviennent également dans le cadre d'un environnement multitache (thread) mais je suppose que oui, suivant les compilateur (je vérifie avec Free Pascal si GetMem existe aussi).
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Nouveau site web dédié au langage Pascal (2021), basé sur Pure Pascal

Message par __sam__ »

Pour Java, en cours du CNAM, on nous l'avait été présenté comme une version simplifiée de l'Objet en C++.
C'est hyper simplifié. C'est typiquement le truc qu'on dit à la 1ere leçon pour ne pas affoler l'auditoire avec un nouveau langage: "vous allez voir, c'est comme C++, mais en plus simple". Il ne faut pas s'arrêter à cela.
Perso, je n'ai jamais trouvé d'intérêt à l'Objet. Les méthodes ne sont juste que des fonctions appliquées à certaines variables... C'est la seule chose qui différencie le type Objet au type structuré
Alors ton cours du CNAM sur la programmation objet a raté son objectif. Le paradigme objet c'est pas "des méthodes appliquées à des variables". Déjà il faut faut faire la différence entre un paradigme et son implémentation machine car au final tout n'est que langage machine. Or tout n'est pas langage à objet.

Si tu as l'occasion et si tu veux vraiment t'amuser avec un langage de programmation aussi vieux que Pascal et vraiment objet dès le départ, fais un tour du coté de SmallTalk (qui fut pas mal utilisé dans l'industrie bancaire). Tous les langages actuels héritent de lui d'une façon ou d'une autre.


Tu va halluciner de la puissance de SmallTalk et plus généralement de la programmation objet, la vraie (car non ce n'est pas des méthodes appliquées à des variables.) Les tout-débutants en informatique sont capables de faire des trucs hyper balèzes en SmallTalk. C'est d'ailleurs cela la puissance d'un langage, car les expert savent que les langages turing-complete, peuvent *tous* faire les uns ce que font les autres mais au prix de contorsions épiques requérant une expertise phénoménale et un temps monstrueux. Et dire que Smalltak bénéficiait et permettait la programmation d'interface graphique simplement, sans prise de tête, pour des non-experts, alors que les autres ordis et langages (Pascal et C compris) ne marchaient qu'en mode texte et ne manipulaient que des éléments hyper primitifs que seuls des grosses têtes savaient apprivoiser.

Normal ca venait de Xerox où il y avait des génies qui savaient que programmer n'était pas "pisser du code". La vidéo suivante semble évidente de nos jours: c'est un environnement de développement hyper banal (fenêtre, souris, scrollbars, etc). Sauf que c'était il y a plus de 40ans, à la préhistoire de l'informatique. Franchement, ca devait être épatant de côtoyer les gens du parc xerox.


Note: Il y a un environnement sympa pour apprendre et faire du SmallTalk: Squeak. Petit tuto sur squeak/smaltalk: https://www.youtube.com/watch?v=Es7Ryll ... 98DF14788D.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
sporniket
Messages : 242
Inscription : 22 mars 2022 20:23
Localisation : Pas trop loin au sud de Paris

Re: Nouveau site web dédié au langage Pascal (2021), basé sur Pure Pascal

Message par sporniket »

Oui, il me semble que Xerox a été un formidable incubateur des concepts IHM qui ont ensuite essaimé chez Apple, Digital Research (GEM), etc.

Neotenien, nos perception sont effectivement différentes, je travaille plutôt chez les "gros clients". Comme le disait Zebulon, c'est plutôt Java qui a eu la part du lion dans ces lieux.

Concernant le fait que tu n'as jamais accroché à la programmation objet quelle qu'elle soit, c'est une histoire de goût. Moi quand on m'a présenté la programmation objet (même juste orienté comme le C++ et Java), ça a été la révélation. Et le Java aussi, une révélation pour moi. Mais ça reste mon goût, avec tous les biais possibles et imaginables, de sorte que même avec tous tes arguments, je préfèrerais un millions de fois plus le Java, et dans une moindre mesure le C++, que Pascal ou C.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Nouveau site web dédié au langage Pascal (2021), basé sur Pure Pascal

Message par __sam__ »

Xerox il y a non seulement l'IHM, mais aussi les périphériques (imprimante laser, ethernet, stockage de masse optique, la fibre optique), et les langages de programmation (Mesa, Smalltalk) et les paradigmes associés (Programmation Objet dès 1972), et autres (traitement du langage naturel, passage du computing-science [l'ordi calcule] à information-technology [l'ordi traite l'information]): https://www.parc.com/about-parc/parc-history/
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Neotenien
Messages : 354
Inscription : 23 oct. 2020 19:15
Localisation : Le Mans
Contact :

Re: Nouveau site web dédié au langage Pascal (2021), basé sur Pure Pascal

Message par Neotenien »

Oui je connais Smalltalk, de nom, l'enseignant qui nous avait fait les 60 heures de cours sur la POO étaient des MMA Le Mans qui eux, ne sont que sur Smaltak depuis le début (quoiqu'apparemment, ils se mettent au Java)... Et donc ce prof qui nous a fait cours sur la POO (à la fin des années 90 SJMSB) nous a fait un cours complet en Java... Mais je connaissais aussi les cours sur ST Mag de Pascal Barlier en C dans lequel il disait qu'on pouvait "faire de l'Objet en C à grand coup de struct et de pointeurs" donc voilà pourquoi je suis réticent à un langage qui ne soit que Objet. En fait c'est juste un point de vue (un paradigme/modèle)

Et vu que le thème de ce fil est le langage Pascal, ça se fait aussi en Pascal (simuler l'Objet avec les "record" et les pointeurs")... Même si l'objet existe depuis Turbo Pacal 5.5 (et donc PAS sous HS Pascal (compatible turbo Pascal 5) ni Alice Pascal).

Je suis en train d'écrire un tuto sur ma page pour émuler les tableaux dynamiques à l'aide d'un record (sensé être compatible avec les 3 compilo Pascal de l'Atari ST), de ponteurs et de record dit "variant" (une paricularité du Pascal qui fait que le programme établi des structure qui sont modulable en interne suivant les valeur d'une des variables). Pas simple de créer un truc générique et de voir toutes les condtions dans lesquelles ça doit fonctionner. Voici des extraits de code pour ça

Ici on a un type Darray avec un variant:

Code : Tout sélectionner

CONST
    MaxIndex = 65535; {A adapter suivant votre machine}
TYPE
    MargeId = 0 .. MaxIndex;
    DarrayType = (TypeBoolean, TypeShortInt, TypeInteger, TypeLongint, 
        TypeSingle, TypeDouble, TypeReal);
    Darray = Record
        NbId : MargeId ;
        Valid : boolean = false;
        Case ArrType : DarrayType of
            TypeBoolean : (Tcoef : ^ array [0..0] of boolean);
            TypeShortInt : (Tcoef : ^ array [0..0] of shortint);
            TypeInteger : (Tcoef : ^ array [0..0] of integer);
            TypeLongint : (Tcoef : ^ array [0..0] of longint);
            TypeSingle : (Tcoef : ^ array [0..0] of single);
            TypeDouble : (Tcoef : ^ array [0..0] of double);
            TypeReal : (Tcoef : ^ array [0..0] of real);
            end;
    end;
Ici, une procédure Pascal pour iniftialiser un tableau dynamique

Code : Tout sélectionner

procedure DarrayInit (var tab : Darray; TypeData : DarrayType; Nb : MargeId);
var
    taille : byte;
    i: word;
begin
    if tab.Valid = false then do
    begin
        tab.ArrType := TypeData;
        tab.Valid := true
        case TypeData of
            TypeBoolean : taille := SizeOf(boolean);
            TypeShortInt : taille := SizeOf(ShortInt);
            TypeInteger : taille := SizeOf(Integer);
            TypeLongint : taille := SizeOf(LongInt);
            TypeSingle : taille := SizeOf(Single);
            TypeDouble : taille := SizeOf(Double);
            TypeReal : taille := SizeOf(Real);
        end;
    GetMem(tab.TCoef,Nb*taille);
    for i:=0 to Nb-1 do
        tab.Tcoef[i]^ :=0;
    end;
end;
Le plus de ces approches/ FreePascal c'est qu'ici, ça concerne tout type de tableau de type scalaire. Mais je viens de voir que pour initialiser une variable Darray en Free, ça passe par SetLength... Donc je ne sais pas quelle option choisir pour le coup pour être compatible avec Free Pascal... Soit initialiser le type de tableau simplement avec juste une affectation et ensuite Créer une fonction SetLenght au lieu de celle-ci ? Je ne sais pas.. Question de choix.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Nouveau site web dédié au langage Pascal (2021), basé sur Pure Pascal

Message par __sam__ »

Si je comprends bien le code, on peut pas faire un tableau dynamique de tout autre type pascal qui ne soit pas primitif ? (genre array, record, ou même 0..MAXINT: le type des entiers >= 0 par exemple).

Avec des pointeurs en C, tu ne *FAIS* pas de l'objet. Tu bricoles si tu dois utiliser ces machins.

Ca n'est pas parce qu'au final tout s'execute sous forme de pointeur sur un couple (data + fonction), que c'est de l'objet. En plus l'objet c'est une façon de penser le code plus qu'une implémentation machine à base de pointeur ou autre. Quand on programme "en objet", on ne pense absolument pas à la façon dont le compilo va implémente le truc. Cela n'a aucune importance sur la façon de programmer. Ce qui compte c'est le sens de ce qu'on code, et pas ce que va utiliser le compilo derrière. Programmer "objet" c'est travailler dans l'abstraction avant tout.

Un langage où tout est objet (y compris le code lui-même) est d'une pureté absolue. C'est conceptuellement très beau. Sache par exemple qu'avec ce genre de langage, il n'y a plus de notion de "if" ou de "boucles", bref de structures de contrôle. C'est surprenant, mais en y réfléchissant c'est carrément puissant (et diablement efficace qui plus est). https://www.michaelnygard.com/blog/2018 ... ge-design/
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Neotenien
Messages : 354
Inscription : 23 oct. 2020 19:15
Localisation : Le Mans
Contact :

Re: Nouveau site web dédié au langage Pascal (2021), basé sur Pure Pascal

Message par Neotenien »

Salut Samuel

Si je comprends bien le code, on peut pas faire un tableau dynamique de tout autre type pascal qui ne soit pas primitif ? (genre array, record, ou même 0..MAXINT: le type des entiers >= 0 par exemple).


Si, bien sûr, mais ici j'ai limité aux types primitifs pour les besoins de ce que je veux en faire. Ca aurait pu être un String par exemple, ou un autre record, mais j'ai dans l'esprit de manipuler des longues listes de nombres pour les algorithmes. J'aurais pu utiliser ici juste le type "Pointer" universel, qui n'a pas de type (je ne sais pas s'il y a l'équivalent en C), mais au final, utiliser les variants avec des pointeurs typés est plus simple (et + dans les normes de Pascal). Plus de détails sur les pointeurs en Pascal ici.

Le but d'avoir des tableaux dynamiques est bien d'économiser de la RAM, car au lieu de réserver la place pour, disons 10 kO (exemple minimaliste, mais si on a une liste des espèces animales, ça se mesure en millions par exemple) pour un tableau de réels, et que seuls 5 ou 10% des index sont utilisés dans la majorité des cas, ici on ne réservera QUE la place dont on a besoin. L'incovénient des array statiques en Pascal, c'est qu'il faille estimer le nombre de valeurs d'un tableau dès le départ et ça a pour conséquence de réserver trop de place pour les besoins.

Alors certes les Atari ST, Amiga ne sont souvent qu'en environnement monotache (pas avec FreeMint ou MagiC cependant sur les Atari) mais pour les autres système Unix et autres multitaches... C'est pas un luxe quand on voit la débauche de RAM que nécessite de nombreux logiciels modernes. Au passage, FreePascal/Delphi (Successeur de Turbo Pascal) PERMET d'utiliser des tableau dynamiques directement, mais pas les compilateurs Pascal précédent (d'avant 1995). Pure Pascal étant le compilo le plus avancé sur les Atari (compatible Turbo Pascal 7+) et n'ayant même pas les tableaux dynamiques (c'est la seule chose concrète qui lui manque/Free Pascal), alors je crée ici une structure de tableau dynamique (qui est au moins compatible avec Turbo Pascal 5, et même, avec Alice Pascal, qui est basé sur la norme Pascal 1983 avec quelque compléments). Et puis ce site web est avant tout pédagogique, une base d'algorithmes.

Autrement, pour les variables structurées et complexes, le mieux est de passer par des Record (struct en C) avec des pointeurs en interne. Ou même en Objet. Le C, le Pascal et le Java nécessite de typer les variables ce que ne fait, pas Python, PHP (qui a pourtant la même structure et vocabulaire que le C) ou JavaScript, mais au final, ça fait des programme plus lent parce que ça doit deviner le type de la variable à la volée (bien que le JavaScript ne gère que des réels 64 bits en interne, alors que le PHP non)

En lisant ton exemple sur le Smalltalk, il y a cette partie :

Code : Tout sélectionner

caseOf: {
			[ 32 "space" ] -> [ ^true ].
			[ 9 "tab" ] -> [ ^true ].
			[ 13 "cr"] -> [ ^true ].
			[ 10 "line feed" ] -> [ ^true ].
			[ 12 "form feed"] -> [ ^true ] }
		otherwise: [ ^false  ]
Qui est quand même une base de structure conditionnelle (l'équivalent de "if IntegerValue = ...") ca ressemble à ce qu'il y a dans les record à variant dans Pascal. C'est codé différemment mais de toutes façons il y a toujours du conditionnel dans la programmation. Même avec le paradigme de type "présentation" (HTML par exemple) mais ça n'est pas "visible" dans la syntaxe... Avec les CSS (feuille de style web) c'est pareil, comme la propriété "visibility" (Hidden ou Visible, de type booléen) par exemple. ou "position" qui peut prendre les valeurs "fixed", "relative" ou "absolute". Au niveau du moteur c'est une structure conditionnelle.

D'ailleurs le "case of" on le retrouve dans tous les langages comme le C, Java, PHP, JavaScript...
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Nouveau site web dédié au langage Pascal (2021), basé sur Pure Pascal

Message par __sam__ »

Si, bien sûr, mais ici j'ai limité aux types primitifs pour les besoins de ce que je veux en faire
Ok, donc si tu dois supporter un nouveau type tu dois modifier le source, en particulier l'init car on ne peut pas écrire l'assignment ptr^ := 0 quand ptr pointe sur un record ou un array.
J'aurais pu utiliser ici juste le type "Pointer" universel, qui n'a pas de type (je ne sais pas s'il y a l'équivalent en C)
Ben

Code : Tout sélectionner

void *
Mais par contre tu perds la notion de Sizeof() avec un pointeur générique Pascal ou C. Donc il te faudra le passer en argument à la routine d'initialisation.
Le but d'avoir des tableaux dynamiques est bien d'économiser de la RAM, (...) ici on ne réservera QUE la place dont on a besoin.
Ben pourquoi pad une liste chainée plutôt ? Ah ca te fait recoder toutes les routines...

Effectivement, il te manque la notion d'interface type "Collection" pour représenter une collection de trucs indépendamment de leur nature, et choisir une implémentation (listes simplement chainées, listes doublement chainées, tableaux dynamiques, tables de hachage, etc) en fonction des contraintes mémoires/vitesse.

En vraie programmation objet ceci se fait couramment, car je dirais que c'est même presque fait pour ca. C'est très pratique dans la mesure où on ne sait pas forcément à l'avance quelle implementation on aura besoin, mais tout juste vaguement au mieux au début on sait qu'on aura besoin d'un contrat de type "collections de trucs" qu'on aura besoin de parcourir, connaitre leur nombre, ajouter/retirer des elements, etc. [je simplifie à mort, mais l'idée est là.]
Alors certes les Atari ST, Amiga ne sont souvent qu'en environnement monotache
Heu l'amiga est multitâche depuis le début en 68000.
Le C, le Pascal et le Java nécessite de typer les variables ce que ne fait, pas Python, PHP (qui a pourtant la même structure et vocabulaire que le C) ou JavaScript
La structure/syntaxe/vocabulaire du langage n'implique pas son type de binding. C'est plus la nature du langage : langage fortement typé vs langages de script. Python, php et autres langage de script sont du type late-binding.
mais au final, ça fait des programme plus lent
Non. Le late binding ne ralenti pas forcément l'execution quand on se débrouille bien dans l'implémentation du langage.
parce que ça doit deviner le type de la variable à la volée
Ce qu'on ne doit pas faire en informatique c'est deviner justement. Or les langages de scripts ne devinent pas. Le type est juste un attribut de l'objet courant auquel on se reporte pour connaitre quelle adresse utiliser quand on appelle telle ou telle méthode (ok c'est du dynamic-dispatch, mais c'est sensiblement pareil pour ce qui nous concerne là). C'est juste un jeu de pointeur sur fonctions qu'on initialise la première fois qu'on en a besoin (tardivement donc: cf *late* dans late-binding) et pas avant même qu'on en ait eu besoin c'est à dire durant la compilation (early-binding).

Le seul défaut important du late-binding est que tu ne détectera les erreurs de typage qu'au runtime, ce qui nécessite d'avoir un jeu de test très très gros. Le late-binding permet de coder vite sans se prendre le choux avec les types, mais il faut tester beaucoup plus après. Avec les langages fortement typés en revanche, tu sera averti d'un problème de type dès la compilation, ce qui évite de découvrir le soucis très très tard dans le cycle de développement, chez le client par exemple.
En lisant ton exemple sur le Smalltalk, il y a cette partie : <<caseOf:>>
Qui est quand même une base de structure conditionnelle (l'équivalent de "if IntegerValue = ...") ca ressemble à ce qu'il y a dans les record à variant dans Pascal.
Non ca n'est pas variant de record ni un if, c'est à dire un test "bas niveau". C'est vraiment autre chose qui se passe ici. C'est vraiment fait différemment et ca vaut le coup de le comprendre si on veut avoir le fameux "moment aha" qui font voir les chose différemment (même si syntaxiquement ca se rapproche d'un switch() en C ou un "case" en Pascal). C'est vraiment vraiment autre chose qui n'est possible que parce que du code est un objet/valeur de 1ere classe (un truc que ne savent faire ni le C ni le Pascal.)
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Neotenien
Messages : 354
Inscription : 23 oct. 2020 19:15
Localisation : Le Mans
Contact :

Re: Nouveau site web dédié au langage Pascal (2021), basé sur Pure Pascal

Message par Neotenien »

Puisque je ne peux pas te répondre directeme,t (je ne sais pas le site ne me permet pas de répondre à chaun de tes points)

- Pointer en C, Void *

J'ai hésité à l'évoquer (le void *) vu que ça fait longtemps que je n'ai pas fait de C (et que je me méfie de ma mémoire).

- Perte de la notion de SizeOf

Oui comme en C avec void *

- Liste chainées

On a appris ça au CNAM en structure de données en Pascal, je ne me rappelle plus trop mais on utilisait quand même des types tableaux statiques... Mais comme j'en ai parlé dans mon message précédent, voir l'exemple sur les pointeurs dans un record ici.(C'est riche d'enseignement et ça mojntre combien une structure/record peur ressembler à de l'objet s'il s'agit d'un pointeur sur structure/record.

- Amiga Multitache

Ah ? bon je ne scvais pas, un neveu avait acquis un amiga et yavé pas d'environnement graphique, juste des disquettes à insérer alors que l'atari TOS c'était du GEM... Et plus tard, ya eu MiNT puis FreeMiNT puis Linux (uniquement pour les machines ayant un MME, donc au moins de 68020), puis Magic, Geneva . Mais le TOS/GEM était monotache à la base.

Discussion sur la vélocité des langages de script non typés versus les langages typés

Dans ce lien, on voit que les langages Typés (qui sont majoritairement de compilation ou avec machine virtuelle comme le Java) sont bien plus performant que les langages de script (majoritairement non typés), à part JavaScript qui s'en sort pas trop mal. Souvent avec un temps multiplié par 10 en moyenne pour les langages de script.
Cependant Rust (langage récent) qui est un langage non typé est aussi performant parce qu'il gère en majorité des constante ! La seule façon de dire qu'une "constante" est une "variable" est en lui ajoutant le mot clé "mut".
Ada est un langage orienté objet qui a été largement inspiré par le Pascal... Ai CNAM notre prof nous a donné quelque notion de ce langage car, en théorie, ça devait être le langage quo'n devait utiliser pour les cours mais notre prof lui avait préféré le Pascal. C'est aussi un langage typé.
On constate au global que les langages compilé ET typé (ou n'ayant pas de variables) sont les plus performants en terme de temps de calcul, dépense énergétiques et espace mémoire nécessaire.
En prenant plusieurs critères, le C remporte la palme mais sur 3 des 4 cas, il est accompagné du Pascal (voire aussi du GO).

Le Java consomme énormément de RAM!! 6 fois plus que le Pascal en moyenne. Pas étonnant quand on voit que le type Booléen prend 2 octets déjà...
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Nouveau site web dédié au langage Pascal (2021), basé sur Pure Pascal

Message par __sam__ »

- Liste chainées

On a appris ça au CNAM en structure de données en Pascal, je ne me rappelle plus trop
C'est pourtant une des structures de données des plus classiques qu'on utilise tous les jours. Elle apparait dès le chapitre 2 de "The Art of computer programming de Knuth". (un must-have)
- Amiga Multitache

Ah ? bon je ne scvais pas,
C'est pourtant une de ses caractéristiques qui avait fait beaucoup de bruit à l'époque , cf la démo "Boing-Ball" qui tourne en mutlitache avec le reste de l'OS sur son propre écran
Cependant Rust (langage récent) qui est un langage non typé est aussi performant parce qu'il gère en majorité des constante ! La seule façon de dire qu'une "constante" est une "variable" est en lui ajoutant le mot clé "mut".
C'est plus compliqué que ca. Ca gère une notion de propriétaire d'une valeur. Ca change beaucoup de chose que peut détecter le compilateur, et éviter entre autre les déréférencements à NULL/nil.
Le Java consomme énormément de RAM!! 6 fois plus que le Pascal en moyenne. Pas étonnant quand on voit que le type Booléen prend 2 octets déjà...
C'est plus compliqué que ca. C'est pas java qui consomme de la RAM, mais la machine virtuelle. Il existe des VM économes (exemple). Il y en a des tas dans les Smartphones de nos jours.

En outre, ils ne donnent pas accès aux programmes de tests. Si ce sont des "petits" programmes, les langages à VM sont perdants d'emblée concernant l'usage mémoire. C'est très probablement le cas quand je vois le triplet PERL/JAVA/LUA en bas de classement "memory". Mais s'ils testent des trucs sérieux de base de données de plusieurs Gb, je ne suis pas certain que le sur-coût de la VM se sente.

Quant à la sizeof boolean à 2, je sais pas d'où ca sort, mais ca n'a aucun sens: les objets sont dans des zones alignées en mémoire. Aussi un éventuel sizeof d'une instance de classe avec 1 champ boolean sera de la même taille qu'une autre instance avec 4 champs booleans.

Mais bon, grace à la programmation objet (et l'usage d'accesseurs), on arrive sans difficulté à réduire les booléens à 1 bit si l'on veut dans les langages modernes. C'est vraiment pas un soucis. (Vive le découplage entre interface et implementation !)
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Répondre