Gibt es einen guten Grund, dass Windows nicht standardmäßig mit einem C-Compiler geliefert wird?
Außer, dass ein Großteil der Nutzer diesen vielleicht nicht brauchen.
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.
...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.
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.
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.
Aber Hauptsache Windows voll mit Adware und irgendwelchen Apps ausliefern.
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.
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.
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.
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
Und wie lange mag es wohl dauern, bis jemand Powershell so gut beherrscht, dass derart leistungsfähige Scripts mit Powershell selbst schreiben kann?