Что-то, что я заметил - в представлении INFORMATION_SCHEMA.COLUMNS, CHARACTER_MAXIMUM_LENGTH, дает размер 2147483647 (2^31-1) для типов поля, таких как изображение и текст. ntext 2^30-1 (быть двухбайтовым unicode и всеми).
Этот размер включен в вывод от этого запроса, но это недопустимо для этих типов данных в операторе CREATE (у них не должно быть максимального значения размера вообще). Таким образом, если результаты этого вручную не исправлены, СОЗДАТЬ сценарий не будет работать, учитывая эти типы данных.
я предполагаю, что возможно зафиксировать сценарий для составления этого, но это вне моих возможностей SQL.
Одной из первых вещей, о которой я подумал, когда я прочитал это, был Stackless Python. Каналы в Go напоминают мне партию Stackless Python, но это, вероятно, потому, что (а) я использовал его и (б) язык / мысли, которые они на самом деле пришли от меня никогда не трогал.
Я никогда не пытался использовать каналы как IPC, но это, вероятно, потому, что альтернатива, вероятно, намного безопаснее. Вот какой-то псевдокод:
chan = channel()
ipc = IPCManager(chan, None)
send_to_other_app(ipc.underlying_method)
chan.send("Ahoy!")
chan = channel()
recv_from_other_app(underlying_method)
ipc = IPCManager(chan, underlying_method)
ahoy = chan.recv()
Если вы используете традиционный метод IPC, у вас могут быть каналы на каждой стороне, которые оборачивают свои сообщения поверх него. Это приводит к некоторым проблемам в реализации, с которыми я даже не могу думать, как решить, и, вероятно, к нескольким неожиданным состояниям гонки.
Однако я согласен;
Роб сказал, что они много думают о том, как заставить каналы работать как (сетевой) прозрачный RPC, на данный момент это не работает, но, очевидно, они хотят найти время, чтобы получить это right .
А пока вы можете использовать пакет gob , который, хотя и не является идеальным и цельным решением, уже работает достаточно хорошо.
Я попытался сделать аналогичную вещь для обертывания библиотеки MPI. Сейчас я думаю использовать что-то вроде
func SendHandler(comm Comm){
// Look for sends to a process
for {
i := <-comm.To;
comm.Send(i,dest);
}
}
func ReceiveHandler(comm Comm){
// Look for recieves from a process
// Ping the handler to read out
for {
_ = <-comm.From;
i := comm.Recv(source);
comm.From <- i;
}
}
, где comm.Send и comm.Recv обертывают коммуникационную библиотеку переменного тока. Я не уверен, как вы настраиваете канал для двух разных программ, у меня нет опыта в подобном.