Kysymys:
Kuinka selvittää, onko tietty .NET-kokoonpano kirjoitettu C #: llä tai F #: lla?
Samantha
2018-04-06 14:13:20 UTC
view on stackexchange narkive permalink

Tämän kysymyksen motiivi on, että käytin JetBrains dotPeek -komennolla dekoodaamaan F #: ään kirjoitetun .exe-tiedoston, mutta lähtöprojektihakemisto tuotti C # -koodin.

Miksi F # -kokoonpanon purkaminen tuottaa C # -koodia?

Tiedän, että molemmat kielet saavat JIT-käännöksen MSIL: stä natiivikoodiksi, mikä saattaa vaikeuttaa alkuperäisen kielen lopullisen sanomista.

Onko tästä huolimatta luotettavia menetelmiä erottamalla C # -binaarit F #: stä staattisen analyysin avulla? Dynaaminen analyysi?

üks vastaus:
Paweł Łukasik
2018-04-06 15:01:43 UTC
view on stackexchange narkive permalink

Miksi F # -kokoonpanon purkaminen tuottaa C # -koodia?

Ei. Se tuottaa IL-koodin, joka voidaan sitten tulkita C #, F # tai VB.NET. dotPeek ei salli sinun käyttää mitään muuta kieltä esikatseluun, mutta esimerkiksi dnSpy, ILSpy avulla voit valita suosikkikielesi. Mietin vain, onko olemassa työkaluja, jotka sallivat F #: n. Etkö ole varma / ei ole nähnyt sellaista.

Onko tästä huolimatta luotettavia menetelmiä erottaa C # -binaarit F #: stä staattisen analyysin avulla? Dynaaminen analyysi?

On joitain vihjeitä, jotka voivat ohjata sinua. Tarkista viitteet. Jos jokin viittaa kohtaan FSharp.Core , se kirjoitettiin todennäköisesti F #: lla. Toisaalta, jos se ei todennäköisesti ole, se ei ollut :)

F #: n dll-tiedostoissa on yleensä paljon määritteitä, jotka on sijoitettu luokkiin, kuten [FSharpInterfaceDataVersion] tai [CompilationMappingAttribute ] käytetään. Tarkista ne.

On vielä yksi asia. F # kääntäjä pystyy käyttämään hännän rekursiota luomalla tailcall-opkoodin, mikä ei ole C #: n tapaus (ainakin toistaiseksi). Se voisi olla indikaattori. Mutta se voidaan myös muotoilla manuaalisesti käyttämään sitä sen jälkeen, kun se on kirjoitettu kokonaan C #: ään.



Tämä Q & A käännettiin automaattisesti englanniksi.Alkuperäinen sisältö on saatavilla stackexchange-palvelussa, jota kiitämme cc by-sa 3.0-lisenssistä, jolla sitä jaetaan.
Loading...