@Fsharp_chat

Страница 351 из 772
Anna
09.10.2017
13:11:07
Vasily
09.10.2017
13:11:23
Вообще, в с++ у main сигнатура должна инт возвращать

Поэтому и в f# все ок

Google
Vasily
09.10.2017
13:11:47
В c# просто сделали сахар

Он скорее всего в компиляторе на void 0 возвращает для entry point

Nikolay
09.10.2017
13:12:48
Vasily
09.10.2017
13:13:00
Ну как в другом

Nikolay
09.10.2017
13:14:33
Я могу предположить, что для EntryPoint в таком случае генерируется отдельный метод с сигнатурой int, который прописывается как EntryPoint, и внутри вызывает Main. Но тогда при загрузке сборки, что вернёт свойство EntryPoint?

Vasily
09.10.2017
13:14:59
https://stackoverflow.com/questions/2364117/why-does-c-sharp-use-implicit-void-main

Нам для вызова точки входа все равно нужен int main

как ни крути

Nikolay
09.10.2017
13:18:41
Я так и не увидел конкретики

Vasily
09.10.2017
13:19:13
Конкретика тут скорее в контексте вызова из неуправляемого кода

Я думаю, это от особенностей запуска процессов в нативном коде идет

Мы всегда должны возвращать число

Google
Nikolay
09.10.2017
13:25:52
В общем я так и не понял. Сейчас посмотрел, в EntryPoint указана явно функция, возвращающая Void

Но у меня peverify ругается на такое

Evgeniy
09.10.2017
13:29:08
Nikolay @fvnever Дон ответил. :)

Friedrich
09.10.2017
13:29:17
Довольно лаконично.

@Dolfik, если уж ты уже начал с этим возиться, можешь глянуть компиляторный API в https://github.com/Microsoft/visualfsharp/tree/master/src/absil?

Хотя, блин, там только инструменты для парсинга и подготовки байтиков.

Friedrich
09.10.2017
13:30:39
Похоже, что нам весь ProvidedTypes.fs придётся переписывать на этих API.

А это три тыщи строк мутного кода.

Nikolay
09.10.2017
13:32:08
Я не уверен, что там есть то, что нам нужно

Friedrich
09.10.2017
13:32:15
К тому же похоже, что они сильно завязаны на рефлекшен.

Я не уверен, что там есть то, что нам нужно
В том-то и дело, что напрямую обозначенные проблемы не решаются этим absil.

Nikolay
09.10.2017
13:33:00
Можно легко определить, умеет ли эта штука генерировать сборки



Friedrich
09.10.2017
13:33:33
https://github.com/Microsoft/visualfsharp/blob/master/src/absil/ilwrite.fsi#L33

Nikolay
09.10.2017
13:33:37
Вот это долнжо быть где-то в коде

Friedrich
09.10.2017
13:33:55
Судя по интерфейсу — умеет :)

Nikolay
09.10.2017
13:34:02
Нам же ещё нужно метадату писать, меня это волнует

Google
Nikolay
09.10.2017
13:34:20
IL получить это вообще не проблема

Метадата нужна для автодополнения

Ну и вообще для многих штук

Сборки устроены так, что без метаданных не будут работать. В сборках IL код идёт одной простынёй, а в Method Definition указывается смещение, по которому лежит IL код данного метода

Friedrich
09.10.2017
13:37:49
Мне пришлось, короче, очень сильно напрячь мозги, но я нашёл.

Friedrich
09.10.2017
13:38:03
https://github.com/Microsoft/visualfsharp/blob/81d162ce55bd4c4c8bcd1eb2a0832c442888ec0e/src/absil/ilwrite.fs#L3869

Nikolay
09.10.2017
13:38:36
write (Some msdosHeaderChunk.addr) os "msdos header" msdosHeader

Да, оно

Friedrich
09.10.2017
13:38:49
Может быть, мне не поверят, но 0x4550 — это действительно "PE" :)

Но код там совершенно хтонический, конечно.

Дон над нами издевается :)

Nikolay
09.10.2017
13:40:38
https://github.com/Microsoft/visualfsharp/blob/81d162ce55bd4c4c8bcd1eb2a0832c442888ec0e/src/absil/ilwrite.fs#L3536

Вот он!

Vasily
09.10.2017
13:40:48
Ну для того, чтобы в этом коде разобраться, надо еще разобраться в структуре PE заголовков и файлов

Ну и почитать спеки по поводу того, как .net сборки сохраняются

Nikolay
09.10.2017
13:41:21
Это сильно надо упороться

Vasily
09.10.2017
13:41:29
Сильно, кто ж спорит

Friedrich
09.10.2017
13:41:32
Это сильно надо упороться
Мне казалось, ты уже ._.

Vasily
09.10.2017
13:41:42
Он только начал

Google
Friedrich
09.10.2017
13:41:46
Уже разобрался, в смысле ?

Nikolay
09.10.2017
13:41:48
Я упоролся используя "готовый" System.Reflection.Metadata

Ну, у меня начали появляться магические константы в коде

А это - путь к безумию

https://github.com/Dolfik1/AssemblyGenerator/blob/master/src/AssemblyGenerator/AssemblyGenerator.Helpers.cs#L39

https://github.com/Dolfik1/AssemblyGenerator/blob/master/src/AssemblyGenerator/AssemblyGenerator.Helpers.cs#L102

Friedrich
09.10.2017
13:42:42
Ладно, надо думать, что делать дальше.

Nikolay
09.10.2017
13:43:33
Брать на неделю отпуск, распечатывать ECMA-335, принимать LSD, и писать код.

Friedrich
09.10.2017
13:43:42
Погоди ты с кодом!

Сначала нужен план™.

В идеале хотелось бы хотя бы в общих чертах его согласовать с основной командой разработки F#. Чтобы, в случае, если у нас чего-то получится дельное, это не было бы пустой работой.

Nikolay
09.10.2017
13:45:39
Нужно изучить этого демона, ilwrite

Friedrich
09.10.2017
13:46:22
Ну, например, план может быть таким: - мы вытаскиваем этот ILWriter из F#-компилятора в отдельную либу - (частично) переводим ProvidedTypes.fs на API этого райтера - показываем результаты Дону и спрашиваем — то или не то

Nikolay
09.10.2017
13:46:24
Впринципе можно на нём писать, но один я не справлюсь

Фридрих, я думаю это слишком низкоуровневое

С другой стороны, мы можем подглядывать в System.Reflection.Metadata

Но тогда будем изобретать велосипед

Vasily
09.10.2017
13:48:29
Ваще код прикольный, конечно, там

Friedrich
09.10.2017
13:50:19
Блин, надо у Дона уточнять план. Браться нам за эту задачу или нет?

Но, если я начну второй раз писать то же самое, это будет тупо!

Google
Friedrich
09.10.2017
13:50:51
Да и я многословно пишу, так что меня, кажется, никто полностью не читает :(

Vasily
09.10.2017
13:51:01
Да сделайте вы нормальные типы под структуру файла

Для начала

Friedrich
09.10.2017
13:51:15
Кажись, под это как раз есть типы.

Roman
09.10.2017
13:51:15
Блин, надо у Дона уточнять план. Браться нам за эту задачу или нет?
Пока план такой https://github.com/Microsoft/visualfsharp/milestone/11 xD

Friedrich
09.10.2017
13:51:40
Пока план такой https://github.com/Microsoft/visualfsharp/milestone/11 xD
Может, просто он сам хотел взяться

Roman
09.10.2017
13:51:42
Соврал. https://github.com/Microsoft/visualfsharp/issues?q=is%3Aopen+is%3Aissue+label%3AArea-TypeProviders

Friedrich
09.10.2017
13:51:53
Дон сейчас много пилит именно в провайдерах.

Friedrich
09.10.2017
13:52:42
@nevoroman жаль отрывать тебя, но не можешь немножко нас проконсультировать по кишкам провайдеров, если будет минутка?

Слушайте, а я понял, зачем нужны .fsi-файлы!

Vasily
09.10.2017
13:53:27
Чтобы не компилить?

Nikolay
09.10.2017
13:53:31
Ура, до него дошло! :D

Vasily
09.10.2017
13:53:35
в дллки?

Friedrich
09.10.2017
13:53:36
Когда ты пишешь в .fs по пять тыщ строк, интерфейс действительно становится удобно смотреть в отдельном файле ?

Vasily
09.10.2017
13:53:55
А, ты про fsx

Friedrich
09.10.2017
13:53:58
Чтобы не компилить?
Ты перепутал .fsi и .fsx

Я всё правильно сказал, а ты перепутал.

Скрипты — это .fsx. Интерфейсы модулей — это .fsi.

Страница 351 из 772