なぜScalaがバカ向けなのか。 ぼくの経験を元に、バカ向け言語と非バカ向け言語を比較しながら見て行きましょう 非バカ向け言語 C プログラマーとして最初に携わったのがC言語です。 それは以下のようなものでした。 何十ものファイルにまたがるグローバル変数 緻密な制御が必要であるにも関わらず、無秩序に取得/開放が行われているメモリー管理 このような複雑な構造を、ぼくのようなポケコン並の処理能力しか持たないバカに把握可能でしょうか。もちろん不可能です そこで、次のようなコーディングを心がけました。 グローバル変数を使わず、関数に引数を定義して渡す メモリーの取得/解放を同一ファイル内に限定する これで、メモリーや変数参照の影響範囲を限定し、ぼくのようなバカでも理解できるようになります。 ですが、わざわざそんな事をやらなくても全てを理解できるエリート様達は、 「なぜ引数で渡すんだ。グローバル変数
2013年03月01日16:00 カテゴリLightweight Languages 型を忘れる静的言語、型を覚えてる動的言語 召還されたますた。 @dankogaiさんがブログで参入したら面白そう。 「変数に型がないということの利点について考える - サンプルコードによるPerl入門」 (id:perlcodesample / @perlcodesample2) d.hatena.ne.jp/perlcodesample…— r-west (@rwest2112) February 28, 2013 言語設計者たちが考えること Mastermind of Programming Federico Biancuzzi / Shane Warden 伊藤真浩 / 頃末和義 / 佐藤嘉一 / 鈴木幸敏 / 村上雅章訳 [原著:Masterminds of Programming] まず、よくあ
日本時間だと2013年2月7日未明のことですが、「Topaz」(トパーズ)と名付けられたPythonで実装されたRubyのバージョン0.1がリリースされました(リリースに関するブログ、プロジェクトのページ、GitHubのリポジトリ)。Ruby処理系はC、Java(JVM)、Ruby、CLI、JavaScript、Smalltalkなどによる実装がありましたが、Pythonというのは、ちょっと驚きです。ただ、Pythonといっても、Python言語で書くのが主眼なのではなく、Pythonエコシステムで高速処理を目指して作られた「PyPy(パイパイ)」の成果物の上に実装したというのがTopazのようです。現在のところコード作者リストに9人の名前が上がっていて、JRuby実装で知られるチャールズ・ナッター氏の名前も入っています。 Topazは正確にはPythonではなく、RPythonと呼ばれる
「ハッキング」という言葉は、悪意ある作業や技術の意味ではない。素晴らしい作業や技術の意味である。コンピューターの黎明期から、ハックという言葉はコンピューターを素晴らしくうまく使うことという意味で使われていた。ハッカーは誇るべき称号であった。この伝統的な言葉が、政府の二重思考の試みにより汚されていく。 ウイルス作成:東京の13歳少年を補導 京都府警- 毎日jp(毎日新聞) 少年は、ハッキング技術を自慢し合ったり、情報を交換する掲示板をネット上に開設していた。府警は先月、この掲示板に不正取得した他人のゲームIDを書き込んでいた少年(16)を、不正アクセス禁止法違反の疑いで逮捕していた。 補導された少年は府警に「二度とハッキングに関わらない」との念書を提出し、掲示板を閉鎖したという。 ああ、世も末だ。我が国の二重思考はここまで進んでしまった。我が国では、集合住宅を豪邸(マンション)と呼び、ゲーム
Javascriptを生成できる言語『JSX』がリリースされました。めでたいですねー。 ただ同じくJavascriptを生成きるHaXeのことが忘れられている気がするので、宣伝します。 ステマじゃないよ! 型推論がイケてる 現時点でJSXには型推論が実装されてないので、関数を定義するには全ての型を書く必要があります。 // JSXだよ! function add(x : number, y : number) : number { return x + y; } これだけなら特に問題ないように見えますが、これが高階関数を定義しようとするとどんどん複雑になっていきます。 // JSXだよ! function f(g: function(:number):number): function(:number):number { return function(x: number): number
注意!このエントリは既に古いので、JSX の進化速度が半端ない - ぐるぐる〜もあわせて読んでください。最新のコードを参照するのが手っ取り早いです。 JSX なる言語がリリースされました。 この言語が謳っているのが、 高速 安全 簡単(生産性が高い、とも) という 3 点です。 高速と安全はまぁいいでしょう*1。 問題は、はたしてこの言語は簡単なのか?という点です。 簡単かどうかは人によるのでアレなのですが、まぁ一部の人にとっては簡単とは言えない (というか書く気がしない) 書き方を強制されるのです。 関数型 数値を受け取って文字列を返す関数を表す型は、JSX では以下のように書きます。 function(:number):string これ単体で見ると分かりやすそうな気配はします。 では、これ読めますか? function f(g: function(:number):number):
マルチゲームScripterは、アスキーツクールシリーズとして登場したC言語ライクなプログラム言語。 1994/12月発売。 翌年にwindows95が登場し、MS-DOSは下火になっていく直前に、 PC98 MS-DOS用ソフトとしてリリースされた、悲劇のプログラム言語。 今回は、マルチゲームScripterについて見ていきたいと思う。 ↑ココらへんは、ゲームグラフィックTV的な声で脳内読み上げしてください。 なお、ドヤするラルフ・ベアは出て来ません。 構文 資料が無いです。 >_< 実家に帰って押入れを探すともしかしたら、あるかも・・・? 確か、MAIN.MGL ファイルからスタートだったと思う。 C言語ライクな構文で書ける、ゲーム技術に特化した言語だった。 手元に資料がないので、この記事は記憶をたどって書いてます。 間違ったところが多々あると思います。 ご指摘いただけると助かります。
Do Not Use Go for 32bit Development 私は今、大量のGoのコードをCに書き換える作業をしている。時間は金で買えない。主たる開発者として、金はここで止まってしまう。わたしは顧客と話し、責任を負った訳だ。私の過ちは、Goを信頼したことだ。私は自分のモットーを思い出すべきだったのだ。Nullius in verba(政治信教の言を入るべからず) Goは1.0がリリースされたが、もし、32bitサポートが必須であれば、Goを選んではいけない。 32bit Goには多くのバグがあるが、特に問題なのがひとつある。 実行開始の初期化時に、Goは512MBの仮想アドレス空間を予約しようとする。予約できなければ、クラッシュする。Goは、ガベージコレクションのためにこの空間を必要とする、おそらく、すべてのGC言語、いや、すべての言語は、メモリ管理に対して、似たような手法を用い
今や、GNU/Linuxの方が不自由なWindowsより日本語サポートが優れている。これは純然たる事実である。 私は、UIが日本語化の質を論じているのではない。私はUIの言語を英語にしているので、UIの日本語の質についてはわからない。ただ、2012年となった今では、GNU/Linux/Xの環境の方が、圧倒的に日本語を扱う環境が優れていると考えているのだ。 まず、現行のまともなディストリは、文字エンコードをデフォルトでUTF-8にしている。このため、不自由なWindowsにおける、カオスな大量のマルチバイト文字コード混在環境の問題は存在しない。確かに、不自由なWindowsのネイティブの文字エンコードはUTF-16だが、下位互換性を保証するために、既存のマルチバイト文字をすべて継続してサポートしているために、未だにカオスな状況になっている。多くのプログラムは、嘆かわしいことに、いまだにANS
Programming Language Challenges in Systems Codes システムコードにおけるプログラミング言語の挑戦、あるいは、なぜいまだにシステムプログラミングはCなのか。 著者がJonathan Shapiroであることが興味深い。Jonathan ShapiroはD&Eに頻出する名前である。Bjarne Stroustrupの記述からして、初期のC++の設計に多大な影響を与えた人物である。それに、最初にC++を使って本格的で大規模なプロジェクトを始めたのも、Jonathan Shapiroだ。しかし、今日、Jonathan Shapiroの名前はC++界では、あまり有名ではない。私はMLとかHaskellなどの言語には疎いので、この方面の話は知らなかった。 なぜシステム・プログラミングは、いまだに1970年代に開発された大昔の高級アセンブリ言語で書かれてい
Twitterのタイムラインが面白すぎて、ついうっかり言語を擬人化して脳内で言語女子会なるものを開いてしまいました。なお、登場人物と実在の人物は1対1に対応しません。 undefinedとnullの両方必要なの? とあるプログラミング言語が集う女子会にて: Perl: そういえばさ、なんでJavaScriptちゃんってundefinedとnullの両方もってるの? JavaScript: えっ、未定義の変数にアクセスした時undefined返したいじゃない? Python: 例外投げて死ねばいいじゃん Ruby: 例外投げて死ねばいいよね Python & Ruby: ねー♡ Java: いやそこは参照型ならnull、数値型なら0で初期化すべきでしょ C: これだから最近の若い子は…初期化にだってコストが掛かるんだからね!デフォルトで初期化するなんて無駄遣いよ!必要な人だけが責任をもって初
要求開発アライアンスの定例会で『Object-Functional Analysis and Design: 次世代モデリングパラダイムへの道標』というタイトルでセッションを行うことになりました。 セッション時間が50分なので、かなり俯瞰した形での全体像の説明になりそうですが、関連する要素技術の数が多いのと、内容が込み入っているので、ブログで補足説明をすることにしました。 今回はその第一弾です。 「関数型言語の関連技術」として用意した以下の図を説明します。関数型プログラミング言語レベルの説明はScalaを対象にします。 Disclaimer2008年にScalaをはじめて足掛け4年、関数型プログラミングとは、どうも数学を使ってプログラミングしていくことらしい、ということが分かってきました。 ScalaをBetter Javaとして使うのであれば、そこまで頑張らなくてもよいのですが、関数型言
Google が開発しているという新言語「Dart」を覚えていますでしょうか。来月の GOTO Aarhus 2011 Conference にて発表があるということで数日間は話題に登ったものの、その後は続報もなく忘れ去られているようです。 実はこの Dart に関連して、 2010 年 10 月に書かれた Google の内部文書 (?) が注目されています。その中では、 JavaScript の次期版である Harmony と平行して新たな言語「Dash」を開発することが示唆されており、それが来月発表される Dart の正体ではないかと言われています。また、 Google が新言語の開発を決断した理由や今後のオプション、そして僅かながら関連するプロジェクトについてなども語られており、なかなか興味深い内容です。 そこで、本日はこの文書のハイライトをご紹介したいと思います。いつもながら翻訳
[erlang-questions] The future of Erlang and BEAM を翻訳。元の投稿 (StackOverflow に投稿された質問 を erlang-questions の識者に尋ねてみたもの) への Joe Armstrong からの返信。 これで Erlang に興味を持った人は「 Erlang に興味を持った人へ (id:Voluntas:20110319) 」をどうぞ。 元の投稿 エリクソン、Facebook、ゴールドマンサックスなどの会社が Erlang を業務に取り入れているのを見てきて、 Erlang に強く興味を持っていました (C++/PHP/Java の世界から来ました) 。低レイテンシで、他の言語 (私にとっては Java とか) よりもずっとすっきりして (訳注:言語仕様?) よく出来ている Erlang なら、過酷な負荷に耐えるアプ
構造化プログラミングのパラダイムに対応した高水準の手続き型言語である。ハードウェアの直接的な制御ができる機能を備えつつ、機械語やアセンブリ言語(アセンブラ)のような低水準言語と比較して、ソースコードの再利用性やメンテナンス性に優れており、目的に応じたプログラムの変更や拡張が容易である。 汎用性およびプログラムの自由度が高く、リソースや性能要求の厳しい用途にも耐えうるため、アプリケーションソフトウェアの開発だけでなく、オペレーティングシステム(OS)やデバイスドライバー、ファームウェアの記述、マイコン制御・機械制御など、上位層・下位層を問わず、あらゆる分野で利用されている。 対応する機器の範囲が広い。パーソナルコンピュータやワークステーションはもちろん、自動車や家電の組み込み用マイコンからスーパーコンピュータまで、C言語を使用できるハードウェアは多様である。そのため、C言語のコード資産が蓄積
プログラミング言語 C は 1990 年に ISO で規格化された言語です。その後、何度かの誤りの訂正や wchar_t 型の追加といった追補がなされた後、さらに使いやすくするための新しい機能が検討されてきました。そして、1999 年、ついに新しいプログラミング言語 C の仕様「ISO/IEC 9899:1999 - Programming Language C」(略称 C99) が 1999/12/01 付けで規格として出版されました。ここでは、その新機能を説明します。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く