はてなキーワード: C++とは
型推論はメモリ節約のためじゃなく型エラーを出すことで問題を早めに検知できるようにするためにあるんやで。
動的型付け言語使ってたら誰でも「"12" + 3 → "123"(15にする意図のコードだった)」というバグを経験してるやろ。
なんか以前からずっと思ってたんだがRailsというかRuby界隈は宗教というか自己啓発ビジネス臭さえするのがイヤだ
金持ち父さん…とか7つの習慣とか、そういう詐欺のカモっぽい人も多いイメージがある
しかし、Ruby登場当初からやたらとエレガントに書ける、スッと書ける(この「スッ」という表現も詐欺で多い表現なので嫌い)とか、
そんなことは個人的にはどうでも良くて、ソフトウェアを使うユーザーは機能が便利かとかそういう視点でしか見ない、悲しいけど
保守の観点からも美しいソースコードを書こうという意気込みは間違っていない、というか正しいと思う
しかし、プログラマーが美しいコードが書けたと悦に浸る、自己満足におちいっているだけのようにも見えるのが納得いかない、不愉快にさえ思える
C++やJavaのような型のあった時代から、型なんてダセーよな、プレステの方が全然おもしれーよな、を経て、また型に戻ってきてる
型推論云々にかまけてパフォーマンスよりも綺麗なコード、富豪プログラミングからまた元に戻ってきてる
学習コストが高いものほど評価されるような傾向も個人的には感心しない
どうせ同じゴールなのに、そこに辿り着く方法が険しいほど評価されるなんて、プログラマーの美徳の怠惰だのから逆行している
実によろしくない
そういう点ではRustよりもGoやC#の方が評価できる気がする
もちろんRustの守備位置はそこではない気もするので単純比較はおかしいのだけど、ゴールが同じなら自分はC#やJavaで書いて終わらせるのにと思うことがある
別にWebだけでなくコマンドラインでの捨てコードにPHPやJavaScriptも適している
そういう意味ではPythonはやはり強い、Glueだからだろう
正直PHPなんかよりPythonの方が言語としてはおかしい気もするのだけど、正しいとかエレガントが生き残る条件ではないのである
しかし、学習コストとしては低いシェルスクリプトは便利ではあるが流石に古いというか罠が多い気がする
PowerShellの方が使える気がする、少なくともWindowsでは優先的な選択肢になった
生き残るというのはそういうことではないのではないか
とりあえず動くソースコードでそれなりの規模のが欲しければGitHubからcloneしてくればいいんだよなあ。
と言っても、元増田が「gitって何?」のレベルだとそこで話が折れてしまい、
gitとは?バージョン管理とは?ハッシュ値とは?みたいになってしまうので説明する側も辛い。
自分が説明される側でも説明する側でも辛いのは、それだけ専門性が高い分野ではあるのだろうけど。
自分だって自分の専門外のことをそれ専門の人にまくし立てられて説明されるの辛いw
ソフトウェアの命名規則が天邪鬼でなければ、スタート地点はmain.cppみたいに類推もできるはず。
デバッガでメインルーチンからブレークポイント打つなりしてポチポチ動作させたり変数の中身の変化を確認していく。
色々なクラスとかソースコードを眺めて全体像を把握し、そこからコアとなる機能、自分が知りたい箇所を目指す。
ソースコードがある、デバッグ情報があるなら、当たり前だが変数名や関数名があるので類推しやすい。
(Javaとかで難読化してると、逆コンパイルできても変数名や関数名は分からなくされていて読み辛かったりする。
いや、だから難読化なんだけどwでも、.classファイルしかなくてもそれで中の肝心のアルゴリズムは読めてしまったりする)
自分には大した技術はないと自分でも思ってるけど、普段やってることをまったく知らない人に説明するのは難しいだろうね。
というか、できる人やプロだって新しいビルド方法なんて分からない。
C++ならcmakeやpremakeは分かるけど、ninjaってなんじゃ?みたいなw
そこで新しい道具に手を出して躓くことも多々あるし、
Visual C++を昔触っていて、しばらく離れていた時代に取り残された人間なのだが、
これからはPythonも勉強しなきゃなと思い、本を買ったり、ネットで調べて勉強してみた。
なんというか、もっと色々できるものだと思っていたが、できることが少ないように感じる。
パッケージを知らないだけかもしれないが、パッケージを調べて使えるかなと公式マニュアルを見ながら書いてみて、
自分なりに一番成果が出せてたのは初めて興味を持ったときだろうと思うと泣けてくるが
そして、その分野の当時一位と二位だった走者は、二位が一位になったものの、未だに二社が独占状態である
やはりスタートダッシュ、最初に着手した会社、そして人材の引き抜きやマンパワーで逆転される
そんな分野を諦めきれず、十数年只々様子見してきたKKOの自分であったが、
もう長く生きられなさそうだし、死ぬまでにはなんらかの成果は残したいというか、
もう、その二社の製品を使ってなんか儲けるとかそういうのでええやん、
十数年もこだわるなアホか、という気もしてきたけど、
独自OSまではいかなくても、ハッカーを国家公務員として高給で雇いLinuxをしらみつぶしに解読する
独自のOSを作らなければならないのは、例えばアビオニクスなどのためでもある
ロシアからスホーイの最新機は売ってもらうとしても、ロシア側はアビオニクス、電子機器やセンサー、コンピュータ、そのソフトウェアOSなどを抜きにして売ってくる
ラジコン飛行機とかで、機体だけは売るけどあとは自分でどうにかしてね、みたいな感じである
そうすると寄せ集めだろうがコピーだろうが、その最新スホーイを飛ばすために意図的に空白にされた箇所を埋めなければならない
ワリャーグもそうだったが、多くが欠損した巨大なパズルがあったとして、その欠損個所を埋めるというのは、自分には意外と創造性さえある仕事に思える
欠損個所の周辺から自ずと仕様は決定するが、その中に正解はない
インターフェース、APIの仕様はあるが、中は独自実装するしかないからだ
だから、そこはコピーだろうだが何だろうが埋めて、戦闘機や戦艦を動かすしかない
で、彼らはそれをやってのけたわけだ
航行できる状態になったワリャーグから黄色く塗装されたスホーイをタッチアンドゴーさせた
世界にあの実証実験を見せたのは、自分たちはここまでできるようになった、と見せつける意味がある
アメリカが人工知能でステルス爆撃機をタッチアンドゴーさせたのも同様だ
あれは本当にできるだけ人が介入しない、つまり巨大なラジコン飛行機ではなく、人のように自律した爆撃機が自ら離発着できることを意味する
まあ、コストの問題から後継機はうまくいってないらしいが、金はともかく技術はあるということだ
もちろん、なんらかの中国国民を監視するためのバックドアが仕込まれるのかもしれない
しかし、中国それから台湾なんかも独自CPUに乗り出す時代、特に台湾はマザーボードなどの薄利な仕事から抜け出すチャンスでもある
もっとも、それがARMやAMD、Appleと対抗できるかは未知数だし分からん
ただ、ニッチな分野で生きれば御の字だろう
プログラミング言語Adaだって、比較的最近まで軍事兵器業界では生きていたみたいだ
当然ではあるが、今はCやC++に置き換えられている
ここまで書いて思うのは、やはり軍があるかどうかではないだろうか
疾病対策センターだって、仮想敵国からのバイオ兵器、化学兵器への対策を含んでいる
原発事故があってもアメリカがパックボットをすぐに導入できるのは、ルンバも開発しているiRobotが軍事ロボットのメーカーだからである
大学の研究所で作ったロボットと同じ機能だったとしても、アメリカ側は実戦経験のあるロボットなわけだ
左の人は軍需産業=悪と考えがちだが、軍需産業は敵の兵士に被害を出させることだけが目的ではない、
味方の命を守ること、味方の負傷兵を救うことも同様に軍需産業のカテゴリーに含まれるものであり、
これはレスキュー活動などと十分に被るし、既存のレスキュー活動をより効率的に、よりパワフルにする可能性を秘めている
頭ごなしに~はいけない、と人は考えがちである、自分もそうであろう
うーん
でも非力なマシンで動くって今でも大事なことだと思うんだよなあ
昔、ある天才プログラマーが、その方は今はもう大成功してるんだけど、
その方はわざと非力なマシンを使ってたりして、
非力なマシンで快適に動くようにコードを書くと、最新のマシンでは爆速になったりして、
あと、アーキテクチャに最適化したコードは電力消費が低くなって地球に優しいよね、とか、
そんなことを言う人だったんだけど、
その頃は、というか今でも自分は彼に比べれば富豪というか甘い考えでコード書いたりダウンしたりしているわけだけど、
最近のUnityとかはちょっと富豪すぎないか?という気もしてて、
それは人生の一時期をだらだらゲームエンジン作ったり壊したりぐだぐだやってたことも一因なんだろうけど、
Unityよりはid Techエンジンみたいな方が好感が持てるというか、
ゴールがFPSならFPSに徹底的に特化しないと良くない気がするんだよなあ
UnityでゴミみたいななんちゃってFPSがよくあるけど、Unityの基本機能だけでは足りないのだと思う
まあ、だから他人が作ったアセットとしての機能を買ってきたり、当然Unity上でそのためのコードを書くわけだけど
そういう点では詳しく知らないからなんとも言うべきではないんだろうけど、
Unrealの方が良さそうだよなあ、と思ったりする、C++で書けるみたいだし
ただ、巨人の肩に乗るにしても乗らないにしても、もうFPSを作りたいとか思わなくなってる
なんでだろう
これまで改良はされてきたし、最新のは知らんのだけど、
プロジェクトの設定とかとりあえず必要最低限だけ表示すればいいのにドバーッと全部表示してしまってて、
しかも結局はコマンドラインのオプションをGUIでチマチマ書くような感じになってしまってて、
これIDEの意味あんの?みたいになるわけだけど、Xcodeを使わないと基本的にMacやiOSのアプリを開発できない縛りもあるわけで、
あと、うろ覚えだけど昔たしかInteface Builderのnibファイルとかバイナリだったんじゃなかったかな
バージョン管理しづらい、差分が分からない、うっかりマウスを滑らせてどこか変更してしまっても分からない、
今までの自分のスキル関係なく、今日からスクラッチでソフトウェア開発するとしたら、どんな環境がいいんだろう?という問いかけです。
ちなみに自分は以前組み込み系のエンジニアでWeb系は詳しくない&ここ1年ソフトウェアの仕事から離れてましたが、最近Webアプリ作りたいなと考えてます。
・組み込みソフト・・・基本C言語、最適化するとこはアセンブラ、マイコンのコンパイラが対応してたらC++
・Windowsアプリ・・・C#(.net framework)、nodejs(electron)
・スマートフォンアプリ・・・3DだとC#(Unity)、Dart(flutter)、javascript(React)、作り込むならネイティブ(iOSはswift、androidはKotlin)
・Webアプリ・・・nodejs、ruby(on rails)、Dart(flutter+firebase)、python(Django)
・社内アプリ・・・社内がマイクロソフト環境(outlookとかteams)ならPowerApps
・AI開発・・・python(TensorFlow、scikit-learn)
まぁ、でも多分こんな目的では?という予想はあるよ。
・Java が単一継承となり、振る舞いの規約として Interface が生まれ、具象化が不要な始祖クラスとして抽象クラスが発明された。おかげで、言語が官僚化した。
・Ruby と Scala では、Interface に振る舞いが記載できるようになって、Mix-In という方法で振る舞いを継承できるようにした。その継承に優劣をつけれるようにすることで、C++ と Java の出来なかったことを解消しようとした。
・今のところ、単一継承を行うクラスベースの継承を行う言語でこれ以上の解答を用意できた言語はない。今のはやりは Rust のような後付の継承を良しとするプロトタイプベースの継承が時代のはやりである。
こんな感じなんじゃねーの?Ruby が好きだから、Ruby 史観で書いたけど。つまり、トレイトって「振る舞い」が記載できる Interface のことだと思うよ。
C++に関しては 関数内なら スタックの相対位置だから宣言時に関係ない
逆にブロック構文を使うと、これはブロック内での相対位置だが計算はコンパイル時だから
実行時は得をする。
だから、最小のほうがいい。
しかしスクリプト言語とかブロックを大きく取る場合は最大法というアプローチもある
基本的には?っていわれると場合によっては関数外でグローバルに取れ 気にするな いまは アルゴリズムに注目して おまじないとおもえ
という回答も作れる
いっぱいある回答