Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Как я уже много раз писал Go не простой, он примитивный
больше всего тянет на хипстерское поделие с непонятными перспективами
while(true) {
c.write(buf.data);
c.write(['\0']);
buf.clear();
c.readUntil(buf, ['\0'], SIZE);
}
}auto conn = connectTCP("time-c.nist.gov", 13);
logInfo("The time is: %s", conn.readAllUTF8());И вот из того, что я видел
Наконец-то можно создавать поток на каждое подключение и на каждую фоновую операцию и не бояться, что это сожрет всю память.
в D предлагают опять эти уродливые события и колбеки
auto go( alias task , Arg )( Arg arg... )
{
return runTask({
task( arg );
});
}
void say( string s )
{
for( int i = 0 ; i < 5 ; ++i ) {
sleep( 100.dur!"msecs" );
writeln( Thread.getThis().id , " " , s );
}
}
shared static this()
{
go!say( "world" );
say( "hello" );
setIdleHandler({ exitEventLoop; });
}25764 hello
25764 world
25764 hello
25764 world
25764 hello
25764 world
25764 hello
25764 world
25764 hello auto countBytes = core.sys.posix.unistd.write(fd, buffer.ptr, size)"output.text".write( "hello!" )writeln( getStat().total )_ , _ , total := getStat()
fmt.Println(total)type Pill int
const (
Placebo Pill = iota
Aspirin
Ibuprofen
Paracetamol
Acetaminophen = Paracetamol
)const _Pill_name = "PlaceboAspirinIbuprofenParacetamol"
var _Pill_index = [...]uint8{0, 7, 14, 23, 34}
func (i Pill) String() string {
if i < 0 || i+1 >= Pill(len(_Pill_index)) {
return fmt.Sprintf("Pill(%d)", i)
}
return _Pill_name[_Pill_index[i]:_Pill_index[i+1]]
}string toPrettyString( Value )( Value value ) if( is( Value == enum ) )
{
return Value.stringof ~ ":" ~ value.to!string;
}ok означает признак успеха операции, true/false. Вторая переменная — результат или ошибка. В Гоу любая IO-операция возвращает пару ok, result_or_error.Всё же не очень понятно чем не угодили массивы и структуры — специально предназначенные для группировки сущности.
function makeElement({ tagName , textContent }) {
var el = document.createElement( tagName )
el.textContent = textContent
return el
}
function log( v ) {
console.log( v )
return v
}
var { html : outerHTML , ns : nameSpace } = log( makeElement({ tagName : 'div' , textContent : date }) )
document.body.innerHTML = ns + '<br/>' + htmlhtml, ns := log(makeElement("div", date))html, ns, attrs, childNodes, id, offset, size, scrollPos := log(makeElement("div",date,"datepicker",null,null,true,0,document.body))Как мне в Go по голому коду получить простой список методов с сигнатурами, не выискивая их по всему файлу вперемешу с реализациями?
package main
import "fmt"
func sum(s []int, c chan int) {
sum := 0
for _, v := range s {
sum += v
}
c <- sum // send sum to c
}
func main() {
s := []int{7, 2, 8, -9, 4, 0}
c := make(chan int)
go sum(s[:len(s)/2], c)
go sum(s[len(s)/2:], c)
x, y := <-c, <-c // receive from c
fmt.Println(x, y, x+y)
}void mySum(int[] r, Task tid) {
int result = r.sum;
tid.send(result);
}
void example() {
auto s = [7, 2, 8, -9, 4, 0];
auto c = Task.getThis;
runTask(toDelegate(&mySum), s[0..$/2], c);
runTask(toDelegate(&mySum), s[$/2..$], c);
int x = receiveOnly!int();
int y = receiveOnly!int();
logInfo("%d %d = %d", x, y, x+y);
}не знаешь как на нём сделать привычные вещи и ищешь на StackOverflowА документация и книги нынче не в тренде?
А там Go почти в 7 раз популярнее, чем D (хотя в 60 раз менее популярный, чем PHP и в 70 раз — чем Java).Про D, внезапно, обсуждения ведут на forum.dlang.org
А документация и книги нынче не в тренде?
AliasSeq! очень костыльно смотрится.
Ну и жутко бесят отступы от скобочек при перечислении параметров. Зачем они?
Go создал сильно больше Buzz-а, чем D
я не знаю ни одного проекта на D
type MyInt int
func main() {
var x MyInt = 42;
fmt.Println(x.add(13))
}
func (x MyInt) add(i int) int {
return int(x) + i;
}
man!( Go => D ).basics