リンク t.co プログラミング言語内の正規表現リテラルについて — KaoriYa プログラミング言語内の正規表現リテラルが是か非か、 そんな議論にいまさらながら参加してます。 ただしどちらかの立場に立って擁護したいというわけではなく、 話を抽象化というか一般化して問題の本質にせまります。 Kazuho Oku @kazuho 言語設計論では、基本「書くコスト」と「保守(読む)コスト」の2種類にわけて考えればいいと思ってる / 言語のAPI仕様を最小にするのには正規表現リテラルの導入が有効というのが僕の論 / “プログラミング言語内の正規表現リテラルにつ…” http://t.co/whvioxMAII 2013-12-20 14:14:16
Twitterに書いたことのまとめです。 プログラミング言語の仕様の一部として正規表現リテラルを提供することの得失について、JavaScriptを例に説明します。 ■より簡潔なコード 言うまでもありませんが、正規表現リテラルを使った方が簡潔なコードになります。 (new RegExp("abc")).exec(s) // リテラルを使わない場合 /abc/.exec(s) // リテラルを使った場合 また、正規表現リテラルがない場合は、文字列リテラルとしてのエスケープと正規表現としてのエスケープが二重に必要になる結果、コードの保守性が低下します注1。 new RegExp("\\\\n"); // リテラルを使わない場合 /\\n/ // リテラルを使った場合 ■エラー検出タイミング 正規表現リテラルがない場合、実際にその正規表現が評価されるまで記述エラーを検出することができません。正規表
二日間ほど集中してgo言語でコード書いたので、その間に感じたことをまとめてみます。普段はだいたいPerlやJavaScriptでWebアプリケーションを書いています。 まとめの要約 go言語良い Webアプリケーション書くならPerlとかRubyが良い PerlとかRuby書ける人がミドルウェア書くならgo言語良い 気に入ったところ コンパイルエラーが親切 たとえば気楽な気持ちで以下のようなコードを書くと package main import ("fmt"; "net/http"; "log") func main() { resp := http.Get("http://hatenablog.com/") fmt.Println(math.Pi) } 以下のように丁寧に問題箇所を教えてくれます。 ./hoge.go:6: imported and not used: "log" ./h
若い人たちは、「文字列型」があるプログラミング言語しか知らないかもしれない。だが、汎用的な文字列型が一般的になったのは、プログラミング言語の歴史の中でも比較的最近のことである。 たとえば、1972年に誕生したC言語には文字列型がない。1980年代に良く使われていたPascalの文字列型は最大255文字しか格納できなかった。 なぜか? それはメモリが貴重なリソースだったから。 1980年代のPCの搭載メモリは多くて数メガバイト。これに対し、長編小説の長さは1MB程度に達する*1。 当時、メモリはとても貴重な資源であり、テキストを処理するプログラムを開発するにあたっては、文字列をどのようにメモリ内に展開するかプログラマが細かくコーディングする必要があった。 だから、汎用的な「文字列型」というのは「夢」にすぎなかった。CあるいはPascalにおける文字列(CのASCIIZ文字列あるいはPasca
新たなるエネルギーを求めて様々な研究開発が行われているが、今月17日、米エネルギー省のパシフィック・ノースウェスト国立研究所が、生物体を利用するバイオ燃料に関する驚くべき研究成果を発表した。 今回開発された技術により、藻類を1時間以内で原油に変えてしまうというものだ。
パフォーマンスチューニングガイド 1. 概要 Expand section "1. 概要" Collapse section "1. 概要" 1.1. 本書を読むにあたって Expand section "1.1. 本書を読むにあたって" Collapse section "1.1. 本書を読むにあたって" 1.1.1. 対象読者 1.2. リリースの概要 Expand section "1.2. リリースの概要" Collapse section "1.2. リリースの概要" 1.2.1. Red Hat Enterprise Linux 6 における新機能 1.2.2. 水平方向のスケーラビリティ 1.2.3. 分散システム 2. Red Hat Enterprise Linux 6 のパフォーマンス機能 Expand section "2. Red Hat Enterprise Li
このページでは C++ の enum(列挙型) の使い方について解説し、enum の文字列化クラス作成ツールを公開します。 enum(列挙型)とは 文字列化クラス(構造体)の自動生成 enum(列挙型)と switch 文 C++ 関連本 enum(列挙型)とは ページの先頭へ 列挙型とは、ざっくり言ってしまえば、「選択肢」を表す整数の定数を定義するための変数型です。 列挙型を使わなくても整数の定数は様々な方法で定義できます。例えば、「左と右」という二つの状態を表すために、#define を使って、次のような定義を行うことが出来ます。 #define LEFT 0 #define RIGHT 1 別の方法として、const int 型の変数を定義するということも可能です。 const int iLeft = 0; const int iRight= 1; しかし上記は、「選択肢」を表すとい
likelyは条件が通常は真で、unlikelyは条件が通常は偽であるケースで、if文のパフォーマンス向上のために使用します。これらのマクロは、__builtin_expectで実装されgccマターとなります。 # define likely(x) __builtin_expect(!!(x), 1) # define unlikely(x) __builtin_expect(!!(x), 0) __builtin_expectは第1引数が第二引数1(真)なら、else処理はjmpとし、第1引数が0(偽)なら、then処理がjmpする様に展開されます。 次実行コードのインストラクションポインタIPをインクリメントするのでなく、jmpは次実行コードをキャッシュメモリから取得し、それをipに設定する負荷のかかる仕組みが必要と、CPUマターであるにしても想像できます。 void likely(i
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く