我一直在想一个编程语言的想法:它本质上是C++和类似Java的语法,用于系统编程(或者实际上任何需要高性能的编程),但在我看来,比C++更令人愉快的语法.我在考虑如何处理分层类结构中的虚方法(我的语言不包括多重继承),以及避免vtable查找的方法.我的问题是双重的:
考虑以下类层次结构的伪代码:
class Animal {
public void talk() { /* Generic animal noise... */ }
// ...
}
class Dog extends Animal {
public void talk() { /* Override of Animal::talk(). */ }
// ...
}
void main() {
Dog d = new Dog();
doSomethingWithAnimal(d);
}
void doSomethingWithAnimal(Animal a) {
// ...
a.talk();
// ....
}
Run Code Online (Sandbox Code Playgroud)
请记住,这是伪代码,而不是C++或Java或类似代码.另外,假设Animal参数通过引用隐式传递,而不是值.因为编译器可以看到它d
绝对是类型Dog
,它可以将doSomethingWithAnimal
定义转换为如下所示:
void doSomethingWithAnimal(Animal a, methodptr talk = NULL) {
// ...
if ( talk != NULL …
Run Code Online (Sandbox Code Playgroud) c++ compiler-construction programming-languages vtable compiler-optimization
我必须为本学期的课程创建一种新语言和该语言的编译器 - 这意味着截止日期约为3.5个月.我已经读过OCaml是编写编译器的更好的语言之一,但我以前没有经验.我的问题如下:对我来说,尝试使用我已经熟悉的语言(Java,C,C++)创建编译器,或者花些时间学习OCaml并使用它来更好吗?
您能推荐好的语言来进行大量数学运算吗?
到目前为止,我已经使用了Actionscript 2和Objective-c,甚至在使用Objective-c时NSDecimalNumbers
,我在计算中都被限制为32位……我至少需要能够计算出5万位数字。
我试图通过Dolphin Smalltalk X6附带的教程学习Smalltalk.
我的问题涉及对具有多个消息的表达式的评估.
我的理解是首先评估简单消息,然后评估二进制消息,最后评估关键字消息(括号中的代码除外).但是,我无法将这种理解应用到以下示例中的第二行(在Dolphin Smalltalk教程中找到).
playground := Playground new.
teresa := playground add: Triangle new. "Misunderstood code"
teresa class. "Evaluates to 'Triangle'"
Run Code Online (Sandbox Code Playgroud)
如果我的理解是正确的,那么第二行将被评估:
1. Simple message 'new' sent to Triangle, triangle object as response
2. Binary message ':=' with parameter 'playground' sent to 'teresa'.
3. Keyword message 'add:' with parameter 'triangle object' sent to 'teresa'.
4. teresa class. "evaluates to 'Playground'".
Run Code Online (Sandbox Code Playgroud)
我的误解是'teresa'如何引用匿名Triangle对象而不是'playground'引用的Playground对象.
我已经查阅了Smalltalk评估的第二个解释,提到:=或添加:是特殊情况没有成功,我能想到的唯一其他解释是一个根本的误解.
任何帮助拉直我的帮助?
我正在弄乱Python中的范围,并发现了一些我觉得很奇怪的东西:
g = 5
def foo(a):
if a:
global g
g = 10
else:
g = 20
print("global g: ",g)
foo(False)
print("global g: ",g) # 20?! What?
foo(True)
print("global g: ",g)
Run Code Online (Sandbox Code Playgroud)
我相信第二次打印应该是"5",因为全局声明从未执行过,但很明显,输出为20(!).
这背后的逻辑是什么?
是否存在以下任何一种编程语言:
3x
,-0.5y
a(b+c+d)
2(x-y)
(1+x)(1-x)
(4a-5b)(1+4c)
被解释为乘法?
我可以看到这会引起语法上的问题,但是我很好奇是否有任何一种语言已经成功地做到了。
我不知道这是否是这个问题的正确的SE网站,如果没有,我会感谢任何能指出我正确方向的人.
对于我的大学项目(英国大学〜高中),我想设计一种基本的编程语言.它不具备所有必要的功能,但足以在控制台上编写一些基本程序.我想把它解释为我听说过复杂的编译语言是多么复杂; 面向对象,因为我只懂VB.NET,对OOP最熟悉; 我的目标是创建一种非程序员很容易学习的简单语言.
我一直在四处寻找,但很难找到有用的资源来解释如何以任何细节创建编程语言.我真的很感激你可以建议的任何在线资源 - 它们必须是免费的 - 如果有类似我错过的StackOverflow问题,深入的在线文章或教程,免费在线教科书的摘录......你认为可能有用的任何东西.
很难找到一个似乎符合我的问题的标签,但我希望这能完成这项工作.
无论如何,我想学习编程,我目前正在参加一个超过10周的python编程课程.我现在已经进入第五周了,我觉得我学到的语法并不多.
我已经尝试过学习编程,因为我现在还不知道10年了,而且我总是在一两周内学习语法,但之后我就会陷入困境并放弃.好吧,这次我不想放弃所以我会问这里.
我如何学习作为程序员思考?无论我阅读了多少教程,他们所教授的只是语法,语法是最简单的部分.如果有一件事我已经学会了,你不能单独用语法编程.
编程语言并不重要,因为正如我所说,我非常快速地学习语法,而且我几乎使用过大多数编程语言.
那么,是否有任何教程或文章,甚至书籍都经历了制作程序的思维过程?
我认为最能教会我的是你完成制作程序的过程.不像那些你制作了一千个小程序的书,而是对制作一个程序的深入了解.///编辑谢谢你们,你们是一个真正的帮助,我想我可以从这里继续!
我的一个朋友为我制作了一堆代码来构建一个软件.但是,我不认识语言,我的朋友也没有编码器.但有一件事我很确定.代码就像20-40岁.
Code最初用于电气工程.
每行字符数限制似乎是20个字符.
有人能认出这种语言吗?如果可能的话,我也在寻找这种语言的手册.
10:"K": PAUSE "IK":
CLEAR
15:P=1: INPUT "ETR=PRIN
T, 0=NO? ";P
20:DIM L(20),R(20),X(20
),B(1),G(1),Q(1),O$(
1)*24
22:IF P=1 INPUT "K. /DA
TE? ";O$(0)
24:IF P=0 GOTO 30
26:INPUT "N:0 AND NAME?
"; O$(1)
28:LPRINT O$(1): LPRINT
"KKS/";OS(0)
30:INPUT "(KVA)? ";S
35:IF P=1 LPRINT "KVA",
S
40:R=3.31 :Z=4
...
Run Code Online (Sandbox Code Playgroud)
我搜索了这种语言,PowerBasic似乎接近它,但它包含许多其他功能,这些代码缺乏.任何猜测?
编辑1
似乎有错别字.难怪"P =!" 或"0 $(0)没有任何意义.
编辑2
我接受了Gaby的回答,因为代码似乎与GW-Basic非常接近.还找到了完美的语言手册:http://www.antonis.de/qbebooks/gwbasman/
谢谢您的帮助!
编辑3
得到了一些新信息.语言实际上可能是1975年的"Nova Basic".我无法找到该语言的手册,但至少这给了我一个新的方向.
通常认为评论源代码是一种很好的做法.但有没有机会在程序的源代码中发表评论,使程序执行缓慢?提前致谢!
c++ ×1
calculator ×1
comments ×1
java ×1
largenumber ×1
math ×1
ocaml ×1
performance ×1
python ×1
scope ×1
seaside ×1
smalltalk ×1
squeak ×1
syntax ×1
vtable ×1