什么是正式比赛。 SCI。这个语言属性的名称?

时间:2013-11-26 19:32:18

标签: objective-c ruby theory

作为一名自学成才的程序员,我的定义有时会变得模糊。

我很习惯C和ObjC。在这两个代码中,您的代码必须遵循语言“结构”。你只能在某些地方做某些事情。例如,这是一个错误:

// beginning of file
NSLog(@"Hello world!"); // can't do this

@implementation MYClass
...
@end

然而,在Ruby中,任何放在任何地方的东西都会在解释器通过时执行。那么Ruby和Objective-C之间的区别是什么呢?

起初我以为是一个被解释而另一个被编译。然后我读了一些SO帖子和维基百科的定义。解释或编译是实现的属性而不是语言。那么这意味着(理论上)可以是Objective-C的解释实现吗?在这种情况下,语句不能在实现之外的事实不能是编译语言的属性,反之亦然,如果有Ruby的编译实现。或者我错误地认为语言的不同实现会以相同的方式工作吗?

2 个答案:

答案 0 :(得分:2)

我不确定它是否有技术术语,但在大多数编程语言中,语句的上下文非常重要。

Ruby有一个允许代码的根或main上下文的概念。其他脚本语言遵循这个惯例,大概是像Perl这样的语言流行,它允许非常简洁的编程。

这样可以使这样的事情成为一个完整而有效的程序:

print "Hello world!\n"

在其他语言中,您需要定义一个入口点,例如main例程。顶层并不真正允许使用任意代码,而是保留用于函数,类型,常量,结构和类定义等内容。

像Ruby这样的语言可以很好地控制代码的执行顺序。相比之下,C通常由单独的源文件组成,然后将这些源文件链接在一起,而事物的链接方式没有固有的顺序。所有模块都可以简单地组装到最终的库或可执行文件中。这就是需要main入口点的原因,它定义了首先运行的函数。

简而言之,它归结为语法,上下文和语言设计注意事项。

答案 1 :(得分:1)

Ruby隐藏了很多东西。

Ruby就像C ++,Objective C和Java一样,并且像C一样main,但你没有看到这一点。

puts(42)是方法调用。它是名为main的主对象的方法。您可以通过输入puts self来查看。

如果你没有指定接收者(receiver.method()),Ruby将使用隐式的main

检查可用方法:
puts Object.private_methods.sort

为什么你可以放任何东西?

C / C ++寻找名为main主要方法,当C / C ++找到它时,它将被执行。
Ruby在其他方面不需要main或其他方法/类来首先运行。

它从第一行执行代码,直到它到达文件末尾(或单独行上的__END__)。

class Strongman
  puts "I'm the best!"
end

只是Class.new方法的语法糖:

Strongman = Class.new do
  puts "I'm the best!"
end

“模块”也是如此。

for调用每个并返回某种对象。所以你可能会认为它类似于方法。

a = for i in 1..12; 42;end
puts a
# 1..12

最后,无论是方法调用还是C int main()之类的结构都无关紧要。 编程语言决定它应该先运行什么。