【プログラミング】機械語とかアセンブリとか低レベルレイヤーに詳しいプログラマーいる?
■ このスレッドは過去ログ倉庫に格納されています
今の現状でもC++とかで書かれた1つのプログラムでLinuxやMacやWindowsのそれぞれのOSに対応することができないであってる??? C++からコンパイルされる機械語やアセンブラは単一でそれぞれのOSで違う訳され方される的な >>8
C#とかなら一度ilに変換してそのOSの中のランタイムがそれぞれの機械語に翻訳してるってのは知ってる >>11
C#はわかるけどC++は今どうなってるのか教えてほしい そもそもC#とC++で作ったプログラムの動作方法が違うのになんで比較したがるのか >>14
いやしたがるじゃなくて今C++がどうやって動いてクロスプラットフォームに対応してるのかしてないのかが知りたい エミュレータの上で実行したらどこででも動くんじゃね >>17
それでもいいけどC#で機械語に翻訳できるコンパイラ作れば最強じゃね?って思ってきた >>18
そりゃそうだわな
Blenderとかの最近クロスプラットフォームのソフトもそうやってできてんのかな?
最近増えてるけど >>22
まぁまだ技術力が足りなくて作れないけどね
C++だとどうなんだろ?って思ってさ >>15
ざっくりいうとソースコードは共通でコンパイル時に生成される機械語が違う
だから標準ライブラリの範囲とかだとOSが違っても同じコードで同じように動く
その標準ライブラリが何してるかというとOSごとに異なるシステムコールやAPI呼び出しを行ってる
標準以外のライブラリも同様にOSごとの差異を吸収するように作るから、クロスプラットフォーム対応のライブラリ使う場合は概ね共通のソースが使える
吸収しきれない場合は何かしらの注釈がついてたりする コンパイラがそれぞれのプラットフォーム向けにバイナリ吐いてるんじゃないの? まず基本情報くらいは取ろう?
前提知識が終わってる 高レベル言語→C++とか
↓それぞれの環境ごとのコンパイラ、インタープリタ
それぞれの環境ごとの機械語(アセンブリ言語) >>25
>>26
なるほどコンパイラか…
つまりC#から機械語もしくはアセンブリ言語へのコンパイラを作ればC#でもローレベルレイヤー(カーネルだのドライバだの)を扱えるってことか >>28
JavaはC#と一緒でJORだったかのランタイム上でILからコンパイルされてたような気がする >>31
作ればっていうか、はたしてそれがC#かというと謎
カーネルだのドライバだのはアドレスを直接叩く必要があるがC#はそんなこと許さないし 5chブラウザ投げ出すレベルだと普通に途中で投げ出すだろうけど >>35
許されないだけでライブラリとして作っちゃえばいいのでは?と素人ながら思うけどどうなのだろ? メモリ管理関連の構文や機能を全てgcに任せてるのでそこらへんをちゃんと実装しなきゃね
そうするとそれはもうC#ではないんだけどね >>38
そのライブラリはアセンブラなりC/C++なりで書くことになるよ
C#からネイティブAPI呼び出しを許すからできなくはないけど >>37
まぁまだ先よ
今作成中の5chブラウザもプログラミング歴半年くらいだからね
多分コンパイラ作るぞ~って人は歴20年とかの猛者なんじゃね?
20代で作ってる人いる? プログラミングスレってなんでこんなにマウント取りたがり湧くんだろうな
普通に優しく教えたらいいのに
こんな奴ばっかでうざいからIT辞めた >>39
それはまぁしょうがない部分ではある
UnityでもGCを無くしたりNativeArrayを使うことでBURSTコンパイルさせるという仕様が追加されたりしてるし
カーネルやドライバを作りたい人だけが意識すればいいかなとは思う >>41
お前はもっと昔からいるだろ
シンセガイジやってたし >>42
ワロタwww
偉そうに言ってるやつには笑顔でそうですね~って言ってて裏では笑っとけばいいねん >>52
公式がそういった仕組みをドットネットランタイムに追加しない限りは無理 >>47
最悪C++でコンパイラは書いても問題ないとは思う
C#を機械語やアセンブリに変換できるなら >>50
マジ?コンパイラ作る大学とかあんの?
どこの大学? >>38
それでいい
共通部分を純粋なコードで書いて環境依存部分を別ライブラリにするのはよくある
移植の際は環境依存部分を作って極力共通部分はノータッチで済むのが望ましい
クラスプラットフォーム環境がやってるのはざっくりいうとそういうこと >>53
そうなのか…
まだ時期尚早って感じなのかなぁ >>42
優しく教えられる人はこの時間は会社で働いてるだろ てかこれだけ教えてくれるだけでも優しいと思わないとダメだよね
普通の人ならめんどくさいとかで教えてくれない まず言葉を正しく使うところから始めろ
なんだよ1つのプログラムって 検索に行き詰まったら プリプロセッサ でggろう
C#から機械語にするのはコンパイラ
C#からアセンブラ(ニモニック)を生成するのはプリプロセッサ >>64
同一バイナリって意味じゃね?
こういうのって読み取れないとプログラマと一般人の会話って成り立たんと思う 同一バイナリで異なるプラットフォームで動くプログラムは存在しない
絶対にランタイム挟む必要がある >>67
ソースという意味ですかね1つのプログラムというのは 1つのプログラムって俺もバイナリの事と思ってスレ見てたけどソースなんだ >>69
マジかw
ソースという意味ならなんとかなるやん
LinuxにC#のランタイム入れるだけ >>71
C++の話ですが…
C#は1つのソース(プログラム)で.NETRuntimeで機械語に翻訳されるのはわかる >>69
C++はマクロで条件分岐させてプラットフォーム毎に必要な処理を書くことで一つのソースコードから複数プラットフォームへのコンパイルが出来る
ライブラリがそのへんの差異を吸収してることも多いから基本は1ソースから複数プラットフォームへのコンパイルが出来る
その他のコンパイル言語も同様 >>74
ふむふむ
#ifdef WINDOWSみたいな感じで共用化できない部分はそれぞれに追加する感じか
.NET MAUIもそんな感じだわ >>1を消す方法
(プログラ|Linux).*(初心者|欠点|イベント|アフィ|信者|JavaScript|You|チャンネル|利点|Linux)|(初心者|欠点|イベント|アフィ|信者|JavaScript|You|チャンネル|利点|Linux).*プログラ|Python|Unity|VBA|Mac[^a-zA-Z]|VisualStudio わりと勉強になるスレ
>>42
マウント取るだけで教えてくれるとかクソ優しいし燃えてない時だろ
忙しいんだよ死ねって殺意が滲み出てて最悪口に出るのが現実じゃん ライブラリの関係でC++/CLIでマネージからネイティブ使うのやったなぁ…
そう言うの一つの環境でできちゃうのはC#の利点ではあるな OS依存かつCPU依存
特に処理速度上げるためにSIMDとか使うならCPUの機能には気を使う必要あり
一度vsとかでC++コンパイル時にアセンブリと機械語を吐き出してみるといいかも ■ このスレッドは過去ログ倉庫に格納されています