Как стать автором
Обновить
25
0
Павел @RoPi0n

Software engineer, Senior Mash developer :)

Отправить сообщение

JB отличная компания. Но судя по всему в приложении internship.jetbrains.com пока не предусмотрены фидбеки (на то оно и в бете пока). Или по другим причинам я их не получил.

Мое резюме вы не видели, так что не стоит его комментировать.

Проект можно собрать используя fpc, либо lazarus. Для того, чтобы все заработало, как нужно — собираете svm, библиотеки, mashc и скидываете файлы в похожую, как на гитхабе (bin_w32) иерархию

Идею понял, в ближайшее время добавлю этот функционал.

Вполне эффективными, если обрабатывать массив частями.

Что мешает делать так:
  • Жена, поток 1: bankAccount->set(bankAccount->get()-50)
  • Зарплата, поток 2: bankAccount->set(bankAccount->get()+1500)


??
Для классов — копируется указатель на vtable класса, для массивов — создается новый массив указателей и в него копируются указатели на объекты.
Цель корутин — сохранение состояния выполнения метода. Другого решения этого вопроса я пока что не вижу.
1) По очереди будет задано новое значение.
2) Можно передать потокам указатель на класс крит. секции, либо объявить её, как глобальную переменную.
3) TAtomic, ThreadList, глобальные переменные, а также прочие решения на любой вкус и цвет.

Мне кажется, что путаницы не будет :)
В момент создания такого потока копируется состояние переменных внутри тела метода, которые объявлены выше конструкции launch/async. Копии переменных сразу помечаются для сборщика мусора, который имеется у контекста нового потока.
Корутины выполняются в нескольких потоках, которые поочередно замораживают & размораживают друг-друга при вызове yield()

Спасибо за пояснение.

На данном этапе трудно говорить и что-либо обещать по производительности ЯП. Но с Си в плане производительности ему пока ещё тягаться не стоит.
Чтож, спасибо за минус тебе, неизвестный хабро-user, под моим можно сказать обещанием что-то допилить в моём хобби проекте.

Теперь об изменениях:
— Переделал until цикл, теперь вместо него цикл whilst — можно сказать, что это копия while, только с пост-условием.

Изменения залил на github.

В данном примере взорвется, т.к. в x?=0 — в х запихивается временная переменная.
Если написать var x = 0, либо x ?= new(0), то нет. Но затем для х нужно будет вызвать free().


gc() собирает весь мусор, который в т.ч. лежит в стеке.

Да все будет, как руки дойдут… :)

  1. Лично мне больше нравится $ на месте this-> :)
  2. Ну да. На то это и Free, чтобы память освобождать.
  3. Можно писать с каких угодно букв. Язык не придирчив к этому.
  4. Как по мне, некоторые вещи, которые я реализовал являются весьма необычными, например поддержка многопоточности и всего необходимого для неё функционала прямо из коробки и без использования костылей… Но об этом я наглядно расскажу чуть позже, как найду время для написания очередной статьи.
    Нельзя же рассматривать плюшки языка, не описав перед этим синтаксис языка и базовые вещи. Так что эту статью можно считать вводной… Наверное...

В отличии от других ЯП, таких как Python, Perl, JS, Ruby и т.д., сборщик мусора у моей ВМ реализован через метки, т.е. переменная помечается, как мусор сразу при объявлении. Сборщик мусора имеет на момент вызова готовый массив указателей на мусор в памяти.


Основная идея заключалась в том, что даже в нетипизированном языке сборка мусора должна лежать на плечах программиста и быть полностью ему подконтрольна. Используя gc() программист на 150% уверен где, когда и сколько памяти будет освобождено сборщиком мусора.
Также изначально затеивал такую архитектуру, как небольшую оптимизацию. Ведь сборщику мусора вообще не нужно напрягаться, чтобы исправно выполнять свою работу.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность