comments-in-computer-languages
は、かなり恣意的に分類しているため、
その言語の特性や他との類似点を調べてから記載しています。
その調査で分かったことなどをだらだら書き連ねてあるだけ。
下に行くほど昔なので、無知になっていきます。
$Id: comments-comp.m4,v 1.7 2024-01-09 20:29:56+09 kabe Exp $
ABC Progress ABL Adblock Plus filter AFL Agda AGI LOGIC Alloy Query ANTLR Apex AppArmor AQL AQL AsciiDoc Aseba Asterisk dialplan ATL AutoGen AutoIt Bakefile Befunge Befunge-96 Laravel Blade BLISS CPL bolt Boo Boogie IVL BrightScript C/AL C0 CAPL Cap'n Proto Chameleon/TAL Chapel ChordPro ChucK CIF Basic Control Engine Cisco VPN Solutions Center template Clafer Clipper Clojure CloverETL Transformation Language CMake Coccinelle Xilinx .COE CoffeeScript CPL Concordance Programming Language Crystal Csound CSPro CUPL Cypher Query Language Cython Dart DCL Deluge djbdns DokuWiki DOT Drools rule DTML Dust CA Easytrieve ECL EEL Egison EGL EJS Elixir Elm Emblem EPL Siebel eScript ESI ExpressionEngine False FASTBuild FileMaker Pro formula FileMaker Pro script FitNesse Flamingo template Foobar2000 FormCalc Forth Fountain FreeMarker F# Galen Gallina GAMS GAUSS Gaussian Gentee Gherkin OpenGL Shading Language GML GNU ld linker script Go Google CodeのWiki Go html/template Gradle GrADS GraphQL groff Groovy h2o Hack Haku HAML Hamlet Harlowe HCL Haskell Haxe HiveQL Hjson HLA HOC HTL HyPhy Icinga 2 ICM script IDL Idoc Idris Igor Pro ILLGOL ILOG OPL iMacros ImageJ Apache Impala InfluxDB Line Protocol Informatica PowerCenter Transformation Language intbigot INTERCAL Io Isabelle Jade JAL Java .properties JavaServer Faces Facelet template JBehave Jess Eclipse JET JEXL JHipster AutoSys JIL Jinja 2 JSL JSON Jsonnet React JSX Julia Karel Kefir Kentico macros 華和梨インラインスクリプト Kitten Kivy Kotlin KQL kramdown LabTalk Ledger LEF/DEF Less libconfig Liquid LSP Lumerical Lush LUSTRE "M" Modeling Language (Oslo) MakeCAB directive Mako Markdown Mason GNU MathProg Maxima MAXScript mCRL2 micro:bit Touch Develop Minitab macro mIRC Modelica MODX MoinMoin Monkey MoonScript Mosel MPW Shell MQL Mustache MVEL N1QL Nasal NASL NATURAL NCL NED netCDF Nim Nimrod NScripter NSIS NuSMV OAL ObjectScript OpenSCAD Oval Ox PDL Perfect Perl 6 Processor Expert macro-language pgScript phpBB template Pig Latin Pine PJL PL/B PlantUML PmWiki gettext po PocoScript Popcorn Scripting Language Power Query (M) Formula Language PRACTICE PRADO Framework template Processing Promela protocol buffers pug Puppet PVS PxPlus q QiChat QML QPL Q# R Racket Raku Razor RD Red RELAX NG reStructuredText Robot Framework MicroTik RouterOS Globus RSL RSP Rust SakuraScript Sass Scala Scratch Scribble SenseTalk Sentient SIDOPS+ SilverStripe template SIMPL+ simplate Slim Smarty SPICE Manipulation Language Snowman SPEL+ SphinxQL Spice Spin SPL SQL*Loader SQR Squirrel Stan *W Stata Sterling Connect:Direct Process Structured Text Stylus SugarCube Swift syslog-ng SystemTap Tableau TableGen Taskjuggler Tcl TDF TECO Tempate Toolkit Textile for Textpattern Textile TextMate Thymeleaf TICKscript Tiger Topaz Tornado template T-Plan Robot TurtleScript Twig Twirl TypoScript うんこスクリプト Unlambda UnrealScript var'aq Varnish Configuration Language VDIF Velocity VEX Volt V+ Voyager USB 3.0 Exerciser Generation Script Language WebVTT Why3 Wikidot Xbasic XQuery YAML YARA Yices Yorick Z3 Zephir ( 333 entries )
CAPLは主役ではなく、
処理ブロックをビジュアル的に組み立ててシステムを作る。
CAPLはブロックでは書けないややこしいものを書く。
イベントドリブン型で、main()
に相当するものは
on start
になる。
Cに似ているので、注釈は /*...*/
が使えそうなのだが、
例題(KB0012437)では
//...
の他に、ホットコメント
/*@!Encoding:1252*/
が見える。
#pragma
も色々拡張されているようだし、
Cだと思って書くと穴にはまるかも。
on start { write("辺区田 太郎"); //.pdfの例題では全角カッコだった }
//...
HOW TO RETURN (a, b) over (c, d): PUT c*c+d*d IN rr RETURN (a*c+b*d)/rr, (-a*d+b*c)/rr
\...
サンプルを見ても 現代詩のようにしか見えず、「動き」が読めない。 「本(真)」 が main() に相当する。
歩くとは無限大のことです。 忘れるとは件で「記憶に心を奪われて」を見せるのことです。 本真とは歩くことを忘れてしまったと言う事です。
註 ...。 注...。
grammar Foo { token TOP {\d注釈形式はPerl6を踏襲。\d} }; my $parsed = Foo.parse: "3 3"; say $parsed ; # OUTPUT: ≪「 」≫
#... #`(「『...』」) =begin comment ... =end comment
#NAMEの#に特殊な意味はなく識別子の一部で、
ローカル変数は#で始めるというお約束によるもの。
文字列長は253バイトが最大。
行番号は必須ではない。たぶんエディタがつけてくれるもの。
0010 * THIS PROGRAM TAKES INPUT FROM THE USER AND THEN PRINTS IT 0020 DEFINE DATA LOCAL 0030 1 #NAME (A20) 0040 END-DEFINE 0050 INPUT 'WHAT IS YOUR NAME?'#NAME 0060 WRITE 'HELLO ' #NAME 0070 END
ON ERROR 文やフィールド再入力用のREINPUT文を持っているが、 GOTOは無さそうなので例外処理は苦手そうな印象を受ける。 どうしてるんだろう。
* ... 行頭のみ **... 行頭のみ ****** という使いかたを想定 /* ...
Stan is an imperative probabilistic programming language. It is an instance of a domain-specific language, meaning that it was developed for a specific domain, namely statistical inference.(2018/02/18) 確率的プログラミング言語。 ハミルトニアンモンテカルロ法を使い、 統計的データモデルの統計的推定を行うシステム。 同類:PyMC
文面的にはC++に似る。 最終的にはC++に変換されてコンパイルされる。 ので、型はコンパイル時に静的に決まらないといけない。 理由は不明だが配列とベクトルと行列は可換ではない。
data { int N; // number of observations int P; // number of covariates matrix[N, P] X; //covariate matrix vector[N] y; //outcome vector } parameters { // We need to define two betas--the first is the restricted value, the next are the others. We'll join these in the next block real<lower = 0> beta_1; vector[P-1] beta_2; // the regression coefficients real<lower = 0> sigma; // the residual scale (note that it's restricted to be non-negative) real<lower = 0> nu; } transformed parameters { vector[P] beta; beta <- append_row(rep_vector(beta_1, 1), beta_2); } model { // Define the priors beta ~ normal(0, 5); // same prior for all betas; we could define a different one for each, or use a multivariate prior. The first beta will have a prior of the N+(0, 5) sigma ~ cauchy(0, 2.5); nu ~ cauchy(7, 5); // The likelihood y ~ student_t(nu, X*beta, sigma); } generated quantities { // For model comparison, we'll want to keep the likelihood contribution of each point vector[N] log_lik; vector[N] y_sim; for(i in 1:N){ log_lik[i] <- student_t_log(y[i], nu, X[i,]*beta, sigma); y_sim[i] <- student_t_rng(nu, X[i,]*beta, sigma); }
//... /*...*/
#... IF 0 ...IF 形式はcppの #if 0 に相当する選択コンパイル用の文法。 (インデントが途中でずれると無効ですね)
TradingView is a global platform for researching financial markets and blogging your ideas.(2018/02/18) 株価監視・分析SNS TradingViewで、 自分でグラフ描画や分析を行いたいときに使う言語。 株価は時系列データなので、時系列ベクトルデータのまま 各種演算や表示を行う。 同類:Amibroker AFL
study("MACD") //MACD (Apple Computer Inc.)の株価を監視 fast = 12, slow = 26 //変数代入 fastMA = ema(close, fast) //指数平滑移動平均(exponential moving average)を終値、定数fastで算出 slowMA = ema(close, slow) //指数平滑移動平均を終値、定数slowで算出 macd = fastMA - slowMA signal = sma(macd, 9) //単純移動平均(simple moving average) plot(macd, color=blue) //macd を青色でグラフ描画 plot(signal, color=orange) //signal をオレンジでグラフ描画
インデントは行継続の為に使うので、 普通のインデントは(できるようには見えるが)不可。
//...パーサーの都合だろうけど、 インデントされている箇所では注釈は入れられませんというのは不便だと思う。
お試し期間を過ぎると自動的に課金されますよ、というのは 危なっかしいサービスではある。
-- You may want to change the selected pin: alias led is pin_A0 pin_A0_direction = output -- forever loop led = on _usec_delay(250000) led = off _usec_delay(250000) end loop --
--...
//...
/*...*/
型の注釈は持っていない。
///...
でMarkdown形式のドキュメントコメントを書く。
// example_operators.jsonnet { foo: [1, 2, 3], bar: [x * x for x in self.foo if x >= 2], baz: { ["field" + x]: x for x in self.foo }, obj: { ["foo" + "bar"]: 3 }, }
//... /*...*/
#... 行頭のみ !... 行頭のみ
"meow" say // Kittens don't speak English.
ただ見辛さに耐えかねたのか、四則演算子は中置記法で書く。
5 -> x; x * x //xに5を代入し、自乗
Haskellのような純粋な関数型言語は「引数」が重要な概念なのだが、 実体が分かりにくい。Kittenはそこを「スタック」だ、と 割りきってしまっている所がわかりやすい。
//... /*...*/ 入れ子可
DIGITAL_INPUT trigger; STRING_OUTPUT output$; PUSH trigger { output$ = “Hello, World!”; }
//... /*...*/ #IF_DEFINED notdef ... #ENDIF
declare n as Integer; declare fibonacci_n as empty or one Integer; if (n < 0) fibonacci_n = ?; elif (n == 0) fibonacci_n = 0; else fibonacci_n_minus_1 = 1; fibonacci_n = 1; i = 2; while (i < n) fibonacci_n_minus_2 = fibonacci_n_minus_1; fibonacci_n_minus_1 = fibonacci_n; fibonacci_n = fibonacci_n_minus_1 + fibonacci_n_minus_2; i = i + 1; end while n - 2; end if;
//...
let Defs = [EFLAGS], isCommutable = 1, // X = ADD Y,Z --> X = ADD Z,Y isConvertibleToThreeAddress = 1 in // Can transform into LEA. def ADD32rr : I<0x01, MRMDestReg, (outs GR32:$dst), (ins GR32:$src1, GR32:$src2), "add{l}\t{$src2, $dst|$dst, $src2}", [(set GR32:$dst, (add GR32:$src1, GR32:$src2))]>;
//...
/*...*/
.php
のままだが、
処理指令は<?hh ...
<?hh namespace HHVM\UserDocumentation\BasicUsage\Examples\CommandLine; function fibonacci(int $number): int { return intval(round(pow((sqrt(5) + 1) / 2, $number) / sqrt(5))); } function main(array<string> $argv) { echo 'The ' . $argv[1] . ' number in fibonacci is: ' . fibonacci((int) $argv[1]) . PHP_EOL; } main($argv);
//... #... /*...*/注釈文法はPHP互換だが、 注釈についての記述はGitHubに埋もれている。
#...
。
しかし、VPN Solutions Center のは独自実装らしく、注釈文法が違う。
! #repeat ($ACL, $i) { access-list $ACL[$i] permit ip $Source_IP_Address[$i] $Source_Mask[$i] $Dest_IP_Address[$i] $Dest_Mask[$i] precedence 7 }
//...
module RevenueByDivision_BasicFeatures; create view Revenue as extract regex /((.\s*)?(first|second|third|fourth)\s*-\s*quarter)?\s*(revenues?)/ with flags 'CASE_INSENSITIVE' on between 1 and 5 tokens in R.text return group 0 as match from Document R; output view Revenue;
--... /*...*/
author:"John Smith" AND filetype:docx1行で書ける程度の検索を書くものなので、注釈は書けないっぽい。
str input uint high i j print("This program uses \"The Sieve of Eratosthenes\" for finding prime numbers.\n\n") high = uint( congetstr("Enter the high limit number ( < 100000 ): ", input )) if high > 100000 : high = 100000 arr sieve[ high + 1 ] of byte fornum i = 2, high/2 + 1 { if !sieve[ i ] { j = i + i while j <= high { sieve[ j ] = 1 j += i } } }
/*...*/ //...もともとはオブジェクト指向にするつもりはなかったようで、 オブジェクトの扱いは薄め。単純な手続き型言語を目指している。
式やステートメントは改行で区切られるので、
Cのように;
だらけにはならないが、
1行でマルチステートメントを書けるように、
改行の代わりに;
、{ }
の代わりに:
を使うことができる。
この2つの書き方は同じ。 if a == 10 : a = b + c; c = d + e if a == 10 { a = b + c c = d + e }
IF OS.FILE(data.tst) PRINT "File exists" ELSE PRINT "File doesn't exit" WHILE Register(pc)==0x1000 ;step until pc=1000H { Step } RePeaT 100. Step ;step 100 times RePeaT 0. Step ;step endless ON ERROR GOTO errorexit
;... //...
AUTO $ans TYPE "Welcome." PROMPT "May I have your name please? ", $ans TYPE $ans, " is now at the keyboard."
;...
#!/icm3/icm -s HELP = "Usage: " + File(last) + " [-h] [-chargeAmines] [-chargeAcids] [input.sdf] [output.sdf]" if Getarg( "-h", no delete ) quit HELP chargeAmines = Getarg( "-chargeAmines" no ) chargeAcids = Getarg( "-chargeAcids" no ) # files = Getarg( list ) if (Nof(files) != 2) quit HELP if !Exist(files[1]) quit HELP if Exist(files[2]) delete system files[2] # or ask for confirmation # read input file read table mol files[1] name="t" if (chargeAmines) then modify t.mol "[C;^3][N;D3]([C;^3])[C;^3]" "C[N+](C)C" exact l_info = yes endif if (chargeAcids) then modify t.mol "CC(=O)[O;D1]" "CC(=O)[O-]" exact l_info = yes endif # saves the result write table mol t files[2] delete quit
#...
; This example illustrates basic arithmetic and ; uninterpreted functions (declare-fun x () Int) (declare-fun y () Int) (declare-fun z () Int) (assert (>= (* 2 x) (+ y z))) (declare-fun f (Int) Int) (declare-fun g (Int Int) Int) (assert (< (f x) (g x x))) (assert (> (f y) (g x x))) (check-sat) (get-model) (push) (assert (= x y)) (check-sat) (pop) (exit)
;...
FOR EACH DELINQUENT-ACCT WHERE BALANCE > 200 DO CONTACT-COLLECTOR :if qualification needed, ENDFOR : use DELINQUENT-ACCT.field
:... --...
:
がプログラム上で特定の用途に使われておらず、
注釈文字になっているというのは珍しい。
+( & (resourceManagerContact="nickel.sao.nrc.ca") (count="1") (directory="/usr/people/gabriel") (executable="/usr/people/gabriel/cpi") (jobtype="mpi") (environment=("GLOBUS_DUROC_SUBJOB_INDEX" "0" ) ) (label="subjob 0") (stdout="/usr2/people/gabriel/cpi.out") (stderr="/usr2/people/gabriel/cpi.err") )
(*...*)
(define f::(-> int int)) (define i::int) (define j::int) (assert (= (- i 1) (+ j 2))) (assert (/= (f (+ i 3)) (f (+ j 6)))) → unsat
;...
.po
に抜き出されてくるので、
対応する翻訳文を人間が追記する。
# Wikipedia says that ‘etrurski’ is our name for this script. #: viewpart/UnicodeBlocks.h:151 msgid "Old Italic" msgstr "etrurski"
# ...
.po
ファイルそのものがコンパイルされるときは
#... がすべて無視されるようだが、
.po
生成時は
元コードから翻訳者への注釈 #.
、
元コードの位置を示す #:
などが含まれる。
# ...
は、翻訳者が次の翻訳者に向けて書く、
.po
再生成時にも保存される注釈。
{ scopeName = 'source.untitled'; fileTypes = ( ); foldingStartMarker = '\{\s*$'; foldingStopMarker = '^\s*\}'; patterns = ( { name = 'keyword.control.untitled'; match = '\b(if|while|for|return)\b'; }, { name = 'string.quoted.double.untitled'; begin = '"'; end = '"'; patterns = ( { name = 'constant.character.escape.untitled'; match = '\\.'; } ); }, ); }
//...当の文法記述ファイルそのものの注釈への言及はなく、
//...
が例題で使われていることだけが手掛かり。
CJKには対応していない わりには、なぜか 日本語のマニュアルがある のが謎ですが。
source s_local { system(); internal(); }; destination d_local { file("/var/log/messages"); }; log { source(s_local); destination(d_local); };
#...基本文法は
}
の後に;
を必須とする
BINDチック
な文法だが、
注釈は //...
や/*...*/
ではない。
オープンソース版(OSE)のマニュアルには注釈文法の
記載がなく、
Premium Edition (PE)のほうに載っている。
/*...*/
については記載がないので使えないのかもしれない。
void startProgram() // don't forget to aim your bot { setRgbLed(0, 0, 255); controlSystemTargetSpeed = 60; delay(1); controlSystemTargetSpeed = 0; }
//...
/profile { /path/to/file* r, # allow read /path/to/file1 w, # allow write deny /path/to/file2, w, # deny write audit /path/to/file3 w, # allow write with logging audit deny /path/to/file4 r, # deny read with logging }
# ...
-- 3ビットの2進カウンタ MODULE counter_cell(carry_in) VAR value : boolean; ASSIGN init(value) := 0; next(value) := (value + carry_in) mod 2; DEFINE carry_out := value & carry_in; MODULE main VAR bit0 : counter_cell(1); bit1 : counter_cell(bit0.carry_out); bit2 : counter_cell(bit1.carry_out);
--...他の処理系との連携は考えられていない。 仕様からコードを生成したり、既存のプログラムの検査というより、 仕様そのものが矛盾していないかどうかを仕様を書きながら 検査して仕上げていくためのツールなんだと思う。
=
は束縛条件で、
破壊代入は :=
。
Pascal風味だが、注釈はC++系。
algorithm y := 0; xpower := 1; for i in 1:n+1 loop y := y + a[i]*xpower; xpower := xpower*x; end for;
//... /*...*/普通の注釈の他に、 宣言文の後に任意の文字列リテラルを置いて注釈を付けられる。
partial model OnePort "Superclass of elements with two electrical pins" Pin p, n; Voltage v; Current i; equation v = p.v - n.v; 0 = p.i + n.i; i = p.i; end OnePort; model Resistor "Ideal electrical resistor" extends OnePort; parameter Real R(unit="Ohm") "Resistance"; equation R*i = v; end Resistor;また、専用の
annotation
文で
図やライセンス情報などの構造化された注釈を置くことができる。
annotation ( Icon(coordinateSystem(extent={{-100,-100}, {100,100}}), graphics={Rectangle(extent={{-100,-100}, {100,100}}), Text(extent={{-100,-100}, {100,100}}, textString="Icon")}));ごっそりブロックコメントアウト用の構文は持っていない。 普通は統合環境(IDE)で使う前提だから問題ない?
--... /*...*/
// an ignored comment entity A { name String, /** My comment */ count Integer }は、カンマの具合でMy comment のJavadocは count要素のほうにつくよ、という 注意書きの例。
//...Javadocにならない
/*...*/
が使えるのかどうかは不明。
task taskX(dependsOn: 'taskY') { doLast { println 'taskX' } } task taskY { doLast { println 'taskY' } }User Guide には地の文は Groovy である、としか書いておらず 注釈文法についての記載がない。 Stack Overflowで質問が出る 程度には知られていないらしい。 Groovy互換であれば
//... /*...*/Groovy互換なら入れ子は不可のはず。
処理系全体の名前が Coccinelle(こっちねる、テントウムシ) で、 .cocci に書くパッチ変換言語は SmPL (Semantic Patch Language) となっている。
@@ declarer name DEFINE_SPINLOCK; identifier xxx_lock; @@ - spinlock_t xxx_lock = SPIN_LOCK_UNLOCKED; + DEFINE_SPINLOCK(xxx_lock); @@ expression E; @@ - E = SPIN_LOCK_UNLOCKED + spin_lock_init(&E)
//... 行頭のみ /*...*/ 行頭のみ、ほとんど使われない
Void calculateNetPay(Employee emp) { for each emp1 in emp { emp1.NetPay=(emp1.BasicPay+emp1.HRA)-(emp1.PF+emp1.TAX); } }
//... /*...*/組込関数はExcelを参考にしたような普通のものしかなく、 微妙に直交性が悪い。 サンプルコードではインデントがされていない (HTML上もされていない) のは何かの嫌がらせだろうか?
Agda is a dependently typed programming language / interactive theorem prover.(2017.02.14) 型依存の強い関数型言語。 関数が返る時は必ず型が確定していなくてはならない (Haskellは型の確定が遅れても良い)。 実装はHaskell。
-- 再帰関数は何でも書けるわけではなく、 -- コンストラクタが減っていくもののみ data Nat : Set where zero : Nat suc : Nat -> Nat plus : Nat -> Nat -> Nat plus zero m = m plus (suc n) m = suc (plus n m) natEq : Nat -> Nat -> Bool natEq zero zero = true natEq zero (suc m) = false natEq (suc n) zero = false natEq (suc n) (suc m) = natEq n m
--... {-...-} 入れ子可注釈文法の字句構文はHaskellと同じ。
{{var}}
{% tag %}
{*comment*}
だが、設定で変えることも可能。
{*...*} {% comment %} ... {% endcomment %}
Microsoft Dynamics NAV is a complete enterprise resource planning (ERP) software solution for small and mid-sized organizations that is fast to implement, easy to configure, and simple to use.(2016.01.27) ビジネス管理ソフト (?) Microsoft Dynamics NAV で使う言語。 Pascal風で、大文字小文字は区別しない。 属性名に空白も使えるので、 文字定数に代入したり属性を参照したりしているように見えることがある。
WITH Cust DO BEGIN Cust := Rec; Dept.Code := "Department Code"; IF PAGE.RUNMODAL(O,Dept) = Action::LookupOK THEN BEGIN "Department Code" := Dept.Code; VALIDATE("Department Code"); Rec := Cust; END; END;
//... {...} 入れ子可
--... {-...-} 入れ子可
--
は注釈なのに -->
は字句であって注釈にならない
というのはなんか不公平感がある。
{-...-}
は入れ子可なのだが、ブロックコメントアウトに使うと
文字列中の-}
と干渉する。
(Cでも同じ問題があるが、#if 0で逃げられる)
Isabelle is a generic proof assistant. It allows mathematical formulas to be expressed in a formal language and provides tools for proving those formulas in a logical calculus.(2017.01.26) 定理証明システム。 実装はMLとScala。 入力は専用IDE、最終出力はLaTeXを想定しているようで、 チュートリアルでもASCII文字での入力の扱いが薄い。 同類:Why3
theory MyList imports Main begin (* list の定義 *) datatype 'a list = Nil | Cons 'a "'a list" (* append の定義 *) fun app :: "'a list => 'a list => 'a list" where "app Nil ys = ys" | "app (Cons x xs) ys = Cons x (app xs ys)" (* reverse の定義 *) fun rev :: "'a list => 'a list" where "rev Nil = Nil" | "rev (Cons x xs) = app (rev xs) (Cons x Nil)" (* (True False) のreverseは何か計算せよ *) value "rev(Cons True (Cons False Nil))" end
(*...*) 入れ子可、ML準拠
{*...*}
--...
\<comment>...
は
ベタテキストの埋め込み。
IDL is the trusted scientific programming language used across disciplines to extract meaningful visualizations out of complex numerical data.(2017.01.23) 汎用数値処理系 IDL の言語。 データ型は複素数まであり、リストや任意次元の行列も作れる。 型を持つが検査はゆるい。 同類:GAUSS
サブルーチンへの引数は参照渡しが基本。 ただ配列要素や構造体要素は値渡しに変換されてしまう。 比較演算子は EQ, LE, GT などだが、 < > は 最小値・最大値演算子に使うため。 NaNを食わせると結果は不定。
; Create a randomly-ordered array of integers ; from 0 to 9999: array = SORT(RANDOMU(seed,10000)) n = N_ELEMENTS(array) ; Find where in array the value 5 in located: FOR i = 0,n-1 DO BEGIN IF (array[i] EQ 5) THEN BREAK ENDFOR PRINT, i
;...大型機時代にそうするしかなかった不便な点を そのまま現代まで引きずってしまっている言語のような気がする。
@requires @ensure @loop_invariant @assert
で
contractを記述することができるが、
組込予約語ではなく、なぜか注釈文法を流用。
/* file log2.c0 */ int log(int x) //@requires x >= 1; //@ensures \result >= 0; //@ensures (1 << \result) <= x; { int r = 0; int y = x; while (y > 1) { y = y / 2; r = r + 1; } return r; }
//... /*...*/ 入れ子可なぜ
/*...*/
が入れ子可なのかは理解しがたい。
C0からCへの移行
が示されているくらいなら入れ子不可でもよかった気がする。
Case( PatternCount("MrMsMrs", LeftWords(Name, 1)), /* returns true if the first word in fieldName matches anyone of the titles Mr, Ms or Mrs*/ LeftWords(Name, 1) /*extracts the title */ )
/*...*/ 入れ子可 //...
Perform Find [Restore] If [Get (FoundCount) = 0] Show Custom Dialog ["Find Records"; "No record was found."] Else If [Get (FoundCount) = 1] Go to Layout ["Invoice Details"] Else Go to Layout ["Invoices"] End If
#...
FileMakerデータベースのテキスト言語には script と formulaがある。 script は処理の自動化、 formula は出力が1つだけの式言語。 script で式を書く箇所には式の注釈も書ける(まぎらわしい)。
formulaは入れ子可の注釈を持つが、scriptは #
のみ。
scriptにはブロックコメントアウト構文がない。
エディタの機能でカバー?
Igor Pro is an integrated program for visualizing, analyzing, transforming and presenting experimental data.(2017.01.23) 科学データ解析・表示ツール IGOR Proのプログラミングに使う言語。 汎用に使えるが、主な用途は信号処理・統計解析など。 基本データ型は数値、文字列と Wave (y=f(x)な系列データ)。 GUI操作がコマンドとして残るので、操作マクロとしても使えるが、 言語は汎用なので、自前の信号処理を頑張る事も可能。 同類:LabTalk
Function CreateNormalizedCopy(input) Wave input // Get the stats on input wave WaveStats/Q input Variable maxValue = V_max // Generate name of output wave String outputName = NameOfWave(input) + "_norm" // Create output wave Duplicate/O input, $outputName // Create a wave reference for output wave Wave output = $outputName // Do the normalization output = output / maxValue End
//... #if 0 ... #endif
//
だけの言語は珍しい。
The General Algebraic Modeling System (GAMS) is a high-level modeling system for mathematical programming problems.(2017.01.19) 数学的計画法ソルバ。 同類:Mosel, MathProg(AMPL)
=E= =L=
は = <= の意。
VARIABLES Z; POSITIVE VARIABLES Xcorn , Xwheat , Xcotton; EQUATIONS OBJ, land , labor; OBJ.. Z =E= 109 * Xcorn + 90 * Xwheat + 115 * Xcotton; land.. Xcorn + Xwheat + Xcotton =L= 100; labor.. 6*Xcorn + 4 * Xwheat + 8 * Xcotton =L= 500; MODEL farmPROBLEM /ALL/; SOLVE farmPROBLEM USING LP MAXIMIZING Z
*... 1カラム目 $ontext ... $offtext !!... 行末注釈 $oneolcom オプションが必要 /*...*/ $oninline オプション $hidden ... .LST出力に残らない
{ var i, total; i = 0; total = 0; repeat (10) { total += array[i]; i += 1 } draw_text(32, 32, total); }
//... /*...*/
Jess is a tool for building a type of intelligent software called Expert Systems. An Expert System is a set of rules that can be repeatedly applied to a collection of facts about the world.(2017.01.19) Reteアルゴリズムを使ったエキスパートシステム構築用の処理系。 実装はJava。Javaに埋めこんで使うことを想定。文面はLISP。 拡張子の .clp は、元は Clips言語の実装だったことに由来する。
;... /*...*/
Tableau is business intelligence software that helps people see and understand their data.(2017.01.19) エンタープライズ用データ分析ソフトウェア。 営業口上ばかりで どんなツールなのかさっぱりわからない。
//...
;
は不要。
(subqueryは可能)
FOR u IN users FILTER u.type == "newbie" && u.active == true RETURN u.name
//... /*...*/
border-radius(n) -webkit-border-radius n -moz-border-radius n border-radius n form input[type=button] border-radius(5px)
//... /*...*/ /*!...*/ 出力のCSSに残す
{value}
を埋めこんだ記述を、
動的な DOM生成に置き換えてくれる。
地の部分は JavaScriptそのものなので、JSX部分独自の 注釈文法はないことになっている。 しかしJSX部分の注釈はHTML出力に残ってしまう? 出力から消したい場合は一応、JSX中にて 下記の方式でできるらしい。
{/*...*/} {//... }
Red is a new programming language strongly inspired by Rebol, but with a broader field of usage thanks to its native-code compiler, from system programming to high-level scripting, while providing modern support for concurrency and multi-core CPUs.(2017.01.18) REBOLの方言。 システムプログラミングからアプリケーションまで全部カバーしようという 野心的な言語というか処理系。 なかなかに面白そう。 全部込みの処理系なのに大きさが1MBしかない。 実装はREBOL。
p-buffer!: alias struct! [buffer [c-string!]] set-hello: function [ s [p-buffer!] ][ s/buffer: "hello" s ;-- equivalent to C's char ** ] foo: func [ /local c [p-buffer!] ][ c: declare p-buffer! set-hello c print c/buffer ] foo ;-- call foo function
;... comment {...}
comment {...}
は、複数行文字列定数をcommentコマンドに食わせる、
という意味になる。
{ }
ではなく [ ]
を多用するので
Tclっぽく見えることもある。
GUIプログラムの雰囲気もTcl/Tkに似ている。
// swizzle vec4 pos = vec4(1.0, 2.0, 3.0, 4.0); vec4 swiz= pos.wzyx; // swiz = (4.0, 3.0, 2.0, 1.0) vec4 dup = pos.xxyy; // dup = (1.0, 1.0, 2.0, 2.0)
/*...*/ //... #if 0 ... #endif
//... /*...*/ #if notdef ... #endifマイクロソフト内では "M" という名前は Power Query用に取られてしまったらしく、その後の資料があまりない。 2010年にプロジェクト中止。 さらに "Oslo" の名称はその後、Office 365の自動検索システム Delveに使われる。
{% ... %}
。中身の文面はC#。
{% //... /*...*/ %}「K#」という名称はOverviewページでしか使われていない。 どの程度プロモートしている言語名なのか疑問がある。
||
なのがちょっと特徴的。
DIFF = DATE_DIFF(END_DATE,START_DATE,'DD') out_END_DATE = ADD_TO_DATE(out_START_DATE,'DD',DIFF)
--... //...
#...
object Host "my-server1" { address = "10.0.0.1" check_command = "hostalive" } object Service "ping4" { host_name = "my-server1" check_command = "ping4" } object Service "http" { host_name = "my-server1" check_command = "http" }
/*...*/ //... #...
|
)でつないで欲しいデータをまとめあげていく。
sourcetype=access_* status=200 action=purchase [ search sourcetype=access_* status=200 action=purchase | top limit=1 clientip | table clientip ] | stats count AS "Total Purchased", dc(productId) AS "Total Products", values(productName) AS "Product Names" BY clientip | rename clientip AS "VIP Customer"
`comment("...")`
`macro`
はマクロ呼び出しの文法。
stream |from() .measurement('cpu') |alert() // Compare values to running mean and standard deviation .crit(lambda: sigma("usage_idle") > 3) .log('/tmp/alerts.log')
//...
//...
だけの言語は珍しい。
'''
による複数行文字列もサポート。
使用時はJSONに変換する。変換器の実装はJS,C#,Goなど
色々用意されている。
同類:JSON,YAML,HCL
{ // use #, // or /**/ comments, // omit quotes for keys key: 1 // omit quotes for strings contains: everything on this line // omit commas at the end of a line cool: { foo: 1 bar: 2 } // allow trailing commas list: [ 1, 2, ] // and use multiline strings realist: ''' My half empty glass, I will fill your empty half. Now you are half full. ''' }
#... //... /*...*/
<%...%> <%_...%> 処理指令 <%=...%> 値 <%-...%> HTMLエスケープしない 他のテンプレート言語と違う <%#...%> 注釈。ブロックコメントは不可ですな <%% %%> 生の <% %> <%...-%> 改行を削除
<%#...%>
/*...*/ //...
forall, begin, cobegin
といったステートメントで
並列処理を指示する。
セマフォアは変数に sync や single 修飾子を付けて扱う。
var sy$: sync int=1; // state = full, value = 1 var si$: single bool; // state = empty, value = false si$ = true; // state = full, value = true var sy = sy$; // sy$: block until full, then state = empty var si = si$; // si$: block until full, then state = full
// Data-parallel hello world /* This program uses Chapel's data parallel features to create a parallel hello world program that utilizes multiple cores on a single `locale` (compute node). */ config const numMessages = 100; forall msg in 1..numMessages do { writeln("Hello, world! (from iteration ", msg, " of ", numMessages, ")"); }
//... /*...*/ 入れ子可
NCL is an interpreted language designed specifically for scientific data analysis and visualization.(2017.01.11) 科学データ解析・可視化ツール。 汎用に使えるが、 気象関連の応用例が多く、組込関数も地球科学関連のものが多い。 実装はFortranとC。 同類:gnuplot, LabTalk, ImageJ, GrADS
変数に対するメタデータがいろいろある。 主に使われる netCDFのデータ構造を反映している。
a = (/1,2,3,4,5,6,7,8,9,10/) ; 配列 a := (/(/"I", "am"/), (/"string", "now"/)/) ;再代入。バージョン6.1.1以降で可能 b = (/ (/1.0,2.0,3.0/), (/4.0,5.0,6.0/), (/7.0,8.0,9.0/) /) ;2次元配列 b@units = "none" ;変数自体に対する属性 b!0 = "dim0" ;次元に名前をつける b!1 = "dim1" b&dim0 = (/.1,.2,.3/) ;次元に対し、「座標」を付随させる b&dim1 = (/10,100,1000/) vl = [/ (/1,2,3/), 5.0, (/10000.d, 23.45d/), "abcde" /] ;可変長リスト temperature(0,5,6) ;要素の参照 temperature(1:3,5,6) ;部分配列 temperature(:,:,:) ;全部 file1 = addfile("file1.nc", "r") a = file1->temperature(0,:,:,:) ;ファイルから値(配列)を取り出す
;================================================; ; conwomap_2.ncl ; ; Concepts illustrated: ; - Drawing a simple filled contour plot ; - Selecting a different color map ; - Changing the size/shape of a contour plot using viewport resources ; ;================================================; begin f = addfile("cone.nc","r") u = f->u(4,:,:) wks = gsn_open_wks("png","conwomap") ; send graphics to PNG file res = True ; plot mods desired res@cnFillOn = True ; turn on color res@cnFillPalette = "gui_default" ; set color map res@vpWidthF = 0.5 ; change aspect ratio of plot res@vpHeightF = 0.3 res@gsnMaximize = True ; maximize plot size plot = gsn_csm_contour(wks,u,res) ; contour the variable end
;...
注釈は素の netCDFでは定義されておらず、
CF協約にて
comment
全域属性が提示されている。
データを無効化するコメントアウトに相当する形式は無い。
CDL: :comment = "..."; バイナリ: 0x0c, n, 7,"comment", 2, n,"..." ...
begin-program do list_customers end-program begin-procedure list_customers begin-select phone if &phone = '' print 'No phone' (,1) else print &phone (,1) end-if position (+1) from customers end-select end-procedure ! list_customers
!... #IFDEF notdef ... #ENDIFもともとはラインプリンタ出力だったのを、後付けでHTMLやPS出力に 対応させたような気がする。 やや饒舌な文面は確かにちょっとCOBOLっぽい。
ImageJ is a public domain Java image processing program inspired by NIH Image for the Macintosh.(2017.01.10) Javaで実装された科学的画像解析ツール。 手で実行した加工をマクロとして吐かせられる。 同類:Origin LabTalk
メニューから選べる処理が十分強力なので、処理は
そちら(run("...")
)に任せる。
スクリプトで画像加工を頑張る思想ではない。
// The macro demonstrates how to count cells // using the Process>Binary>Find Maxima command. run("Select None"); run("Cell Colony (31K)"); getRawStatistics(nPixels, mean, min, max, std, histogram); run("Find Maxima...", "noise=&std output=[Point Selection] light"); getSelectionCoordinates(xCoordinates, yCoordinates); print("count="+ xCoordinates.length);
//... /*...*/
//... /*...*/ `if(0) ... `endif
DECLARE @I, @T; -- Variable names begin with a @ SET @I = 0; -- @I is an integer WHILE @I < 20 BEGIN SET @T = 'table' + CAST (@I AS STRING); -- Casts @I CREATE TABLE @T (id integer primary key, data text); SET @I = @I + 1; ENDマニュアルには記載がないが、 パーサーの作りによると
--... /*...*/
コンパイラの実装は OCaml。 コンパイラは GPLv2+ だがランタイムのライセンスはMIT。 商用利用に抵抗が少ない。
言語の体裁は Java系 (ActionScript)。 マニュアルに注釈の説明がない。
//... /*...*/
foreach Item in (xfa.record.lists.list1.display[*]) do $.addItem(Item,"") endfor
;... //...
The Power Query Formula Language is a powerful query language optimized for building queries that mashup data. It's a functional, case sensitive language similar to F#, which can be used with Power Query in Excel, Get & Transform in Excel 2016, and Power BI Desktop.
For computer language theorists: Power Query is a mostly pure, higher-order, dynamically typed, partially lazy, functional language.(2017.01.08) 様々なデータ源からデータを引っ張ってきて合成する データ問い合わせ言語。関数型。
//... /*...*/F# と似た言語、と説明されているが、あまり似てはいない気もする。 例題がほとんど無いので雰囲気がつかめない。
We want to show that failures in @AfterStories methods will appear in the AfterStories report. Scenario: Given the alert status is OFF Given a trader of name Mauro And the alert status is OFF Given a stock of symbol STK1 and a threshold of 1.5 When the stock is traded at price 2.0 Then the alert status is ON When the trader sells all stocks Then the trader is left with no stocks
!--...BDDについての説明は http://behaviour-driven.org/Introductionに 丸投げしているが、画面が派手なだけで内容が全然無い。わからん。 Gherkinとやっていることは同じはず。 というか Gherkinからのコンバータも持っている。
-- This is a sample control file LOAD DATA INFILE 'sample.dat' BADFILE 'sample.bad' DISCARDFILE 'sample.dsc' APPEND INTO TABLE emp WHEN (57) = '.' TRAILING NULLCOLS (hiredate SYSDATE, deptno POSITION(1:2) INTEGER EXTERNAL(2) NULLIF deptno=BLANKS, job POSITION(7:14) CHAR TERMINATED BY WHITESPACE NULLIF job=BLANKS "UPPER(:job)", mgr POSITION(28:31) INTEGER EXTERNAL TERMINATED BY WHITESPACE, NULLIF mgr=BLANKS, ename POSITION(34:41) CHAR TERMINATED BY WHITESPACE "UPPER(:ename)", empno POSITION(45) INTEGER EXTERNAL TERMINATED BY WHITESPACE, sal POSITION(51) CHAR TERMINATED BY WHITESPACE "TO_NUMBER(:sal,'$99,999.99')", comm INTEGER EXTERNAL ENCLOSED BY '(' AND '%' ":comm * 100" )
--...
WEBVTT 00:01.000 --> 00:04.000 Never drink liquid nitrogen. NOTE I’m not sure the timing is right on the following cue. 00:05.000 --> 00:09.000 - It will perforate your stomach. - You could die.
NOTE ... ... ←空行仕様的には CSS で指定するレンダリング形態についての 記述が圧倒的に多い。 時間同期関連は絶対時間(同期対象のストリームの開始が00:00)が 規定されているだけで、相対時間での指定ができないので、 手で編集するのは非現実的だと思う。
mutation { likeStory(storyID: 12345) { story { likeCount } } }
#...
GMACRO NOMISS LET K90 = COUNT('X') DO K91 = 1:K90 IF 'X'[K91] = '*' DELETE K91:K90 'X' BREAK ENDIF ENDDO ENDMACRO
#...個別の集計関数などの説明はあるが、 LET や DO や GMACRO の 解説文が見つからない。製品のヘルプには含まれてるんだろうか?
02:00に作られるはずのSALES.RAWファイルを受け取り、filter_dataで SALES.SQLを生成し、データベースに投入する:
# Example of a Machine insert_machine: lowgate type: a # Example of Jobs insert_job: Nightly_Download job_type: box date_conditions: yes days_of_week: all start_times: "02:00" insert_job: Watch_4_file job_type: ft box_name: Nightly_Download watch_file: /DOWNLOAD/MAINFRAME/SALES.RAW watch_file_type: generate machine: lowgate insert_job: filter_data job_type: cmd box_name: Nightly_Download condition: success(Watch_4_file) command: filter_mainframe_info machine: lowgate std_in_file: /DOWNLOAD/MAINFRAME/SALES.RAW insert_job: parse_data job_type: cmd box_name: Nightly_Download condition: success(filter_data) machine: lowgate command: isql -U mutt -P jeff std_in_file: /DOWNLOAD/MAINFRAME/SALES.SQL std_out_file: /LOG/parse_data.out std_err_file: /LOG/LOG/parse_data.err
#... /*...*/
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;realtime audio out ;-iadc ;;;uncomment -iadc if realtime audio input is needed too ; For Non-realtime ouput leave only the line below: ; -o foscil.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 kcps = 440 kcar = 1 kmod = p4 kndx line 0, p3, 20 ;intensivy sidebands asig foscil .5, kcps, kcar, kmod, kndx, 1 outs asig, asig endin </CsInstruments> <CsScore> ; sine f 1 0 16384 10 1 i 1 0 9 .01 ;vibrato i 1 10 . 1 i 1 20 . 1.414 ;gong-ish i 1 30 5 2.05 ;with "beat" e </CsScore> </CsoundSynthesizer>
;... /*...*/
<$cmd$>
[[%...%]]
素の[[ ]]
に特殊な意味はなさそう。
<$#...$>
とかじゃないのは、ブロックコメントを
想定しているのかも。
$cmd
#{var}
doctype 5 <html> <head> <title>#{pageTitle} - My Site <link rel=stylesheet href=@{Stylesheet}> <body> <h1 .page-title>#{pageTitle} <p>Here is a list of your friends: $if null friends <p>Sorry, I lied, you don't have any friends. $else <ul> $forall Friend name age <- friends <li>#{name} (#{age} years old) <footer>^{copyright}
$#...
Haskell で書かれたプログラムの解説文は 明晰な感じがする。 言語の使い手にそういう人が多いのか、 言語の性質がそうたらしめるのか、 単にわかりにくいから丁寧に説明する必要があるのか、は不明。
[!--...--]
(cmd:...)
<!--...--> HTMLから削除
<%...%>
/*...*/ HTMLから削除 //... HTMLから削除
<<...>>
/%...%/ HTMLから削除
https://twinery.org/forum/discussion/5071/how-to-comment-commenting-syntax
(2017.01.04)
テキストアドベンチャーもしくはインタラクティブ小説作成ツール Twineの
スクリプト言語。
実装はNode.js。ローカルで動かすバイナリも配布。
ベタテキスト部分はWiki系。
プログラムを書くエンジンにHarlowe, Snowman, SugarCubeと種類がある。
{{expr}}
{%statement%}
同類:Jinja
{# ... #}
Zephir is a compiled high level language aimed to the creation of C-extensions for PHP.(2016.12.29) PHP用のC拡張を書くことに特化した言語。体裁はC。 *.zep をCに変換し、gccでオブジェクト化する。 型は静的と動的両方こなせる。 静的にすれば速い。ただしArrayやObjectにはできない。
/* 動的型変数 */ var a; let a = "hello"; let a = 10; /* 静的型変数 */ boolean b; let b = true, b = 100, // automatically casted to true b = null, // automatically casted to false b = "hello"; // throws a compiler exception
//... /*...*/
{expr}
<!-- statement -->
拡張子が .tpl から .html に変わったのは、単にエディタのハイライトが
行われるから、ということらしい。
<!-- IF postrow.S_PROFILE_FIELD1 --> <!-- Use a construct like this to include admin defined profile fields. Replace FIELD1 with the name of your field. --> <br /><b>{postrow.PROFILE_FIELD1_NAME}:</b> {postrow.PROFILE_FIELD1_VALUE} <!-- ENDIF -->
<!-- IF 0 -->...<!-- ENDIF -->この IF 文は普通の処理指令で、コメントアウト内はwell-formedで なければならないはずだが、チュートリアルでコメントだと言っているので 注釈文だとしておく。
;...
<{...}>
。
<{*...*}>本気エスケープのための<{literal}>を Smartyと同様に持つが、 JavaScriptで <{}> を使うことはまずないのであまり出番がない。
//...
(:...:) 入れ子可
path /users/{uid} is User { // Anyone can read a User's information. read() { true } // Only an authenticated user can write their information. write() { auth != null && auth.uid == uid } }
//... /*...*/
/* How do I count the number of records in a table using the EEL? */ // Pre-Expression // Declare and initialize an integer // variable for the record count integer recordCount recordCount=0 // Expression // Increment recordCount by one recordCount=recordCount+1
/*...*/ //...データベースアクセス機能もあるようだが、ろくすっぽドキュメントがない。 汎用のファイル入出力と文字列処理で頑張る言語のように見える。
OpenSCAD is a 2D/3D and solid modeling program which is based on a Functional programming language used to create models that are previewed on the screen, and rendered into 3D mesh which allows the model to be exported in a variety of 2D/3D file formats.(2016.12.26) 3Dモデリングツールのスクリプト。 同類:MAXScript, VEX
変数に代入した値は、そのブロック内でしか値を保持しない。 以前はグローバル変数にブロック内で再代入すると コンパイルエラーになっていた。 関数型言語なのかな?
a=0; if (a==0) { a=1; // before 2015.03 this line would generate a Compile Error // since 2015.03 no longer an error, but // the value a=1 is confined to within the braces {} }
//... /*...*/
EGL is a specification-level language. Using EGL, you can perform the following tasks:(2016.12.26) IBM Rational のビジネスアプリケーション記述言語。 フロントエンドは JavaServer Faces (JSF)を使っている。 同類:PxPlus, ABL
- Define data.
- Generate the logic that operates on the data.
- Customize user interfaces to present the data.
package jsfhandlers; import eglderbyr7.data.*; import eglderbyr7.StatusRec; import eglderbyr7.access.CustomerLib; handler allcustomers type JSFHandler {onConstructionFunction = onConstruction, onPreRenderFunction = onPreRender, view = "allcustomers.jsp"} customers Customer[0]; status StatusRec; Function onPreRender() CustomerLib.GetCustomerListAll(customers, status); End Function onConstruction() End End
//... /*...*/
Person!
は引数なしで Person を呼ぶ。
a\give_item
でメソッド呼び出し。
class Person new: => @clothes = {} give_item: (name) => table.insert @clothes, name a = Person! b = Person! a\give_item "pants" b\give_item "shirt" print item for item in *a.clothes
--...Luaの
#...
と --[[...]]
には対応していない。
#...
の他に、C++コメントも使える。
#... //... /*...*/ 入れ子可
Origin is an industry-leading scientific graphing and data analysis software. LabTalk is a scripting language native to Origin.(2016.12.26) 科学データ解析・グラフ描画ツール Origin のスクリプト言語。 C, Python, R, Mathematica, MATLAB, LabVIEW とも連携可能。 類似:gnuplot, R, Stata, JSL
=
が普通の代入で、:=
が仮引数への代入。
/* Interpolate Data on given X Vector */ pe_mkdir Interp1 path:=aa$; //make a folder in the project named Interp1 pe_cd aa$; //open the folder Interp1 in project fname$ = system.path.program$ + "Samples\Mathematics\Interpolation.dat"; newbook; newsheet cols:=4 xy:="XYXY"; impasc; Range rTime1 = 1; // col(1) of active sheet Range rData1 = 2; // col(2) of active sheet Range rTime2 = 3; // col(3) Range rData2 = 4; // col(4) interp1 ix:=rTime2 iy:= rData1 method:= spline ox:=rData2 ; plotxy iy:=rData1 plot:=200 color:=1; plotxy iy:=rData2 plot:=200 color:=2 ogl:=1;
//... /*...*/
Advanced Business Language (ABL) is a high-level procedural programming language that helps developers to develop applications optionally using its own integrated relational database and programming tool.(2016.12.26) Progress OpenEdge のビジネスアプリケーション構築言語。 同類:PxPlus
/* This REPEAT block loops through its statements until the user presses the END-ERROR (F4) key. */ REPEAT: PROMPT-FOR customer.cust-num. FIND customer USING cust-num. DISPLAY customer WITH 2 COLUMNS. END.
/* ... */ 入れ子可 // ... 行頭か、直前は空白 11.6以降 (経緯) &IF 0 &THEN ... &ENDIF
\
はファイル階層セパレータとして使うので、
文字列のエスケープは "~r~n"
など。
10進数(BCD?)のDECIMAL型がある。金勘定には必須。 ただし最大50ケタ、小数点以下は10ケタまで。 丸め方向の設定をどうするのかが見当たらない…。
1+2i
のように書く。
for文はあるがwhileが無い。forで代用する。
# equivalent implementation of a while loop in Lumerical script language x=1; for(0; x<10; 0) { ?x; x=x+1; }
#...
/*...*/ //... ~~...~~
~~...~~
は特殊マクロ文法の流用。
DokuWikiは //italic//
なので、 //...
のパターンマッチは
少々手が込んでいる。
プラグイン作者は日本人なので、イタリックへのこだわりが
ないのかもしれない。
//...
URL GOTO=http://www.iopus.com/imacros/demo/v6/images/bigbee.jpg ONDOWNLOAD FOLDER=* FILE=* 'Download the picture by either of the following: TAG POS=1 TYPE=IMG ATTR=HREF:http://*.jpg CONTENT=EVENT:SAVEITEM 'TAG POS=1 TYPE=IMG ATTR=HREF:http://*.jpg CONTENT=EVENT:SAVE_ELEMENT_SCREENSHOT
'... 行頭のみ
Note: Navigating through fields with the keyboard (i.e. using the TAB key) is not supported and will not be recorded.え?めんどくさいな。選択しただけでJavaScriptが動くページとかも ある以上、しょうがないかもだけど。
<ui:remove>...</ui:remove>
YARA is a tool aimed at (but not limited to) helping malware researchers to identify and classify malware samples.(2016.12.25) バイナリデータ検索ツール。 ファイルが、与えられた条件に該当するか調べる。 実装はC。
rule silent_banker : banker { strings: $a = {6A 40 68 00 30 00 00 6A 14 8D 91} $b = {8D 4D B0 2B C1 83 C0 27 99 6A 4E 59 F7 F9} $c = "UVODFRYSIHLNWPEJXQZAKCBGMT" condition: $a or $b or $c }
/*...*/ //...
Sass is an extension of CSS, adding nested rules, variables, mixins, selector inheritance, and more.(2012.12.25) インデントで閉じを制御するCSSプリコンパイラ。 実装はRuby。 単なるSassは「古い」文法で、新しいSCSS (Sassy CSS)はCSS互換。 同類:Less
#main color: blue font-size: 0.3em
/*...*/ 出力のCSSに残る //... 残らない ... インデントブロックでも有効
JEXL is a library intended to facilitate the implementation of dynamic and scripting features in applications and frameworks written in Java.(2016.12.25) Javaに、後から設定可能なスクリプト式を評価させるためのライブラリ。 基本は変数の参照・設定・計算だけを行う。 あまり大げさな処理を書くことは想定されていない。 一応、if と for と while も持っている。
((G1 + G2 + G3) * 0.1) + G4 //評価時にG1,G2,G3,G4には値をセットしておく
##... //... /*...*/出力は式の評価値なので、出力用の構文はない。 文字列のマッチはできるが文字列演算ができないので、 「ビールが99本」は実現不可。
:=
で、let文はない。
&& C:\hb31\bin\hbmk2 -quiet -oc:\test.exe mesi.prg -run DECLARE months [12] ? LEN (months) && We shall now load some data into our arrays PRIVATE month_names: = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"} PRIVATE months: = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} && Let us make some output (using a FOR loop - see below) FOR I: = 1 TO LEN (months) ? month_names [i], "is", months [i], "days long." NEXT
* ... //... &&... /*...*/
# file: test.cfg info: { name = "Winston Churchill"; @include "quote.cfg" country = "UK"; };
#... /*...*/ //...
Ox is an object-oriented matrix programming language with a comprehensive mathematical and statistical function library.(2016.12.24) 組込型に行列を持つ数値計算処理系。体裁はC++。 同類:Julia
/*...*/ 入れ子可 //...
@{...}
で、Razor似。
実装は Scala。
同類:Razor
@*...*@
PRADO is a component-based and event-driven programming framework for developing Web applications in PHP 5. PRADO stands for PHP Rapid Application Development Object-oriented.(2016.12.23) Webアプリケーション構築環境 PRADO のHTMLテンプレート。 実装はPHP。 処理指令は
<%...%>
だが、特殊タグが多い。
<%= PhpExpression %> <%% PHP Statements %> <%# PhpExpression %> <%$ ParameterName %> <%~ LocalFileName %> <%[localestring]%> <%/ image.jpg %>
<!---...--->syntax highlightに問題があったから<!--...-->から変えた、とあるが、 何が問題だったんだろう。
FASTBuild is a high performance, open-source build system supporting highly scalable compilation, caching and network distribution.(2016.12.23) 分散環境にも対応したビルドツール。makeの類。 再ビルド不要な場合の判断が速い。 MacOSX や Linuxでも使えるが、Windowsが主たるターゲットっぽい。
バックスラッシュは特殊エスケープではなく普通の文字 (ファイル階層セパレータ)。
.BaseIncludePaths = ' /I"./"' + ' /I"$VSBasePath$/VC/include/"' .CompilerOptions + .BaseIncludePaths Executable( 'HelloWorld' ) { .Libraries = { "HelloWorld-Lib" } .LinkerOutput = 'Out\HelloWorld.exe' .LinkerOptions + ' libcmt.lib' // Std Lib (Multi-Threaded, Static, Release) + ' kernel32.lib' // Kernel functions }
//... ;...
/*...*/
--...
は使えない。理由は不明。
/*...*/
もMySQLとの互換性のために追加されたようなので、
あまり深く考えて実装されたわけではなさそう。
[%...%]
[%# ... この処理指令を全部無視 %] [% # 行コメント theta = 20 # 行コメント %]
{::comment}...{:/comment} <!--...--> に変換されるMarkdown準拠なら
<!--...-->
でもよさそうだが、
HTMLエスケープされて見えてしまうのかな?
Flamingo is an online service that will help your site look and feel elegant on any mobile device.(2016.12.21) モバイルデバイス用のサイトを用意するサービスFlamingoの テンプレート言語。 自サーバーにインストールするものではなく、Webサービス。 処理指令は
<!--{...}-->
<!--{/*}--> ... <!--{*/}--> <!--{ /* ... */ }-->仕方ないといえばそうなのだが、注釈に7文字も使う言語は珍しい。
2015/9/30 gift received assets:cash $20 income:gifts 2015/10/16 farmers market expenses:food $10 assets:cash
; this is a global comment that is not applied to a specific transaction ; it can start with any of the five characters but is not included in the ; output from 'print' or 'output' 2011/12/11 Something Sweet ; German Chocolate Cake ; :Broke Diet: Expenses:Food $10.00 ; Friends: The gang Assets:Credit Union:Checkingオリジナルの Ledger (C++) では6種の注釈が使えるが、 他の実装のhledger (Haskell) では ; と # と comment のみ。
; This is a single line comment, # 行頭のみ % 行頭のみ | 行頭のみ * 行頭のみ comment This is a block comment with multiple lines end comment
###. comment more comment not comment
[[...]]
。
[[-...]] おそらく入れ子可以前は専用の注釈文法がなく、
[[this is a comment]]
で this に対応するコード(snippet)が
無いときに無視される作用を使っていた。
のであれば、入れ子可、のはず。
Robot Framework is a Python-based, extensible keyword-driven test automation framework for end-to-end acceptance testing and acceptance-test-driven development (ATDD).テスト記述フレームワーク。 実装は Python。 同類:Gherkin
入力は表形式で行う。 ベタテキスト表現では、
*header
で表の開始
*** Test Cases *** Add two numbers Given I have Calculator open When I add 2 and 40 Then result should be 42 Add negative numbers Given I have Calculator open When I add 1 and -2 Then result should be -1 *** Keywords *** I have ${program} open Start Program ${program} I add ${number 1} and ${number 2} Input Number ${number 1} Push Button + Input Number ${number 2} Push Button = Result should be ${expected} ${result} = Get Result Should Be Equal ${result} ${expected}
#... テーブルセルの頭にて
Clafer (class, feature, reference) is a lightweight modeling language. Lightweight modeling aims at improving the understanding of the problem domain in the early stages of software development and determining the requirements with fewer defects.(2016.12.20) 軽量の仕様記述言語。 実装はHaskell。 同類:Alloy Alloy用の出力を吐き出せる。
親子関係はインデントで制御する。
abstract Book title -> string subtitle -> string ? // subtitle does not have to be a child of the title because title is // mandatory, although conceptually subtitle is a point about title as well page -> integer // if we don't really care about individual pages, just the number [ page >= 2 ] or format // the choice between xor and or depends on the context. For example, paper // whether the book store has a single entry for a book with multiple hardcover ? // formats or whether there must be a separate entry with exactly one electronic // format at the time kind -> Kind // can be modeled as an enumeration enum Kind = textbook | manual | reference | fiction | nonfiction | other注釈に関するマニュアルが見当たらないが、 パーサーの作りによると
//... /*...*/
!...ただしいくつかの予約語は処理される。 特に
! Redirect: URL
は
即フィルタの再ダウンロードを行う非注釈。
建て増しを繰り返して文法がかなり汚くなった見本。
ads adsを含むものをブロック @@headset headsetを含むものは通す swf| 末尾一致 ||example.com/ads サブドメイン一致 ! comment 注釈 */ads/*$script,match-case フィルタオプション /banner\d+/ 正規表現 ##div.textad <div class="textad"> を削除 example.com#@#div.textad example.comでは削除しない
The DTD (as an internal subset) would be as follows:<!DOCTYPE addressBook [ <!ELEMENT addressBook (card*)> <!ELEMENT card (name, email)> <!ELEMENT name (#PCDATA)> <!ELEMENT email (#PCDATA)> ]>A RELAX NG pattern for this could be written as follows:element addressBook { element card { element name { text }, element email { text } }* }
#... ##... XML annotation [a:documentation [...]] に変換されるなお前身のRELAXは XML形式なので、似ているのは概念だけ。
chordii provides guitar players and other musicians with a tool to produce good looking, self-descriptive music sheets from text files.chordiiの実装はC、出力はPostScript。
{title:Love me tender} {subtitle:Presley/Matson} [G]Love me tender [A7]love me sweet [D7]Never let me [G]go [G]You have made my [A7]life complete [D7]and I love you [G]so
#...
Find first occurence of character X and last occurence of character Y, and return everything in-between
$puts(char1,X)$puts(char2,Y)$puts(tag,%tag%) $puts(spacer1,$strchr($get(tag),$get(char1))) $puts(spacer2,$strrchr($get(tag),$get(char2))) $trim($substr($get(tag),$add($get(spacer1),1),$sub($get(spacer2),1)))
//... 行頭のみどこに分類しよう。基本はデータファイルだが、 言語と言える程度の複雑さはある。
#...
{...}
{news_image} {!-- shows: <img src="image.ext" alt="file_name" /> --} {news_image} File name: {file_name} File extension: {extension} Url: {url} {/news_image}
{!--...--}テンプレート側で生の { } が欲しいときはどうするんだろう。 { とか? JavaScriptを埋めたい時とかは? →{ と }が別の行にあれば素通しするらしい。
The Event Processing Language (EPL) is a declarative language for dealing with high frequency time-based event data.(2016.12.18) 大量時系列イベントデータ処理システム Esper のSQL風の問い合わせ言語。 株価分析、侵入検知、交通量監視などに使う。
select tick.symbol from StockTick.win:time(10) as tick, News.win:time(10) as news where news.symbol = tick.symbol
//... /*...*/
--...
が使えない理由は不明。
特に演算子として使われている様子はない。
<dtml-command> な形式の疑似タグで制御を埋め込む。
<dtml-comment>...</dtml-comment>ZPTを再実装して高速化したものがChameleon。 →Chameleon/TAL
`...`
で逃げられる。
perfectSquares = -> num = 0 loop num += 1 yield num * num return window.ps or= perfectSquares()この例はyieldを使っているので、JavaScript側にもyieldが必要。
#... ### 出力のJavaScriptに/*...*/として残す ###
/********** toy-knapsack.lsp **********/ /* Declares the optimization model. */ function model() { // 0-1 decisions x_0 <- bool(); x_1 <- bool(); x_2 <- bool(); x_3 <- bool(); // weight constraint knapsackWeight <- 10*x_0 + 60*x_1 + 30*x_2 + 40*x_3; constraint knapsackWeight <= 102; // maximize value knapsackValue <- 1*x_0 + 10*x_1 + 15*x_2 + 40*x_3; maximize knapsackValue; } /* Parameterizes the solver. */ function param() { lsTimeLimit = 1; }
//... /*...*/
/ ... / ... ...
<% cmd %>
$var ${var}
<ul> <% loop $Children.Sort(Title, ASC) %> <li>$Title</li> <% end_loop %> </ul>
<%--...--%>
Objects and nested objects are created using the structure shown below: variable "ami" { description = "the AMI to use" } This would be equivalent to the following json: { "variable": { "ami": { "description": "the AMI to use" } } }
//... /*...*/
Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed.(2016.12.16) Webアプリケーション構築のフレームワーク Tornado に添付の テンプレート言語。テンプレートは主要構成物ではなく、 非同期I/Oやコルーチンに力点が置かれている。 実装はPython。
テンプレート言語自体の処理指令はJinja系の
{% cmd %}
{{ expr }}
。
任意のPythonコードを埋められるわけではなく、
ループや制御構造は基本的なもののみ。
{#...#} {% comment ... %}生の
{{ {% {#
が欲しいときは {{! {%! {#!
を使う。
テンプレート起動が以下のように2行でできる処理系というのは、 ありそうでなかなかなかったりする。
t = template.Template("<html>{{ myvalue }}</html>") print t.generate(myvalue="XXX")
cmd(arg arg ...)
の形式をとる。
set(srcs archive.cpp zip.cpp) if (LZMA_FOUND) list(APPEND srcs lzma.cpp) endif() add_library(archive SHARED ${srcs}) if (LZMA_FOUND) # The archive library sources are compiled with -DBUILDING_WITH_LZMA target_compile_definitions(archive PRIVATE BUILDING_WITH_LZMA) endif() target_compile_definitions(archive INTERFACE USING_ARCHIVE_LIB) add_executable(consumer) # Link consumer to archive and consume its usage requirements. The consumer # executable sources are compiled with -DUSING_ARCHIVE_LIB. target_link_libraries(consumer archive)
#... #[[...]] #[=[...]=] #[==[...]==] (v3.0以降)通常の行注釈の他に、 Lua風のbracket argumentを使ったブロック注釈がある。
あんまり使いやすいようにも見えないが、 ろくすっぽドキュメントが無いImakefileよりはましだと思う。
{% code %}
{{ expr }}
(というか、オリジナルはJinjaの作者が書いた)
{# ... #}
<%--...--%>
はテンプレートの動作には影響しない注釈と
なっているが、出力のJavaのコメントとして残る。
asdf { zxcvbnm = uiop backgroundColor = blue backgroundColor.transparency = 95% } When parsed, this information will be stored in a PHP array which could be defined as follows: $TS['asdf.']['zxcvbnm'] = 'uiop'; $TS['asdf.']['backgroundColor'] = 'blue'; $TS['asdf.']['backgroundColor.']['transparency'] = '95%';
//... #... /*... 1カラム目のみ ... */... attrib {... block }...{ } の後の文字も全部無視する。 なぜ
/*...*/
に1カラム目のみの制限が付いているのかは
よくわからない。行単位の構文解析器の都合?
おカタい関数型言語と違い、変数は再代入が可能。
陽にマッチさせたい時は ^
を使う。
iex> x = 2 2 iex> x = 1 1 iex> ^x = 2 ** (MatchError) no match of right hand side value: 2パイプ演算子
|>
もある。
iex> odd? = &(rem(&1, 2) != 0) iex> 1..100_000 |> Enum.map(&(&1 * 3)) |> Enum.filter(odd?) |> Enum.sum 7500000000
#...ブロックコメントは無い。 なお Erlangの注釈の
%
は
Elixirでは連装配列の指定に使うので、注釈にできない。
{...}
。
生の { } が欲しいときは {~lb} {~rb}
を使う。
{!...!}
${...}
で変数参照。
処理指令は既存タグに data-sly-* 属性をつける。
同類:Thymeleaf (どっちが先行かは不明)
<dl data-sly-list="${currentPage.listChildren}"> <dt>index: ${itemList.index}</dt> <dd>value: ${item.title}</dd> </dl>
<!--/*...*/-->
{{...}}
が処理指令。
同類:Mustache
{{/*...*/}}生の
{{...}}
が欲しいときはどうするんだろう。
{{`{{...}}`}}
とか?
<p th:text="${value}">Default text</p>
で
<p> の内容をそっくり入れ替える。
デフォルト値を平文で入れるので、テンプレート単体でも
XHTML準拠だし、
直接ブラウザに食わせてもデザインチェックはできるのが特徴。
<table> <tr> <th>NAME</th> <th>PRICE</th> <th>IN STOCK</th> <th>COMMENTS</th> </tr> <tr th:each="prod : ${prods}" th:class="${prodStat.odd}? 'odd'"> <td th:text="${prod.name}">Onions</td> <td th:text="${prod.price}">2.41</td> <td th:text="${prod.inStock}? #{true} : #{false}">yes</td> <td> <span th:text="${#lists.size(prod.comments)}">2</span> comment/s <a href="comments.html" th:href="@{/product/comments(prodId=${prod.id})}" th:unless="${#lists.isEmpty(prod.comments)}">view</a> </td> </tr> </table>
<!--/*...*/--> <!--/*--> you can see me only before thymeleaf processes me! <!--*/-->独自タグがないので、ブロックコメントをどうするかは ちょっと悩んだあげくの記法ではなかろうか。 注釈に記号6文字も使う言語はなかなかない。
{% tag %}
と {{ expr }}
。
任意のRubyコードを混ぜ込める訳ではない。
あまり複雑なことはできない(させない)、
テンプレートは見た目に特化、という思想。
{% comment %}...{% endcomment %}Django(実装:Python)と似ているが
{#...#}
は持っていない。
JMP (pronounced jump) is a powerful and interactive data visualization and statistical analysis tool.(2016.12.13) 統計解析ツールJMPをバッチ駆動するための言語。 手で行った解析結果は、スクリプトとして吐かせて再利用できる。 同類:R, Stata
a = 5; b = 5; win = New Window( "Powers", Graph Box( Frame Size( 200, 200 ), X Scale( -10, 10 ), Y Scale( -10, 10 ), For( i = 0, i < 1.5, i += .2, Pen Color( 1 + 10 * i ); Text Color( 1 + 10 * i ); Y Function( i * x ^ Round( a ), x ); Handle( a, b, a = x; b = y; ); h = 9 - 10 * i; Text( {-9, h}, b, "*i*x^", Round( a ), ", i=", i ); ) ) );
//... /*...*/
<esi:comment text="..." /> <esi:remove>...</esi:remove> 削除。ESIが無効の時はブラウザへ素通し <!--esi content --> 周りを削ってcontentを処理。ESI無効時はブラウザには見えない
--... #...
@command
{{expr}}
が処理指令。
{{--...--}}Handlebarsなどの
{{ }}
系テンプレート言語で後処理したい時のために、
@{{...}}
は@を削って素通しする、という機能がある。
#{変数}
と = コード
。
/ ... /! ... 出力に<!--...-->として残る
Stata is a statistical package for managing, analyzing, and graphing data.(2016.12.12) 統計解析ツール。コマンドラインとグラフィック出力がある。 回帰曲線の算出などができる。 コマンドラインの操作を固めてバッチファイル(do-file)にできる。 同類:R
*... 行頭のみ (SAS準拠?) /*...*/ //... ただしhttp://... は非注釈 ///... 次の行をこの行に結合する
*! ******************************************** PROGRAM: sample.pg6 TITLE: SAMPLE QPL QUESTIONNAIRE *! ******************************************** * Global commands... .TITLE = "Sample QPL Questionnaire" * Questions... .QUESTION = NAME, TYPE = STRING What is your name? .ANSWER = 15 .NEXT
*... *! ... ... *! ...
*!
の勘定を間違えると大惨事になる。ためか、
ブロックコメントはコンパイル時に開きと閉じでWarningが出る。
module RandomGraph { parameters: int count; double connectedness; // 0.0<x<1.0 submodules: node[count]: Node { gates: in[count]; out[count]; } connections allowunconnected: for i=0..count-1, for j=0..count-1 { node[i].out[j] --> node[j].in[i] if i!=j && uniform(0,1)<connectedness; } }
自動でドキュメント用の注釈を抜き出してツールに表示する。 Javadocのように特別な文法があるわけではなく、 定義の直上もしくは同じ行にある注釈をドキュメント扱いする。 ので、 ソースコード的には注釈だがドキュメント的には処理指令である 文法がある(HTML埋め込みや@includeなど)。
//... //#... ドキュメントからも抜く
minimaldcl : dialog { label="Minimal Example"; ok_only; }
//... /*...*/
#...
@cmd[data]{args}
。
LISPのようなS式(Racket式)を埋め込める。
出力はHTMLか、LaTeX経由のPDF。
実装はRacket。
デフォルトで用意されている出力が HTML, Racketマニュアル、 Book, Report, SIGPLAN論文, JFP論文, LNCS論文、 なので、そういう人には便利だと思われる。
@;{...} 入れ子可 @;...
;... #;... 次のS式を無視 #|...|# 入れ子可 #!... \で次の行と接続
{{...}}
が処理指令。
データはJSON(YAML)で投入する。
実装はRubyだが、処理指令でRubyが使えるわけではない。 分岐もループもない単純な文法なので、JavaScriptなど他の実装もある。
{{!...}}この注釈文法ではコードのコメントアウトができないので、 方言:Handlebars, Curlybars では
{{!--...--}}
も導入。入れ子はできない(と思う)。
[ ]
で
キャプチャしてバッチ処理を書ける。
#... 1カラム目のみ
/*...*/平文ベースだが、ブロックコメントしかない。たぶん入れ子はできない。
<% $perl_expr %> % perl code
<%doc>...</%doc> <%#...%> <% #... %>
3x3の魔方陣:
array3<array3<int>> magic_square; int target; magic_square.each(function^ (row) { invariant row.sum == target; invariant row.all?(*positive?); }); magic_square.transpose.each(function^ (column) { invariant column.sum == target; }); left_diagonal = magic_square.map(function (row, index) { return row[index]; }); right_diagonal = magic_square.map(function (row, index) { return row.reverse[index]; }); invariant left_diagonal.sum == target; invariant right_diagonal.sum == target; expose magic_square, target;targetは実行時に外部から与える(んだと思う)。
#...
() <> [] {} [||] {||}
が
関数、帰納データ、タプル、集合、配列、ハッシュを表していて、
文面が独特。
;; Extract all twin primes from the infinite list of prime numbers with pattern-matching! (define $twin-primes (match-all primes (list integer) [<join _ <cons $p <cons ,(+ p 2) _>>> [p (+ p 2)]])) ;; Enumerate first 10 twin primes (take 10 twin-primes)
;...Haskellの不満を解消しようとした言語のようなので、 まずHaskellを理解できていないとさっぱりわからない。
#...
//... /*...*/
kdb+ is a powerful database that can be used for streaming, real-time and historical data. q is the SQL-like general purpose programming language built on top of kdb+ that offers high-performance, in-database analytic capabilities.(2016.12.05) 時系列データの扱いが得意なデータベース kdb+ の問い合わせ言語。 SQLの類。 記号の使い方が他の言語とずいぶん違うが、理にかなっている。 リストが処理の基本型。Lispっぽい処理が書ける。
q)
はプロンプト。
/ 変数n を 1000000に更改 q)n:1000000; / 変数 item をリスト(`apple;`banana;`orange;`pear) に更改 q)item:`apple`banana`orange`pear; q)city:`beijing`chicago`london`paris; / tab: tab変数を / ([]...) キー無しのテーブル / time: timeという名のカラム / asc 昇順ソート / n?0D0 長さnの乱数リスト、値域は0~0D0 / n?item; 長さnの乱数リスト、値域は itemの中から q)tab:([]time:asc n?0D0;n?item;amount:n?100;n?city); q)select from tab where item=`banana time item amount city ------------------------------------------ 0D00:00:00.466201454 banana 31 london 0D00:00:00.712388008 banana 86 london 0D00:00:00.952962040 banana 20 london 0D00:00:01.036425679 banana 49 chicago 0D00:00:01.254006475 banana 94 beijing ..
/...
(+)
で行列・ベクトル演算ができる。
インタプリタなので、$cmd でシェルコマンドが起動できる。
For example, if x is a 12-by-25-by-35 array, y and z are vectors of length 35, and w is a 9-by-12-by-7 array, then: x(,,+)*y(+) is a 12-by-25 array y(+)*z(+) is the inner product of y and z x(+,,)*w(,+,) is a 25-by-35-by-9-by-7 array
/*...*/ //...
Pig is a dataflow programming environment for processing very large files.(2016.12.05) Hadoopクラスタ上で動かす並列データ処理系。データフロー処理言語。 LOADでデータを読み込み、FOREACHなどで加工してDUMPかSTOREで吐き出す。
REGISTER ./tutorial.jar; raw = LOAD 'excite-small.log' USING PigStorage('\t') AS (user: chararray, time: chararray, query: chararray); clean1 = FILTER raw BY org.apache.pig.tutorial.NonURLDetector(query); clean2 = FOREACH clean1 GENERATE user, time, org.apache.pig.tutorial.ToLower(query) as query; houred = FOREACH clean2 GENERATE user, org.apache.pig.tutorial.ExtractHour(time) as hour, query; ngramed1 = FOREACH houred GENERATE user, hour, flatten(org.apache.pig.tutorial.NGramGenerator(query)) as ngram; ngramed2 = DISTINCT ngramed1; hour_frequency1 = GROUP ngramed2 BY (ngram, hour); hour_frequency2 = FOREACH hour_frequency1 GENERATE flatten($0), COUNT($1) as count; hour_frequency3 = FOREACH hour_frequency2 GENERATE $0 as ngram, $1 as hour, $2 as count; hour00 = FILTER hour_frequency2 BY hour eq '00'; hour12 = FILTER hour_frequency3 BY hour eq '12'; same = JOIN hour00 BY $0, hour12 BY $0; same1 = FOREACH same GENERATE hour00::group::ngram as ngram, $2 as count00, $5 as count12; STORE same1 INTO 'script2-local-results.txt' USING PigStorage();データフローですっきり書ける処理に向く。 複数の要素が絡み合うようなデータ処理は不得意そう。 組込関数は貧弱なので、ちょっとした処理は外部の REGISTER *.jar に書いてやる必要がある。
/*...*/ --...名前は冗談系言語のようだが、そうではなく大真面目に作られている。
--...
The RSP markup language makes any text-based document come alive. RSP provides a powerful markup for controlling the content and output of LaTeX, HTML, Markdown, AsciiDoc, Sweave and knitr documents (and more), e.g. 'Today's date is <%=Sys.Date()%>'.(2016.12.02) テンプレート言語。 統計解析ツール R を TeX に埋め込む ことを想定。 処理指令は
<%...%>
<%--...--%> ハイフンは2つ以上、一致する--%>で終端 <%---...---%> <%----...----%> <%if test-"exists" name="notdef"%>...<%endif%>
//... /*...*/ParseTools.java を見た限りだと
/*...*/
は入れ子不可。
似た処理が4ヶ所に書かれていてなんかすっきりしない。
プリプロセッサは偉大。
PxPlus is a powerful programming language used in the development of sophisticated business applications.(2016.12.02) 「ビジネスアプリケーション構築言語」。 体裁はBASIC、機能は汎用。 基本データ型は数値と文字列のみ。 構造体はオブジェクトにするんだと思われる。 連想配列もあるにはあるが、 配列はデータファイルに書き出して使う想定っぽい。
「ビジネスアプリケーション」用というのはどういう言語なんだろうか? データベースアクセスが組み込まれている、とか? PxPlusもODBC経由で普通のデータベースアクセスもできるが、 単体で入出力可能なのは単純なKey-Valueストアのファイル。
普通は .
を使うメンバアクセスに '
を使う。
Cst= NEW ("Customer") Cst'Find("012345")
00100 PROCESS_TAXCODE: 00110 LiquorTax=0,SalesTax=0,ServiceTax=0 00120 SWITCH UCS(TaxCode$) 00130 CASE "X","Z" ! two codes are tax exempt 00140 BREAK ! stop processing for case "X" here 00150 CASE "L" ! liquor pays all liquor,sales and service tax 00160 LiquorTax=cost*LiquorTaxRate 00170 ! no break here, logic falls through 00180 CASE "S" ! pays sales and service tax 00190 SalesTax=cost*SalesTaxRate 00200 ! no break here, logic falls through 00210 CASE "V" ! service tax 00220 ServiceTax=cost*ServiceTaxRate 00230 BREAK ! end processing for this case and any that fell through 00240 DEFAULT ! enter here if case not found 00250 MSGBOX "Unknown tax code","Error" 00260 END SWITCH 00270 TotalTax=LiquorTax+SalesTax+ServiceTax 00280 RETURN上はBREAKの例だがさすがに例だと思いたい。 仮引数を陽に指定してサブルーチンを呼びたいなら CALL で呼び出して ENTER 変数 で受ける。
REM ... !...
UNIXからz/OSへのファイルコピーをz/OSから指示する:
PROC2 PROCESS SNODE=UNIX.NODE STEP01 COPY FROM (DSN="/company/payroll/monthly/jan" - SYSOPTS=":datatype=text:" - SNODE) - TO (DSN=OS390.PAYROLL.MONTHLY.JANUARY - DISP=(NEW,CATLG) - SPACE=(23040,(2,1)) - DCB=(RECFM=U,LRECL=0,BLKSIZE=23040,DSORG=PS) - PNODE)
*... /*...*/
*...
はカラム1限定。
*/
はカラム1に置くのは禁止。
CA Easytrieve is an information retrieval and data management system designed to simplify computer programming. Its English-like language and simple declarative statements provide you with the tools to produce comprehensive reports and screens.(2016.12.01) 「バッチ・アプリケーション開発言語」。 固定長レコードのデータを加工して出力する。 大型機時代の雰囲気を色濃く残すというか、 大型機時代の人材を活用できるよ、という謳い文句。
FILE PERSNL FB(150 1800) EMPNAME 17 8 A EMP# 9 5 N DEPT 98 3 N GROSS 94 4 P 2 JOB INPUT PERSNL NAME FIRST-PROGRAM PRINT PAY-RPT REPORT PAY-RPT LINESIZE 80 TITLE 01 'PERSONNEL REPORT EXAMPLE-1' LINE 01 DEPT EMPNAME EMP# GROSS
*...
Function InitRobot If Motor = Off Then Motor On EndIf Power High Speed 50 Accel 75, 75 Fend
'... #ifdef notdef ... #endifRem 文は持っていない。
digraph G { main -> parse -> execute; main -> init; main -> cleanup; execute -> make_string; execute -> printf init -> make_string; main -> printf; execute -> compare; }
/*...*/ //...
MyVariable = ( High + Low )/2; // High,Low は組込配列 Cond1 = Close > MA( Close, 3 ); // 直近3日の移動平均が終値より小さい Cond2 = Volume > Ref( Volume, -1 ); // 取引量が昨日より多い Buy = Cond1 AND Cond2; //出力は1,0,nullの配列 Sell = High > 1.30;
/*...*/ //...
Enterprise Control Language (ECL) is a declarative, data centric programming language used to manage all aspects of the massive data joins, sorts, and builds that truly differentiate HPCC (High Performance Computing Cluster) from other technologies in its ability to provide flexible data analysis on a massive scale.(2016.11.30) ビッグデータ解析用のクラスタシステム HPCC (LexisNexis High Performance Computer Cluster) で使う言語。 宣言型。クラスタに「撒いた」データを処理する。 開発・データ投入用のクラスタ(Thor)と 一般クエリ用のクラスタ(Roxie)が分離している。 類似:ObjectScript
F R E D の順列組み合わせを吐き出す:
STRING Word := 'FRED' :STORED('Word'); R := RECORD STRING SoFar {MAXLENGTH(200)}; STRING Rest {MAXLENGTH(200)}; END; Init := DATASET([{'',Word}],R); R Pluck1(DATASET(R) infile) := FUNCTION R TakeOne(R le, UNSIGNED1 c) := TRANSFORM SELF.SoFar := le.SoFar + le.Rest[c]; SELF.Rest := le.Rest[..c-1]+le.Rest[c+1..]; // Boundary Conditions handled automatically END; RETURN NORMALIZE(infile,LENGTH(LEFT.Rest),TakeOne(LEFT,COUNTER)); END; L := LOOP(Init,LENGTH(TRIM(Word)),Pluck1(ROWS(LEFT))); OUTPUT(L);宣言型で関数型っぽい、ところまではわかるのだが。動作が読めない。 マニュアルを見ても、何か決定的な概念が理解できない…
/*...*/ //...
MetaQuotes Language 4 (MQL4) is a built-in language for programming trading strategies.(2016.11.30) MetaQuotes Software社(露)の FX自動取引ツール MetaTrader の記述言語。 為替チャートや取引口座の制御が組み込まれているが、 その他は普通の体裁の言語。
//... /*...*/
VEX is a high-performance expression language used in many places in Houdini, such as writing shaders.(2016.11.30) 3Dモデリングツール Houdini の言語。 シェーダーの加工、粒子シミュレーション、物体変形などに使う。 言語の体裁はC。
基本データ型はint,float,3次・4次元ベクトル、3・4次元行列、配列、文字列、bsdfのみ。 構造体は定義できない。 bsdf (Bidirectional scattering distribution function) は 物体の表面の反射具合を示す関数。 手で定義はせず、既存のものを組み合わせて使う。 文字列も扱えるが、あまり出番がない。
cvex callee(export int mval = 0; int rval = 0; export int wval = 0; float castval = 0) { mval *= 2; wval = rval; }
import callee; cvex caller() { int mval = 1; int rval = 2; int wval = 1; callee("mval", mval, "rval", rval, "wval", wval, "castval", 1); printf("%d %d %d\n", mval, rval, wval); }引数は全部参照渡し。 陽に指定する仮引数が文字定数になっているところがなんか気持ち悪い。
//... /*...*/ #if 0 ... #endif
//...
//... /*...*/
@
をメタ文字として使用。
@nice-blue: #5B83AD; @light-blue: @nice-blue + #111; #header { color: @light-blue; }
/*...*/ //...
TaskJuggler is project management software for serious project managers.依存関係や人員・日程割り当ての制約のついた計画表を作成管理するための ツール。 フリーの Microsoft Project みたいなもの。 計画内容や制約をテキストファイルで記述する。
#... //... /*...*/どこに分類しよう。「計画を解く」という意味ではILOG OPLや Xpress Mosel の仲間なのだが、格が違いすぎる。
:=
で代入 (Delphi)
PUB MemTest | Temp Temp := byte[@MyDat][1] 'Read byte value byte[@MyStr][0] := "M" 'Write byte value DAT MyDat byte 64, $AA, 55 'Byte-sized/aligned data MyStr byte "Hello", 0 'A string of bytes (characters)演算子も
**
(乗算の上位32ビット), #>
(これより大きい値に制限),
|<
(0〜31をビットデコード) など、マイコン独特のものが沢山。
大文字小文字は区別しないが、プログラム例は camelCaseで書かれている。
組込ライブラリ名がJava風だったりオブジェクト風だったり、
@メモリ、\abort検出 といった修飾子があって、結果どの言語にも似ていない。
'... {...}
{...}
は、長い行を分割するためにも使える。
if( (" " =< byteBuffer) and (byteBuffer =< "~") {
} and (byteCounter < constant(_SERIAL_BYTES - 1)) )
if(("a" =< byteBuffer) and (byteBuffer =< "z"))
byteBuffer -= constant("a" - "A") ' Translate lower case to upper case.
$値
は他の言語の 値.toString()に相当する。
基本型の文字列はゼロ終端かつ長さを陽に持つが、 C関数を簡単に呼べるよう cstring 型に変換できる。 ガベージコレクトされる可能性があるので安全ではないが、通常は問題ない って大丈夫なのか?
|演算子の例がさっぱりわからん。 templateの影響範囲は次の行に及んでないはずなのだが。
template t{0|1}(): untyped = 3 let a = 1 # outputs 3: echo a
#... #[...]# 入れ子可 ##... ドキュメント用注釈 ##[...]## ドキュメント用ブロック注釈、入れ子可ブロック注釈が
discard """..."""
しかなかったNimrodに比べ改善されている。
注釈は空白扱いではなく、文法の BNF に陽に COMMENT? が ある場所にしか書けない。 (COMMENTの定義が見当たらない…) また、ドキュメント用ブロック注釈が通常の注釈と互換性がなく別文法になっている。
//... /*...*/
YAMLの #...
ではない。
ドキュメントでは
注釈文法は JavaScript と同様としているが、
文面上は CSS を踏襲したようにも思える。
(CSSでは//...
は使えないので注意!)
def listener = { e -> println "Clicked on $e.source" }thisの他に owner, delegate という組込識別子を持つ。
this
: 直近のClass
owner
: 直近のclosureもしくはClass
delegate
: 通常はowner
だが、
呼ばれた側の属性やメソッド "name()" を探す名前空間を変更できる。
つまり、クラス内の名前空間を外部からいじくれる。
a b c d
は a(b).c(d)
と解釈されるので、
自然言語っぽいDSL(Domain Specific Language)を作成できる。
show = { println it } square_root = { Math.sqrt(it) } def please(action) { [the: { what -> [of: { n -> action(what(n)) }] }] } // equivalent to: please(show).the(square_root).of(100) please show the square_root of 100 // ==> 10.0
nameメンバを定義すると、暗黙に getName() という取得子が 自動生成されるのが微妙にいやらしい。 Javaはそういうもんなのかもしれないが、 識別子で示される値が いじくられる場所がわかりにくくなる。(知ってればいいんだろうけど)
//... /*...*/入れ子は不可の模様。Java派生言語では珍しい。 類似:Scala, Kotlin
ComponentでかつNameがC0,C1,C22などになっている物を探す:
IsComponent And (Copy(Name,1,2) Between 'C0' And 'C9')
{...}
オブジェクトも扱えるが、 仕様的には扱いは薄目。
let square x = x * x //関数squareを定義する。 (fun x -> x%2 = 0) //無名関数 reverse (toStr (square 32)) //普通の書き方 32 |> square |> toStr |> reverse //パイプ演算子
浮動小数点値にはMeasure属性を付けて、単位チェック(次元検査)が可能。
関数の引数の型検査は、全部の引数が揃ってから行う。 最初の引数の時点で検査する純粋な関数型言語とはちょっと異なるというか、 実装が楽な方法。
No pattern matching is performed until all arguments have been received. For example, the following does not raise a MatchFailureException exception:let f = fun [x] y -> y let g = f [] // okHowever, if a third line is added, a MatchFailureException exception is raised:let z = g 3 // MatchFailureException is raised
//... (*...*) 入れ子可 #if notdef ... #endif (*IF-FSHARP ... ENDIF-FSHARP*) 非注釈 (*F# ... F#*) 非注釈 (*IF-OCAML*)...(*ENDIF-OCAML*) 読み飛ばし #!... 冒頭のみ非注釈もあるので構文解析器がひどいことになってそう。 (プリプロセッサでやってるのかも)
(*...*)
IEC 61131-3 では5種類の「言語」を規定している。
IEC 61131-3 は主にヨーロッパで普及。日本や米国では途上。 日本では独自仕様の開発環境がまだまだ使われているが、 徐々に対応が進んでいる。
シーメンスのSTの実装である
SCL (Structured Control Language)
では独自拡張で
//...
の追加、
(*...*)
の入れ子の切り替えが可能。
「Pascal風」とはなっているが、begin-end は無いし、 入出力の宣言文が独特なので あまりPascalとは似ていない。
HDLに共通して言えるが、代入文 :=
はレジスタへの破壊代入ではなく
信号の接続、であることに注意する必要がある。
ST では記述の仕方で勝手にFFが追加されることはなく、
陽にFF(RS-FF)を定義しないといけない模様。
@expr
や @{block}
が処理指令。
同類:PHP, Velocity
@*...*@ @{ /*...*/ //... }
最外周が let 宣言 in 式
の形をとる、独特の文面。
ビールが99本の例
/*...*/ 入れ子可
入れ子可なのはプリプロセッサを前提としてない
(#if 0
が使えない)
からかな?
(2016.11.21) オープンソースの 分散プロセス・通信プロトコルの整合性検証ツール Spin の仕様記述言語。 同類:mCRL2, LOTOS
/*...*/
デフォルトでは内蔵のプリプロセッサを使うが、複雑なマクロがあれば
cpp(1) を使う。注釈はプリプロセッサ依存なので、
//...
が使える場合もある。
If (p = $$$NULLOREF} { Quit $$$ERROR($$$NOOBJ) } If (..PassengerList.Count()'<..SeatCount) { Quit $$$ERROR($$$NOSEATS) } New res Set res = ##class(FLReservation).%New() Set res.Flight = ##this Set res.Passenger = p Do ..PassengerList.Insert(res) Set res.SeatNumber = ..PassengerList.Count() Do res.%Close() Quit $$$OK
- %は識別子の頭に使えるが、スコープが違う
- $$$macro でマクロ参照
- ##class, ##this はシステム定義識別子の模様
/*...*/ 2カラム目以降に置く。以下同様 //... ;... ;;... $TEXTで取り出せる。ループ中に置くと遅くなる .macコードではプリプロセッサがあり、以下も使える: #;... 1カラム目のみ ##; どこにでも置ける
///...
はクラスの説明用に予約。開発環境で閲覧できる。
注釈文法がいまいちまとまりに欠けたり変な制約があるのは 仕様の建増しを繰り返した結果?
/*...*/
%
で示す。
%define MyMacro local_value MyMacro=%MyMacro MyMacro=%'MyMacro'_3333 ↓ MyMacro=local_value MyMacro=local_value_3333マクロ言語ではあるが、計算や外部DLL起動も可能。
%-...
(*...*) 入れ子可
'...
//... #... /*...*/ (?#...) pcre(3)正規表現中
同類:Bluecoat CPL; pcre(3)を使っているところも似ている。
単に X
と書くと「Xが指すアドレス値」
なので、アドレス X の内容を扱うには .X
と書く。
従って普通のプログラムは .
だらけの文面になる。
左辺では .
は不要なのが微妙にいやらしい。
IF .A NEQ 0 THEN { B = .P + .A; C = .Q + .A; }
ステートメントも、内包する式に ;
が付いていなければ
値を返せる。
Y = (IF .X GTR 0 THEN .X ELSE -.X);
!... %(...)% %IF 0 %THEN ... %FI
CODECOMMENT '...'
というのもあるが、
ここを跨いだ最適化を防ぐ、
作用があるので厳密には注釈ではない。
「%(...)%
は入れ子にできないので、コメントアウトには非推奨」
の文言は、Cの /*...*/
にもそのまま当てはまる。
${...$} $...
$[ ... ]$
で直接 SPICE のコードも混ぜ込める。
//
が注釈であるとする版もある。
同じ年度の文書なのでどっちが本当だかわからん。
define function foo( x, y...) as println( x ); println( y ) enddefine
普通の関数呼出とドット記法と中置記法を混ぜて使える。
X.f(Y) == f(X,Y) == X @f Y X.f == f(X) == X @f println(x) == x.println
数値にはpx,in,s,em,mmといった単位を付けられる。 単位が合わない演算はランタイムエラーになる。
#... /*...*/
//.../
と /"..."
は正規表現。
マニュアル の序章では、元はECMAScript風だったとあるが、 注釈文法で見ると最初から UNIX用だったことが伺える。
sq_writeclosure()
や writeclosuretofile()
で
インタプリタ(バイトマシン)の状態を保存できる。
/*...*/ //... #...
文法的には sh にCの制御構造を足した感じ。
変数参照は {i}
。
#... //... (V2.3以降)
配列がないのが意外。 スクリプトでは単一の粒子について記述するので、 いらんだろという判断なのかもしれない。
//... /*...*/
--... /*...*/ (*...*)
--... {-...-}
Haskellの方言はどこまで載せればいいかちょっと迷う。
文字リテラルが `a`
なのが最初見ると異様な感じ。
//...
注釈文法はやはりというか文法定義には出てこないので、 プリプロセッサか何かで除いている模様。
仕様からコードも生成できるようだが、どうやって実現しているのか不明。 コードが生成できるくらい詳細に仕様を書かないとダメってこと? 現実ではプロトタイプが動きはじめてやっと仕様が固まりだすので、 こういうトップダウンアプローチは結局うまく回らなかったりしますが。
#... /*...*/同類:Xpress Mosel, ILOG OPL
前提としているブラウザ自動試験ツール Selenium が 事実上 最新のFireFox,IEしか対応してないので、 広範なプラットフォームでのレイアウト検証はあまり期待できない。 実際、やっていることはブラウザのウィンドウの大きさを変えて、 検証対象のDOMオブジェクトの大きさや位置を確かめる程度。 何も確かめないよりはいいんですが。 同類:CSS, SenseTalk (格が違いすぎるけど)
#...行頭のみ。行の途中の
#
は
CSSでいう id セレクタとして使いたいからだと思われる。
"..." /*...*/ //...文字列は
'...'
。
ただ、数値シミュレータという性質上、あまり使いどころがない。
ので、例外が投げられる言語専用。 実質C++用。他言語はC++に薄皮をかぶせたもの。
#...
注釈は注釈対象のあとに書くようにとあるが、 コンパイラが利用してるわけではなさそう。 将来の自動文書化を見越している?
同類:rpcgen(1) (cppの /*...*/
のみ)
業務上の制約や条件をルールとして記述し、 線型計画・整数計画・二次計画の手法で最適解を探る。 区分線形関数やステップ関数を定義できたりする。 同類:Xpress Mosel
dvar float+ Gas; dvar float+ Chloride; maximize 40 * Gas + 50 * Chloride; subject to { ctMaxTotal: Gas + Chloride <= 50; ctMaxTotal2: 3 * Gas + 4 * Chloride <= 180; ctMaxChloride: Chloride <= 40; }これもチッペンデール問題の一種。
//... /*...*/
#... /*...*/
//
は空の正規表現なので注釈にできない。
Puppet template というのもあって、こちらは
<%# ... %>
!var スカラー変数参照 @obj.name オブジェクト(データベース出力)変数参照 l_name 関数のローカル変数
if-else が <if>...</if><else>...</else> なのが 階層化ifを考えてない感じで気持ち悪い。 case文がないので多重ifは多用されそうなのだが? じゃあどういう文法がいいのかと言われても答に窮しますが。
注釈は、例題では SGML の <!-- --> が使われているが、
<comment>...</comment>も使えるっぽい。
隠しコマンド Home Home Home 上上右左右左右 で開発モードに入り、 以下の helloworld.brs を
' ********************************************************* ' ** Roku Hello World Example ' ********************************************************* Sub Main() port = CreateObject("roMessagePort") screen = CreateObject("roParagraphScreen") screen.SetMessagePort(port) screen.SetTitle("Example") screen.AddParagraph("Hello World!") screen.Show() wait(0, screen.GetMessagePort()) End Subhelloworld.zip に固めてデバイスにアップロードする。
言語そのものはかなり基本的なことしかできない。 主要機能はネイティブコンパイルされている各種ライブラリ(Component)に 入っている。
REM ... , '...
void setup() { size(100, 100); //画面サイズ noStroke(); //縁を描かない } void draw() { background(126); //背景色の塗り潰し ellipse(mouseX, mouseY, 33, 33); //マウスの位置に円を描く }
言語は英語になるよう配慮されているが、 COBOLのような汚さはない。 構造化プログラミング用の if..else..end if や repeat..end repeatが揃っている。
値に単位をつけられる。計算に合わせて自動変換される。 単位が合わないと怒られる。
put 3 ft into width add 1 yard to width -- 1 yard is automatically converted to 3 ft put width -- "6 feet" put width * 4 feet into area put area -- "24 square feet" add 2 liters to area -- throws a mismatched units exception変数に対してメタデータが付随していて、 オブジェクト指向はこのメタデータで処理を分けている模様。 だからあまり表に出てこない。よきに計らってくれる。
マニュアルは一見、非プログラマ向けに書いてあるようで 実は全然そんなことはない。わかりやすく書かれてはいるが 初心者向けではないと思う。 メタデータで挙動が変わるところは、型の強い言語に慣れていると 不安になりそう。
--... //... #... (*...*) 入れ子可
32bit整数のinteger, 浮動小数点の double の他に、 金勘定用の32桁固定小数点型 decimal を持つ。
エラー処理は、以前は try-catch型だったが、 現行の CTL 2 では transform() に対し transformOnError() が 呼ばれる方法に変わっている。
入出力は $in と $out に対して行う。
自動mapが組み込まれており、まるごとコピーは
$out.0.* = $in.0.*;
$inにある同名のフィールドが$outにコピーされる。
//... /*...*/どう分類しよう。データ処理言語は独立させてもいいかもしれない。 同類:GAUSS,Julia
Referenceには注釈文法がない。例題からすると、たぶん
# ...
#:
は特殊コマンドなので注釈ではない。
どこに分類しよう。仕様記述、ではない。汎用でもない。 テンプレート言語?
Bakefile is a meta-make tool which does not replace the normal make program or IDE used for building the project but simply generates the input files for it from a unique meta-makefile which we call a “bakefile”.
GNU Makefile や VIsual Studio の*.snl を自動生成するツール。メタmakefileジェネレータ。
プログラミング言語というよりデータファイル生成ツール。
if はあるがループ構文はない。
設計思想はよくわかるのだが、 対象としている「使いなれた環境を手放したがらない人」にとっては Bakefileの記術とmakefile/VSとの違いが大きすぎて 敷居が高い気がする。
//... /*...*/
マクロ言語としては入力と出力が違いすぎる。 どこに分類しよう。データ生成言語? 類似:MakeCAB, IMakefile, GSL
* ...
ChucK is a programming language for real-time sound synthesis and music creation.音声合成プログラミング言語。 代入は左向きの = ではなく、右向きの => を使う。 体裁はC風だが、オブジェクトに対する演算子が独特。
組み込み型として以下を持つ:
now
が現在時刻を指すが、プログラム実行中は now
は進まない。
明示的に 1::second => now
などで時間を進めると、
各種スレッド(shred)が動き始める。
// our patch: sine oscillator -> dac SinOsc s => dac; //演算子オーバーロードで、発振器をDACに接続 // infinite time loop while( true ) { // randomly choose frequency from 30 to 1000 Std.rand2f( 30, 1000 ) => s.freq; // advance time by 100 millisecond 100::ms => now; }
//... /*...*/
関数を非同期に実行する async/await/yield 機構が組み込まれている。
関数定義にasyncをつけると非同期関数になる。
await expr
で待つ。
でもマルチスレッドではないと明記されている。
ECMA draftになっている割には仕様書がわかりづらくて雑な感じがする。 実装が仕様、みたいな。
文字列の中で、shみたいにexpressionを入れられる。
printNumber(num aNumber) { print('The number is $aNumber.'); // Print to console. }(だからJavaScriptと違い、識別子として$は使えない)
//... /*...*/ 入れ子可
基本型は浮動小数点・文字列・行列のようだが、 演算子が何を食わせるかによって挙動が全然違う。 型を意識してないと意味を読み損ねそう。
sepString = ""; sepString * 256; //\0でクリア? sepString * "+"; //strcat(sepString,"+")相当。再代入しなくてもいいというかされてしまう
特定用途向けの数値解析駆動用の言語ってどう分類しよう (仲間:HOC,GAUSS)
工業用の監視制御ソフトウェア CIMPLICITY で使う言語。 体裁はあらゆる点でVisualBasic。 独自実装なのかVBのコードを使っているのかは不明。
'... Rem ...
関数定義は仮引数を取らない。shみたい。
func tan() { return sin($1)/cos($1) } tan(PI/8)
/*...*/ //...
訴訟事務データベース Concordance Desktop のカスタマイズ用言語。 言語の体裁はCというかBに近いが、データベースアクセス機能がある。
ポインタ型が無いので、データベースへのハンドルはint型。 気持ち悪い。
db変数の未初期値はゼロだが、 データベースがすでに開いている状態でスクリプトを起動すると 0番ハンドルに用意されるので、そのまま db でアクセスするらしい。 気持ち悪い。
/*UPPER.CPL*/ main() { int db, i; if (db.documents <= 0) return; cycle(db) { puts(0,0,"Processing record " + str(docno(db)) + " of " + str(count(db))); db->FIELDNAME = upper(db->FIELDNAME); } }
db.documents
と . で呼び出すのはデータベースそのものの属性。
db->FIELDNAME
は"current query"のカラムを指す。
current queryをcycle(db)
で回す。
気持ち悪い。
/*...*/
のみ。Cと同じ。
strarr = ["a","b","c"] -- 文字列のリスト numarr = [1,2,3,4] -- 数値のリスト。型は全部同じでないといけない double n = n * 2 -- doubleという関数の定義 double 4 -- 関数呼び出し。(,)は不要 List.map double numarr -- map適用 [2,4,6,8] (True, "accepted") -- タプル。型は混ぜて良いが、長さは一定(?) bill = { name = "Gates", age = 57 } -- レコード(連想配列) bill.name -- 普通の属性参照 "Gates" .name bill -- .name 関数を使った参照。mapに食わせるときに便利 "Gates" { bill | name = "Nye" } -- 属性の置換。{ age=57,name="Nye" } が返る。billは不変 破壊代入はできない。 view : Model -> Html Msg view model = div [] [ button [ onClick Decrement ] [ text "-" ] , div [] [ text (toString model) ] , button [ onClick Increment ] [ text "+" ] ]
動作時は内側の<DIV>のテキストが破壊的に書き替わるはずだが、
そこは隠蔽されている。
text (toString model)
であると宣言してるだけ。
ここのカッコは関数呼び出しではなく、演算順の変更。
--... {-...-} 入れ子可a//bは整数の割り算。
高階関数を基本データ型として扱えるだけでも「関数型言語」を 名乗っている場合があるので(Clojure,Scalaとか)、いちいち詳細を調べる必要がある。 Elmは純粋な関数型と言えそう。
ループも書けるが、プリプロセッサでベタ展開されるので、 無茶なループを書くのは禁止。
パケット受信もできるが、種類を判別して待つだけ。 受信したパケットに応じて挙動を変えるといったことはできない。 そもそも if 文はプリプロセッサ段階で選択を済ませてしまう。
#... /*...*/
基本データ型は16bitの整数型のみ。 文字列を扱いだすとマイコンに収まらなくなるからかもしれない。 (ロボットへの文字列の入力はできないから、十分だと思う)
var a[3] = 1, 2, 3 var b[3] = 2, 3, 4 var c[5] = 5, 10, 15 var d call math.dot(d, a, b, 3)でdにベクトルaとbの内積を代入する。 変数は全部参照渡しで、call自体は値を返さない。 math.dotはオブジェクト風だが、単なる名前空間っぽい。
#... #*...*#
(*...*) 入れ子可
act ins10, optA, acc10, putA, coin, ready ; proc User = ins10 . optA . User ; Mach = acc10 . putA . Mach ; init allow( { coin, ready }, comm( { ins10|acc10 -> coin, optA|putA -> ready }, User || Mach ) ) ;
この次の例題は、 「5lと8lの缶を使って4lの水を汲めるか」 というもの。 人手なら10分くらいで解けるが、計算機に解かせるのは結構難しい というか、問題を計算機に載せること自体が専用の言語を要求する。
mCRL2では、まず可能な操作を仕様としてごりごり書き下す。 これをツールで順次状態変化に変換して、全体で35状態、108遷移と出す。 この中から解を探す。
注釈:
%...
のみ。
仕様記述言語では %
は多いかと思えばそうでもなかったりする。
HPのプリンタのジョブ制御、パネル制御、内蔵ディスク操作などを 行うための言語というかコマンド体系。 ジョブの再投入、制御パネルの設定変更、フォントのアップロード などができる。 PostScriptやPCLのデータの前後をPJLで挟んで制御を行う。
直接ユーザーが見たりラインプリンタで打ち出すことはないはずだが、 なぜか注釈文法がある。デバッグ用?
@PJL COMMENT ...
企業などにおける数値的な問題を書き下し、最適解を探ったりする環境 Xpress で使われる言語。 宣言型と手続き型の両方の側面を持つ。
マニュアルだけではさっぱりわからないのでエジンバラ大学の資料から。
学問分野的には数学でもゲーム理論、あるいは数理経済学や 線形計画法になる。
上の問題はパラメータ2つでしかも線形なので中学生レベルの数学で解は出せる
が、「どう解くか」ではなく、「束縛条件は何か」を計算機に食わせるためには
普通のプログラミング言語とは違う言語が必要。
チッペンデール問題を Xpress Mosel で書くとこうなる。 計算機でこれが解ける、というのが凄い。 同類の言語:Alloy, PVS
!... (!...!) 入れ子可
p. This is a paragraph with *strong* _emphasis_.
パッと見はHAMLに似ているが、計算や変数置換はないので、Wikiに近い。
むむ、Markdown同様、注釈は書けないようだ。
強いて書くなら <!--...-->
しかないかな?
Windows用のインストーラー作成ツール。 *.infでは機能が足りない、ときに使う。 ファイルやレジストリ操作はもちろん、 ダイアログ表示、ファイル読み書き、演算も可能。
ユーザー定義の変数も使えるが、既存レジスタとして $0〜$9,$R0〜$R9が使える。保存用のスタックもある。 ユーザー定義変数は2.0beta4からなので、以前はレジスタだけだったのかも。
制御構造はIfのジャンプ先がラベルのGotoだけなので、かなり不細工。
Goto +2
で2行下?へジャンプできる。
; pre-function, show-function, leave-function Page license skipLicense "" stayInLicense Function skipLicense MessageBox MB_YESNO "Do you want to skip the license page?" IDNO no Abort no: FunctionEnd Function stayInLicense MessageBox MB_YESNO "Do you want to stay in the license page?" IDNO no Abort no: FunctionEnd
;... #... /*...*/ !if 0 ... !endif
「対話的定理証明システム」。仕様記述用の宣言型言語。 モノが満たすべき条件をごりごり書いて、矛盾や不備がないかどうか、 証明ができるかどうか調べる。
実装はLISP。 プログラム自体は Allegro Common LISP か CMU LISP で動かすのだが、 インタラクティブ用途のフロントエンドとしてEmacsが必要。 なくても動かせるみたいだが不便。
スタックの記述例:
stacks [t: TYPE+] : THEORY BEGIN stack : TYPE+ s : VAR stack empty : stack nonemptystack?(s) : bool = s /= empty push : [t, stack -> (nonemptystack?)] pop : [(nonemptystack?) -> stack] top : [(nonemptystack?) -> t] x, y : VAR t push_top_pop : AXIOM nonemptystack?(s) IMPLIES push(top(s), pop(s)) = s pop_push : AXIOM pop(push(x, s)) = s top_push : AXIOM top(push(x, s)) = x pop2push2: THEOREM pop(pop(push(x, push(y, s)))) = s END stacksうーん。わかるようなわからないような。
注釈: %...
LinuxだとLVM用の /sbin/pvs
と被るので紛らわしい。
スクリプト言語はもっぱらデータ入力とそのエラーチェックに使う。 演算子や関数はかなり単純なものしか用意されていない。 なので統計計算用の言語ではない。
PROC P06_MARITAL_STATUS if P06_MARITAL_STATUS = 1 and P05_AGE < 12 then errmsg("Married but less than 12 years old"); endif;skip 文で、後続のprocへ直接ジャンプできる。 普通の言語に慣れているとかなり気持ち悪いが、 ウィザード形式のアンケート入力に使うんだと思えば納得がいく。
{...} 入れ子可 //...この組み合わせも珍しい。
どこに分類しよう。統計計算用でもデータベース用SQLでもないし… UILのような物理ユーザインタフェース記述でもない。 データ入力支援?
Cadence社が規定する、ICの導体部分のルーティングデザインを記載した 言語というかデータファイル。
Gerber同様、人間が直接編集する代物ではない。LSI設計ツールで加工する。
Referenceは400ページ以上にもなるが、注釈文法についての項目がない。
例題では #...
を使っているし、
#
がコメント文字っぽい記載はあるが。
p foo →<p>foo</p> h2.green Description →<h2 class="green">Description</h2> #{expression} expressionをJavaScriptとして評価 p | <em>unescaped</em> text p. <em>unescaped</em> text shortcut p.content →<p class="content"></p> .content →<div class="content"></div>
//... <!--HTMLに残る--> //-... 残らない // ブロック コメント
UNIX用なためか、LOGOの ;...
ではなく
#...
を採用。
バックエンドに対しては簡単なRPCで通信する。 実質、Java用のものしか用意されていない。
#...行頭のみ。行の途中の
#
は平文扱いしたいからかもしれない。
Morelia is a Python Behavior Driven Development (BDD [1]) library.
Pythonのunittst用のテストケース記述言語。 プラットフォーム名が Morelia で、その中で自然言語風の 挙動記述(テストケース)をGherkin言語で書く。
Scenario: Add two numbers Given I have powered calculator on When I enter "50" into the calculator And I enter "70" into the calculator And I press add Then the result should be "120" on the screen
Given, When I, Then
が予約語で、前提・操作・結果を表す。
テスト対象に、あとから step_I_have_powered_calculator_on()
などを
書き加えていって仕上げる。
つまりテストを先に書いて、それに合わせて実装する (BDD)スタイル。
日本語に切り換えることもできるが、予約語の部分だけっぽいのであんま役に立たない。 (日本語で書くと、テスト対象のフックも日本語の関数にする必要がある?)
#...行頭のみ。途中から
#...
はできない。
ビジネスアプリケーション提供サイト Salesforce で使うスクリプト言語。 文法や雰囲気はJavaに酷似。
基本データ型として、SObject
なる、データベースと紐づいた型がある。
SOQLクエリで簡単にデータベースにアクセスできる。
insert/update/delete/merge
が組込関数型として用意されている。
なぜか SObject.insert
ではなく、insert SObject
として使う形式。
(この場合の SObject はデータベースの行)
基本データ型に関数がないので、Javaと同じ制約がある。
内部的にはJVMで実行されるのかも。
注釈は例題では //...
のみを使用。
/*...*/
も使える。
純粋な宣言型。ソルバはProlog的なことをしているはず。 仕様記述言語と言えなくもないので、とりあえずそちらに分類しておく。
/*...*/ //... #...
Bob -> Alice: Authentication Acceptedで、[Bob] から [Alice] へのラベルつき矢印を描く。 細かい位置指定とかは不要でよきに計らってくれるのがすごい。 UMLの注釈(折り紙)はnote文で書ける。
'... /'...'/非常にレアな組み合わせ。
/*...*/
でダメな理由は特に見当たらないが、
文字の体裁変更がCreole型Wikiなので、マークアップと間違われるのを嫌った?
'... #rem ... #end
#rem
は #if false
と同じだと書いてある。
チュートリアルの初めのほうでコメント文法について丁寧に言及しているのが
好印象。
/*...*/
--
が使えるかどうかは不明。
例題では1行コメントとして ←説明...
と書いているので、不可?
Local $aArray[4] $aArray[0] = "Jasper" $aArray[1] = "Beethoven" $aArray[2] = "Pinky" $aArray[3] = "Fidget"文字列結合が
&
、 連結行が _
なのはVisualBasicに準ずる。
お気軽にGUIを作れる点では Tcl/Tk によく似ている。
;...
と、cpp風にネスト可能な #cs ... #ce
を持つ。
この組み合わせは珍しい。
関数呼び出しには () を必要としない。( )は、他の言語での { } のような
ブロック記述に使われる。
ただし、引数が無い場合は func()
として呼ばないと
func
の値そのもの(関数定義)が返ってきてしまうので()が必要。
if文が値を返せる。
mybox.width = if mybox.height == 10 then 20 else 10字面上はBASICに ( ) でブロック構造を与えたような感じになる。 陽にリストを作る時は
#(a, b)
となる。
細かい所は手続き型だが、全体としてはイベントドリブンな用途が多い。
macroscript MoveToSurface category: "HowTo" ( fn g_filter o = superclassof o == Geometryclass fn find_intersection z_node node_to_z = ( local testRay = ray node_to_z.pos [0,0,-1] local nodeMaxZ = z_node.max.z testRay.pos.z = nodeMaxZ + 0.0001 * abs nodeMaxZ intersectRay z_node testRay ) on isEnabled return selection.count > 0 on Execute do ( target_mesh = pickObject message:"Pick Target Surface:" filter:g_filter if isValidNode target_mesh then ( undo "MoveToSurface" on ( for i inselection do ( int_point = find_intersection target_mesh i if int_point != undefined then i.pos = int_point.pos )--end i loop )--end undo )--end if )--end execute
fn g_filter o = superclassof o == Geometryclass
は、
関数 g_filter を定義、引数はo 1つ、中身は
superclass o == Geometryclass の返り値。
undo ブロックは操作前の状態を作成するのかな?
--...ALGOL風のブロック終端の
)--end
は、エディタが自動でつけてくれる?
1980年代からある、BASIC と COBOL を混ぜて小型化したような言語。 元はデータ入力端末のプログラミング用なので、画面制御命令が豊富。 構造化プログラミングが可能っぽいので、 COBOLほどひどい文面にはならない。
ANSI Standard X3.238 として規格化されているが、 規格書は有償配布のため、原典にあたることができなかった。
*... .ほげほげ +... %IF OLDSTUFF > 0 ... %ENDIF
%IF OLDSTUFF > 0 ... %ENDIF
はプリプロセッサ。
通常は OLDSTUFF EQU 0
と宣言するので、%IF
は偽になって中が無視される。
[LocalSets] exten => 100,1,Dial(SIP/0000FFFF0001)で、100番がダイアルされると sip.conf に書かれたアドレス 0000FFFF0001の電話機に接続する。 1 はシーケンス番号。失敗すると2を探しに行く。
;... 1行コメント ;-- ... --; ブロックコメント。DOSとISOの混じった形式は珍しい。昔は書けなかったのかな?
Erlangと違い、 電話応答用に特化した言語なので、汎用言語とは言えない。 チューリング完全ではある。
{...}
でプログラムを埋め込む。{$val}
など。
じゃあ <SCRIPT>
などで生の{}を使いたいときはどうするかというと
両端がwhitespaceならばそこは処理しない
<SCRIPT> // the following braces are ignored by Smarty // since they are surrounded by whitespace function foobar { alert('foobar!'); } </SCRIPT>頭いい。思いついた人は偉い。 本気でエスケープするための
{literal}...{/literal}
というのもある。
{*...*}
つまり、プログラム部が*で囲まれる形式が注釈。
プログラム例では //
も使われているけど、文法書には記載なし。
高階関数や無名関数も使える。
{}
でラムダ式を表す。
{ it -> it * 2 }
で1引数の無名関数。
ints.map { it -> it * 2 }
で ints配列に無名関数を適用する。
関数をデータとして扱えないJavaの欠点を補う言語はいろいろ出ているが、 Kotlinもその一つといえる。
a {...}
で、a 関数に無名関数を渡す、という意味になる。
{} が他の言語と違って単なるブロックではなくラムダ式を表すので、
油断していると動作を読み損ねる。
//... /*入れ子可*/同じくJVMで動くScalaも /*入れ子可*/ だが、不便だと思う人が多いんだろうか?
#if 0 ... #endif
みたいなものがJava風言語にはないから?
Chameleon is an HTML/XML template engine for Python.HTMLテンプレート言語。タグの名前空間つきの属性値として 命令やPythonコードを埋め込む。
<p tal:repeat="txt ('one', 'two', 'three')"> <span tal:replace="txt" /> </p>例題には例の出力が無いが、たぶん
<p> <span>one</span> <span>two</span> <span>three</span> </p>
tal:replace
は、そのタグの中身を書き換える。
DOMの.textContentみたいなもの。
<!--! 出力に残らない --> <!--? 出力に残る。-->
p. this is a block paragraph. <P>this is a block paragraph.</P> - var author = 'me'; // - で始まるのはJade文 <P>= author // = でJavaScriptの評価値を計算ほとんどの冒頭の語は 出力のHTMLタグに対応するが、
case/when, if/else, each, while, block, include
など、
一部Jade特有の
キーワードはJadeで処理される。無理にHTMLタグと違う書き方をしていない。
:markdown # markdown
-> <h1>markdown</h1>
のように、filter機能で他の文法も収容できる。
// ...
の形式の一行コメントが基本だが、なんとブロック形式でも有効。
// this is a block comment.出力では
<!--...-->
のHTMLコメントに変換される。
while ループがあるので一応チューリング完全と思われる。 break や continue があるかどうかは不明。 (後継の pug では明記)
作者的には HAML の影響を強く受けた、となっているが、 HTMLテンプレートというより普通の文書記述言語に近いと思う。
平文ベースのマークアップ。プログラムのヘッダ部分に埋め込むことを想定。 (平文ベースのマークアップとWikiって、どう区別すればいいんだろう?)
A href の詳細を、平文に直接埋め込まず、末尾のフッタにまとめて書くことも可能。 Markdown同様、平文の見やすさに貢献。
External hyperlinks, like Python_. .. _Python: http://www.python.org/そこの余計なアンダースコアに意味がある、のが 微妙にいやらしい感じをかもしだしているが。
コメントは .. ほげほげ
なのだが、
directiveやA href ターゲットや脚注指示と兼用なので、
重複しないように気を付けて書く必要がある。
この辺もいやらしいというか、あんま深く考えてないだろ感がある。
(いや、ちゃんと考えてるよ!)
ブロックコメントは
.. comment block.とも書けるのだが、ブロック中にdirectiveがあったりインデントがずれると そこで異常動作する。 実質、「怪しい箇所をごっそりコメントアウトする」ブロックコメント文は 無い、と思った方が良い。
Wikiの文法は普通だが、注釈は
<wiki:comment>...</wiki:comment>
と冗舌な方式。
あまり使わない機能は wiki:
名前空間に押し込んである。
Google Code 自体は、もうGitHubで十分だろということで 2016/01 には廃止されてしまうようですが。
Bidding farewell to Google Code
(:comment ...:)
しかなさそう。
%comment%
は、注釈というより CSSの display: none
を使った隠しテキスト。
tvtropes.org のpmwikiヘルプでは %%...
も注釈扱いとなっているが、
古いpmwikiなのか?
(...)
ではなく、( ...)
が正しい。"(" がワードである必要がある。
\ ...
も使える。
が、仕様を見ると ( ...)
と \ ...
は、重要度?で扱いが大分異なる。
実際、Forthでは空白と行末を区別しないのだが、
行末を解析する必要があるのは言語全体でみても \ ...
だけなので、
異端児なのかもしれない。
VLBI観測データをパケット単位で垂れ流す専用のバイナリデータフォーマット。 パケット落ちは許容する、一方的に送るだけ。速度重視。 なので Data "Interchange" Format ではない。 NICTの報告書 では "VLBI data interchange format"のままだが。
基本データは32bit長だが、バイト列はlittle endian で送ることになっている。 現場仕様ではそんなもん? Station ID(16ビット)の上8bitが <'0' なら数値ID、でなければASCIIのIDとする、とか。
仕様書は英語ネイティブでない人が書いているので微妙に読みにくい。 "UT second tick" って言われても1秒間なのか2秒目のことなのかわからん…
バイナリなのでコメントは書けないはずだが、 Invalid data フラグを立てることでそのパケットを無効にできる。 先見の明あり、かもしれないし、従来フォーマットでも存在したのかもしれない (Mark5では無かった模様)
定義ファイル(*.def)は YAMLっぽい文法で、注釈は
/*...*/ //...
テンプレートファイル(*.tpl)の処理部分は Scheme (Guile) を使用。注釈は
#... -*-...-*-本体が Guile なら
;...
も使えそうだが、マニュアルに記載は無い。
つーかどっちもLISP系の注釈ではない。なんで?
*.tplの処理部分の指定方法が独特で、ファイルの最初にカッコ系の文字を 7つまで並べて、処理を示すマーカーにできる。
[+ AutoGen5 template -*- Mode: emacs-mode-of-choice -*- h=chk-%s.h c # make sure we don't use csh: (setenv "SHELL" "/bin/sh") +]-man なファイルは -mdoc から生成しているのだが、 このmdoc2man.plが しょぼくて、古いnroffでは使い物にならない。 OpenSSHの mdoc2man.awk のほうがまだマシ。
ntp-4.2.4 以降がこの AutoGen を使っていて、マニュアルが古いgroffでは読めない。
なおntpではテンプレート処理指定マーカーには [+: ... :+]
を使っている。
こういう、複数の言語 (roffとCとScheme) を収容するテンプレート系言語は、 今見ている文が地なのか処理指令なのか処理指令の中の文字列なのか… などが どうしてもわかりにくくなる傾向にある。 文法ハイライトがよほど高性能なエディタでないと編集がつらい。
純粋に組込用の小型言語としても使われていることはある。 (BroadcomのNIC動作試験用の B57UDIAG.exe など)
データは基本的に文字列で、場合に応じて数値やリストに解釈する。 Tcl 8.0以降は、内部で文字列・数値・リストの形式を必要に応じて 変換して持つので、ペナルティも少ない。
{...}
は他の言語と違い、リスト作成ではなく、シェルのシングルクオートに近い。
set x "0" ;# 文字列 set y {1 2} ;# 文字列 "1 2" [lindex $y 1] ;# リストとして解釈して 2 を取り出すリストの中にリストを入れて、データ構造を作れる。
ただ、連想配列 (array) が基本データ型になっていない(変数にしか代入できない)のが 大きな欠陥として残ってしまった。
set a(x) 1 set a(y) 2 $a(x) ;# 1 [array get a] ;# リスト化した {x 1 y 2} を返す。aは単なる文字列扱いリストの中に連想配列 (属性名+属性値) を入れたいことは多いが、それができない。
dict
命令で幾分改善されているが、根本的な解決ではない。
このへんのからみで、組込用としては Lua に水をあけられてしまった感がある。
ただ、そこに書かれた識別子が ただの文字列なのか、 変数として評価されるのかは Tcl のほうが明確。
注釈の #...
は、「コマンドが書ける場所にしか書けない」ので、
入れ方に工夫が必要な場合がある。
NS が、xxx.ns.domain.name のような名前であることを強制(矯正?)しているので、 そうでない環境では設定がちょっとめんどくさい。
行頭1文字がレコード種を指すので、慣れてないとわかりづらい。
#... コメント %XX:... 「場所」。BINDのviewに相当するもの .FQDN:... 作者の好みの形式の NS,A,SOA を生成 &FQDN:... 作者の好みの形式の NS,A を生成 =FQDN:... A と PTR +FQDN:... A @FQDN:... MX 'FQDN:... TXT ^FQDN:... PTR CFQDN:... CNAME ZFQDN:... SOA :FQDN:n:... 汎用。任意のレコードタイプを書ける。作者はとにかくBINDが大嫌いのようで、しつこいくらい悪口が書かれている。
$¢
て普通に書かれていて、us-asciiだと化ける。
コメント文法は、ブロックコメントをどうするかで悩んだ形跡がある。
(Perl5は pod用の =begin nothing ... =end
しかなかった。)
とりあえず普通の #...
はあるが、
対になる <>[]{}() とか「」『』《》なんかを使って
#`(「『...』」)
perl6.org に RFCがあった。
RFC 102: Inline Comments for Perl.
では #<...>#
を提唱。実装はされてなかった。
参照している RFC 5: Multiline Comments for Perl. では、メーリングリストでの反応のまとめ、が載っている。
qc(...)
を新設ってのはどう?
#<<TOKEN; ... TOKEN
で済ます
「専用メーリングリストで1週間議論したが、結論は出なかった」出ないでしょうな。というか、 専用メーリングリストに隔離されるくらい煙たがられたということでしょう。
一応解説があった。 http://tablets.perl6.org/tablet-2-basic-syntax.html#multi-line
#`(...) ( の部分は、組になっていれば #`[{{< ... >}}] などと重ねられる。 ブロックコメントにしたければ、なるべく変な組み合わせを使う。 #= ... 次のサブルーチンについての解説文になる。 WHYメソッドで取り出せるので、計算機言語的には注釈ではない。
注釈の処理はどの言語でもめんどくさいので、 プリプロセッサにやらせている処理系もあるが、 Perl 6 ではあえてそれをせず、 なんとしてでも構文解析器で喰ってやる、 プリプロセッサ使ったら負け、みたいな執念が感じられる。
経済統計計算用の言語というか環境。 大きくて疎な行列を扱う機能と対話GUI環境を持つ。
言語の体裁は普通。FORTRANとPascalの中間のような感じ。 膨大な関数ライブラリを使いこなせるかが鍵。
行列の要素の参照は x[1,2]
のように行うが、
無名行列は x = { a b };
のように書くようだ。
The ~ is the horizontal concatenation operator and the | is the vertical concatenation operator. The statement y = 1~2|3~4; will be evaluated as y = (1~2)|(3~4); and will result in a 2x2 matrix because horizontal concatenation has precedence over vertical concatenation: y = 1 2 3 4
z = x .* y;
が要素ごとの掛け算の明示。
z = x * y;
が普通の行列の掛け算。型が違う場合は良きに計らってくれる。
型の検査がゆるい。行列とベクトル(1次元行列)とスカラー(1x1行列)を混ぜて演算しても エラーにならない。間違いに気づきにくい。 エラー処理もあんまり得意ではない。そこで止まるという仕様。 対話的に使うのなら問題ないのかな?
任意のN次元配列も使えるが、行列とは内部実装が違う。専用の説明項や関数がある。
プロシージャへのポインタも行列に入れられる。何に使うんだろう?
nms = &f1 | &f2 | &f3;
入出力は割と貧弱。普通のファイルI/Oくらいしかない。 行列を丸ごとファイルに入出力するのは得意。 (関数型言語のような遅延実行ではないはず。疎で大きな配列だと欲しくなるんじゃ?)
//... /*...*/ ネスト可 @ ... @ obsolete
分野的には Algae, Julia と同列なんだけど comments-in-computer-languages では汎用分類になってるんだよなぁどうしよ →Algae,Juliaを数値計算用に引っ越し
スクリプト(*.stp)からカーネルモジュールをコンパイルして、 動的に!挿入するツール。素人お断り。
マニュアルの言う通り、確かに awk に似てなくもないが、
計数専用の "<<<" 演算子や、
@macroname()
でプリプロセッサのマクロ起動、
あたりが独特の味を醸し出している。
#... //... /*...*/こういう機能特化言語は機能の建て増しで汚くなることが多いが、 SystemTapはその辺のバランスが絶妙な感じ。
大部分は自分自身(*.clj)で書かれているが、 根幹部分は *.java で書かれている。
並行性を楽にするため、データはすべて静的とする。 identity は、その静的データへの参照のみを持つ。 データは変わらないので、複数のスレッドから参照しても安全。ということらしい。わかるようなわからんような
基本データ型として、文字列・数値・文字の他に
リスト (a b c) ベクタ [a b c] 連想配列 {:a 1 :b 2 :c 3} 集合 #{:c :b :a}
:a
というのは「キーワード」で、頭に : がついている識別子。
連想配列のキーによく使う。
(だから「キー」ワードなのか。
素の文字列だと見た目うるさくなるからかな?)
「メタデータ」ってのがよくわからん。
^{:a 1 :b 2} [1 2 3]
は、ベクタ [1 2 3] を返すが、メタデータとして
連想配列 {:a 1 :b 2} が付属する。
関数なんかに {:doc "...."} でドキュメントをくっつけるのに使う。
(meta x) で取り出すことができる。
リストは2セルの連結ではないと述べているが、 内部実装はLISPと同じ2セル連結。うーん?
Javaのメソッド呼び出しをしたら、関数型でなくなるのでは??
貢献署名をしている人はヨーロッパ人ばかり。 850人中、日本人は8、中国人7、韓国人1
;... コメント #_... 次のS式を無視 (comment & body) bodyを無視してnilを返す実装はJVMなので、スクリプトを直接exec(2)できない。 だから、Guileのように
#!
を無理に無視する必要がない。
;...
型の注釈は LISP のS式 (Clojureでは"form") にならないから、
LISPer的には邪魔者扱いなのかもしれない。
(comment & body)
なら、bodyが正しいformであればブロックコメントになるはず
だが、「変な部分をコメントアウト」ができないのでは。
んーだめださっぱりわからん。
Agent と Atom で非同期処理とセマフォアをやってるみたいだが。
~x
とか ~@x
は何をするんだ?
JavaのライブラリをLISPから使いたい人用の言語?
Rationale の和訳:
http://www.geidai.ac.jp/~marui/clojure/rationale/
(専門用語は専門家でないと翻訳できん)
immutable の和訳は無いのかな?
${...} 変数参照
<#...> ステートメント (directive; FTL;FreeMarker Template Language)
<@...> マクロ起動
<#--...--> コメント
<#if ...> ... </#if>
でちゃんと閉じるのが特徴的。
エディタ側のハイライト用マクロを書くのが楽?
エディタがうまく動かない場合に備えて
[#if ..]...[/#if]
書式に切り替えられる。m4みたい。
<#--...-->
がネストできるかはわからない。
bugfixの書き方をみるとネスト可のつもり?無理だと思うけど…
ドキュメントは丁寧に書いてあるのだが、コメント文法についての項が無い。
SGMLコメント <!--...-->
でもよさそうなものだが、なんでだろう。
出力のHTMLに残したくないから?
Deprecated となっているが、<#comment>...</#comment>
も使える。HTML+か。
ブロックコメントは無いと不便だと思うから、なくさないほうがいいのでは。
FreeMarker 1.x と 2.x は作者が別。
<comment>...</comment>
に加えて<#--...-->
が使えるようになった。
<#assign <#-- a comment --> x = 3>
と書けるようになった。
昔はうまく構文解析できてなかった。
application/json
Media Type for JavaScript Object Notation (JSON)
調べてなかった。
JavaScriptの eval()
に直接突っ込める。
コメント文法は無い。(YAMLにはある)
\"...
なのだが、
行頭で使うと空行になってしまうため、
.\"...
と書くことが多い。
."...
でも、存在しないマクロ起動になるので結果的にはコメント。
GNU groffではこの辺をすっきりさせるため、
行頭の \#...
にて、その行まるごと削除のコメント、
.ig ... ..でブロックコメントを新たに導入した。
でも今更roffで書く人は互換性が大事だから、この新文法は使わないと思うよ?
# Markdown -- A text-to-HTML conversion tool for web writersよくある平文ベースのマークアップ。出力は HTMLのみ。 書きたければ生HTMLを書き込んでもよい。 実装は perl。 GitHub世代のパッケージでよく使われる *.md なドキュメントが Markdown。
コメント文法は無い。ベタテキストで読めるべきだから、のはず。
どうしても、なら <!-- -->
になる。
<A href> を、lynx のベタテキスト出力的に定義できるのは、地味だけど 平文の見やすさの点で画期的だと思う。(Wiki類と比べて)
Visit [Daring Fireball][] for more information. [Daring Fireball]: http://daringfireball.net/いきなり
$text = <>;
してるから、大規模ドキュメントには不向き。
(実装では何回 $text
を書き換えてるのかわからないくらい重い)
//... /// ... /// 3つ以上ならいいのかな?Pythonが必要という時点で重いよう。
Rubyで再実装されたAsciiDoctor
は ////\n...\n////
\\
も使えるのか?
コメント「しか」書けない言語。普通に使う言語のコメント文法を全部詰め込んである。 コメントの書き方に悩まなくてよい。
/* コメントを /* 入れ子に */ したいんだ */
実装がプリプロセッサであればまだ実用性があるのだが、
コメントでない地の文があると Syntax Error で止まってしまうので、
実用性はゼロ。冗談系の言語?になってしまっている。
どこに分類しよう。ううーむ
dmoz.orgでは Obfuscatedに分類されてる。
組込用の小型言語。 方向性としては LuaやtclやJavaScriptと同じ。 文法や基本設計は JavaScript と同じ。 何をしたかったかは www.plausible.org/nasal/doc.html で十分わかる。
a["b"]
と a.b
は同じ意味。これはJavaScriptと同じ。
a["b"](1,2)
と a.b(1,2)
では、
前者は単なる関数呼び出し、
後者はメソッド呼び出しで、 a オブジェクトのコンテキストで実行される。
(JavaScriptではどうだったかな…両方とも
その関数が定義されたexecution contextにて実行されるんだったか)
#...
型の一行コメントのみ。これはこれで潔い。
元は "Nasl" だったらしいが、Nessus のNASLと被るので "Nasal" にしたらしい。
http://www.FlightGear.org/ のフライトシミュレータに組み込まれている。
→ライブラリの SimGear-X.X.X.tar.gz のほうに入ってるのか。
最新の simgear-3.2.0-rc1.tar.bz2 (2014/08) にも nasal/ がある。
ドキュメントはなさそうだが。
→ http://wiki.flightgear.org/Category:Nasal
あたりが一番よさげ。
FlightGear/SimGear との結合が強くて、独立した言語のNasalとしてのリリースは 1.0.1以降は放棄されたのかもしれない。 uLPC(Pike)と似たような経緯をたどっている。
設計思想は意図的に古いLISPを継承。
#{ ... #}
でCのコードを混ぜ込める。
;... 行コメント #! ... !# ブロックコメント要するにScheme/Guileと同じですな。
テンソル計算まで組み込まれているが、数値そのものは double のみで 多倍長精度計算(bignum)は無い。
オブジェクト指向とはなっているが、後付感がすごい。 普通に手続型のプログラムを書くほうが楽だと思う。
型が静的、インデントでブロック指定。 コンパイラ言語(Cに変換)なので速い。
コメントのインデントにもうるさい。 コードとそのコメントのインデントが一致しない場合はエラーにされる。
#... when false: brokenCode1() brokenCode2() discard """.... ...."""
Python 好きなんだけど遅い|メモリ大食いに頭きた人が作った言語のような気がする。
if
や switch-case
(match) が値を返せる。他にありそうで意外にない。
let price: f64 = if item == "salad" { 3.50 } else if item == "muffin" { 2.25 } else { 2.00 };この場合、各行の末尾のセミコロンの有無で動作が容赦なく変わる。
ガベージコレクタがあるのに、値の「所有者」の概念があり、 変数に他の変数の値を代入すると元の変数は使えなくなる。
変数はデフォルトでは変更不可で、上書きできるようにするには
let mut a = ...;
と mut 宣言する。
値には pointer, reference, borrowed, box と、わかりにくい概念が導入されている。
メモリアロケーションを最適化するためだと思われるが…
//... /*...*/ただし
///... //!... /** ...*/
は rustdoc 用に予約。
単純な代入文っぽい記述でも裏の副作用が多いので、 後から別人がプログラムを修正するのは不可能なのではないだろうか。 いわゆる read-only language。
子供の教育用言語。GUIで部品を組み合わせて構造化プログラミングする。 GUIの「ブロック」が1ステートメントに対応している。
Scratch的には"Script"は(GUIの)ブロックの組み合わせのことを指していて、
テキスト表現のことではないようだ。
注釈はテキスト表現上は //...
開発環境はMacromedia(Adobe) Flash で書かれているので一応クロスプラットフォーム。
使用可能文字はUnicode. FORTRANと同じように、配列の添字は1から始まる。 組込型に分数(rational number)があるのが珍しい。Mathematicaみたい。
#... #= ... =# 入れ子可
//...単に Cypher でもCypher Query Languageのことを指すらしい。
Ruby でHTMLを再生成する言語。一応テンプレート言語なのかな? インデントでタグの開き閉じを制御するのはPython的。 Rubyコードを埋め込める。
…確かにタグをいちいち書くのよりは書きやすいだろうけど、 抽象的すぎて暗号みたいなソースコードになりそう。
/ ... <!--...--> として残る -# ... 出力から消える ...注釈もインデントで閉じを制御するので、 途中でインデントがずれると構文解析器が文句を言う。 コメントアウトは、実質全行に
-#
を前置する必要がある。
→reST
${式} % 命令 <% python ブロック %>
##... <%doc> ... </%doc>
{% 命令 %} {{ expression }}
を埋め込む。
{# ... #}Jinja2.2は
##...
もコメント
(line-comment prefixを設定した場合)
SaltStack の .slsがJinja2 + YAMLをデフォルトの設定文法としている。
“YAML Ain’t Markup Language” (abbreviated YAML) is a data serialization language
データ表現言語。構造化データのserializationが目的。 JSON のスーパーセット。 XMLでも同じことはできるが、YAMLのほうが文法が単純で書くのも楽。Wiki的。
Swift is a new programming language for iOS, macOS, watchOS, and tvOS apps that builds on the best of C and Objective-C, without the constraints of C compatibility.
Apple の Cocoa/Cocoa Touch専用(と言っていい)言語。
Objective-Cの後継のような言い方をしているが、文面づらはむしろ BASICに近い。
代入は必ず let a = b
のように let
を伴う。
自オブジェクトは self
で指定する。
//... /*...*/ 入れ子可
強力なマクロと構造体サポート、充実したライブラリで、 一見、高級言語っぽい感じに書けるアセンブラ。
基本的な文法はCを踏襲。 ガベージコレクションがあるということなのでそれ系のオブジェクトを扱うらしい。
受信演算子 <-
でコルーチンやネットワークプログラムが書きやすそう。
v2 = <-ch
で chチャネルからのデータを待つ。
最初の動機はCやC++における大量の#includeによる非効率性の改善。 include したものは使わないとエラーにする!というのが 余計なincludeを排除するのに一役買う。 キーノートの http://talks.golang.org/2012/splash.article が 位置づけとしてはわかりやすいかもしれない。
標準ライブラリは普通のものしかないが、ユーザが書いて公開している ライブラリ類が多い。 この手の言語はあまり普及しないのが常だが、なんでだろ?
Goが何の意味かはわからんが、例題に日本文字があるとこを見ると 第五世代言語のつもりなのかもしれない。 FAQでは 「Goのデバッガ名がOgleなのがいいでしょ」となってはいるが。
オブジェクトの継承は、わざと実装してない。 小さいinterfaceの定義を積み重ねるようにしている。継承系のライブラリは どうしても大げさな設計になりがちなため。
/* ... */ ネスト可
# ...
Io is a prototype-based programming language ...身近なところではJavaScriptに近い。
object slot ...
の文法をとるが、これは他の言語の
object.slot
(メンバアクセス)に相当する。
オブジェクトにメッセージを送って動作する、ので、動詞が後ろに来るので
Forthっぽく見える場合もある。
非同期のコルーチンもネイティブで書けるが、よくわからん…
#...
をそのまま使用:
http://kawari.sourceforge.net/7.5.0/manual.html#inifile
華和梨 については以下の公式文書で十分な説明になっていると思う http://kawari.sourceforge.net/8.2.5/programming_1.html
辞書ファイルのコメントが エンジンによってまた違う。
.Set Cabinet=Off
のように .
で始める。
分岐やループ類はないので、プログラムは書けない。
*.DDFはたぶん Disk Directive Fileの略。
;...
Javaのライブラリを使える関数型言語。コンパイラもJVMバイナリを出す。 Javaクラスを流用、あるいは欠点を補完したいがためか、 文法はJavaに酷似。
関数型とは言っているが、Javaライブラリを使う時点で副作用ありまくりなので 純粋な関数型言語ではない。 単に関数もオブジェクトとして扱いたかっただけのようで、むしろJavaScriptに近い。
//... /*...*/ ネスト可。(閉じ忘れはエラー)
Wikiエンジン。 通常のWikiエンジンは文法が固定だが、 MoinMoinは 複数のパーサーを切り替えられる。 CSVなんかを表にしたいときに便利。
デフォルトの文法 (#format wiki
) は他のwikiとちょっと違う癖があるが、
Creole型 (#format creole
) は他のと似ている。
#コマンド
、だが ##... コメント
なので、
HelpOnProcessingInstructions項に説明がある…
/*...*/
は、表示・非表示を切り替えられるコメント。
display:none使用
目的としては、Model-View-Controllerモデルをやりやすくするよう、 HTMLに埋め込む側のコードを簡単にしよう、という方向性か。 バックエンドのJavaについてはなるべく知らなくてもいいよう配慮されている。
SSIやPHPはSGMLに収まるようちょっと無理な記法をしていたが、 Velocityはそこはすっぱり放棄している。 (http://velocity.apache.org/engine/releases/velocity-1.7/user-guide.htmlの例)
<HTML> <BODY> Hello $customer.Name! <table> #foreach( $mud in $mudsOnSpecial ) #if ( $customer.hasPurchased($mud) ) <tr> <td> $flogger.getPromo( $mud ) </td> </tr> #end #end </table>
##... #*...*#cat <<EOF で$(cmd)を埋めるshのhere-documentに近いかな。 #や$をエスケープしたいときのマニュアル説明がなかなか長くて 苦労してる感がある。
#directive
が処理なのに ##...
でコメントてのは混乱しそうだが…
実際は $value.method()
呼び出しが多いだろうから #directive
は
あんま使わないのかもしれないが
ed(1)の先祖なので、エディタとしてはそんな変な文法ではない。 汎用言語として使おうとするとわけわからん文字列になるわけだ。
!tag!
は本来はgotoの宛先。 command.comの :tag と同じ。
マニュアルを読むとPDP-8用にしては高機能すぎる気がするんだが…
F(G) は `FG
と書く。LISPに右括弧が無い(不要)状態。
作者の言うとおり、確かに、書くことはできるが読むのは不可能に近い。
テープやスタックもないので、データ構造は関数の引数の数くらいでしか作れない。
原サイトは実に丁寧に書かれている。
読みにくいのは確かだが esoteric language ではない。 文字としてss(βみたいな奴)とAlt-o(φみたいなの)を使うので ASCII系の環境では使いにくい。
(+ 1 2)
など。
Software Design 2011/12にパーサーを書いた特集あり
注釈は書けない。
=begin ... =end
読み飛ばし区間に書くドキュメント。
RDoc と言われることもある?
plain2* やwiki系のフォーマット。
#...昔のRubyは
=begin...=end
なかった気がするが…
{...メールソフト PocoMail のメッセージ処理専用。 ループは書けるがif+gotoの不細工な方法のみ。そういう用途ではない。
command arg arg ... で徹底。 メール電文の情報加工に関するコマンドが充実。 それ以外のことはほとんど何も出来ない。一応I/Oはある。 インライン式は書けないので、計算は非常にまどろっこしい。
この手の言語のコメント文法は ";" が多いが、Pascal風の {
は珍しい。
しかし }
で閉じる必要はない。例題でも閉じてない。
#...
はコメントではない。
専用の "title section" (空行で終了) があり、ここには何でも書ける。
!...
TenDRA is a compiler framework for architecture neutral representation of compiled programs.移植性の高いコンパイラ用中間言語を目指すTenDRAプロジェクトで、 システムのAPI側を記述するのが TDF。 "Distribution" とは付いているが、今ではあまり意味がない。 API仕様記述コンパイラの tnc の入力がテキストなので コメント文法がある。
#...
tld (リンカ) も、シンボル書換とエラーメッセージ変更には 外部ファイル内で "#' が使えるんだが、どう分類しよ。 GNU ld のような高度なことはしないし…
#/;%"
(iscommentlinedata())がコメント文字。
NB ...
(*...*)
(FORTHは( ...),PSは%...)
%n
で数値変数 を指すので、ゼロページアセンブラっぽい字面になる。(%0-%999)
;...
変数のスコープは、呼び出し元の変数が呼び出し先からも見える 形式。引数渡しはこれを使えつーことらしい。
#...
非常に UNIX Shellっぽい。 が Makefile文法も包含しており、GUI関係のコマンドも豊富。 演算子も一通りそろっている。汎用スクリプト言語かも。 Appleな特殊文字(Opt-F,Opt-Dなど)も使うので 日本語フォントだとちょっと見づらい。
#...
/command arg arg ...
から発展。
botも書けそうだが本来そういう用途ではなさそう。
Alias の設定は /alias /cmd arg arg.... | /cmd ...
(| はマルチステートメント)
なのだが、これが
/alias { /cmd ... /cmd ... }と展開できるようになって言語っぽくなっている。 関数の定義もこれで行う。引数中での利用は /func ではなく $func(...)
ループは以前は goto/if だったらしいが今は while/continue/break もある。
データ型は文字列のみ。(数値演算も可能)
違うと言えば違うが、cmd arg arg 形式は Tcl に 似てるかもしれない。 追加機能なんかも見ていくと特定機種用BASICにも通じる。 大方 古典BASICでできそうなことは全部できそうだ。
ソケットも使えるみたいだが入出力はイベントドリブンで行う。 (IRCの性格を考えれば当然か?) dialogコマンドで GUI も作れる(動作は当然イベントドリブンで書く)
文字列の足し算は $+ で行う。
a $+ b ;"ab" $+(a,b) ;"ab"
;
に相当するのが !
なので見た目がうるさい。
||...!!
[難読系]
"Be" は2次元を意味するということにして
Unefunge, Befunge, Trefunge となっている。
コメントの ;
が拡張されて、対応する ;
までの読み飛ばしになる。
ブロックコードの包囲に便利。
;...;
実用的にはなったんだろうが、初代Befunge-93のほうが エレガントな気がする。
[難読系] include,defineにともないコメント専用文法がついた。
; ...スタックを共有しつつコンカレントてのは…
[難読系] INTERCALと並び称される難読言語。 ASCII2次元平面に展開される。 プログラムとデータは同一、自己書き換え可能。
基本的にはForth系のスタック言語。 読みにくいがそれほどひねくれているわけでもない。
<>^v 方向転換 0-9 数値(10以上は計算してスタックに積む) : dup , putchar _| if (水平分岐、垂直分岐) # 次の命令を無視 (立体交差に使う) @ 停止
v >v"Hello world!"0< ,: ^_25*,@
コメント文法はない。実行されない余白部分に書き込む。
コメント文はあるようでない。 PLEASE NOTE .... の形で書かれることが多いが、
とりあえず頭の部分は please節でないといけない。
(== DO[NOT] == {"DO"|"PLEASE"|"PLEASE DO"}["NOT"|"N'T"] )
PLEASE NOTE は熟語だろう。
関数呼び出しに特徴があり、
高速くりかえしのため send_packet(udp) x 10;
なる繰り返し演算子 x
がある。
ストーム生成などに有効。
低レベルネットワークプログラミングにはいいかも。 文字列処理も一通りあるし、汎用にも使えそうだが…
Pascal的な冗長宣言。
実装は Java+Swingのようだ。パーサーは
Javaの StreamTokenizer. commentChar('#')
宣言のみ。
jaclみたいな変な癖はなく、見た目は普通の言語っぽい。
//... [... /*...*/ 入れ子可
[...
というのもなんか珍しい。 viで編集できんじゃん
[...]
て用途を想定してるのかもしれない。
あらゆる言語の設計において、議論に費やされる時間の合計は、 以下の論点の数値を2に冪乗した値に比例する。 0. 意味 1. 構文 2. 字句構文 3. 注釈の字句構文