go to II

Jul 15, 2015 11:19

Арсенал команд большинста процессоров для организации ветвлений исчерпывается различными видами условных переходов. Первые программисты за первые пару десятков лет неплохо научились ими пользоваться для создания довольно больших программ. После появления языков программирования высокого уровня, накопленные техники никуда не исчезли. Одна из самых ( Read more... )

Leave a comment

Comments 11

fdo_eq July 16 2015, 07:25:13 UTC
> Я, например, хвастаться тут нечем, тоже пишу последние пятнадцать лет в стиле, которому был обучен еще в старших классах школы

спасибо на добром слове :-). Я буду хвастаться эти фактом :-)))

Комментарий по существу - в моем журнале отдельным постом.

Reply


puvar July 16 2015, 19:27:30 UTC
Это так пишут bing? :)

Reply


udpn July 18 2015, 22:41:34 UTC
Кстати, тут есть некоторый уклон от правильной точки зрения на корутины, поскольку это всё написано на языке, в котором их нет. Даже Boost.Coroutine базируется на пачке страшных хаков со стеком, и я нахожусь в полном неведении, почему его вообще допустили в Boost.

В JS ситуация лучше (там есть хотя бы генераторы), в C# ещё лучше (там этим занимались авторы, но генераторы с корутинами скрестить нормально так и не смогли), в Haskell хотя бы оно становится читаемо (код в асинхронку переводится сменой монадки, без единого лишнего символа, только типы хреновые), а совсем хорошо пока нет нигде. Т.е. по всей отрасли всё гораздо красивее, чем в этом С++, который я поленился даже разбирать.

Вот если бы хотя бы один язык программирования разрабатывался с упором на корутины, отсутствие мусорника не коррелировало бы с тормозами.

Reply


mstone October 9 2015, 07:27:06 UTC
А для потребителя принципиален был именно IEnumerator? Потому что если ограничиться очеловечиванием колбечного интерфейса до просто-функции и подсунуть туда лябмду, то за 20% затрат получим 80% плюшек:

#include
#include
#include

using namespace std;

class ICallback {
public:
virtual void OnToken(char ch) = 0;

virtual ~ICallback() {

}
};

class TSplitter {
public:
void Split(const string& s, ICallback* callback) {
auto p = s.begin();
while (s.end() != p) {
callback->OnToken(*p);
++p;
}
}
};

void Split(const string& s, function callback)
{
class CallbackAdapter : public ICallback
{
private:
function m_callback;

public:
CallbackAdapter(function callback) : m_callback(callback ( ... )

Reply

_denplusplus_ October 9 2015, 18:45:44 UTC
В реальности там есть ограничение, заключаеющиеся в том, что ничего менять вообще нельзя, потому что хрен пересобирешь. Но это строго между нами, да? :)

Reply


Leave a comment

Up