タグ

2015年1月16日のブックマーク (11件)

  • 定義されている関数のリストをリフレクションを使っても取得できない理由 - Qiita

    Goのリフレクション(reflect)を使うと構造体のフィールドのリストやインターフェイスのメソッドセットを取得することができる。しかし定義されている関数のリストを取得することはできない。reflectはそういう機能を提供していないのである。 どうも、設定ファイルから関数名を読んで、その関数を呼び出すといったことをやりたいといったような話が定期的にあがってくるようだ。たしかにそういうことができれば便利かもしれないが、そういう機能を提供していないのにはきちんとした理由がある Goでは使われていない関数は最終的なバイナリには入らない。定義されているけどどこからも呼ばれていない関数というのは最初から書いていないのと同じだ。逆に言うと、コンパイラとリンカに関数を削除するという最適化を許すためには、関数一覧を取得するという機能があったりすると困るのである。 では実際に使われている関数だけの一覧を取得

    定義されている関数のリストをリフレクションを使っても取得できない理由 - Qiita
    vvakame
    vvakame 2015/01/16
  • GoでNewなんとかのような関数を不必要に提供しないほうが良い理由 - Qiita

    構造体を定義して、それに対してメソッドを定義して、最後にその構造体をアロケートして初期化するNewなんとかという関数を用意する、というのを何の疑問も持たずに行っているならちょっと考えものだ。途中まではよいが、Newなんとかみたいなのは別に必須ではない。 メソッドとゼロ値 Goでは新しい値は「ゼロ値」で自動的に初期化される。ゼロ値は型ごとに違うが、数値なら0、文字列なら空文字列、ポインタやインターフェイスならnil、といった具合の値だ。構造体ならそれぞれのフィールドがゼロ値で初期化される。 メソッドはそのレシーバーの値のゼロ値に対して問題なく動くように書くほうがよい。構造体Tを割り当てて初期化する関数としてNewTみたいな関数を用意するのは、当に初期化が必要なとき以外はやらないほうがよい。 なぜか、というといくつか理由がある。 NewTの代わりにnew(T)を使うようにすると、エクスポート

    GoでNewなんとかのような関数を不必要に提供しないほうが良い理由 - Qiita
    vvakame
    vvakame 2015/01/16
    参考になるしコメント欄も勉強になる
  • Goでコピーされたくない値がコピーされたことを検出する方法 - Qiita

    値の同一性が重要なときは、値を(うっかり)コピーすることができないようにしたいことがある。C++プログラマならデフォルトのコピーコンストラクタをprivateにして(あるいはC++11の=deleteを使って)、値をコピーしようとするコードをコンパイルできないようにするところだが、Goでは言語レベルである型の値のコピーを禁止する方法はない。従ってコンパイル時にそのようなコードを検出する方法はない。 代わりにと言ってはなんだが、実行時に検出することはできる。 たまに見かけるやり方は、構造体のメンバにポインタを用意しておいて、そこにその値自身のポインタを入れるという方法だ。あとはメソッドが呼ばれるたびにその値をチェックして、レシーバのアドレスとポインタの値が異なっていたらpanicなどでバグを通知すればよい。 コードで書くと次のような感じだ。 type nonCopyable struct {

    Goでコピーされたくない値がコピーされたことを検出する方法 - Qiita
    vvakame
    vvakame 2015/01/16
  • Goのメソッドは構造体以外にでも定義できるしそれが便利なこともよくある - Qiita

    いわゆる主流のオブジェクト指向言語しか知らない人からみると、クラスに相当するものはGoでは構造体で、メソッドに相当するのは構造体の型に対して定義されたメソッド、というように見えると思う。Goでコードを書いている時に、クラスという存在しない概念について考えても無意味なのだけど、頭のなかでそういうイメージで理解している場合、構造体以外の型にメソッドが定義できる意味がわからないと思う。 そこで、そういう人には多少目から鱗のような話かもしれないが、構造体以外にメソッドを定義して便利なケースをいくつか紹介したい。 カウンタ 単純なカウンタを設計しているとしよう。カウンタが持つメソッドはaddとdecの2つだけで、それらのメソッドはカウンタ値を変更して、新しい値を返すものとしよう。カウンタを構造体を使って実装するとこういうふうになる。 type counter struct { v int } fun

    Goのメソッドは構造体以外にでも定義できるしそれが便利なこともよくある - Qiita
    vvakame
    vvakame 2015/01/16
  • Goでxxxのポインタを取っているプログラムはだいたい全部間違っている - Qiita

    Goで、文字列、インターフェイス、チャネル、マップ、スライスのポインタを取っているプログラムは、書いた人がきちんと自分がなにをしているのか理解しているのでなければ、ほぼ確実に間違っているといっていい。 Goではある種の型の値はそもそもポインタのようなものである。上記の型はどれも任意の大きさになり得るが、大きくなりうる実体のデータはヒープに確保されていて、値そのものが持っているのはそのヒープ上への値へのただのポインタ+多少の付随的なデータにすぎない。こういった値を値渡しではなくポインタ渡しする必要はない。ポインタのデリファレンスのほうがポインタのコピーより高くつくし、余計な混乱を引き起こすだけだからだ。もしこういう値をポインタ渡ししているとしたら、そのコードはなにか深い意味があるのではなく、それを書いた人が大きな値がコピーされると勘違いしていて書いた可能性のほうがずっと高い。 文字列は2ワ

    Goでxxxのポインタを取っているプログラムはだいたい全部間違っている - Qiita
    vvakame
    vvakame 2015/01/16
    参考になる
  • 新世代トークアプリ「755」について僕が感じていること - razokulover publog

    755というアプリを知っているだろうか。 新世代トークアプリ「755」 最近だとAKB48やE-girlsをCMに起用し、テレビで放映されているのでその存在くらいは知っている人も多いと思う。 今回はこのたびiOS,Android累計で250万ダウンロードを突破したというニュースを聞いて、再インストールしてみた僕が755について感じたことをまとめてみたいとおもう。 755はどんなアプリか 755とは芸能人と交流できるコミュニーケーションアプリである、と表向きは通っている。 表向きはというのがミソなのだが別に嘘ではない。 ただメインはそこではないということだ。 LINEと同じようなアプリじゃないの?と思っている方、それは全く違うので認識を変えたほうがいい。 順を追って説明しよう。 755でできることは主に以下の2つ。 ①トークを作成する ②やじうまコメントをする 以上だ*1。 トークはLINE

    新世代トークアプリ「755」について僕が感じていること - razokulover publog
    vvakame
    vvakame 2015/01/16
    755面白そうやな… -w な当たり、面白いネーミング
  • いじる自由!auがFirefox OSスマホ『Fx0』のソースコード公開 - 週刊アスキー

    auは1月16日、Firefox OSスマホ『Fx0』の技術情報サイトをオープンし、OSのソースコードを公開した。今回ダウンロードが可能になったのは、Firefox OSのソースコードとSTEP形式の『Fx0』筐体3Dデータ、Webサーバー化ライブラリ『httpd.js』、『Open Web Board』の技術情報やドライバーなど。 auは「選べる自由」をうたってきましたが、今回の『Fx0』のOSソースコード公開で「いじる自由」も実現。「つくる自由」は筐体3Dデータで実現しています。次の自由はなんでしょうか? ■関連サイト ・au Firefox OS関連技術情報 ・au Firefox OSポータルサイト 防気泡・防指紋!光沢保護フィルム『C... 999円 OverLay Plus for Fx0 LGL25 低反射... 980円 ミラータイプ 液晶保護フィルム『Mir... 1,1

    いじる自由!auがFirefox OSスマホ『Fx0』のソースコード公開 - 週刊アスキー
  • Support for tsconfig.json files by ahejlsberg · Pull Request #1692 · microsoft/TypeScript

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    Support for tsconfig.json files by ahejlsberg · Pull Request #1692 · microsoft/TypeScript
    vvakame
    vvakame 2015/01/16
    ほぬー。
  • 技術力がつかない負の流れに陥ってしまった。 - 東京アンダーグラウンド

    最近自分がとらわれている負のスパイラルについて、思うところがあって書いてみた。 吐き出せば楽になれるかもしれない。 例外的な人はもちろんたくさんいると思うけど、一般的にSIer社員は技術力が低いと言われている。 たしかに自分の周りのSI社員にまともにコードを書ける人なんていないし、話に出るのは1990年代から2000年代のテクノロジーだ。 業務中にプログラミングをするときは、それが業務を改善するためのものであっても、周りの目を気にしてIDEを開く。 隙間の時間に、ほんの少しだけ。 手を動かさないと技術が身に付かないのは事実で、そういう意味だと、SI社員が技術を身に付ける時間は非常に限られている。 少なくとも、業務中に技術的なことをやる時間はほとんどないので、何かを身に付けたいときは、業務外に頑張って時間をとって勉強しなければならない。 家に帰ってからが勝負になる。 例外的な人になるためには

    vvakame
    vvakame 2015/01/16
    僕も昔同じ感じで、Androidやってみたいけどやる暇ないし気力もないしで、本当に辛かった。だから、会社辞めてAndroidやっていい会社に転職した。たぶん正解だったと思う。
  • Atom Flight Manual

    CompanyEngineeringProductSunsetting AtomWe are archiving Atom and all projects under the Atom organization for an official sunset on December 15, 2022. January 30, 2023 Update: Update to the previous version of Atom before February 2 On December 7, 2022, GitHub detected unauthorized access to a set of repositories used in the planning and development of Atom. After a thorough investigation, we hav

    Atom Flight Manual
    vvakame
    vvakame 2015/01/16
  • io.js-v1.0.0のリリースによせて - ぼちぼち日記

    1. 祝 io.js-v1.0.0/1.0.1 のリリース NodeやJSの情報にアンテナを張っている人なら知っているとは思いますが、昨日無事「io.js」がリリースされました。 リリース直前のバグ修正の追い込みやライブラリアップデートのごたごたは、かつてのNodeのリリースそのままでした。 今日のリリースを予言していたわけではないですが、実は昨年の8月初旬に、 ということを書いていました。 これがまさに現実になってしまったなぁ、と驚きと共に感慨深いものがあります。 Nodeの方は、今Julienが頑張ってチケットをクローズしており、近日中に Node-v0.11.15がリリースされる予定です。問題なければNode-v0.11.15のリリース2週間後にNode-v0.12 になるでしょう。 io.jsができた細かい経緯については、古川さんの「io.jsについて知っていること」が詳しいです。

    io.js-v1.0.0のリリースによせて - ぼちぼち日記