Welche Anwendungszweck bietet Pas2JS ?

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
jus
Beiträge: 47
Registriert: Fr 6. Mai 2011, 13:29

Welche Anwendungszweck bietet Pas2JS ?

Beitrag von jus »

Hallo,

ich habe mich gestern erstmalig mit Pas2JS beschäftigt. Schade dass das PasJS Widget (Heliosroots) von nicht richtig mit der Trunk funktioniert. Nun die Frage an die Experten. Für welchen Anwendungszweck ist denn eigentlich Pas2JS gedacht? Worin liegt eigentlich der Vorteil, wenn man es verwendet. Für PHP sehe ich den Sinn, da es als Webserver die Daten direkt für die Anzeige serverseitig z.B. einen Browser aufbereiten kann. Ich bin in Sachen Webanwendungen nicht so bewandert, verzeiht mir meine Unwissenheit.

Eine weitere Frage wäre, es wird eigentlich eine Javascript *.js erzeugt, die in Textform verfügbar lesbar ist. Kann man diese so kompilieren, dass es nicht so leicht lesbar ist?

Gibt es eine aktuelle Snapshopversion von Pas2JS für Windows? Es scheinen Snapshot für Mac und Linux zu geben, aber keine für Windows.

lg,
jus

Warf
Beiträge: 1421
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: MacOS | Win 10 | Linux
CPU-Target: x86_64
Wohnort: Aachen

Re: Welche Anwendungszweck bietet Pas2JS ?

Beitrag von Warf »

Ziemlich simpel, Javascript ist die Websprache, aber Javascript ist ziemliche beschissen. Wenn du eine webseite schreiben willst und nicht Javascript benutzen willst, kannst du z.B. pas2js benutzen.

Also abgesehen von dem offensichtlichen (Websiten) gibt es noch ein paar weitere Anwendungsfälle, die ich mir vorstellen kann (vorab, ich bin kein pas2js profi, hab nur mal ein bisschen damit rumgespielt):
1. Mobil: ich hab mal ein paar der pas2js beispiele in eine cordova app geschoben, das hat ziemlich gut funktioniert. Ich kann mir also sehr gut vorstellen das man mit Pas2JS einfach cross plattform IOS und Android Apps schreiben kann.
2. Smart Geräte: SmartTV's und co benutzen meist HTML-Javascript basierte apps. Mit pas2JS könnte man dann auch dafür in pascal anwendungen schreiben
3. Konsolen: Eine anwendung für XBox und Playstation zu schreiben bedeutet 2 anwendungen zu schreiben, beide unterstützten aber einen browser
Generell, auf so gut wie jedem system läuft ein browser, egal ob Handy, Tablet, Konsole, PC, Fernseher, etc. d.h. mit Javascript hat man die möglichkeit nahezu jedes gerät mit dem selben code zu erreichen, ohne kompatibilitätsprobleme

Alles in allem fänd ich zwar ein emscripten kompatiblen webassembly kompiler besser (was aber mit hinblick darauf das das wahrscheinlich einen funktionierenden LLVM kompiler benötigen würde, den es soweit ich weiß noch nicht gibt), so gibt es mit pas2js doch schon einige möglichkeiten, allerdings mehr als ein paar spielereien mit Beispielen hab ich auch noch nicht gemacht

jus hat geschrieben:Eine weitere Frage wäre, es wird eigentlich eine Javascript *.js erzeugt, die in Textform verfügbar lesbar ist. Kann man diese so kompilieren, dass es nicht so leicht lesbar ist?

Ja klar, das nennt sich obfuscaten. Aber es gibt sogar noch nen besseren Grund das zu machen, außer den code unleserlich zu machen. Duch "kompilieren" kann der code kompakter und effizienter gemacht werden. Pas2JS erzeugt sehr lesbaren und strukturierten code, nicht optimiert für performance. Es gibt ne ganze Reihe tools die den code umstrukturieren um ihn effizienter zu machen. Ein Nebenprodukt davon ist das der code nicht mehr lesbar ist.
Beispiel: geh auf google und schau dir deren Javascript sourcen an. Hier mal eine variablenzuweisung:

Code: Alles auswählen

var s_ZXg=function(a){s_i.call(this,a.Oa);var b=s_Ja("l",s_XXg),c=b.get("ssv")||0,d=s_(a.Xa.Pua,3);c>=d||s_9k(s_(a.Xa.Pua,1),function(){this.Bh()&&s_9k("/domainless/write?igu=1&data="+this.vk()+"&xsrf="+s_(a.Xa.Pua,2),function(){this.Bh()&&b.set("ssv",d,"h")})},"GET",void 0,void 0,void 0,!0)};s_n(s_ZXg,s_i);s_ZXg.Fa=function(){return{Xa:{Pua:s_YXg}}};s_1(s_PAa,s_ZXg);

mschnell
Beiträge: 3408
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Welche Anwendungszweck bietet Pas2JS ?

Beitrag von mschnell »

Soweit ich weiß ist ein fpc zu WebASM in Arbeit. Da neuere Browser WebASM zusätzlich zu Javascript verarbeiten können ist das derselbe Einsatzfall: in Webseiten integrierter Code. WebASM ist schneller und kompakter als Javascript und zeigt keinen lesbaren Code mehr,.
-Michael
Zuletzt geändert von mschnell am Do 6. Feb 2020, 10:11, insgesamt 1-mal geändert.

Socke
Lazarusforum e. V.
Beiträge: 2733
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Welche Anwendungszweck bietet Pas2JS ?

Beitrag von Socke »

Ein weiteres Einsatzgebiet sind Microservices (Serveranwendungen) auf Basis von NodeJS. Wenn man also auf NodeJS Frameworks aufbauen muss/will, kann man das jetzt auch in Pascal tun.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

theo
Beiträge: 8318
Registriert: Mo 11. Sep 2006, 19:01

Re: Welche Anwendungszweck bietet Pas2JS ?

Beitrag von theo »

jus hat geschrieben:Für welchen Anwendungszweck ist denn eigentlich Pas2JS gedacht? Worin liegt eigentlich der Vorteil, wenn man es verwendet. Für PHP sehe ich den Sinn, da es als Webserver die Daten direkt für die Anzeige serverseitig z.B. einen Browser aufbereiten kann. Ich bin in Sachen Webanwendungen nicht so bewandert, verzeiht mir meine Unwissenheit.


Bei deiner Frage, bin ich mir nicht ganz sicher, ob du den Sinn/Vorteil von Javascript oder den Sinn von Pas2JS meinst.
Der Vorteil von Javascript ist natürlich, dass jeder aktuelle Webbrowser diese Scripts ausführen kann und verschiedene Schnittstellen zu seinen Funktionen darüber zur Verfügung stellt.
Der Vorteil von Pas2JS ist wohl Geschmackssache. Mir persönlich leuchtet der Umweg über Pascal nicht so richtig ein, zumal der Zugriff auf die Schnittstellen dann doch recht "fremd" erscheint.

z.B. aus Wiki

Code: Alles auswählen

 
  TJSFunction = class external name 'Function'(TJSObject)
  private
    Flength: NativeInt external name 'length';
    Fprototyp: TJSFunction external name 'prototyp';
  public
    name: String;
    property prototyp: TJSFunction read Fprototyp;
    property length: NativeInt read Flength;
    function apply(thisArg: TJSObject; const ArgArray: TJSValueDynArray): JSValue; varargs;
    function bind(thisArg: TJSObject): JSValue; varargs;
    function call(thisArg: TJSObject): JSValue; varargs;
  end;


Da scheint mir Typescript "natürlicher".
Aber ich lasse mich gerne eines besseren belehren. :wink:

Socke
Lazarusforum e. V.
Beiträge: 2733
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Welche Anwendungszweck bietet Pas2JS ?

Beitrag von Socke »

theo hat geschrieben:Da scheint mir Typescript "natürlicher".
Aber ich lasse mich gerne eines besseren belehren. :wink:

Auch in Typescript ist das meiste doch nur Kommentar :D

Ungemütlich wird es in Pas2JS erst, wenn man um JavaScript-Closures herum arbeiten muss. Diese werden in Pascal nicht unterstützt und werden es wohl auch nie.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

theo
Beiträge: 8318
Registriert: Mo 11. Sep 2006, 19:01

Re: Welche Anwendungszweck bietet Pas2JS ?

Beitrag von theo »

Socke hat geschrieben:Auch in Typescript ist das meiste doch nur Kommentar :D


Für mich ist Typescript der ideale "Vermittler" zwischen Pascal und Javascript.
Ich fühle mich damit ziemlich "zuhause".
Das sieht doch recht verständlich und vertraut aus:

Code: Alles auswählen

class Person {
    protected name: string;
    protected constructor(theName: string) {
      this.name = theName;
   }
}
 
// Employee can extend Person
class Employee extends Person {
    private department: string;
 
    constructor(name: string, department: string) {
        super(name);
        this.department = department;
    }
 
    public getElevatorPitch() {
        return `Hello, my name is ${this.name} and I work in ${this.department}.`;
    }
}
 
let howard = new Employee("Howard", "Sales");
let john = new Person("John"); // Error: The 'Person' constructor is protected
 
console.log(howard.getElevatorPitch());

Antworten