Személyes eszközök
Keresés

 

A InfoWiki wikiből

Tartalomjegyzék

D-Clean rendszer

Letölthető verziók:

Forráskód:


EWP Mérési Eredmények

2009.04.18 sikeres mérések az EKF géptermében. A mérési jegyzőkönyvek és a forráskódok elérhetőek a http://aries.ektf.hu/~hz/ewp_file_seq_and_distr_v1.zip file-ban.


Telepítés fejlesztői gépre

  • A megadott zip file-t a C:\DClean alkönyvtárba kell kicsomagolni alkönyvtár helyesen.
  • ezen felül a fejlesztői gépre a Visual Studio 2005 fel kell telepítve legyen, mivel a Visual C fordítóját és szerkesztőjét is használja a rendszer.

A kicsomagolás után az ICE\bin alkönyvtárból az ICE32.DLL és ICEUTIL32.DLL, BZIP2.DLL file-okat célszerű átmásolni a C:\windows\system32 alkönyvtárba.

Szintén az ICE\bin alkönyvtárban lévő ICECS.DLL filet be kell regisztrálni a .NET keretrendszerbe (gacutil -i .\Ice-3.2.1\bin\icecs.dll) utasítással, ahol a gacutil.exe az adott .NET keretrendszerhez (vagy a Visual Studio-hoz) mellékelt segédprogram (nálam a C:\Program Files\Microsoft SKDs\Windows\v6.0A\bin, C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin könyvtárakban van gacutil.exe).

A telepítés végén a LocalSett.xml file-ban lévő alkönyvtár-hivatkozásokat ellenőrízni kell, és szükség esetén módosítani.

  • CLEAN_ROOT -> mutasson a Clean könyvtárra (C:\DClean\Clean 2.2)
  • CLEANLIB -> mutasson a Clean LIB könyvtárára ($CLEAN_ROOT$\Libraries), ez clean verziónként eltérő lehet!
  • SkelRootDir -> mutasson a DClean skeleton könyvtárra (C:\DClean\skeletons\Skeletons)
  • C#FORD -> mutasson a C# parancssori fordítóra (C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc.exe)
  • ICE -> mutasson az ICE alkönyvtárra (C:\DClean\ice-3.2.1)
  • stb

Megj: a könyvtárnevekben szereplő $ID$ formájú nevek a megfelelő beállítást helyettesítik, tehát ha CLEAN_ROOT=C:\DClean\Clean 2.2, akkor a CLEANLIB=$CLEAN_ROOT$\Libraries miatt a CleanLib értéke C:\DClean\Clean 2.2\Libraries lesz.

Clean verzió

A Clean 2.2 be van csomagolva a zip-be. Feltételezem, hogy Clean telepítés amúgy is lehet a gépen, ennek ellenére a becsomagoltat javaslom használni (a Clear_Root ide mutasson) az alábbi okokból:

  • a Clean 2.2 kódja hibát tartalmaz, mely ebben a csomagolt Clean-ben javításra került (a hiba a következő Clean release-ben valószínűleg publikusan is javítva lesz)
  • a D-Clean rendszer nem fordít Clean library kódokat, csak hivatkozik az .o file-okra. A becsomagolt Clean 2.2-ben minden .o file le van generálva.

Ha mégis a saját Clean installációdat akarod használni, akkor:

  • ellenőrízd, hogy a hiba nálad is javítva van-e (lásd lejjebb)
  • fordítsd le az alábbi Clean programot a rendszereden (ez generálja a szükséges, hivatkozott .o file-okat)

A hiba patch:

John van Groningen wrote:
 
There is an error in the initialisation of the finalizer list, which
only seems to cause a minor problem when the Clean linker is used.
However if the MS linker is used it causes a crash if this
list is traversed after a garbage collection.
 
Could you try this:
 
- open the file _system.abc in Libraries\StdEnv\Clean System Files
  with an editor, move the file that begins with
.desc _Select
 after the next line that begins with
.desc _Nil
 (to swap them)
 
- delete _system.o in the same directory, and let the CleanIDE generate
  _system.o by compiling a Clean program
 
This will probably prevent the crash, but still cause the minor problem
that also happens when the Clean linker is used.

És a lefordítandó kód:

module proba
import StdEnv,Debug,StdMaybe
 
Start = debugAfter "kesz" dbgStr (map Just [1..10])
 
dbgStr x = [x]

Telepítés futtató gépre

A futtató gépre csak az ICE és az AppEnv alkönyvtár szükséges. Az ICE DLL-jeit ott is be kell másolni a system32-be, illetve a gacutil-os regisztrációt ott is végre kell hajtani.

A futtató gépre e miatt kell a .NET Framework is. Valamint a Visual C library is, mert a futó kód erre hivatkozni fog manifest file-al:

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC80.CRT' 
        version='8.0.50608.0' processorArchitecture='x86' 
        publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
</assembly>

A futtató gépen el kell indítani az AppEnv/LocalComm.exe -t. Ez portot fog nyitni a gépen, várva a bejövő utasításokat. Ha ezt a portnyitást valamiféle Windows tűzfal megakadályozza, akkor nem fog futni a rendszer.

A LocalComm.exe többek között futtatási utasításokat is kaphat a futtató rendszertől, mely szerint töltsön át a lokális gépre .exe file-okat, és indítsa el (elosztott futtatás). Az általa letöltött .exe (és egyéb) file-okat a c:\App_Env alkönyvtárba helyezi el, ezért oda írási joga kell legyen. Ezt az alkönyvtár tartalmat időnként törölni is lehet.

Az indított programok is portot akarnak majd nyitni a gépen a kommunikációhoz. A windows tűzfal ezt is meg fogja akadályozni, így hiába sikerül az indítás, a project nem fog futni. Javaslom a windows tűzfal leállítását erre az időre (bekonfigurálni ez ideig nem sikerült).

Fordítás menete

A kódot egy .icl file-ba szoktuk megírni, mely tartalmazza a hagyományos Clean nyelvi függvényeket, és a D-Clean start kifejezést is.

module farmProba
import StdEnv,StdOrdList
 
DistrStart = DStop saveToFile DApply pickUpEvens DStart generator
 
merger:: [[Int]]->[Int]
merger [] = []
merger [x:xs] = x ++ merger xs
 
pickUpEvensL::[[Int]]->[Int]
pickUpEvensL [] = []
pickUpEvensL [x:xs] = pickUpEvens x ++ pickUpEvensL xs
 
pickUpEvens::[Int]->[Int]
pickUpEvens [] = []
pickUpEvens [n:xs]
   | isEven n  = [n:pickUpEvens xs]
   | otherwise = pickUpEvens xs
 
 
generator::[Int]
generator = [ 1 .. 100000]
 
saveToFile::[Int] *World -> *World
saveToFile data w
  # (openok,f,w) = fopen "c:\\free_1.txt" FWriteText w
  | not openok         = abort "Error during creating the file"
  # f        = writeall data f
  # (closeok,w)     = fclose f w
  | not closeok        = abort "Error during closing the file"
  = w
 
writeall :: [Int] !*File -> *File
writeall []    f = fwrites "---------- EOF ---------" f
writeall [a:b] f
        = writeall b (fwrites (IntToString a) f)
 
IntToString a = " " +++ toString a +++ "\n"

A kódot a DCleanComp -nak kell parancssorban átadni:

DCleanComp proba.icl

Ez létrehoza egy GENERATED\WINDOWS_ICE alkönyvtárat, és ide helyezi el a generált forráskódokat, és egy Makefile-t. A tényleges kódfordítást Visual Studio parancssorból nmake paranccsal lehet elvégezni.

  • a futtatáshoz el kell indítani az AppEnv alkönyvtárból a DRegCenterServer.exe, DCodeLibServer.exe, DAppStarterServer.exe programokat. Utána az nmake upload-al fel kell tölteni a generált .exe-ket a CodeLib szerverre. Az nmake start paranccsal lehet elindítani. Az nmake status paranccsal lehet a futó projectről információkat lekérni.

Cikkek

A projecthez kapcsolódó cikkeket publikációs lapról lehet letölteni, és elolvasni.

A lap eredeti címe: „http://wiki.ektf.hu/wiki/DClean
Nézetek
nincs sb_3.133.147.87 cikk