Как стать автором
Обновить
40
0
Анфилатов Иван @t0pep0

Погроммист

Отправить сообщение
В тему C++
Однажды я пытался создать list<map> и мои синтаксические ошибки подняли мёртвых из могил
http://habrahabr.ru/post/203276/
В случае правильного применения ни одна конструкция не ухудшит читаемость. Но обычно на одно правильное применение приходится 15 не правильных.

(Пример был общим, с некоторым уклоном в ruby)
Банально не писать в одну строку подобный код.
А для того, что бы его не писали, в конечном итоге язык не должен содержать конструкций, которые позволяют так писать. В этом случае Go — хороший язык, в нем нет подобных конструкций

Да, и для «добивания» удобочитаемости в комплекте к компилятору Go идут gofmt + govet + golint, которые не только помогут отформатировать код согласно гайдлайну, но и проведут статический анализ (приятный бонус)
Видимо Вы никогда не разбирали лапшу из
.map(?:?: rescue) rescue

Завидую Вам
А здесь еще и нет хипа, по большому счету, так, выделение памяти и только. Но будет, скоро
Да, когда доберусь до юзерспейса планирую сделать порт на arm
Вы ужаснетесь, когда столкнетесь с cgo =)
Да. Только в данном случае это не комментарий, а дирректива
Спасибо, несколько позже изучу
typedef uint8_t byte;

#define forAll(iterator, count) for(iterator = 0; iterator < (count); ++iterator) 

byte* flushAllToByte(pointer array, size_t size, byte symbol) { 
    size_t iterator; 
    forAll(iterator, size / sizeof(size_t)) {
      ((size_t*) array)[iterator] = symbol; 
  } 
    for(iterator *= sizeof(size_t); iterator < size; ++iterator) { 
      ((byte*) array)[iterator] = symbol; 
  }
  return array; 
} 

Вроде правильно отформатировал
В указанном нами коде мы говорим линкеру и компилятору, что когда происходит вызов getAddr нужно вызывать __unsafe_get_addr

Если написать в общем виде то
//extern <external_func_name>
func internal_name(...arg) ...res

Приводит к сворачиванию функции internal_name, в функцию external_name. При этом internal_name может быть множество на единственную external_name
В C мы говорим почти так-же, только имена функций должны совпадать.
 extern int __unsafe_get_addr(int);

P.S. абстрактный пример в вакуме
У нас есть функция на asm __unsafe_get_addr
В указанном нами коде мы говорим линкеру и компилятору, что когда происходит вызов getAddr нужно вызывать __unsafe_get_addr
Не буду дописывать в статью, но принимаются Ваши версии memset, memcmp и memcpu, как указанно в статье — мои слишком примитивны
Весь код на Go вроде бы понятен, даже если б не было комментариев ввиду предельной простоты синстаксиса. Makefile и link.ld — тема не для данной статьи, слишком объемно выйдет. Что касается кода на асме — это немного модифицированный пример из доков multiboot, все изменения указаны. Второй кусок кода на асме описывается под ним.
Честно говоря, link.ld был мной взят с одного из руководств и особо я с ним не разбирался, так что не могу ответть на Ваш вопрос
По большому счету на данный момент Вы правы. Однако не забывайте, на данный момент код работает на той стадии, когда рантайм Go просто не применим, по причине его отсутсвия. Даже если бы разработка велась на C, то на данном этапе и от него были бы лишь только название да немного синтаксиса.
Да, ошибка компиляции, необходимо реализовавать функцию __go_new
Да, насколько мне известно, понимаете правильно, Garbage Collector отключен, так-же как и весь рантайм, т.е. при такой разработке надо вручную заботится о памяти. Если будет продолжение, то будет описанно и управление памятью в том числе.

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность