HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0511
チャーくん他言語の勉強について11未解決


チャーくん

リンク

2017/5/11(Thu) 21:12:20|NO.79682

どうもこんばんは
HSPは手軽で便利ですが、やはり本気で作るときは他の言語の実行速度が速いものなどを
使ったほうがいいなかな…と考えています。
そこで、HSPから慣れやすく、HSPよりも速い言語を教えていただきたいと思っています。
HSP以外の言語の経験がある方、言語の名前やHSPとの両立のしやすさなどを教えてください!



この記事に返信する


Velgail

リンク

2017/5/11(Thu) 21:53:23|NO.79688

Visual Basic .NET

IT土方が利用している汎用言語(VB6)の後継版。
後継とは言うものの実質C#と同じだったりと意外と強力。
なおそのせいで土方が移住しないという問題もあった。

HSPライクな手続き型で書くことも出来るが、オブジェクト指向、イベント駆動、関数型言語まで
幅広い言語特性でイジれるのでかなり強力にもなる。

数ある言語の中ではHSPと両立しやすい方(文法的に)

//流石にC++を紹介したら他の人に殴られるのでVB.netを。いろんな書き方ができるという意味ではC++とVB.netは同じかもしれぬ。



カタセ

リンク

2017/5/11(Thu) 23:39:43|NO.79690

(C++ってダメなんですか・・・?  質問者じゃないですけど)



Velgail

リンク

2017/5/12(Fri) 04:58:50|NO.79691

C++を推奨しない理由は、実はC++利用者から見るとわからない場合もあります(私は理解しにくくなりました)

とりあえず、初学者(初心者の幅がひろいのもC++の特徴?)が以下の構文を見て指定した行に初学者のうちに悩まないのであればC++を学ぶのも有りかと思いますが。
ああ、あとCUIばっかりなのもOKであるならば。GUIをC++で書くのは相当に辛いですよ……(HSPの0行が80行くらい書かないと実現できない)


#include <iostream> //なぜこれをインクルードするの?→とりあえずおまじないだから using std::cout;//これもおまじないだから using std::endl; int main(){//とりあえず(ry cout<<"Hello World!"<<endl; return 0;//と(ry }

こんな感じで。HSPだと

#runtime "hsp3cl" mes "Hello World!"
となるものです。

VB.netだと、

Module Module1 Sub Main() Console.WriteLine("Hello World") '実は書いたのはここだけ End Sub End Module
とVisual Studioの自動生成も相まってHSP並に楽が出来ます。文法も割合近いですし。
//でも要所要所にオブジェクト指向が刺さってるのでHSPからみると異質な部分もあります。



mirage17

リンク

2017/5/12(Fri) 05:44:47|NO.79692

慣れやすいかどうかは別にすると、HSPのように、わかりやすい言語を
使っていても、情報処理の国家資格や、ゲームのプログラムを、アマチュア
ではなく、プロになる事まで、考えた場合、下記の言語が避けられなくなる
可能性があります。ゲーム制作の場合で、言語を避けて、ゲームエンジンを
使用したとしても、Unityの場合、C#やJavaスクリプトにぶつかる
でしょうね。HSPとDXライブラリ(C言語)を使用したゲームなども
出てきているので、その辺が両立のポイントになるかと思います。
結局は速いかどうかより、言語は、作品を作る手段にすぎないので、何を作るか、
どんな素晴らしい作品を作るかという事が、重要な事だと思います。


参考資料(言語の速度&難易度)
言語の速度&難易度 機械語(アセンブラ)>C言語>BASIC・HSP



Velgail

リンク

2017/5/12(Fri) 06:24:37|NO.79693

チッチッチッ
Basicが遅いって老人ですか?

Visual Basic .NETはC#と同じ.NET系言語で、同じバイナリー(と表現)を作れるものである。
C#がC++に匹敵する(処理にも依るが数%の差になるものもある)以上、VB.netも同じくC++に匹敵すると言えるのである。

それでいてVB.netはHSPに近い方の言語として学習コストが低いのです。

Unityが〜とか言うのはナンセンス。VB.netを経由したほうがC#学びやすいから(合計コストが低いとは言っていない・同じ.net系列言語として)
以上、VB.netを推薦する理由である。



mirage17

リンク

2017/5/12(Fri) 06:39:12|NO.79694

>NO.79693

時代が変わっていたのですね。もう40歳を超えているので、
HSP。ゲーム界隈の長老の私には答えられない問題になっている
のですね。時代は。勉強になりましたW
私の言っているC言語や、BASICは、Visual Basic .NETとか
新人類のものではなく、20年近く、昔のものだと思って下さると幸いですW



名無し

リンク

2017/5/12(Fri) 19:44:24|NO.79709

正直、私にはVisual BASICをBASICと思うことができない。



Velgail

リンク

2017/5/13(Sat) 15:31:23|NO.79732

では、ここで様々な言語で「入力された数値以下の素数を返す」プログラムの例を紹介。
関数を作って、ループとIf文という基本構造を作っているので是非参考にしていただきたい。
実装した言語:HSP, C, C++, VB.net, C#, Python3, Ruby
諦めた言語:Bash, Perl

HSP - 文字列を表示すると勝手に改行される仕様との戦い

#runtime "hsp3cl" #module #defcfunc isPrime int x if(x<2){ return 0 } for i,2,int(sqrt(x)+1) if(i!=x){ if(x\i==0){ return 0 } } next return 1 #global mes "自然数を入力してください" input a,,2 a=int(a) mes strf("%d以下の素数は以下のとおりです",a) l="{ " for i,2,a+1 if(isPrime(i)){ l+=strf("%d,",i) } next l=strmid(l,0,strlen(l)-1)+" }" mes l

C - 文字列周りが鬼のような高級アセンブル言語。ポインタもポンポン出てくる。
http://ideone.com/IkE74j

#include <stdio.h> #include <stdlib.h> #include <math.h> int isPrime(int x){ int i; if(x<2){ return 0; } for(i=2;i<=(int)sqrt(x);i++){ if(i!=x){ if(x%i==0){ return 0; } } } return 1; } int main(void) { int i, a; char* l;//文字列型 int p=0,sp=4096;//lの文字列長と最大文字列長を記録しておく printf("自然数を入力してください\n"); scanf("%d",&a); printf("%d以下の素数は以下のとおりです\n",a); l=(char*)malloc(sp);//ポインタで p=sprintf(l,"{ "); for(i=2;i<=a;i++){ if(isPrime(i)){ p=sprintf(l,"%s%d,",l,i); if(p*2>sp){ sp*=2; char* tmp=(char*)realloc(l,sp); free(l); l=tmp; } } } l[p-1]='\0';//最後の,をカット sprintf(l,"%s }",l); printf(l); return 0; }

C++(14) - モダンなC++は最強の言語だと思う。難易度も最強だ(と言われている)が私は好きだ。isPrime関数はCと同じであるようにCとの互換もある。
http://ideone.com/03EwRg

#include <iostream> #include <cmath> #include <string> using namespace std; int isPrime(int x){ int i; if(x<2){ return 0; } for(i=2;i<=(int)sqrt(x);i++){ if(i!=x){ if(x%i==0){ return 0; } } } return 1; } int main(void) { string l;//文字列型 cout<<"自然数を入力してください"<<endl; int a; cin>>a; cout<<a<<"以下の素数は以下のとおりです"<<endl; l="{ "; for(int i=2;i<=a;i++){ if(isPrime(i)){ l+=to_string(i)+","; } } l.pop_back(); l+=" }"; cout<<l<<endl; return 0; }

C# - C++++の意味を持つ言語。Visual Studioを使う人の過半数が利用する言語(だと思う)。Javaとガチバトルしてる。
http://ideone.com/fPJL1J

using System; class Program { static bool isPrime(int x) { if (x < 2) { return false; } for (int i = 2; i <= (int)Math.Sqrt(x); i++) { if (i != x) { if (x % i == 0) { return false; } } } return true; } static void Main(string[] args) { Console.WriteLine("自然数を入力してください"); int a; a = int.Parse(Console.ReadLine());//型変換が厳格である。 Console.WriteLine(a.ToString() + "以下の素数は以下のとおりです"); string l = "{ "; for(int i = 2; i <= a; i++) { if (isPrime(i)) { l += i.ToString() + ","; } } l= l.Substring(0, l.Length - 1); l += " }"; Console.WriteLine(l); } }

VB.net - HSPに最も近い有名高級言語。C#と同じようなコードを書くことになることにも注目。後読める(英語的に)

Module Module1 Function isPrime(ByVal x As Integer) As Boolean If x < 2 Then Return False End If For i As Integer = 2 To (Math.Sqrt(x)) If i <> x Then If x Mod i = 0 Then Return False End If End If Next Return True End Function Sub Main() Console.WriteLine("自然数を入力してください") Dim a As Integer a = Integer.Parse(Console.ReadLine()) Console.WriteLine(a.ToString() + "以下の素数は以下のとおりです") Dim l As String = "{ " For i As Integer = 2 To a If isPrime(i) Then l += i.ToString() + "," End If Next l = l.Substring(0, l.Length - 1) l += " }" Console.WriteLine(l) End Sub End Module

Python3 - 有名なLL言語(4P言語の1つ)。インデントでブロック構造を形成する。はよPython2をなんとかしろ(廃止しろ)

# your code goes here import math def isPrime(x): if x<2: return 0 for i in range(2,int(math.ceil(math.sqrt(x)))+1): if i!=x: if x%i==0: return 0 return 1 print("自然数を入力してください") a=int(input()) print(str(a)+"以下の素数は以下のとおりです") l="{ " for i in range(2,a+1): if(isPrime(i)): l+=str(i)+"," l=l[0:-1]+" }" print(l)

Ruby - 日本製のLL言語(4P言語の1つ)。書き方が常に複数あるような思想。(Pythonは1つになるように作られている)
http://ideone.com/MFC9Sj

# your code goes here def isPrime(x) if(x<2) then return 0 end for i in 2..(Math.sqrt(x)).to_i do if(i!=x) then if(x%i==0) then return 0 end end end return 1 end print("自然数を入力してください\n") a = gets.chomp.to_i print(a,"以下の素数は以下のとおりです\n") l="{ " for i in 2..a do if(isPrime(i)==1) then l<<i.to_s+"," end end l.slice!(-1) l+=" }" print(l)



Velgail

リンク

2017/5/13(Sat) 15:33:24|NO.79733

Python3のideone貼るの忘れたw
http://ideone.com/iaXdsf

あと、C#, Python3, Rubyはほぼ初見で書いてます。C#は所見でもVB.netと同じだから普通に書けてるけどw
C++の関数部分は意図的にCと同じにしているのであって、C++らしく書くことも出来ます。



mirage17

リンク

2017/5/13(Sat) 16:51:14|NO.79734

新人類がいても人生経験豊富なので、書き込みますW

>HSPから慣れやすく、HSPよりも速い言語を教えていただきたい

そんな言語あるの?C言語もC#もアセンブラ(CASL含む)もHSPより
難易度あるから、HSPやってるだけやのに。でも、この難易度ある言語は、
仕事では使えるみたい。

VisualBasicはハローワークの職業訓練所で、学べたし、
(最近はUnityも職業訓練所で学べるらしい)、
BASICは、学生時代高校の授業で、プログラムの入門として私の場合は学んだ。

そもそも、ゲーム作るのか、ツール作るのかによって、学ぶべき言語も
変わってきますよね?そこの所、質問者ははっきりさせた方がいいのでは?

とりあえず状況がわからないので、私は、作りたいのが、ゲームの場合は、
HSP+C言語(DXライブラリ)&Unityで言語はC#を次のステップ
アップ時にはお勧めしておきます。

ツールの場合は、他の回答者のように、VisualBasicなどを次のステップにすれば、
こちらも仕事では役に立ちました。私も昔、制御系プログラマー時代は、
VBとVCで、給料もらっていたので、覚悟して、次のステップに進んでください。

それでも無理なら、HSPで、アマチュアで趣味のプログラミングでもいいと思う。
HSPはBASICと同じくプログラム入門用言語と言われていますからね。
あとは小学生・中学生のプログラム超入門用に、Scratchがあるぐらいですよ。



Velgail

リンク

2017/5/14(Sun) 01:42:26|NO.79742

>HSPから慣れやすく、HSPよりも速い言語
これ、私は「HSPを踏み台にして次に進むべき言語、後速いの」という意味で解釈しました。

ちなみに、ゲームの場合はDxLibを利用する場合、C言語で書くのは苦行なのでやめたほうが無難です。
それだったらC++を最初から学んだほうが良いでしょう。(C言語は文字列周りがほんとに糞なんで)

ただ、DxLib使うだけならC#, VB.netもOKなんですよ。なので、文法のみで3つを選ぶことも出来ます。
Unityを使う場合はC#一択にはなりますね。

Windowsのツール系を作る場合はC#, VB.netがおすすめ。
数値演算系をやる場合はC++(速度優先), Python(ライブラリ優先)という棲み分けかな。C++にライブラリがないわけではない。
Web系はPython, Ruby, PHPがおすすめ。Perlなんてなかった

Androidゲームの場合は……
・Unity系:C#
・DxLib系:C++
・独自系:Java
となります。(ついさっきDxLibのAndroid版があることを知った)

ちなみに、言い忘れていたけど、P言語は遅い(HSPよりは速いらしいけど)



ONION software Copyright 1997-2018(c) All rights reserved.