Google создал язык программирования
Кстати, нет версии для Windows. Ну и с оопизмом не всё понятно. Есть какие-то не ясные интерфейсы. Буду ждать новую версию, типа Goo, или Go++.
Ну и инициализация в виде i := 10 мне понравилась.
и тут от дельфи че то взяли (=
Ну там смысл немного другой. Не присваивание, а именно инициализация. Так, что только форма оператора похожа.
это инициализация с начальным значением что-ли?
08 "os";
09 "flag"; // command line option parser
10 )
14 const (
15 Space = " ";
16 Newline = "\n";
17 )
А вот это раздражает:
23 if i > 0 {
24 s += Space
25 }
26 s += flag.Arg(i)
27 }
Ну, по крайней мере := (не знаю, не люблю данную последовательность=)) + то, что тело цикла выделяются фиггурными скобками, а такие участки "for i := 0; i < flag.NArg(); i++" - нет. Как-то напрягает такое.
В сами премудрости языка не вникал.
это инициализация с начальным значением что-ли?
Ты зачем-то поправил свое сообщение. Вначале было правильно о том, что это инициализация без указания типа (пусть компилятор сам угадывает). Естественно, в этой целочисленной переменной будет начальное значение 10.
По дизайну синтаксиса - странная смесь Алгола и Жабаскрипта.
А по функционалу до Sing# все же не дотягивает.
АПД. Дочитал до for-предложения. Это [COLOR="Red"]#МАТ#[/COLOR] [COLOR="#ff0000"]А вот этого делать нельзя. Модератор[/COLOR]
f(i)
}
a *= 2
}
// type of i is int
// type of s is string
// s == a
g(i, s)
}
да че то не айс. если бы это был оператор присваивания, то я бы понял. допустим
i := 10; // Инициализация и присваивание значения
i := 5; // Только присванивание
то нормально. а иначе огород какой то. имхо.
var x = 10
// x.GetType().ToString() >> System.Int32
Типизация строгая с поддержкой вывода типов? Или я что то не то прочитал? Если так, то вдохновляет =)
Кстати, настроение улучшило обсуждение на их трекере названия языка Оказывается язык с таким названием уже был =) И автор более раннего Go "катит бочку". А народ попутно пытается придумать новое название.
Есть же рекомендация делать программу маленькими шажками. А если шажок занимает минут десять, то возникают сомнения на счет такой рекомендации. В идеале надо так: нажал кнопку и в тот же миг получаешь готовое приложение, и даже с выполненными юнит-тестами, если программист их использует.
Вот этот момент как-то не укладывается в голову. Ну, при инициализации переменных удобно вычислять. А как вычислить тип параметров функции? По использованию? Думаю, что так можно вычислить только некоторый абстрактный тип, с определенными функциями и данными. Хотя, наверное я замечтался :)
Тип можно вычислить по алгоритму Хиндли-Милнера-Дамаса. Для этого компилятор решает систему уравнений, неизвестными в которых являются типы (по-гиковому это процесс унификации).
r, e := r13.source.Read(b);
for i := 0; i < r; i++ {
b = rot13(b)
}
return r, e
}
nw, ew := file.Stdout.Write(buf[0:nr]);
2 Kogrom
Насчет оопизма ;)
Объявление методов:
func (p IntArray) Len() int { return len(p); }
func (p IntArray) Less(i, j int) bool { return p < p[j]; }
func (p IntArray) Swap(i, j int) { p, p[j] = p[j], p; }
А интерфейс в чем-то похож на шаблон:
Len() int;
Less(i, j int) bool;
Swap(i, j int);
}
//We can apply Sort to any type that implements Len, Less, and Swap.
func Sort(data Interface) {
for i := 1; i < data.Len(); i++ {
for j := i; j > 0 && data.Less(j, j-1); j-- {
data.Swap(j, j-1);
}
}
}
Все верно, такая модель типизации например в Haskell =)
Честно говоря практическая ценность такого пока мной не улавливается. Большая наглядность?
Хм. Это похоже аля классы типов как в том же Haskell.
Итого. Собраны разные концепции из разных парадигм. Что получаем в целом ? =)
Почитал. В тонкости не вникал, но получается, что тут надо знать внешние для функции типы. И при добавлении нового типа придётся пересчитывать функцию. Я то смотрел в сторону "утиной типизации".
Также можно применить метод, который в C++ используется в шаблонах - создаем нужное количество функций, основываясь на применении и пытаемся скомпилировать. Но тут свои недостатки.
Почти как в Python :)
func (p IntArray) Len() int { return len(p); }
func (p IntArray) Less(i, j int) bool { return p < p[j]; }
func (p IntArray) Swap(i, j int) { p, p[j] = p[j], p; }
Тоже вроде как в Python.
Len() int;
Less(i, j int) bool;
Swap(i, j int);
}
Это больше похоже на абстрактный тип, но не как в C++, а с "Утиной типизацией". В C++ шаблон так не расписывается, если я не путаю.
ну вот мне частенько бывает нужно вернуть из функции два результата. приходится делать не функцию function Foo(A: integer): integer; а процедуру procedure Bar(a: integer; var b, c: single);
наглядность таки теряется, а в теле процедуры уже нельзя использовать Result.
А вот это раздражает:
23 if i > 0 {
24 s += Space
25 }
26 s += flag.Arg(i)
27 }
Ну, по крайней мере := (не знаю, не люблю данную последовательность=)) + то, что тело цикла выделяются фиггурными скобками, а такие участки "for i := 0; i < flag.NArg(); i++" - нет. Как-то напрягает такое.
А еще не нравится то, что if/for-заголовок не в круглых скобках.
Если в одной фразе, они попытались совместить достоинства языков высоко и среднего уровня в своем творении[/QUOTE]
вот так как-то. :)
Небольшой оффтоп. Можно немного подкорректировать и получим:
фишка D в том, что они взяли python и C#, несколько изменили его в сторону С++, и написали компилятор, как мне показалось, в бинарники. Причем скорость этих бинарников лучше, чем у аналогичных скриптов на питоне.
Это тот язык, за которым я наблюдал ещё до увлечения Python. Жду пока накопится достаточно документации и инструментов, и может тогда перейду на него. А может и разочаруюсь, как в Java...
http://ru.wikipedia.org/wiki/D_(язык_программирования)
Дык, это же язык со статической типизацией, следовательно он полностью компилируемый. Этот язык возник как попытка исправить "родовые травмы" C++, кстати, сам Александреску участвует в его разрботке.
Недавно на ЛОРе была новость со статьёй Александреску про D. Ну и комментарии интересно почитать. Одни говорят "закапывайте быстрее", другие радуются. В общем, как всегда.
На Хабре тоже была статья, даже в двух вариантах перевода. Другое дело, что унылых посредственностей, которые узнали слово class и уже думают, что умеют писать программы, и, более того, могут зарабатывать на этом деньги - было всегда изрядное число. Мне иной раз кажется (после взгляда на всякие топики форума), что нужно допускать охочих до программирования людей только после сдачи энного количества экзаменов, и по их итогам выдавать "права на программирование", по аналогии с правами на вождение автотранспорта, получаемые в ГАИ.
наглядность таки теряется, а в теле процедуры уже нельзя использовать Result.
можно вернуть структуру ;)
Лень объявлять новую :)
Whiteknight> isn't that a game that I'm terrible at?
dukeleto> that looks very interesting
Austin> Dude, that language will never succeed. Remember the rule.
plobsing> and what rule is that exactly?
Austin> No language with ':=' will ever succeed.
plobsing> touche
Austin> It's the operator of doom.
Whiteknight> isn't that a game that I'm terrible at?
dukeleto> that looks very interesting
Austin> Dude, that language will never succeed. Remember the rule.
plobsing> and what rule is that exactly?
Austin> No language with ':=' will ever succeed.
plobsing> touche
Austin> It's the operator of doom.
Ада, Паскаль и что там ещё?
Smalltalk, еще вроде бы в Modula-3, но не уверен