Enviar pesquisa
Carregar
プログラミング言語Cyanの紹介
•
Transferir como ODP, PDF
•
0 gostou
•
2,086 visualizações
baban ba-n
Seguir
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 28
Baixar agora
Recomendados
Swift を振り返ってみよう #cswift
Swift を振り返ってみよう #cswift
Tomohiro Kumagai
nomlab_okayamaruby_slide
nomlab_okayamaruby_slide
nomlab
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Shinichi Okada
JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門
Shohei Arai
nomlab_okayamaruby_subslide
nomlab_okayamaruby_subslide
nomlab
Swift の可変値と不変値 #cocoa_kansai
Swift の可変値と不変値 #cocoa_kansai
Tomohiro Kumagai
Kotlinアンチパターン
Kotlinアンチパターン
Recruit Lifestyle Co., Ltd.
Kotlinミニアンチパターン
Kotlinミニアンチパターン
Recruit Lifestyle Co., Ltd.
Recomendados
Swift を振り返ってみよう #cswift
Swift を振り返ってみよう #cswift
Tomohiro Kumagai
nomlab_okayamaruby_slide
nomlab_okayamaruby_slide
nomlab
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Shinichi Okada
JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門
Shohei Arai
nomlab_okayamaruby_subslide
nomlab_okayamaruby_subslide
nomlab
Swift の可変値と不変値 #cocoa_kansai
Swift の可変値と不変値 #cocoa_kansai
Tomohiro Kumagai
Kotlinアンチパターン
Kotlinアンチパターン
Recruit Lifestyle Co., Ltd.
Kotlinミニアンチパターン
Kotlinミニアンチパターン
Recruit Lifestyle Co., Ltd.
Students.rb #1 資料
Students.rb #1 資料
Tetsunari Niina
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
parrotstudio
Refactoring point of Kotlin application
Refactoring point of Kotlin application
Recruit Lifestyle Co., Ltd.
Kotlinの紹介
Kotlinの紹介
豊明 尾古
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
豊明 尾古
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
monglee
コードに基づくモデルによる IntelliCode
コードに基づくモデルによる IntelliCode
m ishizaki
TechDo Goハンズオン#3
TechDo Goハンズオン#3
privatemy
リテラルと型の続きの話 #__swift__
リテラルと型の続きの話 #__swift__
Tomohiro Kumagai
詳解! Decimal
詳解! Decimal
Tadashi Saito
Vs2019 を試してみる会
Vs2019 を試してみる会
m ishizaki
プリキュアのRuby実装の紹介 #RubyHiroba
プリキュアのRuby実装の紹介 #RubyHiroba
Go Sueyoshi (a.k.a sue445)
First step of Rails Contribute #shibuyarb
First step of Rails Contribute #shibuyarb
Go Sueyoshi (a.k.a sue445)
で、次は何がくるの? - 第2回 TIS Matsuri
で、次は何がくるの? - 第2回 TIS Matsuri
Yoshitaka Kawashima
Rubyでプリキュアを作った #cure_advent #shibuyarb
Rubyでプリキュアを作った #cure_advent #shibuyarb
Go Sueyoshi (a.k.a sue445)
20130615 組込みの仕事場でRubyを使う
20130615 組込みの仕事場でRubyを使う
Ryo Nagai
Rubyist started to learn Groovy - things important to leran new LL
Rubyist started to learn Groovy - things important to leran new LL
Uchio Kondo
TypeScript & 関数型講座 第2回 TypeScript という言語
TypeScript & 関数型講座 第2回 TypeScript という言語
gypsygypsy
C++ tips1 #include編
C++ tips1 #include編
道化師 堂華
C++ tips2 インクリメント編
C++ tips2 インクリメント編
道化師 堂華
Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門
Hisakuni Fujimoto
普通のプログラミング言語R
普通のプログラミング言語R
Shuyo Nakatani
Mais conteúdo relacionado
Mais procurados
Students.rb #1 資料
Students.rb #1 資料
Tetsunari Niina
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
parrotstudio
Refactoring point of Kotlin application
Refactoring point of Kotlin application
Recruit Lifestyle Co., Ltd.
Kotlinの紹介
Kotlinの紹介
豊明 尾古
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
豊明 尾古
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
monglee
コードに基づくモデルによる IntelliCode
コードに基づくモデルによる IntelliCode
m ishizaki
TechDo Goハンズオン#3
TechDo Goハンズオン#3
privatemy
リテラルと型の続きの話 #__swift__
リテラルと型の続きの話 #__swift__
Tomohiro Kumagai
詳解! Decimal
詳解! Decimal
Tadashi Saito
Vs2019 を試してみる会
Vs2019 を試してみる会
m ishizaki
プリキュアのRuby実装の紹介 #RubyHiroba
プリキュアのRuby実装の紹介 #RubyHiroba
Go Sueyoshi (a.k.a sue445)
First step of Rails Contribute #shibuyarb
First step of Rails Contribute #shibuyarb
Go Sueyoshi (a.k.a sue445)
で、次は何がくるの? - 第2回 TIS Matsuri
で、次は何がくるの? - 第2回 TIS Matsuri
Yoshitaka Kawashima
Rubyでプリキュアを作った #cure_advent #shibuyarb
Rubyでプリキュアを作った #cure_advent #shibuyarb
Go Sueyoshi (a.k.a sue445)
20130615 組込みの仕事場でRubyを使う
20130615 組込みの仕事場でRubyを使う
Ryo Nagai
Rubyist started to learn Groovy - things important to leran new LL
Rubyist started to learn Groovy - things important to leran new LL
Uchio Kondo
TypeScript & 関数型講座 第2回 TypeScript という言語
TypeScript & 関数型講座 第2回 TypeScript という言語
gypsygypsy
C++ tips1 #include編
C++ tips1 #include編
道化師 堂華
C++ tips2 インクリメント編
C++ tips2 インクリメント編
道化師 堂華
Mais procurados
(20)
Students.rb #1 資料
Students.rb #1 資料
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
これからのJSの話をしよう ~jQueryで作るTwitterアプリ~ (Gunma.web #2 2010/10/9)
Refactoring point of Kotlin application
Refactoring point of Kotlin application
Kotlinの紹介
Kotlinの紹介
Rubyistのためのkotlin紹介
Rubyistのためのkotlin紹介
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
コードに基づくモデルによる IntelliCode
コードに基づくモデルによる IntelliCode
TechDo Goハンズオン#3
TechDo Goハンズオン#3
リテラルと型の続きの話 #__swift__
リテラルと型の続きの話 #__swift__
詳解! Decimal
詳解! Decimal
Vs2019 を試してみる会
Vs2019 を試してみる会
プリキュアのRuby実装の紹介 #RubyHiroba
プリキュアのRuby実装の紹介 #RubyHiroba
First step of Rails Contribute #shibuyarb
First step of Rails Contribute #shibuyarb
で、次は何がくるの? - 第2回 TIS Matsuri
で、次は何がくるの? - 第2回 TIS Matsuri
Rubyでプリキュアを作った #cure_advent #shibuyarb
Rubyでプリキュアを作った #cure_advent #shibuyarb
20130615 組込みの仕事場でRubyを使う
20130615 組込みの仕事場でRubyを使う
Rubyist started to learn Groovy - things important to leran new LL
Rubyist started to learn Groovy - things important to leran new LL
TypeScript & 関数型講座 第2回 TypeScript という言語
TypeScript & 関数型講座 第2回 TypeScript という言語
C++ tips1 #include編
C++ tips1 #include編
C++ tips2 インクリメント編
C++ tips2 インクリメント編
Semelhante a プログラミング言語Cyanの紹介
Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門
Hisakuni Fujimoto
普通のプログラミング言語R
普通のプログラミング言語R
Shuyo Nakatani
The evolution of c#
The evolution of c#
leverages_event
2011年10月21日
2011年10月21日
nukaemon
Storyboard
Storyboard
Yukihiko Kagiyama
今からでも遅くないC#開発
今からでも遅くないC#開発
Kazunori Hamamoto
Rubyとプログラミング言語の潮流
Rubyとプログラミング言語の潮流
Kazuhiko Kato
第2回勉強会スライド
第2回勉強会スライド
koturn 0;
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
Koichi Sakata
C++ lecture-0
C++ lecture-0
sunaemon
第一回ゆるふわーる
第一回ゆるふわーる
Sachiko Hirata
Lightning introduction to CoffeeScript 20131005
Lightning introduction to CoffeeScript 20131005
gotohayato
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
YOSHIKAWA Ryota
Inside frogc in Dart
Inside frogc in Dart
Goro Fuji
第1回勉強会スライド
第1回勉強会スライド
koturn 0;
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
From Java To Clojure
From Java To Clojure
Kent Ohashi
Scala Daysに行ってみて
Scala Daysに行ってみて
Kota Mizushima
Start!! Ruby
Start!! Ruby
mitim
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
Akira Inoue
Semelhante a プログラミング言語Cyanの紹介
(20)
Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門
普通のプログラミング言語R
普通のプログラミング言語R
The evolution of c#
The evolution of c#
2011年10月21日
2011年10月21日
Storyboard
Storyboard
今からでも遅くないC#開発
今からでも遅くないC#開発
Rubyとプログラミング言語の潮流
Rubyとプログラミング言語の潮流
第2回勉強会スライド
第2回勉強会スライド
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
C++ lecture-0
C++ lecture-0
第一回ゆるふわーる
第一回ゆるふわーる
Lightning introduction to CoffeeScript 20131005
Lightning introduction to CoffeeScript 20131005
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
Inside frogc in Dart
Inside frogc in Dart
第1回勉強会スライド
第1回勉強会スライド
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
From Java To Clojure
From Java To Clojure
Scala Daysに行ってみて
Scala Daysに行ってみて
Start!! Ruby
Start!! Ruby
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
Angular ユーザーなら押さえておきたい! TypeScript と Visual Studio Code の基礎と活用
Mais de baban ba-n
Typusとadministrateを比較してみよう
Typusとadministrateを比較してみよう
baban ba-n
Typusと付き合ってきた話
Typusと付き合ってきた話
baban ba-n
ハッカソン。来た、見た、負けた! Spajam2016仙台予選
ハッカソン。来た、見た、負けた! Spajam2016仙台予選
baban ba-n
ガラホ、なるものに対応してきた
ガラホ、なるものに対応してきた
baban ba-n
Minitest調べてみた
Minitest調べてみた
baban ba-n
人工言語ロジバン超入門編
人工言語ロジバン超入門編
baban ba-n
普通のエンジニアが【ロジバン】やってみた
普通のエンジニアが【ロジバン】やってみた
baban ba-n
Rubyのコードを読んでみよう(オブジェクト編)
Rubyのコードを読んでみよう(オブジェクト編)
baban ba-n
Rubyのソースコードを読んでみよう(入門編)
Rubyのソースコードを読んでみよう(入門編)
baban ba-n
rails 管理画面作成gem Typus解説
rails 管理画面作成gem Typus解説
baban ba-n
名前重要 超重要
名前重要 超重要
baban ba-n
Rails-Plugin Flexturesの紹介
Rails-Plugin Flexturesの紹介
baban ba-n
Mais de baban ba-n
(12)
Typusとadministrateを比較してみよう
Typusとadministrateを比較してみよう
Typusと付き合ってきた話
Typusと付き合ってきた話
ハッカソン。来た、見た、負けた! Spajam2016仙台予選
ハッカソン。来た、見た、負けた! Spajam2016仙台予選
ガラホ、なるものに対応してきた
ガラホ、なるものに対応してきた
Minitest調べてみた
Minitest調べてみた
人工言語ロジバン超入門編
人工言語ロジバン超入門編
普通のエンジニアが【ロジバン】やってみた
普通のエンジニアが【ロジバン】やってみた
Rubyのコードを読んでみよう(オブジェクト編)
Rubyのコードを読んでみよう(オブジェクト編)
Rubyのソースコードを読んでみよう(入門編)
Rubyのソースコードを読んでみよう(入門編)
rails 管理画面作成gem Typus解説
rails 管理画面作成gem Typus解説
名前重要 超重要
名前重要 超重要
Rails-Plugin Flexturesの紹介
Rails-Plugin Flexturesの紹介
プログラミング言語Cyanの紹介
1.
プログラミング言語 Cyan の紹介
2.
Cyan ってどんな言語? ● プログラミング言語 Cyan http://www.geocities.jp/takt0_h/cyan/ 2008
年 U-20 プログラミングコンテストで受 賞 ● http://www.jipdec.or.jp/archives/project/procon/work/2 当時高校2年の学生が作成 国産言語
3.
どんな言語 既存の普及した言語で例えるなら ● Object 指向 CommonLisp ● マクロ付
Ruby ● プロトタイプオグジェクト指向 Ruby こんなカンジで例えると最初の取っ掛かりを つかみやすい言語です
4.
基本的な文法 ● ● 実際に文法を”ざらっと”見て行きましょう コメント # 「#」から行末がコメントです データ構造 ● 1 #
整数 ● "Hello,Cyan!!" # 文字列
5.
基本的な構文 ● ● [1, 2, 3
,4] # リスト %{ "Mt. Fuji" => "Shizuoka", "Mt. Aso" => "Kumamoto" } # ハッシュ { say(“HELLO”); } # ブロック ^(x) { say(x); } # ラムダ LL 言語使いなら見慣れた書式に近いのが分か る
6.
基本的な構文 ● # 関数呼び出し say "Hello,World!"
# 括弧 () は省略可能 # if 文 if( false ){ say "true" } else { say "false`" }
7.
基本的な構文 # while 文 i=0 while(i<5)
{ say i i++ }
8.
基本的な構文 # Python 風のインデントでも記述できます while(i<10): say
i i++ if( false ): say "true" else: say "false`"
9.
基本的な構文、メソッド定義 ● # Prototype オブジェクト指向で
JS 使いの感 覚に訴える書式です # Object を継承した Human を作成 ● Human = Object.child() Human.walk = ^(self, dir){ say(self.name + " walked " + dir + ".") }
10.
基本的な構文 ● 引数クラスと引数展開 say &(1, *[2,
3], *%{ 'a => 4 }, *&(5, :b 6)) #=> &(1, 2, 3, 5, :a 4, :b 6) ● ● ● 「 * 」で配列を展開して受け取る 引数の末尾では {} を省略してハッシュを渡 せる 「 & 」は " 引数オブジェクト " の定義記号 JS と Ruby 両方の合わせ技なカンジです
11.
Cyan の特徴1(マクロの存在) ● ここまでは多分似たような機構を他の言語で 触れている この言語、マクロがちゃんとあるのが特徴
12.
マクロの基本構文 準クォート「 ` 」の中で「
? 」付けた変数は 展開されてプログラム中に埋め込まれる recv = 2 args = &({ say "meow" }) # 2.times({ say("meow") }) という式を表示 say `(?recv).times(?*args)
13.
マクロの使い道 実際にはどういう場面で役に立つのか? # 例: cyan
本体に組み込まれているアナ フォリックマクロ aif( 10 ){ say it # 10 が表示される } # これとだいたい等価 if( it = 10 ){ say it }
14.
マクロの解説 実際にはこんなカンジで定義されています mac(aif)^(cond, then, &key
else): `if(it := ?cond, ?then, :else ?else) マクロを使うと関数定義では出来ない構文の 拡張が可能 これが第一の特徴
15.
Cyan の特徴 2
メソッド編 ● List に定義されているメソッドを見る http://www.geocities.jp/takt0_h/cyan/doc/ref/objects/lis 中身 : car() self の car を返します。 cdr() self の cdr を返します。 car と cdr しか定義されていない!!
16.
List.cy 探訪 ● その他のメソッドの定義は、初期化ファイル 群の中の list.cy
にある # Ruby の Array#each 相当のメソッド def(List.foreach)^(fn): unless(.null?()): fn(.car()) .cdr().foreach(fn)
17.
List#foreach の実行 書いて試してみる [1,2,3].foreach ^(i){
say i; } # 1 〜 3 を表示 動いた! 他にも List#map や List#fold 等も定義されて います ほとんどのメソッドが cyan 自体で記述され ている
18.
Object.cy の中身 ● 他にも object.cy
のファイル名があるので中 を見てみる def(Object.init)^{} def(Object.new)^(&args args): obj := .child() obj.init(*args) obj オブジェクトの定義そのものがマクロ
19.
while マクロ探訪 # control.cy mac(while)^(test,
body): `loop: if(!?test): break() begin(?body) 実は while 文自体マクロ、 for 文もマクロ なので unless 文なども if から作成可能
20.
Cyan 全体の総論 総論: Cyan という言語は 必要最小限のオブジェクトと構文のみを Cyan
本体で定義して、その他の構文やメ ソッドは Cyan 自体で書いてしまうという戦 略を取っている。 これは Cyan の美しさでありパワー
21.
Cyan の欠点 ● ● ● 先ほど出したように List#foreach
からして再 帰構文 再帰する度にスタックに状態を溜める→メモ リにやさしくない
22.
Cyan のパフォーマンスを計ってみ る ● http://tanakahisateru.hatenablog.jp/entry/20081226/123 Ruby に対して
1/650 ● Scheme に対して 1/2000 ● Python に対して 1/6500 ● Scala に至っては 1/26000! 再帰構文が多用されるアルゴリズムでは破滅 的な速度低下を引き起こす
23.
Cyan の欠点2 ● ● ● ● コンソールが死ぬほど使えない 「←」キーを打っても、キャレットが移動し ない (
それどころか“ read error:” になる ) 同じくコンソールで「↑↓」を押しても履歴 を見ない 「 delete 」キーでキャレットが謎のワープを する事がある
24.
Cyan の欠点 3 ● If
文で謎のインデントを強いられる if( false ): say "true" else: # else が1文字インデントしている say "false`" インデントしないと変数と勘違いして 「 error: unbound variable: else 」 正直我慢できる程度に慣れる事はあっても、 生涯に渡って好きにならない自信がある
25.
欠点総論 ● 構文の最適化やコンソールなど、普通に作れ ば解決できるはずの箇所の実装が全くなされ ていない
26.
Cyan 総論 1 Cyan
自体が生み出した新規の概念などは見 当たらないが他の言語の強力な書式をバラン スよくまとめてある Lisp の様に、今記述している問題を、関数や マクロに切り出して、”対象の本質とは何 か”を切り出す力強さを持っている Cyan=( 思案 ) という言語の名前の由来の一つ でもある
27.
Cyan 総論 2 ● ● ● 実行速度やツール面などの作りこみが足りて いない、そのまま放置されている 本体は、末尾再帰の最適化、
compile メソッド 等の速度改善が必要 これに単体テストフレームワークや .Net ライ ブラリの簡潔な呼び出しなどの周辺ライブラ リの整備いる、足りないので産業界に受け入 れられなかった、一言で言うと”残念な美人”
28.
最後に ● ● 国産ですし、可能性のある言語なのでもう少 し評価されていいと思ってプレゼンしました 作者さん、次の言語作るならそれはそれでい いので、今度は産業界に受け入れられるだけ のものを待っています!! 以上、ありがとうございました!!
Notas do Editor
{}
Baixar agora