Skip to content

Instantly share code, notes, and snippets.

@goccy
goccy / noescape.go
Last active April 24, 2020 13:05
interface{} からリフレクション操作を行って型情報をひっぱって何かしたいときとか値のポインタを得たいときに、reflect.ValueOf(v) を使うと必ずヒープへのエスケープが発生するが、同じことを reflect.ValueOf() を使わずにやることでアロケーションを発生させないテクニック
package main
import (
"fmt"
"reflect"
"unsafe"
)
// rtype representing reflect.rtype for noescape trick
type rtype struct{}
```go
package main
import (
"testing"
)
type Value struct {
uintValue uint
uint64Value uint64
@goccy
goccy / gist:10094493
Last active August 29, 2015 13:58
Compiler::Parser::(AST|Node)::findの使い方
use strict;
use warnings;
use Compiler::Lexer;
use Compiler::Parser;
use Data::Dumper;
my $script = do { local $/; <DATA> };
my $tokens = Compiler::Lexer->new('-')->tokenize($script);
my $ast = Compiler::Parser->new->parse($tokens);
#include <stdio.h>
#include <stdlib.h>
void render(int n)
{
int i, j;
volatile int k = 0;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
k++;
}
@goccy
goccy / js-vs-c.js
Last active December 10, 2015 02:38
function render(n)
{
var k = 0;
for (var i = 0; i < n; i++) {
for (var j = 0; j < n; j++) {
k++;
}
}
}
function parseRow(columns, parser) {
var row = {};
for (var i = 0; i < columns.length; i++) {
row[columns[i].name] = parser.readColumnValue();
}
}
var code = 'return {\n';
columns.forEach(function(column) {
code += '"' + column.name + '":' + 'parser.readColumnValue(),\n';
});
code += '};\n';
var parseRow = new Function('columns', 'parser', code);