Gibt es einen guten Grund, dass Windows nicht standardmäßig mit einem C-Compiler geliefert wird?

6 Antworten

Auch wenn die meisten Windowsnutzer es nicht benötigen, so verfügt Windows durchaus über Compiler.

Allerdings wäre es Blödsinn unter Windows einen C-Compiler zu verwenden. Mit .Net hat Windows ein extrem mächtiges Framework an Bord, welches auch über Compiler für C#, JScript.Net und VisualBasic.Net verfügt. Neben diesen Compilern ist Powershell eine extrem mächtige Scriptsprache mit Vollzugriff auf das .Net-Framework und native PInvoke-Funktionen.

Hier eine Kleine C#-HybridBatch , welche den enthaltenen C#-Quellcode automatisch mit dem systemeigenen C#-Compiler zu einer Windowsanwendung compiliert.

FormsTest.cmd

/* 2>nul ||@cls
@echo off
for /f "tokens=* delims=" %%v in ('dir /b /s /a:-d  /o:-n "%SystemRoot%\Microsoft.NET\Framework\*csc.exe"') do (
set "csc=%%v"
)
  rem Achtung!!!!!!!! für FormsApplicatomen mit switch /target:winexe (Windowsapplication) compilieren!!!!
"%csc%" /target:winexe /out:"%~n0.exe" "%~f0" 
start "" "%~n0.exe"
pause
exit /b %errorlevel%
rem Die nächste Zeile ist wichtig nicht ändern!
::::C#code */

using System;
using System.Drawing;
using System.Windows.Forms;

public class Form1 : Form {
    private Button Button1;  //MachWasKnopf :p
    private Label Display1;

    public Form1() {
        this.Size = new Size(600,140);

        Display1 = new Label();
        Display1.Text = "Der MachWasKnopf wurde noch nicht gedrückt";
        Display1.Location = new Point(10, 20);
        Display1.AutoSize = true;
        this.Controls.Add(Display1);
        
        Button1 = new Button();
        Button1.Text = "Mach Was";
        Button1.Location = new Point(10, 40);
        Button1.Click += new System.EventHandler(Button1_Click);
        this.Controls.Add(Button1);
    }

    private void Button1_Click(object sender, EventArgs e){ 
        //Alles was  bei Click  bassiernen soll
        Button1.Enabled = false;
        Display1.Text = "Der MachWasKnopf wurde bereits gedrückt";
    }
    
    static void Main() {
            Application.EnableVisualStyles();
            Application.Run(new Form1());
    }
}

...das genügt um mal schnell ein kleines Hilfsprogramm für Windows zu programmieren.

Allerdings ist da bereits mit Kanonen auf Spatzen schießen. Um mal etwas aus der Hüfte zu programmieren ist Powershell wesentlich einfacher zu handhaben.

DesktopUhr.ps1

using namespace System.Windows.Forms
using namespace System.Drawing
$WindowTitle='DesktopUhr'
#Wenn es bereits läuft raus
gps 'powershell','pwsh' -ea sil|?{$_.MainWindowTitle -like $WindowTitle}|%{exit}

$user32=Add-Type -m '[DllImport("user32.dll")] public static extern void ShowWindow(IntPtr hWnd, int nCmdShow);' -Name myAPI -passthru
$hwnd=(gps -id $PID).MainWindowHandle
$user32::ShowWindow($hwnd, 0)

Add-Type -a 'System.Windows.Forms'
$Form = New-Object 'Form'
$Form.Text = $WindowTitle 
$Form.BackColor = '0,0,0' 
$Form.TransparencyKey = $Form.BackColor 
$Form.TopMost = $True
$Form.FormBorderStyle = 0 
$Form.Size = '250,90'
$Form.StartPosition = 'manual'
$Form.Location = '30,30'

$ClockDisplay = New-Object 'Label'
$ClockDisplay.Font = [Font]::new("Consolas",32,[FontStyle]3)
$ClockDisplay.Text = '{0:HH\:mm\:ss}' -f (Get-Date)
$ClockDisplay.AutoSize = $True
$ClockDisplay.ForeColor = '255,0,0'
$Form.Controls.Add($ClockDisplay)

$Timer1 = New-Object 'Timer'
$Timer1.Enabled = $True
$Timer1.Interval = 100
$Timer1_Action={
  $ClockDisplay.Text = '{0:HH\:mm\:ss}' -f (Get-Date) 
}
$Timer1.add_Tick($Timer1_Action)

$Null=$Form.ShowDialog()

Das soll mal jemand mit dem Gnu-Compiler unter Linux oder einem nativen C++ unter Windows nachmachen.

grtgrt  20.12.2022, 10:32

Und wie lange mag es wohl dauern, bis jemand Powershell so gut beherrscht, dass derart leistungsfähige Scripts mit Powershell selbst schreiben kann?

0
Erzesel  20.12.2022, 17:00
@grtgrt

...Nicht länger als man das Ding in VisualStudios Windows Forms-Designer zusammklickt....

Leistungsfähig? Ich dachte ich hätte was ganz billiges gewählt. 🥴

Mal abgesehen vom der Erkennung ob es einen Prozess mit gleichem Titel und dem verstecken der Console (eigentlich nicht zwingend nötig), ist die einzige funktionale Routine der TimerEvent-Delegat, welcher ein Formslabel updatet.

Der Rest ist einfach nur das schriftliche Gegenstück zum zusammenklicken eines Fensters im VisualStudio Formseditor.

Sowohl in C++ und C#, wie auch in Powershell kommt man nicht umhin zu wissen welche Properties welchen Effekt hervorrufen (also Dokus lesen)

Das ganze in Powershell umzusetzen geht einfacher als in C++/C#. Beide würden nicht besonders "begeistert" sein, wenn man ihnen .Point-/.Size-/.Color-Objekt einfach als CSV-String an den Latz knallt.

Wie ich schon mal irgendwo geschrieben habe Powershells Objektorientierung ist so "intelligent", das sich ein Nutzer keine Gedanken machen muss, in welcher Form die Objekte Daten transportieren.

Ein Administrator möchte keine Schreiborgien veranstalten, sondern Zickzack aus der Hüfte das nötige veranlassen.

0
Außer, dass ein Großteil der Nutzer diesen vielleicht nicht brauchen.

Ist das nicht Grund genug?

Viele sind nur Nutzer und möchten nicht programmieren. Deshalb ist standardmäßig keiner dabei.

Den Compiler bekommt man, wenn man sich Visual Studio installiert. Davon gibt es eine kostenlose Community-Edition. Da hat man dann alles: Editor, Debugger, Formdesigner und Compiler die den Programmcode in eine EXE-Datei kompilieren. Hier der Download: https://visualstudio.microsoft.com/de/vs/community/

Optional gibt es noch das: https://wixtoolset.org/ Das gibt es auch als Erweiterung für Visual Studio. Damit kann man sein in Visual Studio fertig kompiliertes Programm in ein MSI Installationspaket verpacken. Das MSI-Format ist windows-zertifiziert und diesem gehört die Zukunft. Das funktioniert so: Beim Kompilieren mit Visual Studio wird auch eine Protokolldatei erstellt. Anhand dieser Datei wird dann das MSI-Installationspaket gebaut.

Das ist vermutlich exakt der Grund?

Ein Großteil der Nutzer wird diesen wohl nicht brauchen?

Ein besserer fällt mir auch nicht ein.

Woher ich das weiß:Berufserfahrung – Aktuell Software-Dev + ehemals IT-Support

Welcher der vielen Möglichkeiten sollte denn dann verwendet werden?
Und welche Vorwürfe darf sich MS dann wieder gefallen lassen? (Da wird dann ein Compiler vorgegeben, ob die Nutzer das wollen oder nicht.....)

Dann doch lieber dem Nutzer die Wahl überlassen, wenn er denn überhaupt einen Compiler benötigt.

orochi02  19.12.2022, 16:33

die meisten vorwürfe sind wahrscheinlich berechtigt

1
Erzesel  19.12.2022, 17:13
@orochi02

Die meisten Vorwürfe werden von Leuten gemacht, welche keine Ahnung haben. Das Problem sitzt schon immer vorm Monitor.

1
orochi02  19.12.2022, 17:32
@Erzesel

Nein, eben nicht. sowas sagen nur Leute die keine Ahnung haben

Wenn Windows ein scheiss Betriebssystem ist wieso ist der Anwender das Problem?

0
grtgrt  20.12.2022, 10:24
@orochi02

Windows ist in erster Linie für IT-Endanwender gedacht und in dieser Rolle nahezu konkurrenzlos (vom auch nicht wirklich idealen MacOS mal abgesehen, welches weit geringeren Marktanteil hat).

Etwas ähnlich weit Akzeptiertes zu schaffen ist über Microsoft hinaus bisher niemand gelungen.

Das sollten Schlaumeier, die Windows "ein scheiss Betriebssystem" nennen, vielleicht doch besser berücksichtigen.

1
orochi02  20.12.2022, 11:22
@grtgrt

ein frosch im brunnen weiß nichts vom ozean

nur weil windows populär ist heißt das nicht zwingend es ist gut. sklaverei war auch populär

und windows ist zwar meiner meinung nach scheiße aber darum gehts nicht. es geht darum dass für ein qualitativ nicht hochwertiges produkt die schuld nicht unbedingt beim anwender liegt? microsoft macht auch fehler.
du gibst dir ja auch nicht die schuld wenn das krankenhaus bei deiner impfung die benutzt spritze nicht wechselt zu einer sterilen spritze? klar hat das krankenhaus die aufgabe erledigt (dich zu impfen) aber der weg ist das ziel

das hat auch nichts mit schlaumeier zu tun sondern eher skepsis gegenüber der grundeinstellung dass microsoft alles richtig macht

0
Physics96  19.12.2022, 16:43

Aber Hauptsache Windows voll mit Adware und irgendwelchen Apps ausliefern.

2
Erzesel  19.12.2022, 17:25
@Physics96

Hast Du schon mal einen C-Compiler vermisst?

Was bereits vorinstallierte Apps angeht, so dürftest Du wohl nur PCs/Laptops von der Stange kennen. Eventuelle Addware oder Vorinstallierte Apps gehen dann zu Lasten des OEM-Ausstatters.

Microsoft selbst bietet lediglich eine komfortable Grundausstattung , welche einem möglichst breiten Nutzerspektrum gerecht werden soll. Dem Nutzer steht es bereits bei der Einrichtung eines persönlichen Nutzerprofils frei bestimmt Features abzuwählen.

0
Physics96  19.12.2022, 17:33
@Erzesel

Windows hat selbst auch Adware wie diese News auf der Taskleiste oder Widgets die kein Mensch braucht. Zudem ist Microsoft für seine äußerst penetrante Werbung für Microsoft Edge und online Microsoft Konto bekannt.

2
Erzesel  19.12.2022, 17:48
@Physics96

Mancheiner mag die News, diese lassen sich mit 2 Klicks ausschalten.

Zudem ist Microsoft für seine äußerst penetrante Werbung für Microsoft Edge 

So 🤔? ... ist mir noch garnicht aufgefallen. Darf man erfahren wo die "penetrante Werbung" erscheint. Ich habe irgendwann mal einen anderen Browser als Standardbrowser gewählt, seither meldet sich Edge nurnoch wenn ich die interne Hilfe beanspruche.

Natürlich ist es Quatsch von mir mit jemandem zu Diskutieren , dem Meinung wichtiger als wissen ist.

0
Physics96  19.12.2022, 17:50
@Erzesel

Dieses Wissen beruht auf langjährige Erfahrung mein Lieber. Aber wie du schon sagst es macht keinen Sinn zu diskutieren. Schön wenn du zufrieden bist und keine Probleme hast.

1
orochi02  20.12.2022, 09:16
@Erzesel

warum denunzierst du ihn als jmd irrationales dem seine meinung wichtiger ist und mit dem man nicht diskutieren kann?

0