- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
static void Main(string[] args)
{
try
{
watcher.Path = TargetPath;
watcher.Created += Watcher_Created;
watcher.Renamed += Watcher_Created;
watcher.EnableRaisingEvents = true;
logger.Info("Сервис запущен.");
System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
}
catch(Exception ex)
{
logger.Error(ex, "Global error", null);
Main(null);
}
}
https://ideone.com/GC3j5M
Кого вообще кроме лоадера должно волновать что меин еще и не просто меин?
Вот такая программа у меня собралась и писала мне букву "d" пока не упала
#include <stdio.h>
void main();
void main() {
printf("dd");
main();
}
В си 100% функция как функция
https://ideone.com/mB7uba
ебать ты старый
ты тоже пишешь под SunOS 2.0?
Кроме того, что некий код, с которого стартует программа, в определённый момент вызывает main, больше ничем main от остальных функций не отличается.
Более того, бывают программы вообще без функции main. В некоторых библиотеках «главная» функция называется WinMain или типа того.
Единственная тонкость, которая может потребовать поддержки компилятора — это то, что main может быть объявлена с аргументами argc, argv etc., а может и без них, и компилятор должен знать, какой вариант используется. Однако, для соглашения cdecl это не важно, ведь стек чистится вызывающим кодом, а значит, он может всегда заталкивать argc, argv, а использовать их или нет — дело мейна.
*****
http://stackoverflow.com/questions/13871617/winmain-and-main-in-c-extended
«However, the de facto Windows standard for the encoding of the main arguments is Windows ANSI, which does not support general Windows filenames (such as, for a Norwegian Windows installation, filenames with Greek or Cyrillic characters). Therefore Microsoft chose to extend the C and C++ languages with a Windows-specific startup function called wmain, which has wide character based arguments encoded as UTF-16, which can represent any filename.»
а что он main обернул -- так это правильно
первые 742 раза exception не приведет к выключению, а потом приведет к Stack Overflow
по-моему логично
А в момент компиляции C# кода в IL -- не думаю
Я вообще думаю что cs (как и javac) ничо не оптимизирует
Но это я так думаю
А на самом деле как -- не знаю
Надо смотреть получившийся IL код
>> Хвостовая рекурсия разве не преобразуется в цикл?
в шарпе - таки нет
На самом деле в cil есть оптимизация хвостовой рекурсии, юзается из F# хз, почему в шарп не завезли, может в 6 шарпе уже. Во всяком случает она элементарно вставляется добавлением инструкции
tail.
перед call тра-ля-ля в cil руками
Дешевая отмазка если честно. Вот инлайны же трейсам не мешают.
З.Ы. С инлайнами немного другая ситуация - там всегда можно однозначно восстановить трейс, дорисовав фейковые фреймы.
Накуя?
Во-1, сломает обратную совместимость.
Во-2, любой мало-мальски продвинутый jit умеет выпиливать фреймы при оптимизации и самое главное - впиливать их обратно при деоптимизации.
TCO => цикл.
В циклах есть счётчики. Они практически бесплатны.
Даже можно эмулировать переполнения стека, для создания комфорта быдлокодерам.
С трудом верится что нет.
Иначе как объяснить быстродействие почти как у C/C++
Знаю что Java даже деление на 2 на сдвиги не заменяет.
Кислород, это ты?
Я не силен в шифрах, говори как есть
> Кислород, это ты?
Опция компилятора, включает оптимизацию кода
-O2
Optimize even more. GCC performs nearly all supported optimizations that do not involve a space-speed tradeoff. <...>
Видать, вопрос был о том, можно ли и как заставить JIT компилировать медленный CIL в натив, ещё более быстрый, нежели умолчательный.
The average level of optimization, when your mind are already got irreparable damage, and the universe and the laws of physics - not yet
/optimize
Но гораздо удобнее просто поставить в vs крыжик "оптимизировать код"
у вас в вендах это называется /Ox
Я больше тебе скажу - я вообще не силен в компиляции руками
поди и make файлы никогда не пейсал? все больше msbuildoм?
Ну...
Зато как веско звучит это слово: "знаю".hotspot давным-давно даже деления не степеней двойки заменяет на умножение.
Видел как говнокодеры прогроммисты на Java оптимизировали код заменой делений на шифты.
И первая ссылка на stackoverflow говорит что конпелятор это не оптимизирует.
Оттуда наверное и заблуждение.
Ты меня с сёмой перепутал.
>Видел как прогроммисты на Java оптимизировали код заменой делений на шифты.
Тут вопрос что подразумевается под Java. Она состоит из 2х частей javac и hotspot. Обе части заменяемы.
javac - это просто конвертер исходников в специальный бинарный формат. Такой архиватор с потерями, который херит комменты и форматирование. Есть и разархиватор - jad например. Понятно что он ничего не "потимизирует" потому что конфертер.
hotspot - симбиоз интерпретатора и jitа.
По дефолту Java = javac + hotspot (jit)
>И первая ссылка на stackoverflow говорит что конпелятор это не оптимизирует.
Здесь http://govnokod.ru/15393#comment220818 уже давал:
http://hg.openjdk.java.net/jdk8/jdk8/hotspot/rev/f3de1255b035
Сейчас дополню еще одним забавным патчем, доказывающим что не всегда "оптимизированный" код быстрее наивного:
http://hg.openjdk.java.net/jdk8/jdk8/hotspot/rev/ae065c367d93
Да нет, все правильно сделал.
javac ничего ВАЩЕ неоптимизайит
оптимайзит jit
и if(false) выпиливает
оптимизировать нужно под конкретную архитектуру
под MIPS, SPARC, x86 и ARM могут быть совсем разные оптимизации
потому логичнее делать это на kit
>javac ничего ВАЩЕ неоптимизайит
Нихуя себе, ЧТО ПРАВДА??? Спасибо что ты мне глаза открыл.
http://govnokod.ru/19627#comment316438 2016-03-16T14:07:58+04:00 javac - это просто конвертер исходников в специальный бинарный формат. Такой архиватор с потерями