C言語で作成した拙作のCASL II処理システムYACASL2を紹介します。 CASL IIは、基本情報技術者試験で用いられるアセンブラ(アセンブリ言語)です。アセンブラは通常、特定のコンピューターやCPUに対応しています。しかしCASL IIアセンブラは、試験の公平性の観点から実在しない仮想コンピューター向けに作られたアセンブラです。 CASL IIの処理システムを作るきっかけになったのは、『日経ソフトウェア』2009年2月号に掲載されていた川俣晶さんの執筆記事「C言語で作るCPUエミュレータ」を読んだことでした。この記事を紹介した日経ソフトウェア記者・斉藤国博さんのコンピュータの仕組みを知るのは,いつも楽しいという記事は現在でもオンライン上で読めるようです(2020年8月時点)。なお、この記事で紹介されていたソースコード(C言語)は、現在ではダウンロードできないようでした。 私はいちお
目次 Lispを始めたばかりで,まだ規模の大きいプログラムを書いていないため,パッケージ管理やらライブラリの依存関係解決などわからないことだらけで,QuicklispやASDF,CIM,Roswell等,色々調べました.包括的かつ初心者に優しいリソースがなく,最初は苦労しました.解説がどれも各ツールの使い方に特化していて,他のツールの関係や,どのツールが必要で,どの機能が重複しているかなどの解説がなかったからです.色々読んでいるうちに朧げながら全体像が掴めてきました.ここでは私の朧げな解釈を下に,それぞれのツールの大まかな機能と役割について説明したいと思います.間違いなどありましたら,@waterloo_jpまでお願いします.(CIMは実際に使ってないので解説してません.ゴメンナサイ) Quicklisp, ASDF, Roswell 違いは何? 他人の書いたパッケージを利用する場合,1.
Windowsの場合 ここからバイナリをダウンロードします。 https://github.com/neovim/neovim/releases/tag/v0.4.4 vim-plugとvlimeのインストール 今回はプラグインマネージャとしてvim-plugを使ってみます。 個人的にはインストールの簡単さとシンプルさがイイです。 インストール手順にしたがってインストールします。 curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
この記事はLisp Advent Calendar 2017の二日目の記事です。 はじめに この記事は、Common Lispという初めての人には初めましてな言語の入門記事です。 この世には、Common Lispというとってもカッコいい言語が存在します。その言語はANSIで規格が定められており、宇宙空間で動いたり深海で動いたりし、メタプログラミングが可能で、しかもC言語並に速いという、超クールな言語なのです。 歴史あり、逸話ありのLispであって、実用的と言われるLispです。そんな言語、いますぐに始めてみたいと思いますよね? しかしググってみると、なんだか処理系っていうの (?) がたくさんあったりしてどれを選んでいいのかわからない。rbenv的なものはないの? パッケージマネージャは? アプリケーションのビルドとかどうしたらいいの? ぱっと実用的なプログラムをどう書いたらいいかわから
Dropトレイトで片付け時にコードを走らせる スマートポインタパターンにとって重要な2番目のトレイトは、Dropであり、 これのおかげで値がスコープを抜けそうになった時に起こることをカスタマイズできます。 どんな型に対してもDropトレイトの実装を提供することができ、指定したコードは、 ファイルやネットワーク接続などのリソースを解放するのに活用できます。 Dropをスマートポインタの文脈で導入しています。Dropトレイトの機能は、ほぼ常にスマートポインタを実装する時に使われるからです。 例えば、Box<T>はDropをカスタマイズしてボックスが指しているヒープの領域を解放しています。 ある言語では、プログラマがスマートポインタのインスタンスを使い終わる度にメモリやリソースを解放するコードを呼ばなければなりません。 忘れてしまったら、システムは詰め込みすぎになりクラッシュする可能性があります
ITエンジニアは今後どんなプログラミング言語を学びたいと思っているのだろうか。またもう学ぶ必要はないと感じているプログラミング言語は何か。これを探るため、日経 xTECHでは「プログラミング言語実態調査」のアンケートをWebサイト上で実施した。調査では今後スキルを磨きたいプログラミング言語を複数回答で聞いた。 スキルを磨きたい言語の第1位は「Python」だった。回答者440人中321人がPythonを選んだ。実に7割を超える回答者がPythonを学びたいという状況だ。AIブームの到来で有望視するITエンジニアが多いとみられる。 第2位は「JavaScript」(221人)だ。半数以上の回答者がJavaScriptのスキルを磨きたいと答えている。同じくWeb技術である「HTML/CSS」(156人)も第3位に入った。こうしたWeb技術を用いたシステム開発が現場で増えているのだろう。 第4位
Derefトレイトでスマートポインタを普通の参照のように扱う Derefトレイトを実装することで、参照外し演算子の*(掛け算やグロブ演算子とは違います)の振る舞いをカスタマイズできます。 Derefを実装してスマートポインタを普通の参照みたいに扱えるようにすれば、 参照に対して処理を行うコードを書いて、そのコードをスマートポインタに対しても使うことができるのです。 まずは、参照外し演算子が普通の参照に対して動作するところを見ましょう。それから、Box<T>のように振る舞う独自の型を定義してみましょう。 参照とは異なり、新しく定義した型には参照外し演算子を使えません。その理由を確認します。 Derefトレイトを実装すればスマートポインタは参照と同じように機能するので、そのやり方を調べましょう。 そして、Rustには参照外し型強制という機能があり、その機能のおかげで参照やスマートポインタをうま
ゼロからのOS自作入門 を 一通り写経 したところ、 Rust に移植したくなったのでやっていきます。 次回: 「ゼロからのOS自作入門」を Rust でやる (第5章) - gifnksmの雑多なメモ 関連記事一覧: ゼロからのOS自作入門 カテゴリーの記事一覧 - gifnksmの雑多なメモ github.com Rust で OS なので名前は "錆OS" です。安直です。 "sabios" でざっとググったところ、スペイン語で "賢い" って意味があるようです。 良いですね。 クレバーな実装を目指したいところです。 方針 「ゼロからのOS自作入門」の章立てに沿って1章から順番に実装していきます。 C++ で一通り写経は完了しているので完成形の OS と関係ない節はスキップしていきます。 せっかく Rust で実装するので安全性や抽象化という点で MikanOS との差異を出せたら良
2.太陽光に含まれる紫外線 太陽光線には、本来可視光線ばかりでなく紫外線・赤外線などかなり広い範囲の電磁波が含まれている。しかし、太陽光は地表に達する前に、オゾン層を通過するため、太陽光に含まれる短波長の紫外線(UV-C)は、このオゾン層でほとんど吸収され、地表に到達する紫外線は比較的波長の長いUV-A・Bだけになる。太陽光線の量は関東地方で日中・快晴時におよそ10万ルックス程度になり、この中に含まれる紫外線は約5%、強度でいうと約60W/m2 = 6,000μW/cm2に相当し、その90%以上はUV-Aになっている。 3.人体に対する影響 太陽光線の場合、地上まで到達する紫外線はUV-Aがほとんどであること、人体は太陽光線を利用し適合するようにつくられていることなどにより、過剰な暴露・体質的な不適合を除けば通常あまり障害を受ける事はない。しかし、人工光源から発生する紫外線は光源の種類によ
JSON (JavaScript Object Notation)は、軽量のデータ交換フォーマットです。人間にとって読み書きが容易で、マシンにとっても簡単にパースや生成を行なえる形式です。 JavaScriptプログラミング言語 (ECMA-262標準第3版 1999年12月)の一部をベースに作られています。 JSONは完全に言語から独立したテキスト形式ですが、C、C++、C#、Java、JavaScript、Perl、Python、その他多くのCファミリーの言語を使用するプログラマにとっては、馴染み深い規約が使われています。これらの性質が、 JSONを理想的なデータ交換言語にしています。 JSONは2つの構造を基にしています。 名前/値のペアの集まり。様々な言語で、これはオブジェクト、レコード、構造体、ディクショナリ、ハッシュテーブル、キーのあるリスト、連想配列として実現されています。
ヒープのデータを指すBox<T>を使用する 最も素直なスマートポインタはボックスであり、その型はBox<T>と記述されます。 ボックスにより、スタックではなくヒープにデータを格納することができます。スタックに残るのは、 ヒープデータへのポインタです。スタックとヒープの違いを再確認するには、第4章を参照されたし。 ボックスは、データをスタックの代わりにヒープに格納する以外は、パフォーマンスのオーバーヘッドはありません。 しかし、特別な能力がたくさんあるわけでもありません。以下のような場面で最もよく使われるでしょう。 コンパイル時にはサイズを知ることができない型があり、正確なサイズを要求する文脈でその型の値を使用する時 多くのデータがあり、その所有権を移したいが、その際にデータがコピーされないようにしたい時 値を所有する必要があり、特定の型であることではなく、特定のトレイトを実装する型であるこ
スマートポインタ ポインタは、メモリのアドレスを含む変数の一般的な概念です。このアドレスは、何らかの他のデータを参照、または「指します」。 Rustにおいて最もありふれた種類のポインタは参照です。参照については第4章で習いましたね。参照は&記号で示唆され、指している値を借用します。データを参照すること以外に特別な能力は何もありません。 また、オーバーヘッドもなく、ポインタの中では最も頻繁に使われます。 一方、スマートポインタは、ポインタのように振る舞うだけでなく、追加のメタデータと能力があるデータ構造です。 スマートポインタという概念は、Rustに特有のものではありません。スマートポインタは、C++に端を発し、 他の言語にも存在しています。Rustでは、標準ライブラリに定義された色々なスマートポインタが、 参照以上の機能を提供します。この章で探究する一つの例が、参照カウント方式のスマートポ
llrl mainly borrows its design from OCaml, Rust, Haskell, and Scheme. Statically-typed Hindley-Milner based type system Supports type classes Lisp-like syntax + macros Uses S-expressions to write programs Macros are compiled and executed at compile-time (JIT) Self-hosting AOT compiler implementation There are Rust implementation (llrl0) and llrl implementation (llrl1) Multiple backends llvm backen
llrlは自作のプログラミング言語です。大きな特徴が2つあります。 Hindley-Milnerベースの型推論による静的型付け (+型クラス) Lisp-likeなS式によるシンタックスとLLVM JITによるマクロ この言語の処理系をRustとLLVMを用いて実装し、それをllrl上に移植してセルフホスティングを試みました。無事セルフホスティングを達成したので、取り組んだことやモチベーションなどを順に振り返りたいと思います。 LLVMについては、フロントエンド側・バックエンド側ともに既にいくらかの解説記事が見られるため、概要は省略します。今回は新たなプログラミング言語のバックエンドとしてLLVMを用いるので、LLVMのフロントエンド側の実装がメインとなります。 事の発端: LLVM Kaleidoscopeチュートリアル Kaleidoscopeは、LLVMのチュートリアルにおいて実装す
妹「お兄ちゃん、私C言語やってみたい」 兄「いきなりだね。じゃあVisual Studioをダウンロードしようか」 妹「……手っ取り早く言うと学校の課題で出たC言語をやるから、コンパイルエラーが無いか確認したい」 兄「じゃあオンラインコンパイラでも使えばいいんじゃないかな。WEBでビルドかけられるし」 妹「あわよくば、使えそうなプログラムを作って自分の役に立てられればいいかなって思ってる」 兄「じゃあ Visual Studio をダウンロードしようか」 妹「これ、時間かかりそう。もっと手軽なコンパイラないの?」 兄「じゃあTiny-Cコンパイラを使ってみようか。Visual Studio Community Editionの方が補正機能があって使いやすいと思うんだけどね」 妹「じゃぁそれはまた今度で……」 兄「まず、Tiny-Cをダウンロードします」 妹「はい。どこから?」 兄「Tiny
Cargoのワークスペース 第12章で、バイナリクレートとライブラリクレートを含むパッケージを構築しました。プロジェクトの開発が進むにつれて、 ライブラリクレートの肥大化が続き、その上で複数のライブラリクレートにパッケージを分割したくなることでしょう。 この場面において、Cargoはワークスペースという協調して開発された関連のある複数のパッケージを管理するのに役立つ機能を提供しています。 ワークスペースを生成する ワークスペースは、同じCargo.lockと出力ディレクトリを共有する一連のパッケージです。 ワークスペースを使用したプロジェクトを作成し、ワークスペースの構造に集中できるよう、瑣末なコードを使用しましょう。 ワークスペースを構築する方法は複数ありますが、一般的な方法を提示しましょう。バイナリ1つとライブラリ2つを含むワークスペースを作ります。 バイナリは、主要な機能を提供します
セマンティック バージョニング 2.0.0 概要 バージョンナンバーは、メジャー.マイナー.パッチ とし、バージョンを上げるには、 APIの変更に互換性のない場合はメジャーバージョンを、 後方互換性があり機能性を追加した場合はマイナーバージョンを、 後方互換性を伴うバグ修正をした場合はパッチバージョンを上げます。 プレリリースやビルドナンバーなどのラベルに関しては、メジャー.マイナー.パッチ の形式を拡張する形で利用することができます。 導入 ソフトウェア・マネージメントの世界には、「依存性地獄」と呼ばれる恐ろしいものがあります。あなたのシステムが大きく成長すればするほど、さまざまなパッケージを組み込めば組み込むほど、自分が地獄の底にいることにいつか気づくでしょう。 多くの依存性を有しているシステムにとって、新しいバージョンがリリースされることは悪夢でしかありません。厳密に依存関係を指定し
iPhoneSE2からiPhone12miniに移行したとき、iPhone同士でデータ移行をしました。 データ移行そのものは無事に終わったのですが、iTunesに接続してミュージックを同期しようとすると、「元からiPhone12miniにあったミュージック(=データ移行してコピーされたファイル)」と、「iTunesからコピーされたミュージック」が別のファイルと判断されたのか、iPhone上で曲が二重になってしまいました。 これを解消しようとして、iTunesで「ミュージックを同期」のチェックを外して再同期しても、「iTunesからコピーされたミュージック」のみが消去され、「元からiPhone12miniにあったミュージック」はそのまま残ってしまいました。 そこで、iPhone上に残ってしまったミュージックファイルを、PCではなく、iPhoneの操作で削除してから同期しました。 やり方は、i
Crates.ioにクレートを公開する プロジェクトの依存としてcrates.ioのパッケージを使用しましたが、 自分のパッケージを公開することで他の人とコードを共有することもできます。 crates.ioのクレート登録所は、自分のパッケージのソースコードを配布するので、 主にオープンソースのコードをホストします。 RustとCargoは、公開したパッケージを人が使用し、そもそも見つけやすくしてくれる機能を有しています。 これらの機能の一部を次に語り、そして、パッケージの公開方法を説明します。 役に立つドキュメンテーションコメントを行う パッケージを正確にドキュメントすることで、他のユーザがパッケージを使用する方法や、いつ使用すべきかを理解する手助けをすることになるので、 ドキュメンテーションを書くことに時間を費やす価値があります。第3章で、2連スラッシュ、//でRustのコードにコメント
DaiGoを擁護するわけじゃないけど、普通のサラリーマンはこういう気持ちあるよね? 大半がセーフティネットがなんとか言ってて確かに自分がお世話になる可能性はあるよ ただそれとは別にタイトルみたいなことを思うのは普通じゃないかな だって朝から晩まで働いて手取り20万ない人からしたら生活保護取ってるやつムカつくでしょ 聖人君主みたいなコメント多くて違和感感じてこれ書いてるけど同意してくれるよね? もちろんムカつくからと言って生活保護廃止しろって話じゃないよ 国民に取ってセーフティネットは必要だし今後もあってほしい ただそれとは別になんかムカつくし嫌だなって思うのは人間なんだからしょうがないよって言いたい 【追記】 思いのほかブコメついてたから目についたの返信してみる 全然?健康保険の保険料が誰かの治療費に使われても文句ないでしょ普通。 いや普段病院行かないのに引かれてるのムカつくでしょ その生
最近はブランパンから進化して、 全粒粉100% ホシノ天然酵母 の組み合わせでパンを焼いています。きっかけになったのは、ブランパンよりもおいしいのと、全粒粉と天然酵母なら、発酵時間が長くて、グルテンアレルギーが出づらいと書籍で読んだためです(出ないわけではないので、自己責任でどうぞ)。 朝のサラダと合わせるとこんな感じになります。 全粒粉100%で天然酵母のパンのレシピは意外と少ないので、教えて欲しいと言う要望がはてブの方であったのでここにまとめます。 まず、酵母ですが、市販のホシノ天然酵母を、2倍の水を加えて伸ばして、生種を作ります。 100gの酵母に200gの30度の水をいれます。それを24時間、30度弱の温度で保温させます。 この保温は、ホームベーカリーでも機能があるのですが、HBで保温をしてしまうと、その間まったくパンが焼けなくなってしまうので(笑)、私は専用の機械を使っています。
前: 太陽電池次: バックアップとデフラグ tcc 2011-11-16 11:36:09 コンピュータ その昔、Turbo Pascal というプログラム言語があった。 …この言い方はちょっと違うか。 Pascal というコンピューター言語があって、その処理系の製品として、Turbo Pascal があった。 Pascal というのは、もともと教育用に考えられた言語だ。 といっても、わかりやすくなっているけど非力、というようなことはなくて、非常に強力。 祖先は ALGOL で、C と同じ。だから、プログラムの組み方も C と似ている。 違うのは、C はハードウェアを直接叩けて、システムクラッシュさせるのも自由気ままにできるのに対し、Pascal はハードウェアをできるだけ隠蔽するように作られているので、システムクラッシュが起こりにくいこと。 隠蔽する、というのは手間がかかることなので
FACOM201パラメトロン電子計算機(1960年、東京理科大学近代科学資料館所蔵) パラメトロン(英: parametron)はフェライトコアのヒステリシス特性による、パラメータ励振現象の分周作用を利用した論理素子である。1954年に当時東京大学大学院理学部高橋秀俊研究室の大学院生であった後藤英一が発明した。真空管やトランジスタの使用量を大幅に削減してコンピュータを構成できるとして、当時としては多数のパラメトロン式コンピュータが日本で建造された。比較対象としてリレーよりは速く機械的な接点も無いなどの利点はあったものの、その後すぐに主流となった接合型トランジスタの性能向上が圧倒的で動作周波数でパラメトロンを上回ったこと、トランジスタにはラジオをはじめとする広範囲の応用があったのに対して、パラメトロンは論理素子専用という点でも不利であったことなどにより、1960年代にはほぼトランジスタによっ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く