* セキュリティキャンプ2017用の特設ページ -(by [[K]], 2017.03.28) ** 基本情報 -タイトル: 言語自作ゼミ -時間帯: 3日間連続 -概要: --言語自作ゼミは,川合講師が担当します. --講師が開発しているプログラミング言語「Essen」を題材として, どんな機能を付け加えたらいいのか考えたり, この言語を改造したり, 別の独自言語を作ってもらったりします. --具体的に何をするかは各自の希望をもとに設定します. --より詳しい説明が http://khfdpl.osask.jp/wiki/?seccamp2017 にあります. -必要機材: PCのみ -事前学習: あり -註: twitterではものづくりトラックは他のトラックも受講できると紹介されているようですが、それは関係者の誤解が原因の''誤報''です。このゼミを選択すると他のトラックもゼミも一切受講できません(他のものづくりトラックも同様です)。一つのことを専門的に極める感じになります。 --一日も早い訂正を期待していますが、まだ対応してもらえていません(04/08時点)。 ** (1)背景情報 -現在、講師である川合はプログラミング言語を作っています。川合はC言語を入門者に教えた経験があり、その際に「こんな仕様だったらもっと教えやすいのに」と感じたことが多かったので、開発当初は初心者向けの言語を想定していました。 -しかし作っているうちに、初心者だけではなく上級者にとっても十分に役立つ言語にしたいと思うようになり、欲張りな仕様になっています。 -ちなみに作っている言語は「Essen」(えっせん)という名前です。 --応募に際して確認する必要はないですが、もし興味があればEssenのホームページもあります。→ http://khfdpl.osask.jp/wiki/?Essen -どんな言語にしたいのか? --''全体としてはC言語みたいな言語''(でもコンパイラではなくインタプリタ) --変数の''宣言をしなくても代入できる'' ---でも''宣言をすることもできて''、その場合は、その型に適合しないものを代入しようとするとエラーになる(実行時エラー) ---これは関数の引数とかで引数ミスを検出したいときなどに有用 --''セミコロンを付けなくてもOK''な言語(ちなみにつけてもいい) a = 1 b = 2 // こんな感じで書いてOK --''コンマを書かなくてもOK''な言語(ちなみにつけてもいい) a = func(1 2 3) b = func(a + b c d) c = func(-1, -2 4) // -2の前にコンマがないと引数の数が2個になってしまう --''実行速度は速くない'' ---しかしインラインC言語とか、インラインRubyなどを使うことができて、だから速度が必要なときは、他の言語に逃げればいい。ほとんどの既存の言語に対してインライン記述が使用できる。 ---でも実はインラインRubyとかがうまくいくかどうかちょっと自信がない。 ---もちろんRubyなどを私が実装するわけではなく、インライン部分を切り出したファイルをその都度自動生成して、system関数などでRubyを実行し、その結果をファイル経由で受け取って、実行を続行するという方法。 --C言語は関数を自由に作ることができる、C++なら型(クラス)だって自由に作れる。これに対し、この言語では''演算子や制御構文も自由に作れる''。 --変数については''永続変数をサポート''しているので、ファイルやデータベースの知識がなくても、データを保存することができる。 ---永続変数というのは、プログラムを終了しても消えない変数のこと。PCの電源を切っても、また電源を入れて言語を起動すれば、変数の内容は戻る。 ** (2)キャンプでは何をするのか -キャンプで学生がやることは以下のことを想定しています。当日でも事前学習でもほぼ同じことをやります。 -[ユーザコース] --川合が上記の言語を作るので、その言語を使ってみて、使いやすいところ使いにくいところをどんどん指摘してください。 --また「ここはこうできたらいいのに」と思うところがあればそれも是非教えてください。実現可能でいいアイデアだったら採用します。 --バグやセキュリティホールを見つけたら教えてください。講師ががんばって直します。 --このコースの場合、この言語を使って何かプログラムを作って、それを感想と共に発表するのがゴールです。 -[開発者コース] --川合が作る言語処理系を直接改造して開発を手伝います。これをやりたいのならC言語の知識が必要です。 --このコースの場合、どれだけたくさんの改良提案ができたかがゴールになります。提案はパッチなどの具体的なプログラムを添えて行います。 -[ライバルコース] --学生は川合のライバルとなり、オリジナルの言語を開発します(もしくは既存言語を改造します)。 --このコースの場合、自分のオリジナル言語をある程度完成させて、川合の言語よりもここがすごいんだぜ!と自慢できるようになるのがゴールになります。 -これらのコースは固定ではなく、学生は自分のスキルや関心に応じて、自由にコースをまたいで学習していきます。 ** (3)セキュリティは? -この講義ではセキュリティは主たる要素ではありません。まずはプログラミングです。 -そして言語にはバグやセキュリティホールがきっと出てくると思います。そうしたらそれを題材にして、これはどうしたらいいのかを考えてもらいます。 -一般にセキュリティホールをつぶすと、不便さが増します。それはいいことなんでしょうか。セキュリティと便利さを両立させる方法はないでしょうか。開発者であれば、是非その視点を持ってほしいです。 --あれも禁止、これも禁止としていけば、それは簡単に安全になるでしょうが、しかし何もできなくなってしまうのです。それは理想じゃないですよね。 ** (4)どんな学生に受講してほしいのか -''プログラミングが大好きな学生'' --そうでなければ始まりません! ちなみにセキュリティに関する知識は応募時点では一切不問です。 --得意な言語はなんであっても構いません。 --プログラミングが大好きで、前からこの言語はここが不便だと感じていたんだよなー、みたいになんとなく思っていたら、きっとこの講義は心底楽しめるでしょう。 -''事前学習に時間が取れる学生'' --試験期間(の前後)や修学旅行などの時期は事前学習を完全にお休みしていただいて構いませんが、それ以外は1週間あたり5時間くらいは事前学習に費やしてほしいです。ですからたくさんの塾を掛け持ちしていて忙しくてたまらない、アルバイトが大変すぎる、部活動が大変すぎて時間がない、という人は、申し訳ありませんが他の講義を選択してください。 --自宅もしくは学校にPCがないと事前学習ができないと思います。持っていなかったらごめんなさい! -''優秀な学生じゃないとだめですか?'' --もちろん優秀な学生は大歓迎ですが、しかしそれほどには技術力がない学生にも来てほしいと思っています。だってこの言語は初心者向けでもあるんです。上級者ばかり集まってしまったら、意見や感想が偏ってしまうかもしれません。でも「どうせ自分はできないから~」みたいにあきらめてしまう人は楽しくないので、熱意とやる気にあふれる人がいいです。是非どんどん学んで、追い抜いてください! * こめんと欄 #comment