- 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);
}
}
Soul_re@ver 15.03.2016 11:36 # 0
kegdan 15.03.2016 12:05 # 0
https://ideone.com/GC3j5M
nihau 15.03.2016 12:52 # 0
guest 15.03.2016 17:59 # +2
Кого вообще кроме лоадера должно волновать что меин еще и не просто меин?
Soul_re@ver 15.03.2016 18:05 # −1
guest 15.03.2016 18:08 # 0
Вот такая программа у меня собралась и писала мне букву "d" пока не упала
#include <stdio.h>
void main();
void main() {
printf("dd");
main();
}
Soul_re@ver 15.03.2016 18:50 # −1
guest 15.03.2016 18:51 # +4
bormand 15.03.2016 22:36 # 0
kegdan 15.03.2016 22:43 # 0
В си 100% функция как функция
https://ideone.com/mB7uba
Soul_re@ver 15.03.2016 23:15 # 0
Soul_re@ver 15.03.2016 23:03 # 0
guest 18.03.2016 13:21 # 0
ебать ты старый
kegdan 18.03.2016 13:27 # 0
guest 18.03.2016 13:29 # +2
ты тоже пишешь под SunOS 2.0?
inkanus-gray 16.03.2016 11:41 # 0
Кроме того, что некий код, с которого стартует программа, в определённый момент вызывает main, больше ничем main от остальных функций не отличается.
Более того, бывают программы вообще без функции main. В некоторых библиотеках «главная» функция называется WinMain или типа того.
Единственная тонкость, которая может потребовать поддержки компилятора — это то, что main может быть объявлена с аргументами argc, argv etc., а может и без них, и компилятор должен знать, какой вариант используется. Однако, для соглашения cdecl это не важно, ведь стек чистится вызывающим кодом, а значит, он может всегда заталкивать argc, argv, а использовать их или нет — дело мейна.
*****
http://stackoverflow.com/questions/13871617/winmain-and-main-in-c-extended
inkanus-gray 16.03.2016 11:53 # 0
«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.»
Soul_re@ver 16.03.2016 12:22 # 0
guest 02.06.2017 14:34 # 0
Vindicar 15.03.2016 15:13 # +1
guest 15.03.2016 17:59 # 0
а что он main обернул -- так это правильно
первые 742 раза exception не приведет к выключению, а потом приведет к Stack Overflow
по-моему логично
3_dar 15.03.2016 19:19 # 0
guest 15.03.2016 19:22 # 0
А в момент компиляции C# кода в IL -- не думаю
Я вообще думаю что cs (как и javac) ничо не оптимизирует
Но это я так думаю
А на самом деле как -- не знаю
Надо смотреть получившийся IL код
kegdan 15.03.2016 19:38 # +1
>> Хвостовая рекурсия разве не преобразуется в цикл?
в шарпе - таки нет
bormand 15.03.2016 22:19 # 0
kegdan 15.03.2016 22:20 # 0
bormand 15.03.2016 22:22 # 0
kegdan 15.03.2016 22:27 # 0
На самом деле в cil есть оптимизация хвостовой рекурсии, юзается из F# хз, почему в шарп не завезли, может в 6 шарпе уже. Во всяком случает она элементарно вставляется добавлением инструкции
tail.
перед call тра-ля-ля в cil руками
3.14159265 15.03.2016 22:32 # +2
Дешевая отмазка если честно. Вот инлайны же трейсам не мешают.
bormand 15.03.2016 23:01 # +1
З.Ы. С инлайнами немного другая ситуация - там всегда можно однозначно восстановить трейс, дорисовав фейковые фреймы.
3.14159265 15.03.2016 23:04 # 0
Накуя?
Во-1, сломает обратную совместимость.
Во-2, любой мало-мальски продвинутый jit умеет выпиливать фреймы при оптимизации и самое главное - впиливать их обратно при деоптимизации.
bormand 15.03.2016 23:06 # 0
3.14159265 15.03.2016 23:10 # 0
TCO => цикл.
В циклах есть счётчики. Они практически бесплатны.
Даже можно эмулировать переполнения стека, для создания комфорта быдлокодерам.
1024-- 15.03.2016 23:18 # 0
3.14159265 16.03.2016 13:12 # 0
kegdan 15.03.2016 22:34 # 0
3_dar 15.03.2016 22:44 # 0
С трудом верится что нет.
Иначе как объяснить быстродействие почти как у C/C++
Знаю что Java даже деление на 2 на сдвиги не заменяет.
kegdan 15.03.2016 22:45 # −1
Кислород, это ты?
Я не силен в шифрах, говори как есть
Xom94ok 15.03.2016 23:52 # 0
> Кислород, это ты?
Опция компилятора, включает оптимизацию кода
-O2
Optimize even more. GCC performs nearly all supported optimizations that do not involve a space-speed tradeoff. <...>
Видать, вопрос был о том, можно ли и как заставить JIT компилировать медленный CIL в натив, ещё более быстрый, нежели умолчательный.
bormand 16.03.2016 00:02 # +6
kegdan 16.03.2016 06:45 # +1
The average level of optimization, when your mind are already got irreparable damage, and the universe and the laws of physics - not yet
Kislorod 16.03.2016 00:03 # −2
kegdan 16.03.2016 06:49 # 0
/optimize
Но гораздо удобнее просто поставить в vs крыжик "оптимизировать код"
Kislorod 16.03.2016 00:07 # −2
Vindicar 16.03.2016 00:32 # +4
guest 18.03.2016 10:12 # 0
у вас в вендах это называется /Ox
kegdan 18.03.2016 11:01 # 0
Я больше тебе скажу - я вообще не силен в компиляции руками
guest 18.03.2016 17:29 # 0
поди и make файлы никогда не пейсал? все больше msbuildoм?
3.14159265 15.03.2016 22:45 # 0
Ну...
Зато как веско звучит это слово: "знаю".hotspot давным-давно даже деления не степеней двойки заменяет на умножение.
3_dar 15.03.2016 23:48 # 0
Видел как говнокодеры прогроммисты на Java оптимизировали код заменой делений на шифты.
И первая ссылка на stackoverflow говорит что конпелятор это не оптимизирует.
Оттуда наверное и заблуждение.
3_dar 16.03.2016 00:15 # 0
3.14159265 16.03.2016 13:07 # +4
Ты меня с сёмой перепутал.
>Видел как прогроммисты на 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
3_14dar 17.03.2016 20:27 # 0
Да нет, все правильно сделал.
guest 18.03.2016 03:33 # 0
javac ничего ВАЩЕ неоптимизайит
оптимайзит jit
bormand 18.03.2016 07:17 # 0
guest 18.03.2016 10:11 # 0
и if(false) выпиливает
inkanus-gray 18.03.2016 12:54 # 0
kegdan 18.03.2016 13:15 # −1
guest 18.03.2016 13:15 # 0
оптимизировать нужно под конкретную архитектуру
под MIPS, SPARC, x86 и ARM могут быть совсем разные оптимизации
потому логичнее делать это на kit
3.14159265 18.03.2016 14:52 # +2
>javac ничего ВАЩЕ неоптимизайит
Нихуя себе, ЧТО ПРАВДА??? Спасибо что ты мне глаза открыл.
http://govnokod.ru/19627#comment316438 2016-03-16T14:07:58+04:00 javac - это просто конвертер исходников в специальный бинарный формат. Такой архиватор с потерями
guest 18.03.2016 16:35 # +2
guest 30.05.2017 03:10 # 0
Kislorod 16.03.2016 00:04 # −3