Aktuelle Zeit: 12.12.2018 10:43

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags: Re: C Compiler und Cross-Plattform-UI
BeitragVerfasst: 06.02.2018 19:16 
Offline

Registriert: 29.08.2004 13:18
TinyC ist schon mal sehr interessant, iup auch.

Vielleicht mal zur Erklärung, warum ich frage und warum C und nicht C++.

Ich spiele immer noch mit den völlig unsinnigen Gedanken, mir meine eigene Basic-Programmiersprache zu gestallten. Und als Basis dann C und nicht Assembler. Aus mehreren Gründen. A) Ich kann kein Assembler. B) Um dann auch noch optimierten Code zu schreiben, reicht mein wissen erst recht nicht. C) C ist deutlich leichter zu lernen D) Ist nahezu überall verfügbar.
Wenn man sauber definiert und erstmal nur die C-ANSI-Standard-Bibliotheken nutzt, hat man ein schönes Grundgerüst, das sogar auf einen ATARI-ST laufen würde, wenn man einen C-Compiler findet.
Was PureBasic imo ausmacht, sind die mitgelieferten Bibliotheken. Das alles zu erarbeiten wird ein Eck lang dauern. Eine Warper-DLL darf man ja nicht verwenden und es ist ja nicht schwer zu verstehen warum.
Noch einen Vorteil würde es geben: Man kann theoretisch relativ leicht C-Bibliothek einbinden bzw. generell C-Code.
Ein paar Sachen hab ich mir schon überlegt, was ich gerne umsetzen würde. Declare möchte ich bspw. komplett abschaffen. Mag für höhere Programmiersprachen dazu gehören, ich finde in einen Basic hat das nicht sooo viel zu tun. Einen Variablen-Typ "Auto" möchte ich hinzufügen. Der Typ wird dann bei der Benutzung festgelegt. Bspw. ein a="hallo" würde a automatisch zum String machen. Ein anschließendes A=1 würde dann ein Fehler verursachen. Wer den Typ lieber manuell festlegen will, kann das mit a\s machen - \ wird ein Typ und Konvertierungszeichen. Damit wird dann der . für Strukturzugriffe frei - und damit benutzt wie bei jeder anderen Programmiersprache. Und bei Pointern möchte ich eine Typensicherheit einführen. ein " b="hallo" : a\*i = @b " würde ein Fehler verursachen weil @b ein String-Pointer zurückgibt, *a aber als Pointer auf Integer angelegt wurde. ein " B="Hallo":a\*i=(@b)\*I " würde wieder gehen, weil der Pointer "Konvertiert" wird.
Ob das ganze überhaupt was wird? Keine Ahnung, ich plane erstmal und sammle. Gerade das mit den Pointer ist noch so ein Ding. *\ gefällt mir noch nicht so ganz.
Ich hab mir jetzt erstmal "C von a bis z" gekauft und werd da erstmal rumexperimentieren. Notfalls erschlag ich damit ein paar Fliegen - der Wälzer wäre dick genug :)
Einen bescheuerten Namen hätte ich sogar "Basil - a BASIc Language" ;)

_________________
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C Compiler und Cross-Plattform-UI
BeitragVerfasst: 06.02.2018 20:01 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
GPI hat geschrieben:
Ich spiele immer noch mit den völlig unsinnigen Gedanken, mir meine eigene Basic-Programmiersprache zu gestallten. Und als Basis dann C und nicht Assembler.


Bist du Wahnsinnig ?

:wink:


Wie hast du dir die Erstellung den im Detail vorgestellt ?

Bitte eine kleine Erklärung. Mit Makros ?

Soll das ein Wrapper, Interpreter oder ein Compiler werden ?

Ich habe ja mal vor langer Zeit ein bisschen im "Drachenbuch" gelesen und mit ANTLR (JAVA) und JASMIN-Java-Assembler herrumgespielt, habe es dann aber sein gelassen.
Viel ist nicht daraus geworden.

Was ist denn genau dein Konzept / Ziel ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C Compiler und Cross-Plattform-UI
BeitragVerfasst: 06.02.2018 20:07 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9
@GPI: Hier kannst Du Dich ja inspirieren lassen:

BCX: https://en.wikipedia.org/wiki/BCX
BaCon: http://www.basic-converter.org/

Grüße ... Peter

_________________
ƃᴉɹǝᴉʍɥɔs ʇsᴉ ɥɔɐɟuᴉǝ


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C Compiler und Cross-Plattform-UI
BeitragVerfasst: 06.02.2018 20:58 
Offline

Registriert: 29.08.2004 13:18
ccode_new hat geschrieben:
Soll das ein Wrapper, Interpreter oder ein Compiler werden ?
...
Was ist denn genau dein Konzept / Ziel ?


Naja, so kompliziert ist es eigentlich nicht. er nimmt den "Basil"-Code und übersetzt in in C, anschließend jage ich das ganze den C-Compiler. Fertig.

Das ist ja das schöne, wenn man C und nicht Assembler benutzt - viele Structuren sind ja da schon da, die man nutzen kann.
aus einen fiktiven code wie

Code:
a=20.0
a=math.sqr(a)

müsste er sowas machen

Code:
//alle includes die irgendwo benötigt werden sammeln und hier eintragen
include <math.h>
// "Declares" zu funktionen
// Globale Variablen
int main(int argc, char **argv)
{
//a=20.0
double dBL1=20.0
//a=math.sqr(a)
dBL1=sqrt(dBL1)
}

Die Variablennamen müssen wohl umbenannt werden. Wie genau, ob einfach nummeriert oder nur mit einen BL_ - Prefix, weis ich noch nicht. Soll halt Namenskonflikte mit weis was ich alles vermeiden. Basic ist ja normalerweise nicht Case-Sensitiv, C schon.

ich plane das man sogar sowas schreiben kann:
Code:
$Include <math.h>
a=1 ; a ist damit Integer
a=( $sqrt( a\d ) )\i

Das $ ist das "C-Befehl" - damit kann man C-Code direkt eingeben. Allerdings geht es nur bis zur nächsten Nicht-Bezeichner-Zeichen. In der Klammer von sqrt() ist quasi wieder Basil-Code. hier übergebe ich die Variable a (integer), konvertiere sie aber vorher zu double. Den Wert, den ich durch das c-sqrt() zurück bekomme, wird dann wieder in Integer umgewandelt ( durch \i )
Das $-CTeil ist aber kritisch. Da Basil nicht weis, was der C-Befehl für parameter und was der genau zurück gibt, muss man genau wissen, was man da macht.
Fehlermeldungen, die hier entstehen können, werden durch Basil nicht abgefangen werden, sondern man bekommt die Fehlermeldung des C-Compilers serviert.
Das ganze ist für mich auch eher dafür gedacht, um Bibliotheken für Basil aufzubauen. Da kann man genauer abfangen. Man soll so auch bspw. die Windows-Api direkt aufrufen. Aber ich würde es nicht empfehlen. Was auch gehen wird, direkt Konstanten abzufragen. bspw. $TRUE wäre die C-Konstante True.

Was auch auf meiner Todo-Liste steht: Libraries erstellen. Fand ich schon immer blöd, das man das in PB nicht direkt machen kann.
Genauso soll beim "Create Execute" auch eine <programmname>.license.txt erstellt werden und wenn DLLs benötigt werden automatisch ins Verzeichnis kopiert werden. Die licence.txt enthält dann alle Licence-Informationen der tatsächlich benötigen eingebundenen Bibliotheken.

Aber nicht so viel Nachdenken, sonst erschlägt man sich damit und traut nicht mal anzufangen.

Imo kommt der "Dumme" öfters weiter, weil er halt einfach macht und es schafft, während der "Kluge" sich zu tode überlegt.
Die erste Version von Basil wird in PB geschrieben - und ich werd mich hier melden. Falls das jemals was wird :) und vor Weihnachten (ich sag nicht welches Jahr) wird das auch sicher nichts. Aber aktuell hab ich spaß dran hier probleme zu lösen.

@kiffi danke. ich werds mir später anschauen.

_________________
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C Compiler und Cross-Plattform-UI
BeitragVerfasst: 15.02.2018 13:21 
Offline
Benutzeravatar

Registriert: 28.07.2005 12:39
Im übrigen ist Pelles C Freeware. Da hast du dann alle Werkzeuge zusammen und darfst es auch verteilen.

_________________
Suche


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C Compiler und Cross-Plattform-UI
BeitragVerfasst: 15.02.2018 19:06 
Offline
Benutzeravatar

Registriert: 11.08.2005 19:08
Hallo GPI,

das ist eine coole Idee :)

Dein Vorhaben nennt sich übrigens Source-to-Source Compiler, Transcompiler oder Transpiler:
https://de.wikipedia.org/wiki/Compiler#Sonderformen
https://en.wikipedia.org/wiki/Source-to-source_compiler

GPI hat geschrieben:
Genauso soll beim "Create Execute" auch eine <programmname>.license.txt erstellt werden [...] Die licence.txt enthält dann alle Licence-Informationen der tatsächlich benötigen eingebundenen Bibliotheken.
Dafür habe ich seit kurzem ein PB-Tool geschrieben. Die Liste im Thread "Welche PB-Befehle verwenden welche Libraries?" war die Vorarbeit dafür. Kläre derzeit nur noch mit Fred ab, ob die Liste so korrekt ist.

Edit:
Wahrscheinlich kennst du die Seite schon, aber sicherheitshalber möchte ich sie hier trotzdem nennen:
http://rosettacode.org/wiki/Rosetta_Code
Sie wird dir bestimmt sehr bei deinem Vorhaben helfen.

_________________
Bild
Warum OpenSource eine Lizenz haben sollte
PureBasic-CodeArchiv-Rebirth: Git-Repository / Download -- Jede Hilfe ist willkommen!
Manjaro Xfce x64 (Hauptsystem) :: WindowsXP/Xubuntu x86 (VirtualBox) :: PureBasic (Linux: x86/x64, Windows: x86) :: jeweils neueste Version


Zuletzt geändert von Sicro am 16.02.2018 14:45, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C Compiler und Cross-Plattform-UI
BeitragVerfasst: 16.02.2018 04:44 
Offline
Benutzeravatar

Registriert: 19.10.2006 12:51
Die verfügbaren GUI Bibliotheken sind nur soweit cross-plattform, wie sie angeboten bzw. kompatibel sind.

GTK ist ein ziemlicher Mist und zudem ein Flickenteppich. Da werden APIs gerne mittendrin geändert und du hast das Nachsehen, wenn ein "kleines" Update kommt.

Viele GUI-Libs, die auf Cross-Plattform zielen, sehen auf einigen Systemen "falsch" aus. Es sind dann nicht die gewohnten Standard-Steuerelemente des jeweiligen Systems, sondern eine Zwischenschicht. Das ist z.B. bei Swing so (zumindest noch vor einigen Jahren. Inzwischen ist es besser geworden).

Da kannste gleich zu WebView+HTML5 greifen.

Warum machst du es nicht so, dass du für jedes unterstützte Betriebssystem eine Zwischen-Lib baust, die die Kompatiblität zwischen deiner Programmiersprache und der jeweils verfügbaren UI-Lib bzw.der System-API herstellt? Dann bindet der Compiler/Linker je nach Zielsystem entweder die eine oder die andere ein und du kannst die Unterstützung beliebig erweitern.

PS: Java ist nicht zwingend langsamer als C. Kann sogar in einigen Fällen schneller sein, weil der Bytecode gezielt auf das Zielsystem, auf dem er ausgeführt wird, abgestimmt werden kann, als vorcompilierter Code aus einem "normalen" Compiler. :wink:

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: C Compiler und Cross-Plattform-UI
BeitragVerfasst: 21.02.2018 17:24 
Offline
Benutzeravatar

Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten
Hallo GPI,

wenn Du es jeden Tag versuchst, versuchst, versuchst bin ich gespannt was Du am 22.12.2022 veröffentlichst.

Man kann auch PureBasic nutzen um C zu erzeugen:
Code:
; Erzeuge C-Demo.

EnableExplicit
Macro NeueZeile : #CRLF$ : EndMacro ; Windows
Macro quot : Chr(34) : EndMacro     ; Anführungszeichen
Macro stradd(Text) : s$+Text : EndMacro ; Hier könnte auch ein AddElement(Liste()) stehen.
Macro strprint(Datei) : mystrprint(Datei,s$) : EndMacro
Declare mystrprint(Dateiname.s,s$)
Define s$="" ; Kommt bei Umstellung auf Liste weg.

stradd("#include <stdio.h>"+NeueZeile)
stradd("int main (void) {"+NeueZeile)
stradd("  printf(")
stradd(quot+"Hallo sichtbares Universum. jp こんにちは可視宇宙 hi हेलो दृश्यमान ब्रह्मांड \n"+quot+");"+NeueZeile)
stradd("  return 4711;"+NeueZeile)
stradd("}"+NeueZeile)

strprint("hallo.c")

Procedure mystrprint(Dateiname.s,s$)
  Protected Datei
  Datei=CreateFile(#PB_Any,Dateiname)
  If 0=Datei :  Datei=CreateFile(#PB_Any,GetUserDirectory(#PB_Directory_Documents)+Dateiname) :endif
  WriteString(Datei,s$)
  CloseFile(Datei)
EndProcedure

Was gibt das erzeugte C Programm wirklich aus?

Pelles C
Drachenbuch
N.Wirth Compiler Construction Part 1
N.Wirth Compiler Construction Part 2

Gruß

Edit: If 0=Datei : Datei=CreateFile(#PB_Any,GetUserDirectory(#PB_Directory_Documents)+Dateiname) :endif

_________________
PB Spickzettel

Erkenntnisapparat einschalten entscheidet über das einzig bekannte Leben im sichtbaren Universum.
Bitte Frage fragen.
Jürgen Kulow Wersten :D_üsseldorf NRW D Europa Erde Sonnensystem Lokale_Flocke Lokale_Blase Orion-Arm
Milchstraße Lokale_Gruppe Virgo-Superhaufen Laniakea Sichtbares_Universum


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite Vorherige  1, 2

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye