小编sub*_*sub的帖子

PyPy:关于什么是嗡嗡声?

注意:标题是故意挑衅的(让你点击它并想要关闭投票的问题),我不想看起来全神贯注.

我一直在阅读和听到越来越多关于PyPy的内容.这就像一个线性图.

  • 为什么PyPy如此特别?据我所知,用语言本身编写的动态语言的实现并不是那么罕见,或者我没有得到什么?

  • 有些人甚至称PyPy为"未来"[python],或者在此实现中看到某种深层潜力.这究竟是什么意思?

python pypy

42
推荐指数
4
解决办法
7050
查看次数

有编译的*编程语言是否具有动态,甚至是弱类型?

我想知道是否有一种编程语言可编译为机器代码/二进制文件(不是字节码然后由VM执行,在考虑打字时完全不同),它具有动态和/或弱类型,例如:

想一下编译语言,其中:

  • 变量不需要声明
  • 可以在运行时创建变量
  • 函数可以返回不同类型的值

问题:

  • 有这样的编程语言吗?
  • (为什么不?

我认为一种动态但强大的类型化编译语言真的能感觉到,但它有可能吗?

programming-languages static-typing typing dynamic-typing

36
推荐指数
4
解决办法
7594
查看次数

是否有可能用每种图灵完整的语言创建一个quine?

我只是想知道它是否100%可能,如果我的语言是turing-complete,写一个打印出来的程序(当然不使用文件读取功能)

因此,如果语言只有真正必要的东西,以使其完成(我会证明通过将Brainf*ck代码翻译成它),如输出,变量,条件和gotos(地狱是的,得到的),我可以尝试在里面写一个quine?

我也问这个问题,因为我不确定quin是否直接符合图灵定律,即图灵机能够完成任何计算任务.我只是想知道,所以我不会尝试多年而不知道这可能是不可能的.

language-design quine turing-complete

28
推荐指数
2
解决办法
3253
查看次数

为什么Win32-API有这么多自定义类型?

我是Win32 API的新手,许多新类型开始让我感到困惑.

一些函数将1-2 ints和3 UINTS作为参数.

  • 为什么他们不能只使用整数?什么是UINTS?

然后,还有其他类型:

DWORD LPCWSTR LPBOOL 
Run Code Online (Sandbox Code Playgroud)
  • 同样,我认为"原始"C类型就足够了 - 为什么要引入100种新类型?

这个是痛苦的: WCHAR*

我不得不遍历它并将每个字符push_back到std :: string,因为没有其他方法可以将它转换为一个.可怕.

  • 为什么WCHAR?为什么重新发明轮子?他们本来可以用char*,或者?

c winapi

26
推荐指数
2
解决办法
4625
查看次数

伟大的计算机科学演讲

我在这里查看了一些问题,其中列出了"最佳"编程书籍,然后想到为什么还没有关于演讲的问题.我认为来自开发人员甚至编程语言的创建者的演讲或演示文稿在某些时候被大量使用或特别有用.

我最喜欢的演讲之一就是在这里推荐给我的人:C#的未来 我也喜欢Guido van Rossum的演讲,但他有时候看起来很紧张.在我看来,另一个好的演示文稿将是关于Go的Google技术演讲.

  • 哪些(录制的)节目演示/演讲值得关注?

编辑:这是一个社区维基,因为答案可能是一个很长的列表.

language-agnostic

22
推荐指数
2
解决办法
2145
查看次数

C++ STL Map vs Vector speed

在我的实验性编程语言的解释器中,我有一个符号表.每个符号由一个名称和一个值组成(值可以是:例如:string,int,function等类型).

首先,我用一个向量表示该表,并通过符号迭代检查给定的符号名称是否合适.

然后,我使用地图,在我的情况下map<string,symbol>,总是比迭代迭代矢量更好,但是:

解释这部分有点难,但我会试试.

如果在我的语言的程序中第一次检索变量,当然必须找到它在符号表中的位置(现在使用向量).如果我每次执行该行时都会迭代向量(想想一个循环),那么它将非常慢(因为它目前是,几乎和microsoft的批处理一样慢).

所以我可以使用地图来检索变量: SymbolTable[ myVar.Name ]

但想想以下内容:如果第一次找到仍使用向量的变量,我可以将它的精确整数位置存储在向量中.这意味着:下次需要它时,我的解释器知道它已被"缓存"并且不会在符号表中搜索它,而是执行类似的操作SymbolTable.at( myVar.CachedPosition ).

现在我的(相当难的?)问题:

  • 我应该使用向量作为符号表,同时缓存向量中变量的位置吗?

  • 我应该使用地图吗?为什么?[]运算符的速度有多快?

  • 我应该使用完全不同的东西吗?

c++ stl vector map

19
推荐指数
2
解决办法
4万
查看次数

在解释器中实现Brainfuck循环

我想用我刚刚创建的编程语言构建一个Brainfuck(该死的名字)解释器,以证明它是图灵完整性.

现在,到目前为止一切都很清楚(<>+-,.) - 除了一件事:循环([]).我假设你从这里知道(极其困难的)BF语法:

  • 如何在我的解释器中实现BF循环?

伪代码怎么样?当解释器到达循环开头([)或循环结束(])时,我该怎么办?

检查循环是否应该继续或停止不是问题(current cell==0),但是:

  • 我何时何地都要检查?
  • 如何知道循环开始位于何处?
  • 如何处理嵌套循环?

由于循环可以嵌套,我想我不能只使用包含当前循环起始位置的变量.

我已经看到用各种语言实现的非常小的BF解释器,我想知道他们是如何设法让循环工作却无法解决的.

interpreter brainfuck

9
推荐指数
2
解决办法
6098
查看次数

C++ Vector at/[]运算符速度

为了给函数提供修改向量的选项,我不能这样做

curr = myvec.at( i );
doThis( curr );
doThat( curr );
doStuffWith( curr );
Run Code Online (Sandbox Code Playgroud)

但我必须这样做:

doThis( myvec.at( i ) );
doThat( myvec.at( i ) );
doStuffWith( myvec.at( i ) );
Run Code Online (Sandbox Code Playgroud)

(正如我的另一个问题的答案所指出的那样)

  • myvec.at()那时我打算打个电话.与使用变量存储结果的第一个示例相比,它有多快?

  • 我有不同的选择吗?我可以以某种方式使用指针吗?

当它变得严重时,myvec.at()每秒会有数千个呼叫.所以每个小表现都很重要.

c++ stl vector

7
推荐指数
1
解决办法
6002
查看次数

C++及其类型系统:如何处理多种类型的数据?

"介绍"

我对C++比较陌生.我完成了所有基本的工作,并设法为我的编程语言构建了2-3个简单的解释器.

给出的第一件事让我头疼:用C++实现我语言的类型系统

想一想:Ruby,Python,PHP和Co.有很多内置类型,显然是用C实现的.所以我第一次尝试的是让我的语言中有三种可能的类型:Int,字符串和零.

我想出了这个:

enum ValueType
{
     Int, String, Nil
};

class Value
{
 public:
  ValueType type;
  int intVal;
  string stringVal;
};
Run Code Online (Sandbox Code Playgroud)

是的,哇,我知道.由于必须一直调用字符串分配器,所以传递这个类非常慢.

下次我尝试过类似的东西:

enum ValueType
{
     Int, String, Nil
};

extern string stringTable[255];
class Value
{
 public:
  ValueType type;
  int index;
};
Run Code Online (Sandbox Code Playgroud)

我会存储所有字符串stringTable并将其位置写入index.如果类型ValueInt,我只是存储在整数index,它不会在所有使用一个int索引来访问另一个INT意义,还是?

无论如何,上面也让我头疼.过了一段时间,从这里的表中访问字符串,在那里引用它并在那里复制它变得越来越多 - 我失去了控制.我不得不放下翻译稿.

现在:好的,所以C和C++是静态类型的.

  • 上面提到的语言的主要实现如何处理程序中的不同类型(fixnums,bignums,nums,strings,arrays,resources,...)?

  • 我应该怎么做以获得许多不同类型的最大速度?

  • 解决方案与上面的简化版本相比如何?

c++ interpreter typing

7
推荐指数
2
解决办法
1220
查看次数

C++向量指针/引用问题

请看一下这个例子:

#include <iostream>
#include <vector>
#include <string>
using namespace std;

class mySubContainer
{
public:
    string val;
};

class myMainContainer
{
public:
    mySubContainer sub;
};

void doSomethingWith( myMainContainer &container )
{
    container.sub.val = "I was modified";
}

int main( )
{
    vector<myMainContainer> vec;


    /**
     * Add test data
     */
    myMainContainer tempInst;

    tempInst.sub.val = "foo";
    vec.push_back( tempInst );

    tempInst.sub.val = "bar";
    vec.push_back( tempInst );


    // 1000 lines of random code here

    int i;
    int size = vec.size( );
    myMainContainer current;

    for( i …
Run Code Online (Sandbox Code Playgroud)

c++ pointers vector

5
推荐指数
1
解决办法
1824
查看次数