@Cape-City: der Link sollte jetzt funzen. Die Version 2015-09-19 ist nicht veröffentlicht, da im Großen und Ganzen nur kosmetische Veränderungen gemacht wurden.
Vielleicht aktualisiere ich mal bei Gelegenheit die Pastebin Version...
@Cape-City: der Link sollte jetzt funzen. Die Version 2015-09-19 ist nicht veröffentlicht, da im Großen und Ganzen nur kosmetische Veränderungen gemacht wurden.
Vielleicht aktualisiere ich mal bei Gelegenheit die Pastebin Version...
Bringt das denn
nachher etwas beim Compilieren oder ist die EXE deswegen auch nicht viel kleiner, wenn der UPX drüber gelaufen ist?
Da der Code intern die Daten als Strings speichert, bläht sich natürlich der Code auf. Ideal wäre es, wenn man die Exe so klein wie möglich halten will, die Dateien als Ressourcen in die Exe anhängt. Um zu testen, müsste man aber den Code immer kompilieren.
Wie schon alpines schrieb, reagieren die AV Programme sehr sensible gegen UPX gepackte AutoIt Executables. Die Exe wird zwar kleiner, aber die AV Programme werden dadurch eher nur angetriggert.
Mir persönlich ist mittlerweile die Exe Größe egal.
Hier noch ein kleines Bespiel, wie man z.B. XM Sound Dateien abzuspielen kann.
Den Part "_FSOUND_GetCurrentLevels@12" in der DLL hatte ich auch bereits im Internet gefunden, wusste aber nicht, wie ich das entsprechend aufrufen muss.
Mal das Help File zu FMOD im Anhang.
Und hier die Funktionen:
_FMUSIC_FreeSong@4|0x00020626
_FMUSIC_GetBPM@4|0x00021813
_FMUSIC_GetGlobalVolume@4|0x0002174B
_FMUSIC_GetMasterVolume@4|0x0002170B
_FMUSIC_GetName@4|0x0002141D
_FMUSIC_GetNumChannels@4|0x00021628
_FMUSIC_GetNumInstruments@4|0x000215AA
_FMUSIC_GetNumOrders@4|0x00021536
_FMUSIC_GetNumPatterns@4|0x00021575
_FMUSIC_GetNumSamples@4|0x000215E9
_FMUSIC_GetOpenState@4|0x00021D11
_FMUSIC_GetOrder@4|0x00021853
_FMUSIC_GetPattern@4|0x0002178B
_FMUSIC_GetPatternLength@8|0x000216B9
_FMUSIC_GetPaused@4|0x0002197B
_FMUSIC_GetRealChannel@8|0x000219BA
_FMUSIC_GetRow@4|0x000218A9
_FMUSIC_GetSample@8|0x00021667
_FMUSIC_GetSpeed@4|0x000217D3
_FMUSIC_GetTime@4|0x00021900
_FMUSIC_GetType@4|0x00021459
_FMUSIC_GetUserData@4|0x00021AAA
_FMUSIC_IsFinished@4|0x0002148C
_FMUSIC_IsPlaying@4|0x000214DA
_FMUSIC_LoadSong@4|0x000205C2
_FMUSIC_LoadSongEx@24|0x000205EE
_FMUSIC_OptimizeChannels@12|0x00021130
_FMUSIC_PlaySong@4|0x00020896
_FMUSIC_SetInstCallback@12|0x00020E4A
_FMUSIC_SetLooping@8|0x00021A20
_FMUSIC_SetMasterSpeed@8|0x00021323
_FMUSIC_SetMasterVolume@8|0x000212C0
_FMUSIC_SetOrder@8|0x0002118B
_FMUSIC_SetOrderCallback@12|0x00020D94
_FMUSIC_SetPanSeperation@8|0x000213A8
_FMUSIC_SetPaused@8|0x0002126C
_FMUSIC_SetReverb@4|0x00021CED
_FMUSIC_SetRowCallback@12|0x00020CDE
_FMUSIC_SetSample@12|0x00020EF6
_FMUSIC_SetUserData@8|0x00021A65
_FMUSIC_SetZxxCallback@8|0x00020C3F
_FMUSIC_StopAllSongs@0|0x00020C18
_FMUSIC_StopSong@4|0x00020B30
_FSOUND_3D_GetAttributes@12|0x000231AE
_FSOUND_3D_GetMinMaxDistance@12|0x0002854C
_FSOUND_3D_Listener_GetAttributes@32|0x00022DFC
_FSOUND_3D_Listener_SetAttributes@32|0x00022CBB
_FSOUND_3D_Listener_SetCurrent@8|0x0002301C
_FSOUND_3D_SetAttributes@12|0x0002304A
_FSOUND_3D_SetDistanceFactor@4|0x00022F5B
_FSOUND_3D_SetDopplerFactor@4|0x00022F32
_FSOUND_3D_SetMinMaxDistance@12|0x0002845D
_FSOUND_3D_SetRolloffFactor@4|0x00022FBE
_FSOUND_CD_Eject@4|0x0002639B
_FSOUND_CD_GetNumTracks@4|0x0002648E
_FSOUND_CD_GetPaused@4|0x00026462
_FSOUND_CD_GetTrack@4|0x0002647A
_FSOUND_CD_GetTrackLength@8|0x000264A2
_FSOUND_CD_GetTrackTime@4|0x00026501
_FSOUND_CD_GetVolume@4|0x0002637D
_FSOUND_CD_OpenTray@8|0x00026405
_FSOUND_CD_Play@8|0x0002623E
_FSOUND_CD_SetPaused@8|0x000262D2
_FSOUND_CD_SetPlayMode@8|0x000262B9
_FSOUND_CD_SetTrackTime@8|0x000264E7
_FSOUND_CD_SetVolume@8|0x0002634B
_FSOUND_CD_Stop@4|0x00026250
_FSOUND_Close@0|0x0002273C
_FSOUND_DSP_ClearMixBuffer@0|0x00028908
_FSOUND_DSP_Create@12|0x000285E4
_FSOUND_DSP_Free@4|0x0002864E
_FSOUND_DSP_GetActive@4|0x00028811
_FSOUND_DSP_GetBufferLength@0|0x0002890D
_FSOUND_DSP_GetBufferLengthTotal@0|0x00028916
_FSOUND_DSP_GetClearUnit@0|0x00028823
_FSOUND_DSP_GetClipAndCopyUnit@0|0x000288EC
_FSOUND_DSP_GetFFTUnit@0|0x00028877
_FSOUND_DSP_GetMusicUnit@0|0x0002885B
_FSOUND_DSP_GetPriority@4|0x000287D5
_FSOUND_DSP_GetSFXUnit@0|0x0002883F
_FSOUND_DSP_GetSpectrum@0|0x000288C5
_FSOUND_DSP_MixBuffers@28|0x0002891F
_FSOUND_DSP_SetActive@8|0x000287FF
_FSOUND_DSP_SetPriority@8|0x000287A0
_FSOUND_FX_Disable@4|0x00027DCC
_FSOUND_FX_Enable@8|0x00027D0F
_FSOUND_FX_SetChorus@32|0x00027E66
_FSOUND_FX_SetCompressor@28|0x00027EFD
_FSOUND_FX_SetDistortion@24|0x00027F97
_FSOUND_FX_SetEcho@24|0x0002802B
_FSOUND_FX_SetFlanger@32|0x000280BF
_FSOUND_FX_SetGargle@12|0x0002815F
_FSOUND_FX_SetI3DL2Reverb@52|0x000281E0
_FSOUND_FX_SetParamEQ@16|0x0002829E
_FSOUND_FX_SetWavesReverb@20|0x00028326
_FSOUND_File_SetCallbacks@20|0x00010232
_FSOUND_GetAmplitude@4|0x000272AC
_FSOUND_GetCPUUsage@0|0x00022C80
_FSOUND_GetChannelsPlaying@0|0x00022BAD
_FSOUND_GetCurrentLevels@12|0x00027CA2
_FSOUND_GetCurrentPosition@4|0x00027BD5
_FSOUND_GetCurrentSample@4|0x00027C1B
_FSOUND_GetDriver@0|0x000229E2
_FSOUND_GetDriverCaps@8|0x00022A9B
_FSOUND_GetDriverName@4|0x00022A49
_FSOUND_GetError@0|0x00022CB5
_FSOUND_GetFrequency@4|0x00027121
_FSOUND_GetLoopMode@4|0x00027AE7
_FSOUND_GetMaxChannels@0|0x00022B1E
_FSOUND_GetMaxSamples@0|0x00022B3C
_FSOUND_GetMemoryStats@8|0x00010D1E
_FSOUND_GetMixer@0|0x00022A06
_FSOUND_GetMute@4|0x0002778D
_FSOUND_GetNumDrivers@0|0x00022A21
_FSOUND_GetNumHWChannels@12|0x00022C21
_FSOUND_GetNumHardwareChannels@0|0x00022C03
_FSOUND_GetNumSubChannels@4|0x000283B4
_FSOUND_GetOutput@0|0x00022998
_FSOUND_GetOutputHandle@0|0x000229B3
_FSOUND_GetOutputRate@0|0x00022B03
_FSOUND_GetPan@4|0x000274E5
_FSOUND_GetPaused@4|0x0002787B
_FSOUND_GetPriority@4|0x0002793A
_FSOUND_GetReserved@4|0x00027A07
_FSOUND_GetSFXMasterVolume@0|0x0002204C
_FSOUND_GetSpeakerMode@0|0x00022BA4
_FSOUND_GetSubChannel@8|0x00028404
_FSOUND_GetSurround@4|0x00027678
_FSOUND_GetVersion@0|0x00022991
_FSOUND_GetVolume@4|0x00027261
_FSOUND_Init@12|0x000220FB
_FSOUND_IsPlaying@4|0x00027C5C
_FSOUND_PlaySound@8|0x00026EAB
_FSOUND_PlaySoundEx@16|0x00026E24
_FSOUND_Record_GetDriver@0|0x000291B9
_FSOUND_Record_GetDriverName@4|0x00029100
_FSOUND_Record_GetNumDrivers@0|0x000290C5
_FSOUND_Record_GetPosition@0|0x000292DF
_FSOUND_Record_SetDriver@4|0x00029151
_FSOUND_Record_StartSample@8|0x000291EA
_FSOUND_Record_Stop@0|0x000292B7
_FSOUND_Reverb_GetChannelProperties@8|0x000233CB
_FSOUND_Reverb_GetProperties@4|0x000232CC
_FSOUND_Reverb_SetChannelProperties@8|0x00023304
_FSOUND_Reverb_SetProperties@4|0x00023294
_FSOUND_Sample_Alloc@28|0x0002967C
_FSOUND_Sample_Free@4|0x0002970C
_FSOUND_Sample_Get@4|0x0002AA91
_FSOUND_Sample_GetDefaults@20|0x0002A9DD
_FSOUND_Sample_GetDefaultsEx@32|0x0002A93F
_FSOUND_Sample_GetLength@4|0x0002AA31
_FSOUND_Sample_GetLoopPoints@12|0x0002A8E3
_FSOUND_Sample_GetMinMaxDistance@12|0x0002A49C
_FSOUND_Sample_GetMode@4|0x0002A9FD
_FSOUND_Sample_GetName@4|0x0002AA65
_FSOUND_Sample_Load@20|0x00029E09
_FSOUND_Sample_Lock@28|0x0002A29B
_FSOUND_Sample_SetDefaults@20|0x0002A8C2
_FSOUND_Sample_SetDefaultsEx@32|0x0002A81A
_FSOUND_Sample_SetLoopPoints@12|0x0002A4F0
_FSOUND_Sample_SetMaxPlaybacks@8|0x0002A55F
_FSOUND_Sample_SetMinMaxDistance@12|0x0002A416
_FSOUND_Sample_SetMode@8|0x0002A381
_FSOUND_Sample_Unlock@20|0x0002A338
_FSOUND_Sample_Upload@12|0x0002A1F0
_FSOUND_SetBufferSize@4|0x00021F16
_FSOUND_SetCurrentPosition@8|0x00027B2B
_FSOUND_SetDriver@4|0x00021E76
_FSOUND_SetFrequency@8|0x00026FE3
_FSOUND_SetFrequencyEx@8|0x00027083
_FSOUND_SetHWND@4|0x00021F56
_FSOUND_SetLoopMode@8|0x00027A4E
_FSOUND_SetMaxHardwareChannels@4|0x000220B1
_FSOUND_SetMemorySystem@20|0x00010BE6
_FSOUND_SetMinHardwareChannels@4|0x00022067
_FSOUND_SetMixer@4|0x00021ED4
_FSOUND_SetMute@8|0x000276C9
_FSOUND_SetOutput@4|0x00021DEA
_FSOUND_SetPan@8|0x000273E1
_FSOUND_SetPanSeperation@4|0x00022007
_FSOUND_SetPaused@8|0x000277DD
_FSOUND_SetPriority@8|0x000278C2
_FSOUND_SetReserved@8|0x00027985
_FSOUND_SetSFXMasterVolume@4|0x00021F82
_FSOUND_SetSpeakerMode@4|0x00022B6D
_FSOUND_SetSurround@8|0x000275F6
_FSOUND_SetVolume@8|0x0002716C
_FSOUND_SetVolumeAbsolute@8|0x0002730C
_FSOUND_StopSound@4|0x00026F36
_FSOUND_Stream_AddSyncPoint@12|0x0002EB88
_FSOUND_Stream_Close@4|0x0002D0FF
_FSOUND_Stream_Create@20|0x0002CF90
_FSOUND_Stream_CreateDSP@16|0x0002E92F
_FSOUND_Stream_DeleteSyncPoint@4|0x0002EC6A
_FSOUND_Stream_FindTagField@20|0x0003193D
_FSOUND_Stream_GetLength@4|0x0002E6E7
_FSOUND_Stream_GetLengthMs@4|0x0002E71B
_FSOUND_Stream_GetMode@4|0x0002E80B
_FSOUND_Stream_GetNumSubStreams@4|0x0002E140
_FSOUND_Stream_GetNumSyncPoints@4|0x0002ECC5
_FSOUND_Stream_GetNumTagFields@8|0x0003186C
_FSOUND_Stream_GetOpenState@4|0x0002E85C
_FSOUND_Stream_GetPosition@4|0x0002E414
_FSOUND_Stream_GetSample@4|0x0002E8F3
_FSOUND_Stream_GetSyncPoint@8|0x0002ED0A
_FSOUND_Stream_GetSyncPointInfo@8|0x0002ED47
_FSOUND_Stream_GetTagField@24|0x000318B9
_FSOUND_Stream_GetTime@4|0x0002E5FE
_FSOUND_Stream_Net_GetBufferProperties@12|0x00030420
_FSOUND_Stream_Net_GetLastServerStatus@0|0x00030585
_FSOUND_Stream_Net_GetStatus@20|0x000305A2
_FSOUND_Stream_Net_SetBufferProperties@12|0x000303C3
_FSOUND_Stream_Net_SetMetadataCallback@12|0x0003064F
_FSOUND_Stream_Net_SetNetDataCallback@8|0x000306A2
_FSOUND_Stream_Net_SetProxy@4|0x0003046C
_FSOUND_Stream_Net_SetTimeout@4|0x00030577
_FSOUND_Stream_Open@16|0x0002CFCB
_FSOUND_Stream_Play@8|0x0002D321
_FSOUND_Stream_PlayEx@16|0x0002D335
_FSOUND_Stream_SetBufferSize@4|0x0002ED85
_FSOUND_Stream_SetEndCallback@12|0x0002D6A3
_FSOUND_Stream_SetLoopCount@8|0x0002EAA8
_FSOUND_Stream_SetLoopPoints@12|0x0002E9B6
_FSOUND_Stream_SetMode@8|0x0002E78E
_FSOUND_Stream_SetPCM@8|0x0002DA74
_FSOUND_Stream_SetPosition@8|0x0002D7E1
_FSOUND_Stream_SetSubStream@8|0x0002E129
_FSOUND_Stream_SetSubStreamSentence@12|0x0002E1A7
_FSOUND_Stream_SetSyncCallback@12|0x0002EB3C
_FSOUND_Stream_SetTime@8|0x0002D7F8
_FSOUND_Stream_Stop@4|0x0002D693
_FSOUND_Update@0|0x000228F5
Alles anzeigen
Happy Intro Coding. ![]()
Hier ein kleine Erweiterung der FMOD Memory UDF:
Func FSOUND_GetCurrentLevels($F_Channel = 2)
Local $tLeft = DllStructCreate("float l"), $tRight = DllStructCreate("float r")
Local $F_RetValue = MemoryDllCall($F_DLL, "int", "_FSOUND_GetCurrentLevels@12", _
"int", $F_Channel, _
"struct*", $tLeft, _
"struct*", $tRight)
If Not $F_RetValue[0] Then Return SetError(1, 0, 0)
Local $F_LEVELS[2] = [$tLeft.l, $tRight.r]
Return $F_LEVELS
EndFunc
Kleiner Flimmer Beispiel als Anhang.
Ich sehe, dass du auch "Demo / Intro" begeistert bist. ![]()
Einen Hammer geilen Geburtstag wünsche ich dir und möge Thor immer dir zur Seite stehen.
Die 50 rückt näher... ![]()
Dim $var2 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\UNINSTALL\"&$var, "DisplayName")
ConsoleWrite($var2&@CRLF)
If @error then ExitLoop
@error bezieht sich in diesem Fall auf ConsoleWrite und nicht auf RegRead, sprich die For/Next Schleife läuft zwangsmäßig bis 999, da ConsoleWrite nie einen Fehler zurück gibt.
Ansonsten kann ich beim Überfliegen nichts weiter erkennen.
Test System (CPU): Intel(R) Core(TM) i5-4300U @2,5 GHz
Mars:
Andy:
UEZ:
Top
Hier die kompilierten Versionen von VS2015 C++ und FreeBasic als Anhang.
[Blockierte Grafik: http://www.hannover.de/var/storage/images/media/01-data-neu/bilder/redaktion-hannover.de/2016/2016_04/leibniz-butterkeks/13439944-1-ger-DE/Leibniz-Butterkeks_image_full.jpg]
Einen Grund kann ich dir sagen: das pow(-1, k) frisst. Selbst wenn das intern effektiv gehandelt wird hast du damit mehr Rechenaufwand als wenn du eine Vorzeichenvariable einführst.
Stimmt!
Bezgl. FB: hätte nicht gedacht, dass die Laufzeit von 1136ms auf 136ms sinkt, wenn ich das so mache wie du es gemacht hast.
Edit: mit VS2015 habe ich 56ms hinbekommen.
// Leibniz-PI.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <limits>
#include <chrono>
using namespace std;
typedef std::numeric_limits< double > dbl;
void main()
{
auto start = std::chrono::high_resolution_clock::now();
unsigned int k, n = 10000000;
double fPI = 0.0, fSign = 1.0;
for (k = 0; k < n; k++) {
fPI += fSign / ((k << 1) + 1);
fSign = -fSign;
}
fPI *= 4.0;
auto end = std::chrono::high_resolution_clock::now();
std::chrono::duration<double> elapsed = end - start;
cout.precision(dbl::max_digits10);
cout << "Pi: " << fPI << '\t' << elapsed.count() * 1000 << " ms for " << n << " iterations." << endl;
cin.get();
}
Alles anzeigen
Komisch, dass ich mit FB so bescheiden abschneide.
Mit VS2015 bekomme ich immerhin 328ms.
Ich habe absolut keinen Plan, wie ich den C++ Code optimieren kann geschweige denn, wie ich VS optimal einstellen kann.
Hier der C++ Code:
// Leibniz-PI.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <limits>
#include <ctime>
using namespace std;
typedef std::numeric_limits< double > dbl;
double Leibniz_PI(int n)
{
double fPI;
int k;
fPI = 0.0;
for (k = 0; k < n; k++) {
fPI += (pow(-1, k)) / (2 * k + 1);
}
return 4 * fPI;
}
void main()
{
clock_t begin = clock();
double fResult = Leibniz_PI(10000000);
clock_t end = clock();
double elapsed_msecs = double(end - begin) / CLOCKS_PER_SEC * 1000.0;
cout.precision(dbl::max_digits10);
cout << "Pi: " << fResult << '\t' << elapsed_msecs << " ms" << endl;
cin.get();
}
Alles anzeigen
Keine Ahnung, wie ich die Zeit als x64 messen kann...
Wenn interesse besteht, kann ich die kompilierte EXE hochladen.
@Andy: auf meinem Schleppi -> Intel i5 @2,5 GHz
Mit FreeBasic komme ich auf 1136.025325860828 ms für 10.000.000 Iterationen -> Intel i5-4300U @ 2594 MHz
Der generierte Assembler Code:
.globl _LEIBNIZ_PI@4
_LEIBNIZ_PI@4:
push ebp
mov ebp, esp
sub esp, 24
mov dword ptr [ebp-8], 0
mov dword ptr [ebp-4], 0
.Lt_0004:
mov dword ptr [ebp-12], 0
movlpd xmm7, [_Lt_000B]
movlpd [ebp-20], xmm7
mov dword ptr [ebp-12], 0
mov eax, dword ptr [ebp+8]
add eax, 4294967295
mov dword ptr [ebp-24], eax
jmp .Lt_0007
.Lt_000A:
mov eax, dword ptr [ebp-12]
and eax, 0xFFFF
cvtsi2sd xmm6, eax
mov eax, dword ptr [ebp-12]
shr eax, 16
cvtsi2sd xmm7, eax
mulsd xmm7, qword ptr [_Lt_000E]
addsd xmm6, xmm7
sub esp, 8
movlpd [esp], xmm6
push dword ptr [_Lt_000C+4]
push dword ptr [_Lt_000C]
call _pow
add esp, 16
mov eax, dword ptr [ebp-12]
shl eax, 1
inc eax
mov ecx, eax
and ecx, 0xFFFF
cvtsi2sd xmm6, ecx
mov ecx, eax
shr ecx, 16
cvtsi2sd xmm7, ecx
mulsd xmm7, qword ptr [_Lt_000E]
addsd xmm6, xmm7
sub esp, 8
fstp qword ptr [esp]
movlpd xmm0, qword ptr [esp]
add esp, 8
divsd xmm0, xmm6
addsd xmm0, qword ptr [ebp-20]
movlpd [ebp-20], xmm0
.Lt_0008:
inc dword ptr [ebp-12]
.Lt_0007:
mov eax, dword ptr [ebp-24]
cmp dword ptr [ebp-12], eax
jbe .Lt_000A
.Lt_0009:
movlpd xmm0, [_Lt_000D]
mulsd xmm0, qword ptr [ebp-20]
movlpd [ebp-8], xmm0
.Lt_0005:
fld qword ptr [ebp-8]
mov esp, ebp
pop ebp
ret 4
.balign 16
Alles anzeigen
FB Code:
Function Leibniz_PI(n As UInteger) As Double
Dim As Double fPI = 0.0
For k As UInteger = 0 To n - 1
fPI += (-1)^k / (2 * k + 1)
Next
Return 4 * fPI
End Function
Dim As UInteger iterations = 10000000
Dim As Double fTimer = Timer
Print Leibniz_PI(iterations), 1000 * (Timer - fTimer) & " ms for " & iterations & " iterations."
Sleep
Alles anzeigen
Falls der "AMIGA" hier für jemand ein Begriff ist
Da sage ich doch nur: "AAAAAAAAAAAAMMMMMMMMMMMMMIIIIIIIIIIIIIIIIIGGGGGGGGGGGGGAAAAAAAAAAAAAA" ![]()
Sorry @AspirinJunkie - ich hatte deine Version nicht getestet und mir auch nicht näher angeschaut.
Das hier sollte helfen: https://www.autoitscript.com/forum/topic/153659-stringsplit-using-comma-but-with-additional-options/?do=findComment&comment=1107168
Musst nur das Komma durch Semikolon ersetzen.
Meine Meinung ist, dass ein Compiler nur so gut ist, wie sein Programmierer und somit schließt sich der Kreis wieder.
Wenn ich ein Programm schreibe und die Exe "schnell" genug arbeitet, dann hat der Compiler seine Arbeit ordentlich erledigt. Für die meisten Fälle trifft das auch zu.
Begibt man sich z.B. in die "brotlose Kunst" (grafische Datenverarbeitung), so ist noch potential vorhanden den Code mit eigenen Assembler Routinen zu optimieren. Das habe ich gemerkt, wie ich in FreeBasic einiges gebastelt und einige Funktionen direkt in Inline ASM hinzugefügt habe -> mit relativ wenig Aufwand einiges an Performance herausgeholt.
Ich weiß nicht, ob man den optimalen Compiler bauen kann, der je nach Anwendung den effizientesten Code produziert, aber wird auch nur für spezielle Anwendungen eher nötig sein. Ich kenne mich kaum in Compilerbau aus...
Abgesehen davon gilt noch das Mooresche Gesetz und warum soll man da noch den Code optimieren denkt sich der eine oder andere Coder!?!
Wenn ich z.B. mit einer Interpreter Sprache wie AutoIt Applikationen schreiben, die relativ "schnell" arbeiten, dann benötige ich nicht zwingend einen hoch optimierten Code, der einige Millisekunden schneller arbeitet.